Как вывести отдельную колонку с итогами (остатком) без дублирования в кросс-таблице СКД?

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

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

Проблема заключается в том, что если мы просто добавим поле Остаток в ресурсы, СКД продублирует его для каждой колонки «Зона доставки». В итоге отчет будет выглядеть перегруженным и некорректным. Рассмотрим подробно несколько изящных и эффективных способов, как решить эту проблему и вывести остатки один раз без лишнего дублирования.

Способ 1. Тонкая настройка вкладки «Ресурсы» (Поле «Рассчитывать по...»)

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

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

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

Способ 2. Использование параллельных группировок колонок

Проанализируем ситуацию, когда остаток нужно вывести строго отдельным блоком колонок в конце таблицы. В этом случае мы можем настроить структуру кросс-таблицы особым образом.

  1. В структуре отчета создайте кросс-таблицу (Таблица). Строки — Номенклатура.
  2. В раздел Колонки добавьте группировку по вашему полю ЗонаДоставки. Перейдите в настройки этой группировки (вкладка «Выбранные поля») и оставьте там только ресурс с количеством. Ресурс Остаток оттуда нужно удалить.
  3. На том же уровне в разделе Колонки добавьте еще одну группировку. Оставьте поле группировки пустым (создастся группировка «Детальные записи»).
  4. В настройках этой пустой группировки перейдите на вкладку «Выбранные поля» и выберите только ресурс Остаток.

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

Способ 3. Вывод поля в качестве реквизита строки

Если для вас не принципиально, чтобы колонка находилась в самом конце отчета (справа), рассмотрим более простой подход. Мы можем вывести остаток слева, как дополнительную информацию к самой номенклатуре.

  1. Удалите поле Остаток из вкладки Ресурсы, чтобы СКД не пыталась разносить его по матрице кросс-таблицы.
  2. В настройках структуры отчета выделите группировку строк (в нашем примере это Номенклатура).
  3. Перейдите на вкладку Выбранные поля для этой конкретной группировки.
  4. Добавьте туда поля: Номенклатура и Остаток.

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

Способ 4. Использование функции СКД Вычислить()

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

  1. Перейдите на вкладку Вычисляемые поля и добавьте новое поле, назовем его ОстатокИтог.
  2. В колонке Выражение пропишите формулу с использованием функции Вычислить(): Вычислить("Сумма(Остаток)", "Номенклатура")
  3. Исходное поле Остаток в ресурсы добавлять не нужно.
  4. Добавьте новое поле ОстатокИтог в ресурсы и настройте его вывод.

Функция заставит систему вычислять итог исключительно в разрезе номенклатуры, игнорируя детализацию по зонам.

Способ 5. Оформление через макеты СКД

Если ни один из типовых способов компоновки не дает нужного визуального результата, всегда остается универсальный инструмент — пользовательские макеты.

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

← На главную