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