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