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