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

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

Как получить форму в 1С: способы, код и проверка результата

Как получить форму в 1С: методы ПолучитьФорму и ОткрытьФорму, параметры, работа с печатными формами, типичные ошибки и проверка результата.

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

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

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

Как 1С находит нужную форму

У каждого объекта конфигурации (справочника, документа, отчёта) может быть несколько форм: форма списка, форма элемента, форма выбора. Если разработчик не создал их явно, платформа генерирует формы автоматически. Обратиться к форме можно по полному имени: Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента.

Если указать краткое имя без конкретной формы — например, Документ.РеализацияТоваровУслуг.Форма — платформа возьмёт форму, назначенную основной в конфигураторе (свойства объекта, раздел «Основные формы»). Это удобно, но делает код зависимым от настроек конфигурации: после обновления основная форма может измениться.

Программное получение формы методом ПолучитьФорму

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

Форма = ПолучитьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента", ПараметрыФормы, Владелец, Уникальность);

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

Альтернатива — вызов через менеджер объекта: Документы.РеализацияТоваровУслуг.ПолучитьФорму("ФормаДокумента"). Результат идентичен, но такой вариант не работает для внешних обработок и отчётов, где применяется только глобальный ПолучитьФорму() с указанием полного пути к файлу обработки.

bsl
&НаКлиенте
Процедура ОткрытьДокумент(Команда)
	ПараметрыФормы = Новый Структура("Ключ", ТекущийДокумент);
	ОткрытьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента", ПараметрыФормы, ЭтотОбъект, ТекущийДокумент);
КонецПроцедуры

Открытие формы пользователю с параметрами

Чтобы форма появилась на экране, используют ОткрытьФорму() или ОткрытьФормуМодально(). Модальное открытие блокирует родительское окно, но в веб-клиенте и современных версиях платформы модальность ограничена — предпочтительный способ блокирующих окон это ОткрытьФорму() с параметром РежимОткрытияОкна.БлокироватьОкноВладельца и обработкой результата через ОписаниеОповещения.

Передача параметров выполняется через структуру. Стандартный параметр Ключ задаёт открываемый объект, ЗначенияЗаполнения — реквизиты нового объекта, Отбор — отбор в форме списка. Произвольные параметры доступны в модуле формы через Параметры.ИмяПараметра в обработчике ПриСозданииНаСервере.

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

Получение печатной формы документа

Пользователю обычно нужна именно печатная форма — счёт, накладная, акт. В интерфейсе она доступна по кнопке «Печать» в карточке документа: откроется список доступных макетов, после выбора формируется табличный документ, который можно сохранить в PDF, Excel или отправить на принтер.

Программно печатную форму формируют через модуль менеджера объекта (процедура Печать в типовых конфигурациях) или через подсистему «Дополнительные отчёты и обработки» из Библиотеки стандартных подсистем. Внешняя печатная форма подключается в разделе «Администрирование → Печатные формы, отчёты и обработки» и появляется в меню «Печать» автоматически.

Типичные ошибки и ограничения

Самая частая ошибка — «Ошибка при вызове метода контекста (ПолучитьФорму)» с текстом о недоступности операции. Она возникает, если метод вызван на сервере в контексте, где формы не существуют, или в фоновом задании. Решение — перенести вызов в клиентскую процедуру.

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

Типичные ошибки
01
Вызов ПолучитьФорму на сервере или в фоновом задании — метод доступен только там, где есть интерфейс
02
Опечатка в полном имени формы приводит к ошибке «Форма не найдена» — проверьте имя в конфигураторе
03
Открытие формы без ключа уникальности — при повторном вызове создаются дубли окон
04
Передача в параметрах несериализуемых типов (например, COMОбъект) — параметры должны переноситься между клиентом и сервером
05
Ожидание результата от ОткрытьФорму без ОписаниеОповещения — метод не возвращает данные формы напрямую

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

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

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

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

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

Открытая форма
Норма

Заголовок и реквизиты соответствуют переданному ключу

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

Открылась пустая форма нового объекта — параметр Ключ не сработал

Печатная форма
Норма

Все суммы и реквизиты документа заполнены корректно

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

Пустые поля или ошибки формирования — проверьте макет и права

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

Активируется уже открытое окно

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

Создаётся второй экземпляр — не задан ключ уникальности

Итог

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

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

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

Чем ПолучитьФорму отличается от ОткрытьФорму?

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

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

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

Почему возникает ошибка «Операция не доступна» при вызове ПолучитьФорму?

Метод вызван в контексте без интерфейса: на сервере, в фоновом задании, через COM-соединение или веб-сервис. Перенесите вызов в клиентскую процедуру формы, откуда инициируется действие пользователя.

Как передать отбор в форму списка?

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

Можно ли получить печатную форму без открытия документа?

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

Что такое ключ уникальности формы и зачем он нужен?

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