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