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