Как исправить искажение оформления в СКД при добавлении вложенной схемы

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

Работа с механизмом компоновки данных (СКД) часто преподносит сюрпризы, особенно когда мы начинаем использовать вложенные схемы. Одной из распространенных проблем является ситуация, когда после добавления вложенного отчета визуальное оформление основной схемы «плывет»: заголовки группировок растягиваются, появляются лишние пустые ячейки, а привычный макет оформления (например, «Море» или «Арктика») начинает отображаться некорректно. Разберем подробно, почему это происходит и как вернуть отчету аккуратный вид.

Анализ проблемы: почему «плывет» макет

Когда мы добавляем вложенную схему в структуру основного отчета, система компоновки данных пытается объединить две разные структуры в одну общую таблицу (ТабличныйДокумент). Процессор компоновки рассчитывает сетку колонок исходя из максимальных потребностей обеих схем. Если во вложенной схеме количество полей, их ширина или настройки расположения отличаются от родительской, СКД вынуждена «растягивать» ячейки верхних уровней (например, Организация или Контрагент), чтобы сохранить целостность таблицы.

Чаще всего искажения проявляются на первых уровнях группировок. Это происходит из-за того, что система пытается втиснуть данные вложенного отчета в ту же иерархию колонок, которую занимают ресурсы и реквизиты основных группировок.

Решение 1: Изменение параметра «Тип макета» группировки

Наиболее эффективным способом борьбы с «разъезжающимся» оформлением является управление типом макета конкретной группировки. Проанализируем, как это настроить:

  1. Откроем основную схему компоновки данных и перейдем на вкладку Настройки.
  2. В дереве настроек выберем группировку, которая визуально искажается (например, Организация или Контрагент).
  3. В нижней части окна перейдем на вкладку Другие настройки.
  4. Найдем параметр Тип макета.
  5. Установим значение Горизонтально.

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

Решение 2: Настройка расположения ресурсов и реквизитов

Если первый способ не помог в полной мере, проанализируем настройки расположения данных. Конфликт часто возникает, когда ресурсы или дополнительные реквизиты (ИНН, КПП и т.д.) пытаются занять те же колонки, что и поля вложенной схемы.

Рассмотрим шаги по оптимизации:

  1. Для проблемных группировок (Организация, Контрагент) в Других настройках проверим параметр Расположение ресурсов. По умолчанию стоит «Авто», попробуем принудительно установить Горизонтально или В колонках по отдельности.
  2. Проанализируем параметр Расположение реквизитов. Если установлено «Вместе с владельцем», СКД создает сложные объединенные ячейки. Попробуем изменить на Отдельно. Это создаст для каждого реквизита свою колонку, что упростит расчет сетки для процессора компоновки и исключит «эффект домино» при изменении ширины вложенных полей.

Решение 3: Вертикальное расположение вложенного отчета

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

Попробуем установить для группировки, содержащей вложенную схему, параметр Расположение группировок в значение Конец или использовать Тип макета — Вертикально. В этом случае вложенный отчет будет выводиться отдельным блоком строк под основной строкой группировки, не влияя на ширину колонок заголовка Организация.

Решение 4: Синхронизация макетов оформления и очистка кэша

Иногда проблема кроется в том, что макет оформления (например, «Море») применяется к основной схеме, но игнорируется для вложенной. Рассмотрим рекомендации по синхронизации:

Технические нюансы программной работы

Если вы формируете отчет программно, обратите внимание на объект КомпоновщикМакетаКомпоновкиДанных. При генерации макета для схемы с вложенными схемами важно передавать корректные настройки в метод Выполнить(). Рассмотрим пример упрощенной логики инициализации компоновки:


// Пример программного формирования с учетом вложенных схем
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина);

Обратите внимание на последний параметр Истина в методе Инициализировать — он отвечает за возможность использования внешних функций, но также влияет на то, как процессор обрабатывает вложенные структуры данных.

Подводя итог: «плывущее» оформление — это результат автоматической попытки СКД оптимизировать ширину колонок под все уровни иерархии сразу. Использование настройки Тип макета — Горизонтально и разнесение реквизитов в отдельные колонки в большинстве случаев решают проблему визуального искажения.

← На главную