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