Почему 1С аварийно завершает работу при взаимодействии с расширениями и как это исправить?

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

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

Проанализируем причину такого поведения. Практика показывает, что данная проблема не связана с логической целостностью самой конфигурации или испорченными данными. Аварийное завершение работы при взаимодействии с расширениями — это официально зарегистрированный баг конкретных релизов платформы 1С 8.3.19, в частности, версий 8.3.19.1150 и 8.3.19.1467. Попытка удалить сбойное расширение из Конфигуратора приводит к моментальному вылету, а попытка сделать это в пользовательском режиме Предприятия выдает ошибку блокировки базы пользователем. Разберем по шагам, какие существуют способы решения этой проблемы и как мы можем вернуть систему к нормальной работе.

Способ 1: Использование другой версии платформы 1С (Рекомендуемый обходной путь)

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

  1. Создайте полную резервную копию базы данных (выгрузите файл .dt или сделайте бэкап средствами СУБД).
  2. Разверните копию базы на другой, более стабильной версии платформы. Рекомендуется использовать релизы ветки 8.3.18 или более свежие стабильные сборки, начиная с 8.3.20.
  3. В стабильной платформе произведите все необходимые действия: удаление, изменение или обновление проблемного расширения. В этих релизах баг с вылетом в дамп отсутствует.
  4. Сохраните изменения и загрузите базу обратно на рабочую платформу (например, 8.3.19.1150).

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

Способ 2: Удаление расширения через параметры командной строки

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

Рассмотрим команду для точечного удаления конкретного расширения. Запустите командную строку (cmd) и выполните следующий код, подставив свои значения:


1cv8.exe DESIGNER /F "Путь_к_базе" /N "Логин" /P "Пароль" /DeleteCfg -Extension "ИмяРасширения"

Если же требуется удалить вообще все расширения из базы, используйте ключ для массовой очистки:


1cv8.exe DESIGNER /F "Путь_к_базе" /N "Логин" /P "Пароль" /DeleteCfg -AllExtensions

Способ 3: Программная очистка данных о расширениях

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

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


// Очистка элементов справочника идентификаторов
Выборка = Справочники.ИдентификаторыОбъектовРасширений.Выбрать();
Пока Выборка.Следующий() Цикл
    ОбъектУдаления = Выборка.ПолучитьОбъект();
    ОбъектУдаления.ОбменДанными.Загрузка = Истина;
    ОбъектУдаления.Удалить();
КонецЦикла;

// Очистка регистра сведений идентификаторов версий
НаборЗаписей = РегистрыСведений.ИдентификаторыОбъектовВерсийРасширений.СоздатьНаборЗаписей();
НаборЗаписей.Записать(Истина);

Способ 4: Удаление расширений средствами MS SQL

В самых тяжелых случаях, когда база полностью заблокирована, а Конфигуратор и пакетный режим отказываются работать, мы можем прибегнуть к жесткому удалению расширений на уровне таблиц базы данных MS SQL. Предупреждение: перед выполнением любых скриптов DELETE или DROP напрямую в СУБД, обязательно сделайте полный бэкап базы данных!

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

  1. Таблица _ExtensionsInfo. В ней хранится общая информация о подключенных расширениях. В некоторых ситуациях очистка записей только в этой таблице позволяет временно «оживить» Конфигуратор для последующего корректного удаления расширения штатными средствами.
  2. Таблицы ConfigCAS и ConfigCASSave. В этих таблицах непосредственно хранятся скомпилированные данные и кэш расширений. Их полная очистка удаляет все изменения расширений физически с уровня SQL.

Выполнив SQL-запрос DELETE FROM _ExtensionsInfo и очистив кэш таблиц конфигурации, вы сможете запустить платформу 1С. После этого рекомендуется зайти в Конфигуратор, убедиться в отсутствии расширений и выполнить пересчет итогов и тестирование базы, чтобы платформа восстановила свою внутреннюю структуру и кэш.

← На главную