Как объединить колонки с одинаковыми датами в СКД?

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

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

Причина возникновения дублирующихся колонок

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

Визуально вы видите «01.01.2023» в заголовке, но для процессора компоновки это «01.01.2023 10:25:01» и «01.01.2023 14:15:30». Система не может объединить их автоматически, так как эти значения не равны друг другу.

Решение проблемы на уровне запроса

Самый надежный способ решить данную задачу — привести все даты к единому началу дня непосредственно в тексте запроса. Для этого мы используем функцию НАЧАЛОПЕРИОДА. Это позволит «отбросить» время и оставить только полночь того дня, к которому относится запись.

Разберем, как изменить запрос, чтобы данные группировались корректно:

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


ВЫБРАТЬ
    Остатки.Номенклатура,
    Остатки.Период КАК Дата,
    Остатки.КоличествоОстаток КАК Количество
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, ) КАК Остатки

Чтобы объединить все записи, относящиеся к одному дню, выполним следующие шаги:

  1. Применим функцию НАЧАЛОПЕРИОДА к полю периода.
  2. Используем оператор СГРУППИРОВАТЬ ПО для объединения количественных показателей.

Обновленный запрос будет выглядеть так:


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

Настройка СКД для вывода таблицы

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

Дополнительные рекомендации по диагностике

Если после внесения изменений в запрос колонки всё ещё разделены, проанализируйте следующие моменты:

  1. Проверка NULL: Если в поле даты попадают пустые значения, СКД может вывести их в отдельную колонку. Используйте конструкцию ЕСТЬNULL(ПолеДата, ДАТАВРЕМЯ(1, 1, 1)), чтобы привести все пустые даты к единому значению.
  2. Оформление: Иногда в макетах оформления СКД может быть задано специфическое условие вывода, которое принудительно разделяет ячейки. Проверьте вкладку «Макеты» в настройках СКД.
  3. Процессор компоновки: Если вы используете консоль компоновки данных, выведите результат запроса до вывода в отчет. Если в самом наборе данных уже несколько колонок с одинаковыми датами — значит, проблема в логике запроса (неправильная группировка или наличие лишних полей, которые делают строку уникальной).

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

← На главную