При разработке печатных форм в 1С:Предприятие часто возникает задача вывода данных из табличной части в область, расположенную рядом с другими секциями документа. Одной из наиболее частых ошибок является некорректное использование методов Вывести и Присоединить, из-за чего строки начинают «расползаться» горизонтально вместо формирования вертикального списка.
Рассмотрим, как проанализировать и исправить эту ситуацию, чтобы печатная форма выглядела профессионально и корректно.
Проблема заключается в том, что метод Присоединить добавляет область в текущую строку табличного документа. Если внутри цикла по строкам табличной части вы используете Присоединить, то каждая новая строка данных просто приклеивается справа к предыдущей. В результате вместо таблицы вы получаете одну длинную «колбасу» из колонок.
Чтобы данные шли вертикально (друг под другом) внутри определенной колонки, необходимо либо выводить их в отдельный табличный документ, либо правильно разделять области макета на горизонтальные секции.
Если вам нужно вывести список строк в строго отведенное место, сохранив при этом общую структуру документа, самым надежным способом будет создание временного табличного документа.
Разберем этот подход по шагам:
НовыйТабДок.НовыйТабДок методом Вывести.ВставитьОбласть.Пример реализации:
НовыйТабДок = Новый ТабличныйДокумент;
Пока ВыборкаШапка.Следующий() Цикл
ОбластьШапкаВторая.Параметры.Исполнитель = ВыборкаШапка.Исполнитель;
ОбластьШапкаВторая.Параметры.КоэффициентУчастия = ВыборкаШапка.КоэффициентУчастия;
НовыйТабДок.Вывести(ОбластьШапкаВторая);
КонецЦикла;
// Вставка сформированного блока в основной документ
ТабДок.ВставитьОбласть(НовыйТабДок.Область(1, 1, НовыйТабДок.ВысотаТаблицы, НовыйТабДок.ШиринаТаблицы),
ТабДок.Область(НачальнаяСтрока, НачальнаяКолонка),
ТипСмещенияТабличногоДокумента.БезСмещения);
Часто проблема кроется в самой структуре макета. Если область макета спроектирована как пересечение нескольких вертикальных и горизонтальных зон, управлять выводом становится сложно. Рассмотрим рекомендации по правильному проектированию:
Шапка|Область2) с горизонтальными группами.В примере из практики, после уточнения области макета (например, Макет.ПолучитьОбласть("НоваяОбласть|Область2")) и использования отдельного табличного документа для цикла, вывод данных стал корректным:
// Сначала выводим заголовочную часть
ТабДок.Вывести(ОбластьЗаголовок);
ТабДок.Присоединить(Область_Шапка_Область1);
// Далее обрабатываем циклом список строк
НовыйТабДок = Новый ТабличныйДокумент;
Пока ВыборкаШапка.Следующий() Цикл
ОбластьШапкаВторая.Параметры.Исполнитель = ВыборкаШапка.Исполнитель;
// ... заполнение параметров
НовыйТабДок.Вывести(ОбластьШапкаВторая);
КонецЦикла;
Для того чтобы избежать подобных проблем в будущем, рекомендуем придерживаться следующих правил:
1. Планируйте макет заранее. Если вы знаете, что табличная часть будет большой, выделите под нее отдельную строку в макете. Это позволит выводить данные простым методом Вывести, не прибегая к сложным операциям.
2. Проверяйте выводимые объекты. Если при выводе области Сереня затирает Мишаню, проверьте, не используете ли вы одну и ту же область объекта ТабличныйДокумент без сдвига по вертикали.
3. Отладка. Всегда используйте отладчик, чтобы посмотреть ВысотуТаблицы и ШиринуТаблицы после каждого метода Вывести или Присоединить. Это поможет наглядно увидеть, в какой момент «разрушается» структура документа.
Следуя этим рекомендациям, вы сможете создавать сложные и гибкие печатные формы, которые будут работать корректно при любых объемах данных.