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