Почему не отображается вычисляемое поле в отчете на СКД и как это исправить

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

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

Основные причины проблемы

Рассмотрим, почему вычисляемое поле может «теряться» при выводе отчета:

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

Способ 1. Доработка программного кода отчета (Модуль менеджера / Модуль объекта)

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

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

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

Пример перехвата компоновки в модуле объекта:


Процедура ПриКомпоновкеРезультата(ИзмерительОтчета, СхемаКомпоновкиДанных, Настройки, ИсполняемаяСхема)
    
    // Включаем или корректируем вывод созданного поля в настройках компоновщика
    ПолеСрокОплаты = Новый КомпоновкаДанныхПоле("СрокОплаты");
    
    // Дополнительная программная обработка параметров или текста запроса
    
КонецПроцедуры

Способ 2. Сброс пользовательских настроек отчета

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

  1. Откроем отчет в режиме «1С:Предприятие».
  2. Нажмем кнопку «Еще» в правой верхней части формы отчета.
  3. Выберем пункт «Установить стандартные настройки».
  4. Переформируем отчет и проверим появление вычисляемого поля.

Способ 3. Использование экспортных функций в вычисляемых полях

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

Если для расчета вычисляемого поля используется функция общего модуля, модуль должен быть экспортным и с установленными флагами вызова. В выражении вычисляемого поля синтаксис вызова выглядит следующим образом:

ИмяМодуляСервер.РассчитатьДатуОплаты(Документ.Дата, Договор.СрокОплаты)

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

Рекомендации по доработке типовых конфигураций

Чтобы сохранить типовую конфигурацию на поддержке при добавлении вычисляемых полей в отчеты:

  1. Используйте расширения конфигурации: Дорабатывайте схему СКД и перехватывайте процедуру ПриКомпоновкеРезультата в расширении с помощью аннотации &Вместе или &После.
  2. Создание внешнего отчета: Если изменения масштабны, сохраните типовой отчет как внешний (файл .erf), внесите правки в модуль и схему, после чего подключите его через справочник «Дополнительные отчеты и обработки».
← На главную