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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Ограничения платформы 1С: встраивание форм и управление окнами

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

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

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

Альтернативный подход 1: Схема Master-Detail с динамическим созданием элементов

Рассмотрим вариант реализации единой управляемой формы по схеме Master-Detail. В этом случае слева размещается таблица или динамический список, а справа — пустая группа-контейнер, элементы которой создаются программно на сервере в зависимости от выбранного объекта.

Разберем алгоритм по шагам:

  1. Размещаем на форме горизонтальную группу ГруппаОсновная. Настраиваем в ней два блока: левый — СписокДокументов, правый — ГруппаКонтейнерДеталей.
  2. В событии динамического списка ПриАктивизацииСтроки вызываем серверную процедуру для обновления правой панели.
  3. На сервере считываем данные выбранного документа (или структуры анкеты/опроса) и программно создаем элементы интерфейса через методы ИзменитьРеквизиты() и Элементы.Добавить().

Посмотрим на пример кода обработки события активации строки:


&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
	
	ТекущиеДанные = Элемент.ТекущиеДанные;
	Если ТекущиеДанные <> Неопределено И ЗначениеЗаполнено(ТекущиеДанные.Ссылка) Тогда
		ОбновитьПанельДеталейНаСервере(ТекущиеДанные.Ссылка);
	КонецЕсли;

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

&НаСервере
Процедура ОбновитьПанельДеталейНаСервере(СсылкаНаДокумент)
	
	// 1. Очищаем ранее созданные динамические элементы в ГруппаКонтейнерДеталей
	// 2. Формируем массив удаляемых/добавляемых реквизитов формы через ИзменитьРеквизиты()
	// 3. Создаем элементы управления через Элементы.Добавить() и связываем их с реквизитами
	
КонецПроцедуры

Если вы работаете с подсимой Анкетирование из Библиотеки Стандартных Подсистем (БСП), можно использовать штатные серверные процедуры построения состава вопросов, передавая созданную группу формы в качестве родительского элемента.

Альтернативный подход 2: Использование поля HTML-документа

Выясним особенности использования HTML-контейнера. Если структура документа является сложносоставной или произвольной, в правой части управляемой формы можно разместить элемент управления с видом Поле HTML документа.

  1. На сервере на основании выбранного документа генерируется строка HTML-кода с визуальным оформлением данных (таблицы, поля ввода, форматированный текст).
  2. Сгенерированный HTML присваивается реквизиту формы, связанному с полем HTML-документа.
  3. Обработка действий пользователя в HTML-поле (например, нажатие на кнопки или гиперссылки) перехватывается в событии ПриНажатии поля HTML.

Этот подход гарантирует стабильную работу во всех клиентах: тонком клиенте под Windows и Linux, а также в веб-клиенте.

Альтернативный подход 3: Создание специализированного рабочего места

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

Для переключения между шагами документа или разделами анкеты используется элемент формы Страницы. При выборе объекта в левой части формы правая панель переключается на нужную страницу или программно заполняет данные на страницах текущей формы без вызова сторонних окон.

Итоги

Прямо встроить стандартную форму документа в форму списка или программно закрепить окно в интерфейсе Такси средствами языка 1С невозможно. Для решения этой задачи рекомендуется либо обучить пользователей визуальному закреплению окон, либо спроектировать единую форму с динамической генерацией элементов или полем HTML-документа.

← На главную