К статье
Практический материал

Разработка и Конфигурация · 9 мин

Как создать управляемые формы в 1С: пошаговое руководство

Подробная инструкция по созданию управляемых форм в 1С:Предприятие 8: конструктор форм, реквизиты и команды, программное создание, типичные ошибки и FAQ.

Управляемые формы — основной тип интерфейса в конфигурациях 1С:Предприятие 8, работающих в режиме управляемого приложения и через веб-клиент. В отличие от обычных форм, где разработчик вручную размещает каждый элемент, управляемая форма описывается декларативно: вы задаёте структуру, а платформа сама строит отображение для тонкого, толстого и веб-клиента.

Создать управляемую форму можно двумя способами: в конфигураторе через конструктор (визуально, без кода) или программно — методом ПолучитьФорму() с последующей настройкой. Первый вариант подходит для типовых задач: формы документа, списка справочника, элемента. Второй — когда форма должна строиться динамически под условия пользователя.

Ниже разобраны оба подхода, настройка реквизитов и команд, работа с событиями формы и проверка результата. Инструкция актуальна для конфигураций на управляемом приложении: Управление торговлей, ERP, Бухгалтерия предприятия и самописных решений.

Что такое управляемая форма и когда она нужна

Управляемая форма — это описание интерфейса, которое платформа 1С интерпретирует на стороне клиента. Логика выполняется в двух контекстах: на сервере (обращения к данным, запросы) и на клиенте (реакция на действия пользователя). Директивы компиляции &НаКлиенте и &НаСервере явно разделяют эти контексты в модуле формы.

Управляемые формы обязательны, если конфигурация запускается в режиме «Управляемое приложение» или «Такси», а также при работе через веб-клиент и мобильную платформу. Обычные формы в таком режиме просто не откроются — это частая причина ошибок при переносе старых доработок.

Проверить режим можно так: в конфигураторе откройте свойства корня конфигурации и посмотрите параметры «Режим использования модальности» и «Основной режим запуска». Если стоит «Управляемое приложение» — все новые формы создавайте управляемыми.

Создание формы через конструктор в конфигураторе

Самый быстрый путь — конструктор форм. Откройте дерево конфигурации, найдите нужный объект (например, справочник «Номенклатура» или документ «РеализацияТоваров»), раскройте его и перейдите на закладку «Формы». Нажмите кнопку добавления (значок с плюсом) — запустится конструктор.

На первом шаге выберите тип формы: форма элемента, форма списка, форма выбора или произвольная форма. Для документа обычно нужна форма документа, для справочника — форма элемента. Установите флажок «Назначить форму основной», если она должна открываться по умолчанию вместо автоматически генерируемой платформой.

На следующем шаге конструктор предложит разместить реквизиты объекта на форме. Отметьте нужные поля — платформа сама создаст элементы и свяжет их с данными. После нажатия «Готово» форма появится в ветке «Формы» объекта, а её модуль — в окне редактора.

Порядок действий
  1. 1
    Откройте объект конфигурации и перейдите на закладку «Формы»
  2. 2
    Нажмите «Добавить» и выберите тип формы в конструкторе
  3. 3
    Отметьте реквизиты для размещения на форме
  4. 4
    Нажмите «Готово» и сохраните конфигурацию
  5. 5
    Запустите 1С в режиме предприятия и откройте форму для проверки

Структура управляемой формы: реквизиты, элементы, команды

Редактор управляемой формы делится на несколько областей. Вверху — дерево элементов формы (поля, группы, таблицы, кнопки). Справа или отдельными закладками расположены панели «Реквизиты», «Команды» и «Параметры». Понимание этой структуры критично: элемент формы только отображает данные, сами данные хранятся в реквизитах формы.

Чтобы добавить поле вручную, перетащите реквизит из панели реквизитов в дерево элементов. Платформа создаст элемент нужного типа: для строки — поле ввода, для ссылки на справочник — поле выбора, для табличной части — таблицу. Свойства элемента (заголовок, доступность, видимость, обязательность) настраиваются в палитре свойств.

Команды формы — это кнопки и пункты меню. Добавьте команду на закладке «Команды», задайте ей обработчик (процедуру в модуле формы) и перетащите команду в командную панель формы или в нужную группу. Обработчик команды обязательно должен иметь директиву компиляции, иначе форма не сохранится с корректной логикой вызова.

Работа с событиями и модулем формы

Логика формы описывается в её модуле через обработчики событий. Ключевые события: ПриСозданииНаСервере (инициализация данных при открытии), ПриОткрытии (клиентские действия после построения формы), ПередЗаписью и ПослеЗаписи (контроль и реакция на сохранение). Для элементов формы доступны события ПриИзменении, НачалоВыбора, ОбработкаВыбора.

Каждый обработчик должен начинаться с директивы компиляции. Код с директивой &НаСервере может обращаться к запросам и менеджерам объектов, но не к элементам интерфейса напрямую. Код &НаКлиенте работает с элементами формы и оповещениями, но не может выполнять запросы к базе. Для вызова серверной процедуры из клиентской создают пару процедур: клиентская вызывает серверную без передачи контекста формы.

Пример типичного обработчика в модуле формы:

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Если Параметры.Ключ.Пустая() Тогда

Объект.Ответственный = Пользователи.ТекущийПользователь();

КонецЕсли;

КонецПроцедуры

&НаКлиенте

Процедура КонтрагентПриИзменении(Элемент)

УстановитьВидимостьРеквизитов();

КонецПроцедуры

Программное создание и открытие форм

Иногда форму нужно открыть из кода: по кнопке, из обработчика другой формы или из фонового сценария. Для этого используется метод ПолучитьФорму() с указанием полного имени формы, например «Справочник.Номенклатура.Форма.ФормаЭлемента». Метод вернёт объект формы, после чего её можно открыть методом Открыть() или получить результат через ОткрытьМодально() (в современных конфигурациях — с использованием оповещений, так как модальность часто запрещена).

Для передачи данных в открываемую форму применяется структура параметров: вторым аргументом в ПолучитьФорму() или через ПараметрыФормы в методе ОткрытьФорму(). Внутри формы эти значения доступны через коллекцию Параметры в обработчике ПриСозданииНаСервере.

Полностью динамическое построение формы — добавление реквизитов и элементов из кода — выполняется методами ИзменитьРеквизиты() и Элементы.Добавить(). Это трудоёмкий путь: он оправдан для универсальных механизмов (произвольные отчёты, конструкторы настроек), но для разовой формы проще и надёжнее конструктор.

bsl
&НаКлиенте
Процедура ОткрытьКарточку(Команда)
    ПараметрыФормы = Новый Структура("Ключ", ТекущийЭлемент.ТекущиеДанные.Ссылка);
    ОткрытьФорму("Справочник.Контрагенты.Форма.ФормаЭлемента", ПараметрыФормы);
КонецПроцедуры

Типичные ошибки и проверка результата

Чаще всего начинающие разработчики путают контексты выполнения: пытаются выполнить запрос в клиентской процедуре или обратиться к элементу формы на сервере. Платформа выдаёт ошибку компиляции или runtime-ошибку «Переменная не определена». Правило простое: данные — на сервере, интерфейс — на клиенте.

Вторая частая проблема — изменения формы не отображаются у пользователей. Причины: форма не назначена основной (открывается автогенерируемая), конфигурация базы данных не обновлена после изменения, либо пользователь работает с кэшированной версией — помогает перезапуск сеанса или очистка кэша клиента.

Третья ошибка — добавление реквизита в модуль, но не на форму: поле есть в данных, но пользователь его не видит, потому что элемент не перенесён в дерево. Проверяйте связь «Элемент — Реквизит» в свойстве ПутьКДанным элемента формы.

Типичные ошибки
01
Запрос к базе в процедуре &НаКлиенте — ошибка компиляции или падение при выполнении
02
Форма создана, но не назначена основной — пользователи видят старую автогенерируемую форму
03
Реквизит добавлен, но элемент не перенесён в дерево формы — поле невидимо
04
Изменения сохранены в конфигураторе, но конфигурация базы данных не обновлена — в режиме предприятия всё по-старому
Контрольные точки

Как проверить результат

Открытие формы в режиме предприятия
Норма

Форма открывается без ошибок, поля на месте

Тревожный признак

Ошибка «Форма не найдена» или пустое окно

Сохранение объекта через форму
Норма

Данные записываются, форма закрывается или обновляется

Тревожный признак

Ошибки записи, потеря введённых данных

Работа в веб-клиенте
Норма

Форма корректно отображается в браузере

Тревожный признак

Элементы съезжают, часть функций недоступна

Вопросы и ответы

Можно ли открыть обычную форму в управляемом приложении?

Нет. Обычные формы работают только в режиме обычного приложения. Если конфигурация запускается в управляемом режиме, форму нужно пересоздать как управляемую — автоматической конвертации платформа не выполняет.

Чем отличается основная форма от вспомогательной?

Основная форма объекта (элемента, списка, выбора) открывается по умолчанию при стандартных действиях пользователя. Вспомогательные формы вызываются только программно — через ПолучитьФорму() или ОткрытьФорму() с явным указанием имени.

Как передать значение из одной формы в другую?

Используйте структуру параметров при вызове ОткрытьФорму() — внутри открываемой формы значения доступны через коллекцию Параметры. Для возврата результата применяйте механизм оповещений: ОписаниеОповещенияОЗакрытии и метод Оповестить().

Почему изменения формы не видны у пользователей?

Чаще всего не обновлена конфигурация базы данных (команда «Обновить конфигурацию базы данных» в конфигураторе) или форма не назначена основной. Также помогает перезапуск клиентского сеанса из-за кэширования метаданных.

Можно ли создать форму полностью программно, без конструктора?

Да: реквизиты добавляются методом ИзменитьРеквизиты(), элементы — Элементы.Добавить(), команды — Команды.Добавить(). Такой подход используют для универсальных механизмов, но для обычных задач он сложнее в поддержке, чем форма, созданная конструктором.

Итог

Что важно запомнить

Управляемая форма создаётся конструктором на закладке «Формы» объекта конфигурации. Данные хранятся в реквизитах, отображаются через элементы, логика разделяется директивами &НаКлиенте и &НаСервере. После изменений обновляйте конфигурацию базы данных и проверяйте форму в режиме предприятия.