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

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

Как открыть форму документа в 1С 8

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

Форма документа в 1С 8 открывается двумя принципиально разными способами: интерактивно — пользователем через интерфейс прикладного решения, и программно — из встроенного языка с помощью функции ОткрытьФорму() или глобального контекста. Выбор способа зависит от задачи: бухгалтеру достаточно журнала документов, а разработчику при обработке данных или построении собственных команд нужен программный вызов с параметрами.

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

Материал охватывает обе стороны вопроса: как пользователю найти и открыть документ в интерфейсе «Такси» и как разработчику корректно вызвать форму из кода — с параметрами, блокировкой, обработкой результата. Примеры приведены для управляемых форм, которые используются во всех современных конфигурациях на платформе 8.3.

Как пользователю открыть документ через интерфейс

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

Если журнала нет на видном месте, используйте главное меню: кнопка с логотипом в левом верхнем углу → раздел с нужной подсистемой. Во многих конфигурациях список всех доступных документов доступен через команду «Все функции» (открывается через главное меню при включённом режиме технического специалиста в параметрах).

Быстрый альтернативный путь — полнотекстовый поиск по данным (лупа в правом верхнем углу) или строка поиска в журнале по номеру документа. После нахождения строки документ открывается тем же двойным щелчком или клавишей Enter.

Как открыть форму документа программно: базовый вызов

Основной инструмент — функция глобального контекста ОткрытьФорму(). Минимальный вызов для открытия формы существующего документа по ссылке выглядит так:

// Открытие формы существующего документа

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

ПараметрыФормы.Вставить("Ключ", СсылкаНаДокумент);

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

Параметр «Ключ» принимает ссылку на объект, форму которого нужно открыть. Если передать пустую ссылку или не передавать ключ вовсе, откроется форма нового документа. Имя формы строится по шаблону: Документ.<ИмяДокумента>.Форма.<ИмяФормы>. Если у документа назначена основная форма, достаточно указать Документ.<ИмяДокумента>.ФормаОбъекта — платформа сама подставит основную форму.

Важно: ОткрытьФорму доступна только в клиентском контексте. Вызов в серверной процедуре без директивы &НаКлиенте приведёт к ошибке компиляции или выполнения. Стандартный приём — клиентская процедура-обработчик команды, внутри которой при необходимости вызывается серверная функция для получения ссылки, а затем форма открывается на клиенте.

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

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

Частая задача — открыть форму нового документа с уже заполненными полями: организацией, контрагентом, складом. Для этого используется параметр «ЗначенияЗаполнения»:

&НаКлиенте

Процедура СоздатьЗаказ(Команда)

ЗначенияЗаполнения = Новый Структура;

ЗначенияЗаполнения.Вставить("Организация", ТекущаяОрганизация);

ЗначенияЗаполнения.Вставить("Контрагент", ВыбранныйКонтрагент);

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

ПараметрыФормы.Вставить("ЗначенияЗаполнения", ЗначенияЗаполнения);

ОткрытьФорму("Документ.ЗаказКлиента.ФормаОбъекта", ПараметрыФормы);

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

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

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

Дополнительные параметры: владелец, уникальность, режим окна

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

Режим открытия задаётся через РежимОткрытияОкнаФормы: блокировать весь интерфейс (модально), блокировать окно владельца, открывать независимо. Модальное открытие оправдано, когда дальнейшая логика зависит от действий пользователя в открытой форме.

Параметр ОткрытьФормуНазначениеТипичное значение
ИмяФормыПолный путь к формеДокумент.ЗаказКлиента.ФормаОбъекта
ПараметрыСтруктура с ключом, значениями заполненияКлюч, ЗначенияЗаполнения, Основание
ВладелецФорма-владелец для связи и оповещенийЭтаФорма
УникальностьЗапрет дублирования формыСсылка или произвольный ключ
ОписаниеОповещенияОЗакрытииОбработчик результата после закрытияНовый ОписаниеОповещения(...)

Как получить результат после закрытия формы

Если открываемая форма должна вернуть данные — например, выбранный документ или подтверждение действия — используется асинхронный механизм оповещений. В ОткрытьФорму передаётся ОписаниеОповещения с именем процедуры, которая выполнится после закрытия формы:

&НаКлиенте

Процедура ВыбратьДокумент(Команда)

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

ОткрытьФорму("Документ.ЗаказКлиента.ФормаВыбора", , ЭтаФорма, , , , Оповещение);

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

&НаКлиенте

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

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

// Результат — выбранная ссылка

КонецЕсли;

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

Устаревшие методы ОткрытьФормуМодально и ОткрытьМодально в режиме совместимости отключены или нежелательны: современные конфигурации работают в режиме «не использовать модальность», и такие вызовы приводят к ошибкам. Всегда используйте оповещения.

Типичные ошибки и их диагностика

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

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

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

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

Проверка результата и ограничения

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

Учитывайте ограничения платформы. Форму нельзя открыть интерактивно из внешнего соединения (COM) и из веб-сервиса — там нет клиентского контекста. В фоновых заданиях открытие форм недоступно по той же причине. Если данные для формы готовятся долго, сначала получите их на сервере, затем откройте форму на клиенте уже с готовыми параметрами.

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

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

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

Заголовок открывшейся формы
Норма

Совпадает с номером и датой переданного документа

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

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

Заполнение реквизитов нового документа
Норма

Поля заполнены значениями из структуры

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

Поля пустые — имена ключей не совпадают с реквизитами

Повторный вызов открытия
Норма

Активируется уже открытая форма

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

Открывается вторая копия — не задана уникальность

Итог

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

Пользователь открывает документ из журнала двойным щелчком, разработчик — функцией ОткрытьФорму с параметром «Ключ» для существующего документа или «ЗначенияЗаполнения» для нового. Вызов выполняется только на клиенте, результат возвращается через описание оповещения, а большинство ошибок связано с именем формы, правами и контекстом выполнения.

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

Как открыть форму документа, если известен только его номер?

Сначала найдите ссылку запросом или методом Документы.ИмяДокумента.НайтиПоНомеру(Номер, Дата) на сервере, затем передайте полученную ссылку в параметр «Ключ» функции ОткрытьФорму на клиенте. Если документ не найден, метод вернёт пустую ссылку — проверьте это перед открытием.

Можно ли открыть форму документа из обработки, запущенной через «Файл — Открыть»?

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

Почему ОткрытьФорму открывает форму списка вместо формы документа?

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

Как открыть документ только для просмотра, без возможности редактирования?

Передайте в параметрах формы структуру с ключом «ТолькоПросмотр» и значением Истина: ПараметрыФормы.Вставить("ТолькоПросмотр", Истина). Это стандартный параметр управляемых форм, он блокирует редактирование элементов формы.

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

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