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

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

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

Проектирование набора данных (Запрос)

Первым шагом проанализируем структуру запроса. Чтобы вывести и обороты по неделям, и остатки в одной горизонтальной развертке, нам необходимо объединить эти данные. Рассмотрим пример структуры запроса с использованием ОБЪЕДИНИТЬ ВСЕ. Для корректной работы СКД важно, чтобы у записей оборотов и записей остатков были заполнены соответствующие поля периодов или специальные маркеры.


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

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

ВЫБРАТЬ
    Остатки.Номенклатура,
    ДАТАВРЕМЯ(1, 1, 1),
    0,
    0,
    Остатки.СуммаОстаток,
    0,
    "ОстатокЧ"
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(&КонецПериода, Счет = &СчетЧ, , ) КАК Остатки

Обратите внимание: для остатков мы можем использовать пустую дату или специальное поле-идентификатор ТипСтроки. Это поможет нам в дальнейшем разделить логику вывода в настройках компоновки.

Настройка структуры колонок в компоновщике

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

  1. Добавим в структуру отчета таблицу.
  2. В строках укажем группировку Номенклатура.
  3. В колонках создадим две отдельные группировки, расположенные на одном уровне (одна под другой в дереве настроек колонок).

Первая группировка колонок будет отвечать за периоды (недели). Мы выбираем поле Период. Вторая группировка будет отвечать за дополнительные колонки остатков. Чтобы они выводились корректно, можно сгруппировать их по детальным записям или по фиктивному полю.

Разный состав ресурсов для каждой группировки

Это ключевой момент решения. Выясним, как заставить СКД выводить в неделях «Количество» и «Сумму», а в остатках только «Остаток»:

  1. Выделим в дереве настроек первую группировку колонок (Период).
  2. В нижней части экрана перейдем на вкладку «Выбранные поля».
  3. Снимем флажок «Авто». Теперь эта группировка не будет наследовать общие поля отчета.
  4. Вручную перетащим в выбранные поля только Количество и Сумма.
  5. Аналогично выделим вторую группировку (для остатков). Снимем флаг «Авто» и добавим только поле ОстатокЧ (или другие нужные поля остатков).

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

Динамическая нумерация недель («Неделя 1», «Неделя 2»)

Рассмотрим, как заменить стандартный вывод даты (например, «01.01.2024») на дружелюбное название «Неделя 1», не прибегая к обработке табличного документа после вывода. Для этого воспользуемся механизмом вычисляемых полей.

Перейдем на вкладку «Вычисляемые поля» и добавим новое поле ПредставлениеНедели. В поле «Выражение» впишем следующую формулу:


"Неделя " + Строка(РазностьДат(&НачалоПериода, НачалоПериода(Период, "Неделя"), "Неделя") + 1)

Важный нюанс: чтобы недели сортировались правильно (чтобы «Неделя 10» не оказалась перед «Неделя 2»), необходимо настроить упорядочивание. В настройках этого вычисляемого поля укажите «Выражение упорядочивания» — само поле Период (дата начала недели). Тогда визуально пользователь увидит текст, а система будет сортировать колонки по дате.

Использование макетов для оформления заголовков

Если нам нужно более сложное оформление (например, объединение ячеек заголовка или специфический цвет), проанализируем возможности вкладки «Макеты». Мы можем создать «Макет группировки» для колонки Период.

  1. Добавим новый макет группировки.
  2. Укажем имя группировки, соответствующее нашим периодам.
  3. В области макета нарисуем шапку, как она должна выглядеть.
  4. В ячейку заголовка пропишем параметр, например ЗаголовокНедели, и свяжем его с нашим вычисляемым полем ПредставлениеНедели.

Это позволит системе динамически генерировать заголовки для каждой колонки периода, используя заданный нами шаблон оформления.

Скрытие пустых значений и итогов

Посмотрим на ситуацию, когда из-за объединения данных в колонках недель появляются пустые ячейки для остатков, и наоборот. Чтобы отчет выглядел профессионально, настроим Условное оформление:

Также не забудьте настроить Роли полей на вкладке «Наборы данных». Для поля Период должна быть установлена роль «Период» с соответствующим типом (Неделя), чтобы механизмы дополнения периодов СКД работали корректно. Если нам нужно, чтобы остатки выводились даже при отсутствии оборотов, убедитесь, что в настройках группировки периода включено «Дополнение периодов».

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

← На главную