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