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