Как вывести макет табличного документа непосредственно на форму обработки в 1С:Управление торговлей 11

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

При разработке дополнительных обработок в 1С:Предприятие 8.3, особенно в таких современных конфигурациях, как Управление торговлей 11, часто возникает необходимость вывести результат работы (например, список несопоставленной номенклатуры) пользователю. Стандартный метод ТабличныйДокумент.Показать() открывает результат в новом модальном или блокирующем окне, что не всегда удобно для оперативной работы. Разберем, как интегрировать вывод макета прямо в интерфейс вашей формы.

Понимание разницы между объектом и реквизитом формы

Основная причина, по которой табличный документ открывается в новом окне, заключается в использовании конструктора Новый ТабличныйДокумент в программном коде. В этом случае система создает независимый объект, который не связан ни с одним элементом интерфейса. Чтобы отобразить данные внутри формы, нам нужно использовать Реквизит формы. Рассмотрим этот процесс по шагам.

Шаг 1. Создание реквизита и размещение его на форме

Для начала нам необходимо подготовить место для вывода данных в редакторе формы вашей обработки:

  1. Перейдем на вкладку Реквизиты в редакторе управляемой формы.
  2. Добавим новый реквизит, назовем его, например, РезультатВывода.
  3. В поле Тип выберем ТабличныйДокумент.
  4. Перетащим созданный реквизит РезультатВывода в левую часть редактора — в дерево Элементы. Система автоматически создаст элемент формы с типом Поле табличного документа.

Шаг 2. Программный вывод макета в реквизит формы

Теперь проанализируем, как изменить код вывода. Вместо создания нового объекта мы будем обращаться к уже существующему реквизиту формы. Важно помнить, что работа с макетом и формирование документа должны происходить на стороне сервера.

Рассмотрим пример кода:


&НаСервере
Процедура СформироватьОтчетНаСервере()
    
    // Получаем макет из объекта обработки
    Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("МакетНесопоставленнойНоменклатуры");
    
    // Обращаемся напрямую к реквизиту формы, который мы создали в Шаге 1
    // Предварительно очищаем его от старых данных
    ЭтаФорма.РезультатВывода.Очистить();
    
    // Получаем области макета и заполняем их
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
    
    // Выводим шапку
    ЭтаФорма.РезультатВывода.Вывести(ОбластьШапка);
    
    // Здесь может быть цикл по вашим данным
    Для Каждого ТекущаяСтрока Из Объект.ДанныеДляВывода Цикл
        ОбластьСтрока.Параметры.Заполнить(ТекущаяСтрока);
        ЭтаФорма.РезультатВывода.Вывести(ОбластьСтрока);
    КонецЦикла;
    
КонецПроцедуры

Шаг 3. Работа с несколькими страницами формы

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

Проанализируем ситуацию: если две страницы уже заняты, мы добавим третью специально для результата. Разберем, как сделать это максимально удобно для пользователя:

  1. Добавим в группу страниц (тип Группа - Страницы) новый элемент ГруппаРезультат.
  2. Разместим наше Поле табличного документа внутри этой новой группы.
  3. В коде после завершения формирования документа добавим команду переключения на эту страницу, чтобы пользователю не пришлось кликать по вкладкам вручную.

Пример программного переключения страниц:


&НаКлиенте
Процедура Сформировать(Команда)
    
    СформироватьОтчетНаСервере();
    
    // Переключаем фокус пользователя на страницу с результатом
    Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаРезультат;
    
КонецПроцедуры

Шаг 4. Настройка интерактивности и внешнего вида

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

Рекомендуется установить следующие параметры в процедуре формирования на сервере:

Пример настройки внешнего вида:


// Настройка отображения в той же процедуре на сервере
ЭтаФорма.РезультатВывода.ТолькоПросмотр = Истина;
ЭтаФорма.РезультатВывода.ОтображатьСетку = Ложь;
ЭтаФорма.РезультатВывода.ОтображатьЗаголовки = Ложь;

Шаг 5. Динамическое создание элементов (продвинутый уровень)

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


&НаСервере
Процедура СоздатьПолеВыводаПрограммно()
    
    // Проверяем, не создано ли поле ранее
    Если Элементы.Найти("РезультатВывода") = Неопределено Тогда
        
        // Создаем новую страницу в существующей панели страниц
        НоваяСтраница = Элементы.Добавить("СтраницаРезультат", Тип("ГруппаФормы"), Элементы.ПанельОсновная);
        НоваяСтраница.Вид = ВидГруппыФормы.Страница;
        НоваяСтраница.Заголовок = "Результат сопоставления";
        
        // Создаем само поле табличного документа
        НовоеПоле = Элементы.Добавить("РезультатВывода", Тип("ПолеФормы"), НоваяСтраница);
        НовоеПоле.Вид = ВидПоляФормы.ПолеТабличногоДокумента;
        НовоеПоле.ПутьКДанным = "РезультатВывода"; // Имя реквизита формы
        
    КонецЕсли;
    
КонецПроцедуры

Оптимизация работы в УТ 11

В типовой конфигурации Управление торговлей 11 активно используется Библиотека стандартных подсистем (БСП). Если ваша задача подразумевает не просто быстрый просмотр, а полноценную печать с возможностью сохранения в PDF или отправки по почте, рассмотрим возможность использования общей формы печати документов. Это позволит вам не рисовать свои поля на форме, а использовать стандартный интерфейс системы, вызвав функцию УправлениеПечатьюКлиент.ПечатьДокументов(). Однако для простых внутренних сверок размещение ТабличногоДокумента на форме остается самым быстрым и эффективным способом.

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

← На главную