Как исправить ошибку «Переменная не определена (ПерепрефиксацияОбъектов)» после обновления 1С:Бухгалтерии?

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

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

Выясним причину ошибки

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

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


&НаСервере
Функция ПолучитьНомерДокумента(Номер)
    ...
    ПерепрефиксацияОбъектов.ПриОпределенииПрефиксаИнформационнойБазы(ПрефиксИнформационнойБазы);
    ...
КонецФункции

Так как модуль отсутствует в дереве метаданных, компилятор на сервере не находит имя ПерепрефиксацияОбъектов и прерывает выполнение процесса.

Способ 1. Использование актуального модуля БСП в коде внешней обработки

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

Разберем по шагам, как исправить код:

  1. Откроем внешнюю обработку в режиме «Конфигуратор».
  2. Найдем проблемную строку через поиск по модулю формы.
  3. Заменим обращение к старому модулю на актуальный вызов:

ПрефиксацияОбъектовСобытия.ПриОпределенииПрефиксаИнформационнойБазы(ПрефиксИнформационнойБазы);

Такой подход полностью восстанавливает логику типовой префиксации и гарантирует совместимость с текущим релизом конфигурации.

Способ 2. Альтернативные методы получения префикса информационной базы

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

Рассмотрим подробнее доступные варианты:

  1. Стандартная функция подсистемы обмена данными: Вызов специального метода БСП напрямую возвращает строку с префиксом базы данных: ПрефиксИнформационнойБазы = ОбменДаннымиСервер.ПрефиксИнформационнойБазы();
  2. Использование функциональной опции: В конфигурациях на базе БСП значение префикса связано с функциональной опцией:
    
    ПрефиксИнформационнойБазы = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы");
    
  3. Чтение из константы напрямую: Можно обратиться к значению константы информационной базы:
    
    ПрефиксИнформационнойБазы = Константы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Получить();
    

Способ 3. Создание расширения конфигурации (без изменения обработки)

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

Разберем алгоритм решения:

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

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

Важные рекомендации

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

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

← На главную