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

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

Общая форма в 1С: как создать и применять в конфигурации

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

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

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

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

Когда нужна общая форма, а когда форма объекта

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

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

Маршрут решения

Как выбрать действие

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

Создание общей формы в конфигураторе

Откройте конфигуратор и в дереве конфигурации разверните ветку «Общие», затем «Общие формы». Правой кнопкой мыши выберите «Добавить» или нажмите кнопку добавления на панели. Откроется конструктор формы: задайте имя (например, ФормаНастроекОбмена) и синоним, который увидит пользователь в заголовке окна.

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

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

Реквизиты, элементы и команды формы

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

Чтобы реквизит появился на форме, перетащите его из списка реквизитов в дерево элементов. Платформа автоматически создаст поле ввода подходящего вида. Для ссылочных типов поле получит кнопку выбора из списка соответствующего справочника. Порядок элементов в дереве определяет порядок обхода по Tab — располагайте поля в логичной последовательности.

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

Передача параметров при открытии

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

Открытие выполняется из любого клиентского кода методом ОткрытьФорму. Первый аргумент — путь к форме в формате «ОбщаяФорма.ИмяФормы», второй — структура параметров:

ПараметрыФормы = Новый Структура;

ПараметрыФормы.Вставить("Организация", ТекущаяОрганизация);

ПараметрыФормы.Вставить("РежимРаботы", "Загрузка");

ОткрытьФорму("ОбщаяФорма.ФормаНастроекОбмена", ПараметрыФормы, ЭтотОбъект);

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

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

Возврат результата и обработка закрытия

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

На стороне вызывающего кода результат принимается через описание оповещения. При открытии формы третьим параметром передают владельца, а в ОткрытьФорму можно указать описание оповещения о закрытии:

Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияНастроек", ЭтотОбъект);

ОткрытьФорму("ОбщаяФорма.ФормаНастроекОбмена", ПараметрыФормы, ЭтотОбъект,,,, Оповещение);

&НаКлиенте

Процедура ПослеЗакрытияНастроек(Результат, ДопПараметры) Экспорт

Если Результат = Неопределено Тогда

Возврат; // пользователь нажал «Отмена»

КонецЕсли;

// работа с Результат.Организация, Результат.РежимРаботы

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

Различайте закрытие с результатом и отмену: если пользователь закрыл окно крестиком или кнопкой «Отмена», обработчик оповещения получит Неопределено. Всегда проверяйте это значение перед обращением к полям результата.

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

После создания формы обновите конфигурацию базы данных (Ctrl+F7) и запустите режим предприятия. Откройте форму из того места кода, где планируется её использование, и пройдите полный цикл: открытие с параметрами, заполнение полей, нажатие «ОК», получение результата, повторное открытие.

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

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

Форма открывается из кода
Норма

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

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

Ошибка «Форма не найдена» — проверьте имя и путь ОбщаяФорма.Имя

Возврат результата
Норма

Оповещение получает структуру с данными после нажатия «ОК»

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

Результат всегда Неопределено — кнопка «ОК» не вызывает Закрыть() со значением

Повторное открытие
Норма

Форма открывается с актуальными параметрами каждый раз

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

Старые значения «залипают» — данные хранятся в переменных модуля, а не в реквизитах

Типичные ошибки
01
Обращение к Параметры.Имя без проверки Свойство() — ошибка при открытии формы без параметров
02
Использование модального открытия вместо описания оповещения — блокировка в веб-клиенте и нарушение стандартов
03
Хранение данных в переменных модуля формы — потеря значений между серверными вызовами
04
Отсутствие проверки Результат = Неопределено в обработчике закрытия — ошибка при отмене пользователем
05
Опечатка в пути «ОбщаяФорма.Имя» — форма не найдена, ошибка возникает только в момент открытия

Ограничения и альтернативные подходы

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

Альтернативы: если нужен простой ввод одного значения, достаточно методов ВвестиЗначение, ВвестиСтроку или ПоказатьВводЗначения без создания формы. Для сложных окон с таблицами и динамическими списками общая форма остаётся правильным выбором. Если форма по смыслу принадлежит обработке — создавайте её как форму обработки, а не общую.

Итог

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

Общая форма создаётся в ветке «Общие» → «Общие формы», открывается через ОткрытьФорму() со структурой параметров, возвращает результат через Закрыть(Значение) и описание оповещения. Данные храните в реквизитах формы, модальные вызовы избегайте, результат Неопределено проверяйте всегда.

Часто задаваемые вопросы

Можно ли открыть общую форму из серверной процедуры?

Нет. Открытие формы — клиентская операция, метод ОткрытьФорму доступен только на клиенте. Из серверного кода можно подготовить данные и вернуть их на клиент, а уже там вызвать открытие формы.

Как сделать общую форму доступной в интерфейсе пользователя?

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

Чем общая форма отличается от формы обработки?

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

Как передать в общую форму таблицу значений?

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

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

Проверьте, что параметры объявлены на вкладке «Параметры» редактора формы, имена в структуре при ОткрытьФорму совпадают с объявленными, а перенос значений в реквизиты выполняется в ПриСозданииНаСервере.