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