В процессе сопровождения и адаптации типовых конфигураций «1С:Предприятие» программисты часто сталкиваются с необходимостью кастомизации регламентированных отчетов (например, декларации по НДС, расчета по страховым взносам или баланса). Чтобы сохранить конфигурацию на поддержке и не вносить изменения напрямую в типовые метаданные, разработчики используют механизм внешних отчетов. Мы сохраняем отчет в файл формата .erf, дорабатываем его и регистрируем в информационной базе.
Однако в современных версиях конфигураций, таких как «1С:Бухгалтерия предприятия 3.0» (начиная с релизов линейки 3.0.60 и выше), этот процесс усложнился. При попытке зарегистрировать сохраненный во внешний файл отчет система выдает предупреждение «Отчет не предназначен для использования в текущей конфигурации», а при попытке его открытия или заполнения возникает критическая ошибка: «Метод объекта не обнаружен (ТаблицаФормОтчета)».
В этой статье мы подробно разберем, почему возникают эти ошибки, как устроен механизм проверки регламентированной отчетности и какими способами можно успешно зарегистрировать и запустить внешний регламентированный отчет в вашей базе данных.
Давайте выясним причину возникновения этой ошибки. Архитектура платформы «1С:Предприятие 8» разделяет код логики объектов на модули. У стандартных (встроенных в конфигурацию) отчетов есть два ключевых модуля кода:
ТаблицаФормОтчета() и ДеревоФормИФорматов(). Эти функции возвращают структуру поддерживаемых отчетом бланков, форматов выгрузки и периодов их действия.Когда мы сохраняем встроенный отчет как внешний (файл с расширением .erf), мы должны учитывать важное ограничение платформы: внешние отчеты не имеют модуля менеджера. У них физически существуют только модуль объекта и модули форм. При попытке выполнить вызов общего механизма регламентированной отчетности система обращается к источнику отчета, ожидая найти у него метод менеджера. Происходит обращение вида ИсточникОтчета.ТаблицаФормОтчета(). Поскольку внешний отчет лишен модуля менеджера, платформа генерирует исключение «Метод объекта не обнаружен».
Рассмотрим два варианта решения этой проблемы.
Этот способ является классическим и наиболее быстрым, когда нужно получить полностью автономный файл отчета. Мы переносим недостающие функции из модуля менеджера типового отчета в модуль объекта нашего внешнего отчета.
Выполним следующие шаги:
Отчеты.ТаблицаФормОтчета() (а также сопутствующую функцию ДеревоФормИФорматов(), если она используется в коде)..erf) в конфигураторе, перейдем в его Модуль объекта и вставим скопированный код в самый конец модуля.Экспорт.Пример структуры вставленного кода в модуле объекта внешнего отчета:
Функция ТаблицаФормОтчета() Экспорт
ТаблицаФорм = Новый ТаблицаЗначений;
ТаблицаФорм.Колонки.Добавить("Форма", Новый ОписаниеТипов("Строка"));
ТаблицаФорм.Колонки.Добавить("Описание", Новый ОписаниеТипов("Строка"));
ТаблицаФорм.Колонки.Добавить("ДатаНачала", Новый ОписаниеТипов("Дата"));
ТаблицаФорм.Колонки.Добавить("ДатаКонца", Новый ОписаниеТипов("Дата"));
// Заполнение параметров доступных форм отчета
НоваяСтрока = ТаблицаФорм.Добавить();
НоваяСтрока.Форма = "ФормаОтчета2023Кв4";
НоваяСтрока.Описание = "Расчет по страховым взносам (редакция 2023 года)";
НоваяСтрока.ДатаНачала = '20240101';
НоваяСтрока.ДатаКонца = '39991231';
Возврат ТаблицаФорм;
КонецФункции
После этого общие механизмы платформы смогут успешно вызвать метод ТаблицаФормОтчета() непосредственно из объекта внешнего отчета, и ошибка исчезнет.
Если вы не хотите дублировать сложный код формирования таблиц и поддерживать его при обновлениях конфигурации, можно применить более изящный способ. Вместо копирования кода мы можем перенаправить обращение системы к модулю менеджера встроенного в базу отчета, который гарантированно там присутствует.
Для этого выполним анализ кода форм внешнего отчета:
ЗначениеВДанныеФормы(РегламентированнаяОтчетностьВызовСервера.ОтчетОбъект(ИсточникОтчета).ТаблицаФормОтчета, мТаблицаФормОтчета)
ЗначениеВДанныеФормы(Отчеты.РегламентированныйОтчетРасчетПоСтраховымВзносам.ТаблицаФормОтчета(), мТаблицаФормОтчета)
В этом случае внешняя форма при инициализации структуры бланков обратится к оригинальному метаданному конфигурации. Это избавит вас от необходимости переносить и поддерживать в актуальном состоянии тяжеловесные блоки кода внутри внешнего файла.
Теперь проанализируем вторую проблему. При попытке загрузить и сохранить внешний файл отчета в справочнике «Регламентированные отчеты» система выдает предупреждение о несовместимости.
В коде Библиотеки стандартных подсистем (БСП) встроен жесткий алгоритм проверки совместимости загружаемого файла. При загрузке отчета срабатывает процедура сравнения идентификаторов. Система пытается прочитать экспортируемую переменную мВерсияОтчета и сопоставить её со свойствами текущей конфигурации (такими как имя конфигурации ИДКонфигурацииИмя и версия релиза).
Если выгрузить отчет из одной базы или использовать файл, в котором эти параметры не определены (например, при конвертации во внешний отчет значения занулились или вернули Неопределено), проверка вернет ложь. В коде конфигурации это выглядит следующим образом:
ИДКонфигурацииОтчета = Неопределено;
Если СвойстваОтчета.Свойство("ИДКонфигурацииОтчета", ИДКонфигурацииОтчета)
И ВРЕГ(ИДКонфигурацииОтчета) <> ВРЕГ(СвойстваОтчета.ИДКонфигурацииИмя) Тогда
ТекстВопроса = НСтр("ru = 'Внимание! Отчет не предназначен для использования с текущей конфигурацией.'");
КонецЕсли;
Чтобы успешно пройти валидацию системы, нам необходимо явно объявить и проинициализировать требуемые переменные в модуле внешнего файла. Разберем по шагам, как это сделать:
Перем мВерсияОтчета Экспорт;
.2):
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
мВерсияОтчета = "БП 3.0.60.50.2";
#КонецЕсли
После внесения этих изменений и сохранения файла .erf система при регистрации отчета корректно считает версию и сопоставит её с текущей базой данных. Предупреждение о несовместимости больше не побеспокоит пользователей.
Когда код внешнего отчета успешно скорректирован и сохранен на жесткий диск, нам нужно зарегистрировать его в информационной базе. Рассмотрим, как это сделать через штатный пользовательский интерфейс программы:
.erf на диске.Полезный совет: Если при загрузке файла программа зависает или выдает сообщение «Загрузка отчета прервана», закройте все открытые окна отчетов, очистите локальный кэш конфигурации или перезапустите сеанс работы в 1С, после чего повторите операцию загрузки.
В современной практике разработки на платформе «1С:Предприятие 8.3» создание полностью обособленных внешних файлов регламентированных отчетов считается устаревающим и трудоемким подходом. Поскольку формы отчетности и требования законодательства меняются динамично, фирма «1С» часто обновляет общие модули интеграции. Любое обновление конфигурации может сломать ваш внешний отчет из-за изменения внутренних механизмов БСП.
Рекомендуемым и наиболее надежным методом доработки является использование Расширений конфигурации. Давайте проанализируем преимущества этого подхода и разберем схему работы с ним:
&Перед — для выполнения вашего кода перед стандартным расчетом;&После — для корректировки полученных результатов после выполнения типового алгоритма;&Вместо — для полной замены логики конкретной процедуры или функции.Таким образом, для долгосрочной перспективы и минимизации затрат на поддержку при обновлениях баз данных мы рекомендуем отдавать приоритет механизму расширений конфигурации.