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