Как добавить реквизит регистратора в отчет на СКД, не нарушив расчет остатков?

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

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

Почему возникают ошибки при добавлении полей?

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

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

Способ 1: Вывод через «Выбранные поля»

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

Для реализации этого метода:

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

Важно: Учитывайте, что использование конструкции Регистратор.ДатаПлатежа на составном типе данных может вызвать снижение производительности, так как система будет проверять все таблицы документов. Для оптимизации используйте выражение ВЫРАЗИТЬ в самом запросе:


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

Способ 2: Использование ресурсов с ограничением

Если необходимо, чтобы поле вело себя как ресурс (например, для корректного отображения в итогах или группировках), воспользуйтесь функцией МАКСИМУМ. Это позволит избежать ошибки с расчетом среднего арифметического.

Разберем шаги настройки:

  1. Добавьте поле ДатаПлатежа в список ресурсов на вкладке Ресурсы.
  2. В колонке Выражение напишите: МАКСИМУМ(ДатаПлатежа).
  3. В колонке Рассчитывать по... обязательно выберите только группировку Регистратор.

Такой подход гарантирует, что для группировок по регистратору значение будет выведено, а для более высоких уровней (например, по контрагенту) значение будет пустым или корректно агрегированным, не ломая при этом общие итоги по остаткам.

Рекомендации по оптимизации

При работе с регистраторами всегда помните о следующих моментах:

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

← На главную