Как вывести поле ресурса только в общих итогах кросс-таблицы в 1С СКД?

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

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

Метод 1. Настройка выражения ресурса «Рассчитывать по...»

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

Рассмотрим порядок действий:

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

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

Метод 2. Управление выбранными полями в структуре отчета

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

Выполним следующие шаги в настройках отчета:

  1. Перейдем на вкладку «Настройки», затем на вложенную вкладку «Структура».
  2. Выберем группировку «Колонки» (например, поле ПериодМесяц).
  3. В правой части окна перейдем на вкладку «Выбранные поля» этой конкретной группировки.
  4. Снимем флаг «Использовать родительские настройки» (или уберем галку с «Авто»).
  5. Вручную добавим только те поля, которые должны повторяться ежемесячно: например, СуммаВзаиморасчетовПриходЛ и ФрахтСтавкаЛ. Важно: поле остатка сюда добавлять не нужно.
  6. Теперь выделим в дереве структуры самый верхний элемент — «Отчет» или саму «Таблицу».
  7. Перейдем на ее вкладку «Выбранные поля» и добавим туда наш ресурс СуммаВзаиморасчетовКонечныйОстатокЛ.

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

Метод 3. Исправление некорректного суммирования остатков

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

Давайте выясним причину и исправим ее:

В наборе данных для поля остатка нужно настроить роль «Остатки». Для этого:

  1. Перейдем на закладку «Набор данных».
  2. В строке поля остатка нажмем на колонку «Роль».
  3. Установим тип «Остатки».
  4. Укажем «Имя группы» (любое понятное имя, объединяющее начальный и конечный остатки этого типа).
  5. Укажем поле периода (например, ПериодМесяц).

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

Метод 4. Использование объединения в запросе и связь наборов данных

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

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


ВЫБРАТЬ
    ВТ_Оплаты.ПериодМесяц КАК ПериодМесяцЛ,
    ВТ_Оплаты.СуммаВзаиморасчетовПриход КАК СуммаВзаиморасчетовПриходЛ,
    0 КАК ФрахтСтавкаЛ,
    ВТ_Оплаты.Контрагент КАК КонтрагентЛ,
    ВТ_Оплаты.СуммаВзаиморасчетовКонечныйОстаток КАК СуммаВзаиморасчетовКонечныйОстатокЛ
ИЗ
    ВТ_Оплаты КАК ВТ_Оплаты
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
    ВТЛ.Дата,
    0,
    ВТЛ.ИтогСумма,
    ВТЛ.ПрямойВладелецТранспорта,
    0
ИЗ
    ВТЛ КАК ВТЛ

Чтобы этот запрос корректно работал с остатками в СКД, рекомендуется использовать не один запрос с объединением, а два разных набора данных:

  1. Первый набор — для оборотных данных (Приход, Расход, Фрахт).
  2. Второй набор — для получения остатка на конечную дату отчета (без разреза по месяцам).

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

Метод 5. Визуальный «хак» через условное оформление

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

Разберем, как скрыть текст в ненужных ячейках:

  1. В настройках отчета перейдем на вкладку «Условное оформление».
  2. Добавим новый элемент оформления.
  3. В поле «Оформление» установим параметр «Текст» и оставим его пустым (или установим «Видимость» = Ложь).
  4. В поле «Условие» укажем: ПериодМесяц Заполнено.
  5. В «Оформляемых полях» выберем наш ресурс остатка.

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

Выводы и рекомендации

Для решения задачи «вывода поля только в итогах» мы рекомендуем придерживаться следующей последовательности:

Применяя эти подходы, мы получим профессионально оформленный отчет, в котором детальная информация по периодам не перемешивается с итоговыми показателями остатков.

← На главную