Как из регламентированного отчета сделать внешний и зарегистрировать его в базе 1С без ошибок

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

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

Однако в современных версиях конфигураций, таких как «1С:Бухгалтерия предприятия 3.0» (начиная с релизов линейки 3.0.60 и выше), этот процесс усложнился. При попытке зарегистрировать сохраненный во внешний файл отчет система выдает предупреждение «Отчет не предназначен для использования в текущей конфигурации», а при попытке его открытия или заполнения возникает критическая ошибка: «Метод объекта не обнаружен (ТаблицаФормОтчета)».

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

Причина первой ошибки: Метод объекта не обнаружен (ТаблицаФормОтчета)

Давайте выясним причину возникновения этой ошибки. Архитектура платформы «1С:Предприятие 8» разделяет код логики объектов на модули. У стандартных (встроенных в конфигурацию) отчетов есть два ключевых модуля кода:

  1. Модуль объекта — отвечает за инициализацию конкретного экземпляра отчета, его заполнение данными и выгрузку.
  2. Модуль менеджера — отвечает за функции, относящиеся к типу объекта в целом. Именно в модуле менеджера встроенного регламентированного отчета располагаются функции ТаблицаФормОтчета() и ДеревоФормИФорматов(). Эти функции возвращают структуру поддерживаемых отчетом бланков, форматов выгрузки и периодов их действия.

Когда мы сохраняем встроенный отчет как внешний (файл с расширением .erf), мы должны учитывать важное ограничение платформы: внешние отчеты не имеют модуля менеджера. У них физически существуют только модуль объекта и модули форм. При попытке выполнить вызов общего механизма регламентированной отчетности система обращается к источнику отчета, ожидая найти у него метод менеджера. Происходит обращение вида ИсточникОтчета.ТаблицаФормОтчета(). Поскольку внешний отчет лишен модуля менеджера, платформа генерирует исключение «Метод объекта не обнаружен».

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

Вариант решения А: Копирование кода во внешний отчет (метод с форума)

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

Выполним следующие шаги:

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

Пример структуры вставленного кода в модуле объекта внешнего отчета:


Функция ТаблицаФормОтчета() Экспорт

    ТаблицаФорм = Новый ТаблицаЗначений;
    ТаблицаФорм.Колонки.Добавить("Форма", Новый ОписаниеТипов("Строка"));
    ТаблицаФорм.Колонки.Добавить("Описание", Новый ОписаниеТипов("Строка"));
    ТаблицаФорм.Колонки.Добавить("ДатаНачала", Новый ОписаниеТипов("Дата"));
    ТаблицаФорм.Колонки.Добавить("ДатаКонца", Новый ОписаниеТипов("Дата"));
    
    // Заполнение параметров доступных форм отчета
    НоваяСтрока = ТаблицаФорм.Добавить();
    НоваяСтрока.Форма = "ФормаОтчета2023Кв4";
    НоваяСтрока.Описание = "Расчет по страховым взносам (редакция 2023 года)";
    НоваяСтрока.ДатаНачала = '20240101';
    НоваяСтрока.ДатаКонца = '39991231';
    
    Возврат ТаблицаФорм;

КонецФункции

После этого общие механизмы платформы смогут успешно вызвать метод ТаблицаФормОтчета() непосредственно из объекта внешнего отчета, и ошибка исчезнет.

Вариант решения Б: Перенаправление вызова к метаданным (альтернативный способ)

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

Для этого выполним анализ кода форм внешнего отчета:

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

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

Причина второй ошибки: Отчет не предназначен для использования в текущей конфигурации

Теперь проанализируем вторую проблему. При попытке загрузить и сохранить внешний файл отчета в справочнике «Регламентированные отчеты» система выдает предупреждение о несовместимости.

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

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


ИДКонфигурацииОтчета = Неопределено;
Если СвойстваОтчета.Свойство("ИДКонфигурацииОтчета", ИДКонфигурацииОтчета) 
   И ВРЕГ(ИДКонфигурацииОтчета) <> ВРЕГ(СвойстваОтчета.ИДКонфигурацииИмя) Тогда
    ТекстВопроса = НСтр("ru = 'Внимание! Отчет не предназначен для использования с текущей конфигурацией.'");
КонецЕсли;

Как исправить ошибку проверки версии конфигурации

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

  1. Откроем Модуль объекта внешнего отчета.
  2. В самом начале модуля (в области объявления переменных) добавим объявление экспортной переменной: Перем мВерсияОтчета Экспорт;
  3. В самый конец модуля объекта (в секцию инициализации, которая выполняется при создании объекта) добавим блок присвоения значения. Значение должно строго соответствовать версии вашей конфигурации. Обратите внимание, что иногда требуется указать полный номер сборки (включая индекс сборки на конце, например .2):
    
    #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
        мВерсияОтчета = "БП 3.0.60.50.2";
    #КонецЕсли
    

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

Инструкция: Регистрация внешнего отчета в пользовательском интерфейсе 1С

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

  1. Запустите программу «1С:Бухгалтерия» в режиме «1С:Предприятие».
  2. Перейдите в раздел меню Отчеты, затем выберите пункт 1С-Отчетность (Регламентированные отчеты).
  3. В верхней панели открывшейся формы нажмите кнопку Настройки.
  4. В блоке настроек найдите и откройте ссылку Справочник регламентированных отчетов.
  5. В списке отчетов найдите тот, который вы планируете заменить внешним файлом (например, «Расчет по страховым взносам»), выделите его и нажмите кнопку Изменить (или клавишу F2).
  6. В открывшейся карточке настройки отчета обратите внимание на группу параметров Использовать. По умолчанию там установлен переключатель в положение Встроенный отчет.
  7. Переставьте переключатель в положение Файл.
  8. В появившемся поле выбора укажите путь к вашему модифицированному внешнему файлу с расширением .erf на диске.
  9. Нажмите кнопку Записать и закрыть. Система загрузит файл во внутреннее безопасное хранилище базы данных.

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

Современная и безопасная альтернатива: Расширения конфигурации

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

Рекомендуемым и наиболее надежным методом доработки является использование Расширений конфигурации. Давайте проанализируем преимущества этого подхода и разберем схему работы с ним:

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

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

← На главную