Разработка и Конфигурация · 9 мин
Как обратиться к параметрам формы в 1С
Как передать и обратиться к параметрам формы в 1С: Параметры.Имя, ОткрытьФорму, ПриСозданииНаСервере, типичные ошибки и примеры кода.
Обращение к параметрам формы — одна из базовых операций при разработке на управляемых формах 1С. Параметры позволяют передавать данные между формами: открыть форму элемента с предустановленным отбором, передать настройки в отчёт, указать владельца для нового объекта. Всё это делается через объект Параметры, доступный в модуле формы.
Ключевые точки, где работают с параметрами: обработчик ПриСозданииНаСервере (на стороне принимающей формы) и метод ОткрытьФорму() (на стороне вызывающей). Ошибки чаще всего связаны с неправильным именем параметра, обращением к параметру вне обработчика создания или попыткой читать параметр, который форма не объявила как ключевой или стандартный.
Ниже разобраны способы передачи и чтения параметров, работа с ключевым параметром, проверка наличия значения и типичные ошибки с примерами кода на встроенном языке.
Как передать параметры при открытии формы
Параметры передаются в форму через структуру, которую принимает метод ОткрытьФорму(). Второй аргумент метода — структура, где ключи становятся именами параметров принимающей формы.
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("Организация", ТекущаяОрганизация);
СтруктураПараметров.Вставить("ДатаНачала", НачалоМесяца(ТекущаяДатаСеанса()));
ОткрытьФорму("Обработка.ЗагрузкаДанных.Форма.ФормаНастройки",
СтруктураПараметров, ЭтаФорма, УникальныйИдентификатор);
Третий аргумент — владелец формы, четвёртый — ключ уникальности. Если передать в качестве ключа уникальности значение, повторный вызов ОткрытьФорму() с тем же ключом активирует уже открытую форму вместо создания новой. Это удобно, чтобы не плодить одинаковые окна.
Альтернатива — метод ПолучитьФорму(), который возвращает объект формы, после чего её можно открыть методом Открыть(). Этот вариант нужен, когда требуется обратиться к экспортным процедурам формы до её открытия.
Как прочитать параметры в ПриСозданииНаСервере
Основной и правильный способ обратиться к параметрам — обработчик ПриСозданииНаСервере в модуле принимающей формы. Здесь объект Параметры доступен напрямую, и все переданные значения уже заполнены.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("Организация") Тогда
ТекущаяОрганизация = Параметры.Организация;
КонецЕсли;
КонецПроцедуры
Обращение Параметры.ИмяПараметра без проверки опасно: если параметр не был передан, возникнет ошибка «Поле объекта не обнаружено». Метод Свойство() возвращает Истина, если параметр существует, и может сразу записать его значение в переменную, переданную вторым аргументом.
Если Параметры.Свойство("ДатаНачала", ДатаНачала) Тогда
// ДатаНачала уже содержит переданное значение
КонецЕсли;
Ключевой параметр формы объекта
У форм объектов (справочников, документов) есть стандартный ключевой параметр Ключ — ссылка на редактируемый объект. Платформа передаёт её автоматически при открытии формы элемента, но можно передать и вручную:
ПараметрыФормы = Новый Структура("Ключ", СсылкаНаЭлемент);
ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаЭлемента", ПараметрыФормы);
Внутри формы объекта ссылка на редактируемый объект доступна не только через Параметры.Ключ, но и через основной реквизит формы: Объект.Ссылка. Для нового объекта Параметры.Ключ отсутствует, а Объект.Ссылка содержит пустую ссылку — это удобный способ определить режим работы формы.
Дополнительно платформа поддерживает стандартные параметры: ЗначениеКопирования (ссылка на объект-источник при копировании), Основание (ввод на основании), ЗначенияЗаполнения (структура начальных значений реквизитов нового объекта). Их имена зарезервированы — не используйте их для своих целей.
Параметры выбора и стандартные параметры формы списка
Формы списков принимают параметр Отбор — структуру отбора, которую платформа применяет к динамическому списку при открытии. Имена полей в этой структуре должны совпадать с полями списка.
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Новый Структура("Владелец", СсылкаНаКонтрагента));
ОткрытьФорму("Справочник.ДоговорыКонтрагентов.Форма.ФормаВыбора", ПараметрыФормы);
При открытии формы выбора из поля ввода платформа автоматически передаёт ПараметрыВыбора и Отбор, сформированные из связей параметров выбора, настроенных в конфигураторе. В обработчике ПриСозданииНаСервере формы выбора эти значения доступны через тот же объект Параметры, и их можно дополнить или переопределить программно.
Если требуется запретить пользователю снимать установленный отбор, используйте фиксированные настройки динамического списка: установите отбор в Список.КомпоновщикНастроек.ФиксированныеНастройки, а не полагайтесь только на переданный параметр.
- 1На вызывающей стороне создайте структуру и добавьте параметр через Вставить()
- 2Передайте структуру вторым аргументом в ОткрытьФорму()
- 3В модуле принимающей формы добавьте обработчик ПриСозданииНаСервере
- 4Прочитайте параметр через Параметры.Свойство() с проверкой наличия
- 5Сохраните значение в реквизит формы для использования в других обработчиках
Сохранение параметров в реквизиты формы
Объект Параметры полноценно доступен только в момент создания формы. Если значение понадобится позже — в обработчиках команд, при записи, на клиенте — его нужно сохранить. Стандартный приём: создать реквизит формы и скопировать туда значение параметра в ПриСозданииНаСервере.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Параметры.Свойство("РежимРаботы", РежимРаботы); // РежимРаботы — реквизит формы
КонецПроцедуры
Для набора связанных параметров удобно хранить один реквизит типа «Произвольный» со структурой внутри, но помните: значения реквизитов формы сериализуются при передаче между клиентом и сервером, поэтому несериализуемые типы (например, COMОбъект) хранить так нельзя.
Как проверить, что параметры дошли
Самый быстрый способ отладки — точка останова в ПриСозданииНаСервере принимающей формы. В табло переменных раскройте объект Параметры: там видны все переданные ключи и значения. Если параметра нет — проблема на вызывающей стороне, проверяйте имя ключа в структуре.
Второй частый источник путаницы — регистр и опечатки в именах. Имена параметров чувствительны к точному написанию: Организация и организация формально разные ключи структуры. Держите имена параметров в одном стиле и, при большом количестве, выносите их в строковые константы или общий модуль.
Если форма открывается, но ведёт себя так, будто параметр пуст, проверьте, не перезаписывается ли значение позже — например, в обработчике ПриЧтенииНаСервере или при стандартной инициализации объекта.
Как проверить результат
В объекте Параметры виден ключ с ожидаемым значением
Ключа нет или значение Неопределено — ошибка на вызывающей стороне
Значение скопировано из параметра и доступно в обработчиках
Реквизит пуст — копирование не выполнено или имя не совпадает
Форма открывается без ошибок с параметрами и без
Ошибка «Поле объекта не обнаружено» при открытии без параметров
FAQ
Чем отличается Параметры.Свойство() от прямого обращения Параметры.Имя?
Прямое обращение вызывает ошибку, если параметр не передан. Метод Свойство() возвращает Истина или Ложь и может сразу записать значение в переменную вторым аргументом — это безопасный способ чтения необязательных параметров.
Можно ли обратиться к параметрам формы на клиенте?
Надёжно — нет. Объект Параметры предназначен для обработчика ПриСозданииНаСервере. Чтобы использовать значение на клиенте, скопируйте его в реквизит формы при создании на сервере.
Как передать параметр в уже открытую форму?
Через ОткрытьФорму() нельзя — она создаёт новую форму или активирует существующую. Используйте Оповестить() с обработчиком ОбработкаОповещения в принимающей форме либо экспортную процедуру формы, полученной через ПолучитьФорму().
Почему параметр Ключ пуст при создании нового элемента?
Для нового объекта ссылки ещё не существует, поэтому Параметры.Ключ отсутствует. Ориентируйтесь на Объект.Ссылка.Пустая() — это признак режима создания нового элемента.
Можно ли передать таблицу значений через параметры формы?
Напрямую таблица значений в параметрах не сериализуется. Передайте массив структур, либо поместите таблицу во временное хранилище (ПоместитьВоВременноеХранилище) и передайте адрес хранилища строкой.
Что важно запомнить
Параметры читаются через Параметры.Свойство() в ПриСозданииНаСервере, передаются структурой в ОткрытьФорму(), а для дальнейшего использования сохраняются в реквизиты формы. Зарезервированные имена (Ключ, Отбор, Основание) не используйте для своих данных.