Как исправить ошибку метода ЗапретитьПометкуУдаленияПредопределенныхЭлементовПередЗаписью в 1С:Учет в ЖКХ

Программист 1C:Бухгалтерия
← На главную

При обновлении отраслевых решений, таких как «1С: Учет в управляющих компаниях ЖКХ, ТСЖ и ЖСК», до версии 158.1 и выше, пользователи и администраторы часто сталкиваются с критической ошибкой, которая блокирует запуск программы или выполнение важных регламентных операций. Ошибка выглядит как системный сбой при вызове метода СоздатьЭлемент в справочнике ВерсииРасширений. В этой статье мы подробно разберем, почему возникает эта проблема и как ее устранить несколькими способами.

Проанализируем причину возникновения ошибки

Давайте разберем техническую природу данного сбоя. Конфигурация «Учет в ЖКХ» построена на базе типовой «1С: Бухгалтерия предприятия 3.0». В последних релизах «Бухгалтерии» (начиная с 3.0.157) произошел переход на новую версию Библиотеки стандартных подсистем (БСП). Разработчики фирмы «1С» в рамках оптимизации и унификации кода изменили названия многих служебных методов.

Ранее в системе существовала подписка на событие ЗапретитьПометкуУдаленияПредопределенныхЭлементов, которая обращалась к методу с точно таким же названием. Однако в новом программном ядре этот метод был переименован в ОбработкаПредопределенныхЭлементовПередЗаписью. Проблема заключается в том, что при обновлении метаданные (структура конфигурации) могут сохранить старую ссылку на несуществующий метод, в то время как программный код общего модуля уже обновился. Рассмотрим ситуацию подробнее: при записи любого объекта (в данном случае справочника ВерсииРасширений) срабатывает механизм проверки предопределенных элементов, система пытается найти старый метод, не находит его и выдает ошибку [ScriptUseError].

Способ 1. Ручное исправление в конфигураторе

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

  1. Запустим информационную базу в режиме Конфигуратор.
  2. Откроем дерево метаданных и перейдем в ветку Общие -> Подписки на события.
  3. Найдем в списке подписку с именем ЗапретитьПометкуУдаленияПредопределенныхЭлементов.
  4. Щелкнем по ней правой кнопкой мыши и выберем пункт Свойства.
  5. В окне свойств найдем поле Обработчик. Скорее всего, там будет указан путь к методу ЗапретитьПометкуУдаленияПредопределенныхЭлементовПередЗаписью, который система не может найти.
  6. Нажмем на кнопку выбора (лупу или три точки) рядом с полем обработчика.
  7. В открывшемся списке общих модулей нам нужно найти модуль СтандартныеПодсистемыСервер и выбрать в нем актуальный метод: ОбработкаПредопределенныхЭлементовПередЗаписью.

После этого необходимо нажать F7 для обновления конфигурации базы данных. Проанализируем, что мы сделали: мы вручную восстановили связь между событием записи объекта и актуальной процедурой в коде БСП.

Способ 2. Работа с расширениями конфигурации

Иногда ошибка может быть вызвана не основной конфигурацией, а установленными расширениями, которые «застряли» на старой логике работы БСП. Выясним, как это проверить:

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

Способ 3. Установка официальных исправлений (патчей)

Разработчики 1С обычно оперативно выпускают патчи для таких массовых ошибок. Рассмотрим, как проверить наличие исправлений:

Перейдем в раздел Администрирование -> Обслуживание -> Обновление программы -> Установленные исправления (патчи). Если в списке нет патча, связанного с ошибкой ЗапретитьПометкуУдаленияПредопределенныхЭлементов, нажмем кнопку Поиск и установка исправлений (требуется доступ к интернет-поддержке). Часто патч с кодом EF_00_xxxxxx автоматически исправляет привязку событий, и ручное вмешательство в конфигуратор не требуется.

Разберем пример программного кода

Чтобы лучше понимать, что именно ищет система, посмотрим на то, как должен выглядеть экспортный метод в общем модуле. Если вы решите проверить программный код самостоятельно, откройте общий модуль СтандартныеПодсистемыСервер и убедитесь, что процедура объявлена корректно:


// В новых версиях БСП метод должен выглядеть так:
Процедура ОбработкаПредопределенныхЭлементовПередЗаписью(Источник, Отказ, Замещение) Экспорт
    
    Если Источник.ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;
    
    // Логика проверки пометки удаления предопределенных элементов
    // ...
    
КонецПроцедуры

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

Рекомендация по очистке кэша

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

  1. Закроем все сеансы 1С.
  2. Удалим базу из списка в окне запуска и добавим ее заново (это самый быстрый способ очистить локальный кэш).
  3. Либо воспользуемся запуском с параметром /ClearCache.

Резюмируем: Ошибка вызвана рассинхронизацией имен методов в обновленной БСП. Основное решение — перенаправить подписку на событие ЗапретитьПометкуУдаленияПредопределенныхЭлементов на новый метод ОбработкаПредопределенныхЭлементовПередЗаписью в модуле СтандартныеПодсистемыСервер. Это позволит системе корректно инициализировать параметры сеанса и справочник версий расширений, после чего база запустится в штатном режиме.

← На главную