Как правильно настроить вывод и сортировку по месяцам в отчетах СКД при использовании макетов оформлений

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

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

Выясняем причину: почему ломается сортировка месяцев?

Рассмотрим типичный ошибочный подход. Для получения названий месяцев разработчики часто пытаются преобразовать дату в строку или используют сложные конструкции с временными таблицами, где каждому числу месяца сопоставляется его текстовое имя (например, 1 — "Январь", 2 — "Февраль" и так далее).

Проанализируем, почему этот метод неэффективен:

  1. Алфавитная сортировка. Если поле периода становится строковым (содержит слова "Январь", "Февраль", "Март"), СКД при выводе в колонки кросс-таблицы отсортирует их по алфавиту: "Август", "Апрель", "Декабрь", "Июнь" и так далее. Это полностью искажает хронологию отчета.
  2. Сложность запроса. Создание искусственных таблиц сопряжений перегружает запрос и снижает производительность системы при работе с большими базами данных.

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

Решение проблемы правильного вывода периодов по шагам

Выполним правильную настройку получения и отображения месяцев. Сначала скорректируем наш запрос в схеме компоновки данных.

Шаг 1. Вместо выделения номера месяца через функцию МЕСЯЦ(), приведем дату к началу периода в запросе. Для этого используем стандартную функцию языка запросов 1С: НАЧАЛОПЕРИОДА() с параметром МЕСЯЦ. Это позволит сгруппировать все записи в пределах одного календарного месяца на одну дату (первое число этого месяца).

Рассмотрим пример запроса:


ВЫБРАТЬ
    НАЧАЛОПЕРИОДА(РеализацияТоваровУслуг.Дата, МЕСЯЦ) КАК ПериодМесяц,
    СУММА(РеализацияТоваровУслуг.СуммаДокумента) КАК СуммаДокумента
ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
    РеализацияТоваровУслуг.Дата >= &НачалоПериода
СГРУППИРОВАТЬ ПО
    НАЧАЛОПЕРИОДА(РеализацияТоваровУслуг.Дата, МЕСЯЦ)

Шаг 2. Настроим красивое отображение даты для пользователя. Перейдем на вкладку "Наборы данных" нашей схемы компоновки данных. Найдем поле ПериодМесяц. Здесь мы можем задать два важных свойства:

Обеспечиваем вывод пустых месяцев (дополнение периодов)

Если в информационной базе за какой-то месяц не было хозяйственных операций, в стандартном запросе этот месяц просто пропадет из колонок отчета. Чтобы не городить "костыли" в виде левых соединений со справочниками или временными таблицами месяцев, воспользуемся штатным механизмом СКД — дополнением периодов.

Разберем по шагам, как это сделать:

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

Теперь СКД автоматически сгенерирует колонки для каждого месяца в выбранном интервале, даже если в базе данных за этот период отсутствуют документы.

Особенности работы с макетами ресурсов и борьба со сдвигом колонок

Когда стандартного оформления СКД недостаточно, разработчики прибегают к созданию собственных макетов оформления на вкладке "Макеты". Однако, если мы рисуем индивидуальный макет для ресурсов кросс-таблицы, мы сталкиваемся с жестким ограничением платформы: структура колонок становится статичной.

Проанализируем поведение системы при использовании макетов ресурсов:

Если пользователь в режиме предприятия попытается отключить один из ресурсов в списке "Выбранные поля", сетка отчета может сломаться. Колонки начнут смещаться, а на месте отключенных показателей могут появиться пустые некрасивые области. Это происходит потому, что макет жестко привязан к конкретным именам ресурсов и структуре ячеек макета.

Если вам требуется высокая интерактивность отчета (чтобы пользователь мог свободно включать и выключать колонки показателей), не используйте индивидуальные макеты ресурсов. Вместо этого задействуйте условное оформление и стандартные настройки расположения ресурсов:

Как убрать слово "Итого" и исправить сдвиг сетки

Если макет оформления ресурсов все же необходим, и вы столкнулись с тем, что строки или колонки "съезжают" из-за вывода итоговых данных, выполним следующие действия:

  1. Отключение общих итогов. В настройках отчета на вкладке "Другие настройки" найдем параметры "Расположение общих итогов по горизонтали" и "Расположение общих итогов по вертикали". Установим их в значение "Нет". Это мгновенно уберет лишние строки и колонки "Итого", которые ломали жесткую структуру нашего макета.
  2. Прорисовка макетов для всех областей. Сдвиги и искажения макета при выводе итогов часто происходят из-за того, что разработчик нарисовал макет только для области "Данные". Если итоги в отчете все-таки нужны, необходимо на вкладке "Макеты" добавить и детально прорисовать макеты для областей "Заголовок", "Итог" и "Общий итог". Только тогда СКД сможет корректно сопоставить ячейки табличного документа.

Применяя эти проверенные подходы, мы получим быстроработающий, визуально аккуратный отчет в СКД с правильной хронологией месяцев и стабильной структурой вывода данных.

← На главную