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