Как доработать внешний отчет на СКД: добавление рассчитываемого поля и решение проблем с расширениями

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

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

Анализ проблемы: почему возникают ошибки в Конфигураторе

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

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

Реализация расчета поля Просрочено

Допустим, нам необходимо добавить поле Просрочено, которое будет выводить соответствующий текст, если с даты документа прошло более 30 дней относительно текущей даты. Рассмотрим, как реализовать это наиболее эффективно.

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

  1. Переходим на закладку «Рассчитываемые поля».
  2. Добавляем новое поле с именем Просрочено.
  3. В колонке «Выражение» прописываем логику. Нам потребуется функция РазностьДат и оператор ВЫБОР.

Пример выражения для рассчитываемого поля:


Выбор 
    Когда РазностьДат(Дата, &ТекущаяДата, "ДЕНЬ") >= 30 
    Тогда "Просрочено" 
    Иначе "" 
Конец

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

ТекущаяДата() или КонецПериода(ТекущаяДата(), "День").

Почему изменения не отображаются в режиме Предприятия

Часто возникает ситуация: программист внес правки в файл .erf, сохранил его, открыл через «Файл — Открыть», но новых полей нет или настройки остались старыми. Разберем основные причины этого явления.

1. Использование справочника «Дополнительные отчеты и обработки»

В современных конфигурациях (УТ 11, ERP, БП 3.0), построенных на БСП, внешние отчеты обычно регистрируются в специальном справочнике. Программа хранит двоичные данные отчета прямо в базе данных. Если вы просто отредактировали файл на диске, система об этом не узнает. Проанализируем порядок действий для обновления:

  1. Зайдем в раздел «Администрирование» — «Печатные формы, отчеты и обработки».
  2. Откроем список «Дополнительные отчеты и обработки».
  3. Найдем наш отчет «Отчет по дебиторской задолженности».
  4. Нажмем кнопку «Обновить из файла» и выберем наш отредактированный .erf.
  5. Запишем изменения.

2. Кэширование настроек пользователя

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

Работа с запросом при наличии ошибок метаданных

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

Рассмотрим пример добавления поля в текст запроса вручную:


ВЫБРАТЬ
    Продажи.Контрагент КАК Контрагент,
    Продажи.СуммаОборота КАК Сумма,
    Продажи.Заказ.Дата КАК Дата,
    // Добавляем поле для последующего использования в СКД
    "Просрочено" КАК ПолеЗаглушка
ИЗ
    РегистрНакопления.Продажи.Обороты КАК Продажи

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

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

← На главную