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