Как правильно выводить строки табличной части в печатную форму 1С?

Программист 1С v8.3 (Обычные формы)
← На главную

При разработке печатных форм в 1С:Предприятие часто возникает задача вывода данных из табличной части в область, расположенную рядом с другими секциями документа. Одной из наиболее частых ошибок является некорректное использование методов Вывести и Присоединить, из-за чего строки начинают «расползаться» горизонтально вместо формирования вертикального списка.

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

Разбор причины возникновения проблемы

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

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

Решение 1: Использование вспомогательного табличного документа

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

Разберем этот подход по шагам:

  1. Создадим пустой табличный документ НовыйТабДок.
  2. В цикле обхода данных выведем строки в НовыйТабДок методом Вывести.
  3. Вставим сформированную область в основной документ с помощью метода ВставитьОбласть.

Пример реализации:


НовыйТабДок = Новый ТабличныйДокумент;
Пока ВыборкаШапка.Следующий() Цикл
    ОбластьШапкаВторая.Параметры.Исполнитель = ВыборкаШапка.Исполнитель;
    ОбластьШапкаВторая.Параметры.КоэффициентУчастия = ВыборкаШапка.КоэффициентУчастия;
    НовыйТабДок.Вывести(ОбластьШапкаВторая);
КонецЦикла;

// Вставка сформированного блока в основной документ
ТабДок.ВставитьОбласть(НовыйТабДок.Область(1, 1, НовыйТабДок.ВысотаТаблицы, НовыйТабДок.ШиринаТаблицы), 
    ТабДок.Область(НачальнаяСтрока, НачальнаяКолонка), 
    ТипСмещенияТабличногоДокумента.БезСмещения);

Решение 2: Оптимизация структуры макета

Часто проблема кроется в самой структуре макета. Если область макета спроектирована как пересечение нескольких вертикальных и горизонтальных зон, управлять выводом становится сложно. Рассмотрим рекомендации по правильному проектированию:

В примере из практики, после уточнения области макета (например, Макет.ПолучитьОбласть("НоваяОбласть|Область2")) и использования отдельного табличного документа для цикла, вывод данных стал корректным:


// Сначала выводим заголовочную часть
ТабДок.Вывести(ОбластьЗаголовок);
ТабДок.Присоединить(Область_Шапка_Область1);

// Далее обрабатываем циклом список строк
НовыйТабДок = Новый ТабличныйДокумент;
Пока ВыборкаШапка.Следующий() Цикл
    ОбластьШапкаВторая.Параметры.Исполнитель = ВыборкаШапка.Исполнитель;
    // ... заполнение параметров
    НовыйТабДок.Вывести(ОбластьШапкаВторая);
КонецЦикла;

Итоговые советы по работе с печатными формами

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

1. Планируйте макет заранее. Если вы знаете, что табличная часть будет большой, выделите под нее отдельную строку в макете. Это позволит выводить данные простым методом Вывести, не прибегая к сложным операциям.

2. Проверяйте выводимые объекты. Если при выводе области Сереня затирает Мишаню, проверьте, не используете ли вы одну и ту же область объекта ТабличныйДокумент без сдвига по вертикали.

3. Отладка. Всегда используйте отладчик, чтобы посмотреть ВысотуТаблицы и ШиринуТаблицы после каждого метода Вывести или Присоединить. Это поможет наглядно увидеть, в какой момент «разрушается» структура документа.

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

← На главную