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