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