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

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

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

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

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

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

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

Открытие формы документа через интерфейс

Базовый сценарий для пользователя: откройте раздел, к которому относится документ (например, «Продажи» или «Покупки»), и выберите пункт с названием журнала документов — «Реализация товаров и услуг», «Поступление товаров и услуг» и т.п. Откроется форма списка. Двойной клик по строке или кнопка «Изменить» открывает форму выбранного документа.

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

Если нужного документа нет в меню, используйте поиск: нажмите на значок лупы в правом верхнем углу окна или сочетание клавиш Ctrl+F в открытом списке. Также в большинстве конфигураций работает глобальный поиск по строке в панели навигации — введите номер документа, и система найдёт его.

Как открыть документ пользователю
  1. 1
    Откройте раздел учёта и выберите журнал нужного вида документов
  2. 2
    Найдите документ в списке через отбор, поиск или прокрутку
  3. 3
    Дважды кликните по строке или нажмите «Изменить» — откроется форма документа
  4. 4
    Для нового документа нажмите «Создать», заполните реквизиты и запишите
  5. 5
    Проверьте результат: документ появился в списке, номер и дата присвоены

Открытие формы по ссылке и из других объектов

Часто форма документа открывается не из списка, а из связанного места: из отчёта, из другого документа (например, счёта-фактуры по гиперссылке), из обработки или из истории изменений. В управляемом интерфейсе любая ссылка на документ отображается как кликабельная строка — один клик по ней открывает форму этого документа.

Если у вас есть навигационная ссылка вида e1cib/data/Документ.РеализацияТоваровУслуг?ref=..., её можно вставить в адресную строку браузера (при работе через веб-клиент) или открыть через «Файл → Открыть» / диалог перехода по ссылке в тонком клиенте. Получить такую ссылку можно командой «Получить ссылку» в меню «Ещё» открытого документа.

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

Программное открытие формы: метод ОткрытьФорму

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

&НаКлиенте

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

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

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

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

ПараметрыФормы);

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

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

Чтобы открыть форму нового документа с предзаполнением, используют структуру ЗначенияЗаполнения:

&НаКлиенте

Процедура СоздатьНаОсновании(Команда)

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

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

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

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

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

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

ПараметрыФормы, ЭтотОбъект, Новый УникальныйИдентификатор);

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

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

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

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

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

&НаКлиенте

Процедура ОткрытьСОповещением(Команда)

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

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

ПараметрыФормы, ЭтотОбъект, , , , Оповещение,

РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

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

&НаКлиенте

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

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

// обработка результата

КонецЕсли;

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

Параметр РежимОткрытияОкнаФормы.БлокироватьОкноВладельца делает форму псевдомодальной: пользователь не сможет переключиться на родительское окно, пока не закроет форму документа. Это нужно для сценариев мастеров и последовательного ввода данных.

Дополнительно в форме документа можно программно вызвать ОповеститьОВыборе(Значение) при закрытии — тогда в параметр Результат обработчика попадёт переданное значение, например ссылка на записанный документ.

Открытие формы в обычном приложении и на сервере

В обычном приложении (старые конфигурации на платформе 8.2/8.3 в режиме обычных форм) вместо ОткрытьФорму используется ПолучитьФорму:

ФормаДокумента = ДокументСсылка.ПолучитьОбъект().ПолучитьФорму("ФормаДокумента");

ФормаДокумента.Открыть();

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

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

Сравнение способов открытия

ОткрытьФорму с параметром Ключ

Основной способ в управляемом приложении; позволяет передать параметры, владельца и оповещение. Требует точного имени формы.

ОткрытьЗначение(Ссылка)

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

ПолучитьФорму

Только обычное приложение. Даёт доступ к объекту формы до открытия, но не работает в управляемом режиме.

Навигационная ссылка e1cib

Открывает документ без программирования, подходит для веб-клиента. Требует прав у пользователя и той же базы.

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

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

Ошибка «Нарушение прав доступа» возникает, когда у пользователя нет права «Просмотр» или «Интерактивное добавление» на этот вид документов. Форма может открыться, но поля будут недоступны или появится сообщение при записи. Решение — настройка ролей в конфигураторе или профилей групп доступа в типовых конфигурациях.

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

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

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

Форма открылась с нужным документом
Норма

Номер, дата и реквизиты соответствуют переданной ссылке

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

Форма пустая или открылся новый документ — проверьте параметр «Ключ»

Запись документа из открытой формы
Норма

Документ проводится, появляется в списке, движения формируются

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

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

Закрытие формы с оповещением
Норма

Обработчик ПослеЗакрытия срабатывает, результат передан

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

Обработчик не вызывается — проверьте, что описание оповещения передано именно в ОткрытьФорму

FAQ

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

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

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

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

Почему форма открывается только для чтения?

Чаще всего передан параметр ТолькоПросмотр = Истина в структуре параметров, либо у пользователя нет права «Изменение» на этот вид документов. Также документ может быть заблокирован другим сеансом, который редактирует его в данный момент.

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

Вызовите ОткрытьФорму("Документ.ИмяДокумента.ФормаСписка", Параметры), где в параметрах передайте структуру Отбор — например, Новый Структура("Отбор", Новый Структура("Контрагент", КонтрагентСсылка)). Список откроется уже отфильтрованным.

Чем отличается «Записать» от «Провести» в открытой форме?

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

Как открыть форму нового документа с копированием существующего?

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

Итог

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

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