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

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

Что такое форма в 1С:Предприятие

Форма в 1С:Предприятие — что это, какие виды форм существуют, как открыть и настроить форму в конфигураторе, типичные ошибки и ответы на вопросы разработчика.

Форма в 1С:Предприятие — это визуальный интерфейс, через который пользователь видит данные и работает с ними: вводит документы, просматривает списки справочников, запускает отчёты. Всё, что отображается на экране в режиме «1С:Предприятие», — это формы тех или иных объектов конфигурации. Без форм пользователь не смог бы ни создать накладную, ни найти контрагента, ни построить отчёт.

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

Понимание устройства форм нужно не только разработчикам. Администраторы и внедренцы сталкиваются с формами при настройке интерфейса под пользователей, диагностике ошибок «форма не открывается» или при доработке типовых конфигураций. Ниже разобраны виды форм, их структура, способы создания и типичные проблемы.

Из чего состоит форма

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

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

В управляемых формах дополнительно действует разделение контекста: код модуля помечается директивами &НаКлиенте, &НаСервере, &НаСервереБезКонтекста. Это связано с тем, что управляемая форма исполняется в клиент-серверной архитектуре: интерфейс работает на клиенте, а обращение к данным — на сервере. Понимание этого разделения критично для корректной разработки.

Виды форм: обычные и управляемые

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

Управляемые формы — стандарт для режима управляемого приложения. Здесь разработчик описывает состав и свойства элементов, а платформа сама компонует интерфейс, учитывая тип клиента (тонкий, толстый, веб, мобильный). Это даёт единый код для всех клиентов, но требует привыкнуть к декларативному подходу: нельзя «поставить кнопку в точку с координатами», можно лишь указать её место в группе и порядок.

Обычные и управляемые формы

Обычная форма

Ручное размещение элементов, работа только в толстом клиенте, актуальна для поддержки старых конфигураций

Управляемая форма

Декларативное описание, работает во всех клиентах включая веб и мобильный, стандарт современных конфигураций

Автогенерируемая форма

Платформа создаёт форму сама по метаданным объекта, подходит как временное решение, но ограничена в настройке

Основные и произвольные формы: что назначает платформа

У большинства объектов конфигурации есть набор основных форм: форма объекта, форма списка, форма выбора, у документов — ещё форма списка и выбора. Если разработчик не создал ни одной формы, платформа генерирует их автоматически «на лету» по метаданным объекта. Именно поэтому свежесозданный справочник сразу можно открыть и заполнить, не рисуя интерфейс.

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

Практическое следствие: если после доработки у пользователей открывается «не та» форма, первым делом проверяют, какая форма назначена основной в свойствах объекта. Это одна из самых частых причин жалоб после обновления конфигурации.

Как создать и настроить форму в конфигураторе

Создание формы выполняется в конфигураторе. Общий порядок одинаков для справочников, документов и других объектов, отличаются только доступные типы форм.

Создание формы объекта
  1. 1
    Откройте конфигуратор и найдите нужный объект (справочник, документ) в дереве конфигурации
  2. 2
    Перейдите на вкладку «Формы» и нажмите «Добавить»
  3. 3
    В конструкторе выберите тип формы (например, «Форма элемента») и при необходимости назначьте её основной
  4. 4
    В редакторе формы добавьте нужные реквизиты и перетащите их в дерево элементов
  5. 5
    Настройте команды и напишите обработчики в модуле формы
  6. 6
    Обновите конфигурацию базы данных (F7) и проверьте форму в режиме «1С:Предприятие»

Редактор управляемой формы разделён на зоны: дерево элементов, список реквизитов, палитра свойств и модуль. Чтобы вывести поле на форму, достаточно перетащить реквизит из правой панели в дерево элементов. Группировка выполняется элементами «Группа» с видом «Обычная группа», «Страницы», «Командная панель» — от структуры групп зависит итоговая компоновка.

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

bsl
&НаКлиенте
Процедура РассчитатьСумму(Команда)
	Объект.Сумма = Объект.Количество * Объект.Цена;
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Если Объект.Ссылка.Пустая() Тогда
		Объект.Ответственный = ПользователиИнформационнойБазы.ТекущийПользователь().Имя;
	КонецЕсли;
КонецПроцедуры

Как открываются формы в режиме предприятия

Пользователь открывает формы через интерфейс: панель разделов, меню «Создать», команду открытия списка. Программно формы открываются методами глобального контекста: ОткрытьФорму("Справочник.Номенклатура.ФормаОбъекта", Параметры), ПолучитьФорму() (в основном для обычных форм). В параметры открытия передают ключ записи, значения заполнения, режим выбора — например, Параметры.Вставить("Ключ", СсылкаНаДокумент).

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

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

Типичные ошибки и ограничения при работе с формами

Большинство проблем с формами сводится к нескольким повторяющимся сценариям. Их знание экономит часы отладки.

Типичные ошибки
01
Обращение к данным объекта в клиентском коде без серверного вызова — ошибка «Переменная не определена» или недоступность контекста
02
Изменение формы типовой конфигурации напрямую вместо расширения — потеря доработки при обновлении
03
Тяжёлые запросы в ПриСозданииНаСервере без необходимости — форма открывается медленно у всех пользователей
04
Изменение реквизита объекта в обработчике НаСервереБезКонтекста — изменения не доходят до клиента, так как форма туда не передаётся
05
Назначение основной формой неподходящей формы — у пользователей открывается «не тот» интерфейс

Отдельно стоит сказать о доработке типовых конфигураций. Прямое изменение формы типового объекта включает её в список изменённых, что усложняет или блокирует автоматическое обновление. Рекомендуемый путь — расширения конфигурации: форма заимствуется в расширение, дорабатывается там, а типовая остаётся нетронутой. Это стандартный механизм платформы для поддерживаемых доработок.

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

Как проверить, что форма работает правильно

Контрольные точки

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

Открытие формы
Норма

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

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

Ошибка компиляции модуля, «Поле не найдено», пустая форма

Запись объекта
Норма

Документ/элемент записывается и проводится, данные сохраняются в базе

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

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

Клиент-серверные вызовы
Норма

Серверные процедуры вызываются только при необходимости, форма отзывчива

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

Форма «зависает» при каждом действии из-за лишних серверных вызовов

Права доступа
Норма

Под ограниченной ролью лишние кнопки и поля скрыты

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

Пользователь без прав видит или может изменить закрытые данные

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

Итог

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

Форма — это интерфейс объекта конфигурации: элементы, реквизиты, команды и модуль. Современные конфигурации используют управляемые формы с разделением клиентского и серверного кода. Доработки типовых форм делайте через расширения, тестируйте на копии базы и проверяйте, какая форма назначена основной.

Частые вопросы

Чем форма отличается от макета в 1С?

Форма — интерактивный интерфейс для ввода и просмотра данных. Макет — статичный шаблон, чаще всего для печатных форм документов или табличных документов. Макет не имеет собственной логики взаимодействия с пользователем и выводится на печать или экран как результат.

Почему форма открывается медленно?

Типичные причины: тяжёлые запросы и циклы в обработчике ПриСозданииНаСервере, динамические списки с произвольным запросом без индексов по полям отбора, большое число элементов и видимых колонок таблицы. Начните с замера производительности — он покажет конкретный обработчик-виновник.

Можно ли изменить форму без конфигуратора?

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

Что делать, если после обновления пропала доработанная форма?

Если форма была изменена напрямую в типовой конфигурации, при обновлении она могла быть замещена типовой версией. Восстановите доработку из резервной копии или хранилища и перенесите её в расширение конфигурации, чтобы ситуация не повторилась при следующем обновлении.

Чем расширение формы отличается от изменения формы?

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

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

Используйте ОткрытьФорму с указанием владельца и описанием оповещения о закрытии, либо параметр РежимОткрытияОкна «Блокировать окно владельца». Результат передаётся через параметр Закрыть(Результат) в открываемой форме и обрабатывается в оповещении у вызывающей стороны.