Как в СКД вывести ресурсы регистра в строки, а даты в колонки

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

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

Анализ задачи и выбор метода решения

Рассмотрим ситуацию: имеется регистр сведений с измерениями Номенклатура и Дата, а также ресурсами Ресурс1, Ресурс2 и Ресурс3. Стандартная таблица СКД выведет ресурсы в шапке рядом. Чтобы «развернуть» их в строки (сделать операцию Unpivot), нам необходимо привести данные к плоскому виду, где название ресурса само станет значением отдельного поля. Наиболее эффективным и производительным методом для этого в 1С является использование объединения запросов (ОБЪЕДИНИТЬ ВСЕ).

Шаг 1: Подготовка набора данных в запросе

Проанализируем структуру нашего запроса. Вместо того чтобы просто выбрать все поля из регистра, мы создадим три отдельных ветки запроса, которые «склеим» в одну таблицу. Каждая ветка будет отвечать за свой ресурс.

Рассмотрим пример построения такого запроса:


ВЫБРАТЬ
    "Ресурс 1" КАК ИмяРесурса,
    Номенклатура,
    Период КАК Дата,
    Ресурс1 КАК Значение
ИЗ
    РегистрСведений.НашРегистр КАК НашРегистр

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Ресурс 2",
    Номенклатура,
    Период,
    Ресурс2
ИЗ
    РегистрСведений.НашРегистр КАК НашРегистр

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Ресурс 3",
    Номенклатура,
    Период,
    Ресурс3
ИЗ
    РегистрСведений.НашРегистр КАК НашРегистр

Что мы здесь сделали? Мы ввели искусственное поле ИмяРесурса, в которое вручную вписали строковое название показателя. Теперь для системы компоновки данных это просто еще одно измерение, по которому можно делать группировку в строках.

Шаг 2: Настройка ресурсов СКД

Перейдем на закладку «Ресурсы» в схеме компоновки данных. Нам нужно указать системе, как агрегировать наши числовые показатели. Несмотря на то, что в запросе мы назвали поле просто Значение, оно содержит данные из всех трех исходных ресурсов.

  1. Перенесите поле Значение в список ресурсов.
  2. Убедитесь, что в колонке «Выражение» установлена функция СУММА(Значение).
  3. В колонке «Рассчитывать по...» оставьте поле пустым, чтобы итоги считались по всем группировкам.

Шаг 3: Настройка структуры отчета (Кросс-таблица)

Теперь перейдем на закладку «Настройки». Здесь мы определим визуальный облик нашего отчета. Нам понадобится элемент типа «Таблица».

Разберем по шагам создание структуры:

  1. Создадим новую таблицу в корне настроек.
  2. Строки таблицы:
    • Добавим группировку по полю ИмяРесурса. Это позволит нам вывести «Ресурс 1», «Ресурс 2» и «Ресурс 3» как отдельные блоки строк.
    • Внутри группировки ИмяРесурса добавим вложенную группировку по полю Номенклатура.
  3. Колонки таблицы:
    • Добавим группировку по полю Дата.
  4. Выбранные поля:
    • В детальных записях или в настройках самой таблицы выберем только поле Значение.

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

Шаг 4: Автоматическое дополнение периодов

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

  1. В настройках колонок (группировка Дата) выделите поле и нажмите кнопку «Детальные настройки» (внизу).
  2. Перейдите на вкладку «Параметры редактирования».
  3. Найдите параметр «Тип дополнения» и выберите «Месяц» (или «День», в зависимости от задачи).
  4. Установите параметры «Начало периода дополнения» и «Конец периода дополнения», привязав их к стандартным параметрам отчета НачалоПериода и КонецПериода.

Важный момент: Чтобы дополнение работало корректно, убедитесь, что в самом запросе или в настройках поля Дата на уровне набора данных указан тип значения «Дата».

Шаг 5: Оформление и форматирование дат

Чтобы в шапке отчета вместо длинной даты «01.01.2023 00:00:00» отображалось краткое название месяца, проанализируем настройки оформления.

Для поля Дата в группировке колонок установим Формат:

Преимущества использования СКД перед ручным рисованием макета

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

Таким образом, использование ОБЪЕДИНИТЬ ВСЕ в связке с кросс-таблицей является золотым стандартом для решения задач трансформации данных в 1С. Мы получаем мощный, масштабируемый и легкий в поддержке инструмент.

← На главную