При обновлении отраслевых решений, таких как «1С: Учет в управляющих компаниях ЖКХ, ТСЖ и ЖСК», до версии 158.1 и выше, пользователи и администраторы часто сталкиваются с критической ошибкой, которая блокирует запуск программы или выполнение важных регламентных операций. Ошибка выглядит как системный сбой при вызове метода СоздатьЭлемент в справочнике ВерсииРасширений. В этой статье мы подробно разберем, почему возникает эта проблема и как ее устранить несколькими способами.
Давайте разберем техническую природу данного сбоя. Конфигурация «Учет в ЖКХ» построена на базе типовой «1С: Бухгалтерия предприятия 3.0». В последних релизах «Бухгалтерии» (начиная с 3.0.157) произошел переход на новую версию Библиотеки стандартных подсистем (БСП). Разработчики фирмы «1С» в рамках оптимизации и унификации кода изменили названия многих служебных методов.
Ранее в системе существовала подписка на событие ЗапретитьПометкуУдаленияПредопределенныхЭлементов, которая обращалась к методу с точно таким же названием. Однако в новом программном ядре этот метод был переименован в ОбработкаПредопределенныхЭлементовПередЗаписью. Проблема заключается в том, что при обновлении метаданные (структура конфигурации) могут сохранить старую ссылку на несуществующий метод, в то время как программный код общего модуля уже обновился. Рассмотрим ситуацию подробнее: при записи любого объекта (в данном случае справочника ВерсииРасширений) срабатывает механизм проверки предопределенных элементов, система пытается найти старый метод, не находит его и выдает ошибку [ScriptUseError].
Если нам необходимо оперативно восстановить работоспособность базы, а официальный патч еще не установлен, воспользуемся ручной правкой метаданных. Разберем по шагам, как это сделать:
Общие -> Подписки на события.ЗапретитьПометкуУдаленияПредопределенныхЭлементов.ЗапретитьПометкуУдаленияПредопределенныхЭлементовПередЗаписью, который система не может найти.СтандартныеПодсистемыСервер и выбрать в нем актуальный метод: ОбработкаПредопределенныхЭлементовПередЗаписью.После этого необходимо нажать F7 для обновления конфигурации базы данных. Проанализируем, что мы сделали: мы вручную восстановили связь между событием записи объекта и актуальной процедурой в коде БСП.
Иногда ошибка может быть вызвана не основной конфигурацией, а установленными расширениями, которые «застряли» на старой логике работы БСП. Выясним, как это проверить:
Посмотрим на список установленных расширений в меню Администрирование — Обслуживание — Расширения (или через Конфигуратор: Конфигурация -> Расширения конфигурации). Попробуем временно отключить (снять галочку «Активно») все сторонние расширения и запустить программу. Если ошибка исчезла, значит одно из расширений перехватывает управление или обращается к удаленному методу. В таком случае расширение требует доработки программистом: нужно обновить в нем вызовы процедур общего модуля СтандартныеПодсистемыСервер.
Разработчики 1С обычно оперативно выпускают патчи для таких массовых ошибок. Рассмотрим, как проверить наличие исправлений:
Перейдем в раздел Администрирование -> Обслуживание -> Обновление программы -> Установленные исправления (патчи). Если в списке нет патча, связанного с ошибкой ЗапретитьПометкуУдаленияПредопределенныхЭлементов, нажмем кнопку Поиск и установка исправлений (требуется доступ к интернет-поддержке). Часто патч с кодом EF_00_xxxxxx автоматически исправляет привязку событий, и ручное вмешательство в конфигуратор не требуется.
Чтобы лучше понимать, что именно ищет система, посмотрим на то, как должен выглядеть экспортный метод в общем модуле. Если вы решите проверить программный код самостоятельно, откройте общий модуль СтандартныеПодсистемыСервер и убедитесь, что процедура объявлена корректно:
// В новых версиях БСП метод должен выглядеть так:
Процедура ОбработкаПредопределенныхЭлементовПередЗаписью(Источник, Отказ, Замещение) Экспорт
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
// Логика проверки пометки удаления предопределенных элементов
// ...
КонецПроцедуры
Обратите внимание на ключевое слово Экспорт. Как отмечали пользователи на форуме, в некоторых промежуточных версиях процедура могла оказаться не экспортной, что также вызывает ошибку обращения. Если процедура присутствует, но слова Экспорт нет — добавьте его.
Проанализируем еще один важный момент. После внесения правок в конфигураторе или установки патчей ошибка может сохраняться из-за старого кэша конфигурации. Выполним следующие действия:
/ClearCache.Резюмируем: Ошибка вызвана рассинхронизацией имен методов в обновленной БСП. Основное решение — перенаправить подписку на событие ЗапретитьПометкуУдаленияПредопределенныхЭлементов на новый метод ОбработкаПредопределенныхЭлементовПередЗаписью в модуле СтандартныеПодсистемыСервер. Это позволит системе корректно инициализировать параметры сеанса и справочник версий расширений, после чего база запустится в штатном режиме.