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