Как сохранить типовую расшифровку полей при создании внешних отчетов в 1С:Бухгалтерия?

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

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

Причина ошибки: «Поле объекта не обнаружено»

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


Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    БухгалтерскиеОтчетыКлиент.ОбработкаРасшифровкиСтандартногоОтчета(ЭтаФорма, Элемент, Расшифровка, СтандартнаяОбработка);
КонецПроцедуры

Далее управление передается на сервер в общий модуль БухгалтерскиеОтчетыВызовСервера. В функции ПолучитьПараметрыРасшифровкиОтчета выполняется попытка обратиться к коллекции метаданных встроенных отчетов конфигурации:


ПараметрыИсполненияОтчета = Отчеты[ИдентификаторОбъекта].ПолучитьПараметрыИсполненияОтчета();

Выясним причину падения функционала при сохранении отчета в виде внешнего файла (.erf):

  1. Разделение пространств метаданных: Коллекция Отчеты предоставляет платформенный доступ исключительно к встроенным отчетам конфигурации и отчетам из подключенных расширений. Внешние отчеты создаются динамически через ВнешниеОтчеты.Создать(...) и в системную коллекцию Отчеты не попадают.
  2. Отсутствие модуля менеджера у внешних отчетов: Экспортная функция ПолучитьПараметрыИсполненияОтчета() располагается в модуле менеджера базового отчета. В файлах внешних отчетов модуля менеджера нет в принципе — там присутствуют только модуль объекта и модули форм.

В результате при переименовании отчета или запуске его из справочника «Дополнительные отчеты и обработки» платформа выдает исключение вида: Поле объекта не обнаружено (ИмяНовогоОтчета).

Разберем основные варианты решения поставленной задачи.

Вариант 1. Разработка отчетов в составе расширения конфигурации (Рекомендуемый)

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

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

При таком подходе вызов Отчеты[ИдентификаторОбъекта] корректно найдет отчет из расширения, обратится к его модулю менеджера и вернет корректные параметры для типовой расшифровки ячеек.

Вариант 2. Переопределение имени базового отчета в форме внешнего отчета

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

Разберем по шагам реализацию прокси-обертки перед вызовом серверных процедур:

  1. В модуле формы внешнего отчета перед вызовом процедуры БухгалтерскиеОтчетыКлиент.ОбработкаРасшифровкиСтандартногоОтчета программно указываем имя оригинального базового отчета (например, "ВедомостьАмортизацииОСБухгалтерскийУчет") в свойствах или реквизитах формы, откуда система считывает идентификатор.
  2. Серверный метод обратится к менеджеру оригинального встроенного отчета Отчеты["ВедомостьАмортизацииОСБухгалтерскийУчет"], который присутствует в конфигурации и вернет типовые параметры исполнения.

Вариант 3. Использование механизма «Варианты отчетов»

Если задача заключается только в получении нескольких вариантов отчета с разной детализацией (например, «Свернутая ведомость» и «Развернутая ведомость»), создавать отдельные внешние отчеты вовсе не обязательно.

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

Такой подход полностью сохраняет типовой алгоритм расшифровки, не требует написания программного кода и гарантирует стабильную работу при любых обновлениях конфигурации.

Вариант 4. Перехват расшифровки через платформенный объект СКД

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


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

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

← На главную