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

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

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

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

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

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

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

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

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

Если документов много, используйте поиск: кнопка «Найти» (Ctrl+F) в форме списка ищет по номеру, контрагенту, комментарию. Также работает быстрый поиск по началу набора — достаточно начать вводить номер документа, когда фокус стоит в списке.

Ещё один путь — журналы документов. Журнал объединяет несколько видов документов (например, «Складские документы»), и из него любая строка открывается в своей форме объекта. Это удобно, когда вы помните дату и контрагента, но не вид документа.

Через «Ещё» и связанные объекты

Из открытого документа можно перейти к связанным: в управляемых формах есть панель «Связанные документы» или команда «Структура подчинённости» в меню «Ещё». Она показывает дерево оснований и подчинённых документов, и двойной щелчок по узлу открывает нужную форму.

Программное открытие: ОткрытьЗначение

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

&НаКлиенте

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

СсылкаНаДокумент = ПолучитьСсылку(); // ваша логика получения ссылки

ОткрытьЗначение(СсылкаНаДокумент);

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

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

Открытие через ОткрытьФорму с параметрами

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

&НаКлиенте

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

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

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

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

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

Для создания нового документа с заполненными реквизитами используйте параметр «ЗначенияЗаполнения»:

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

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

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

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

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

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

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

Открытие с ожиданием закрытия

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

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

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

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

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

Открытие формы списка с отбором

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

Отбор = Новый Структура;

Отбор.Вставить("Контрагент", ВыбранныйКонтрагент);

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

ПараметрыФормы.Вставить("Отбор", Отбор);

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

Отбор через параметры работает только по полям, для которых в динамическом списке разрешён отбор. Если поле недоступно, отбор молча не применится или форма покажет все записи — это одна из самых частых причин «не работает отбор».

Маршрут решения

Как выбрать способ открытия

Нужно просто показать существующий документОткрытьЗначение(Ссылка) — минимум кода
Нужно передать параметры или открыть неосновную формуОткрытьФорму с параметром «Ключ» и полным именем формы
Нужен новый документ с заполненными реквизитамиОткрытьФорму с параметром «ЗначенияЗаполнения»
Нужен результат после закрытия формыОткрытьФорму с ОписаниеОповещения и режимом БлокироватьОкноВладельца
Нужно показать несколько документов по условиюФорма списка с параметром «Отбор»

Особые случаи: ввод на основании и блокировка

Для ввода документа на основании другого передайте параметр «Основание». Платформа вызовет обработчик «ОбработкаЗаполнения» нового объекта и передаст туда основание:

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

ПараметрыФормы.Вставить("Основание", СсылкаНаЗаказ);

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

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

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

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

Вторая — неверное имя формы. Если форма называется «ФормаДокументаРасширенная», а в коде указано «ФормаДокумента», возникнет ошибка «Форма не найдена». Точные имена форм смотрите в конфигураторе в дереве объекта, ветка «Формы».

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

Четвёртая — отбор по полю, недоступному для отбора в динамическом списке. Форма откроется, но покажет все записи. Проверяйте настройки динамического списка в форме списка.

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

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

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

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

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

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

Заголовок открытой формы
Норма

Содержит номер и дату нужного документа

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

Пометка «(создание)» — открыт новый объект, не передан «Ключ»

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

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

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

Поля пустые — ОбработкаЗаполнения не обрабатывает параметр

Список с отбором
Норма

Видны только документы по условию

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

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

FAQ

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

В веб-клиенте и тонком клиенте можно получить навигационную ссылку: в форме документа меню «Ещё» → «Получить ссылку» (или Ctrl+F11). Полученную ссылку вида e1cib/data/Документ.Имя?ref=... можно вставить в адресную строку браузера при работе через веб-сервер или передать коллеге — платформа откроет форму этого объекта.

Как открыть форму документа только для просмотра?

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

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

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

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

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

Чем ОткрытьФормуМодально отличается от ОткрытьФорму с блокировкой?

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

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

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

Итог

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

Существующий документ открывается только с параметром «Ключ», новый — с «ЗначенияЗаполнения» или «Основание». Открытие выполняется на клиенте, ссылку получайте на сервере. Для списков используйте параметр «Отбор» и проверяйте доступность полей отбора в динамическом списке.