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