Рассмотрим ситуацию, с которой сталкиваются многие специалисты при администрировании баз данных 1С:Предприятие. Проблема проявляется следующим образом: при любых попытках взаимодействия с подключенным расширением (удаление, обновление или изменение) программа аварийно завершает работу и вылетает в дамп памяти. При этом стандартные средства, такие как тестирование и исправление базы данных (очистка ссылок, удаление объектов, проверка логической целостности расширения), не приносят результатов.
Проанализируем причину такого поведения. Практика показывает, что данная проблема не связана с логической целостностью самой конфигурации или испорченными данными. Аварийное завершение работы при взаимодействии с расширениями — это официально зарегистрированный баг конкретных релизов платформы 1С 8.3.19, в частности, версий 8.3.19.1150 и 8.3.19.1467. Попытка удалить сбойное расширение из Конфигуратора приводит к моментальному вылету, а попытка сделать это в пользовательском режиме Предприятия выдает ошибку блокировки базы пользователем. Разберем по шагам, какие существуют способы решения этой проблемы и как мы можем вернуть систему к нормальной работе.
Если расширение вам необходимо сохранить для дальнейшей работы, и вы не хотите прибегать к жесткому удалению данных, самым безопасным методом будет использование стабильного релиза платформы. Посмотрим на алгоритм действий:
8.3.18 или более свежие стабильные сборки, начиная с 8.3.20.8.3.19.1150).Важно: Сама по себе работа уже загруженного и настроенного расширения на 19-й платформе обычно протекает без ошибок в пользовательском режиме. Вылеты случаются именно в момент редактирования или реструктуризации объектов расширения. Поэтому этот метод позволяет продолжать работу без необходимости срочного обновления платформы на всех клиентских машинах.
Если стоит задача полностью избавиться от расширения, а запуск Конфигуратора вызывает краш, воспользуемся пакетным режимом запуска. Пакетный режим позволяет выполнять административные действия без загрузки визуального интерфейса платформы.
Рассмотрим команду для точечного удаления конкретного расширения. Запустите командную строку (cmd) и выполните следующий код, подставив свои значения:
1cv8.exe DESIGNER /F "Путь_к_базе" /N "Логин" /P "Пароль" /DeleteCfg -Extension "ИмяРасширения"
Если же требуется удалить вообще все расширения из базы, используйте ключ для массовой очистки:
1cv8.exe DESIGNER /F "Путь_к_базе" /N "Логин" /P "Пароль" /DeleteCfg -AllExtensions
Иногда программа позволяет беспрепятственно зайти в режим 1С:Предприятие (если вылет происходит только в Конфигураторе), и тогда мы можем решить проблему с помощью встроенного языка 1С. Для этого необходимо программно очистить метаданные и идентификаторы расширений.
Для выполнения операции необходимо очистить справочник ИдентификаторыОбъектовРасширений, предварительно отключив проверку обмена данными, а также очистить соответствующий регистр сведений. Посмотрим на пример кода, который можно выполнить во внешней обработке:
// Очистка элементов справочника идентификаторов
Выборка = Справочники.ИдентификаторыОбъектовРасширений.Выбрать();
Пока Выборка.Следующий() Цикл
ОбъектУдаления = Выборка.ПолучитьОбъект();
ОбъектУдаления.ОбменДанными.Загрузка = Истина;
ОбъектУдаления.Удалить();
КонецЦикла;
// Очистка регистра сведений идентификаторов версий
НаборЗаписей = РегистрыСведений.ИдентификаторыОбъектовВерсийРасширений.СоздатьНаборЗаписей();
НаборЗаписей.Записать(Истина);
В самых тяжелых случаях, когда база полностью заблокирована, а Конфигуратор и пакетный режим отказываются работать, мы можем прибегнуть к жесткому удалению расширений на уровне таблиц базы данных MS SQL. Предупреждение: перед выполнением любых скриптов DELETE или DROP напрямую в СУБД, обязательно сделайте полный бэкап базы данных!
Выясним причину, почему этот способ работает. Данные конфигурации и расширений физически хранятся в системных таблицах платформы. Очистка этих таблиц равносильна полному сбросу расширений. Проанализируем таблицы, которые необходимо очистить:
_ExtensionsInfo. В ней хранится общая информация о подключенных расширениях. В некоторых ситуациях очистка записей только в этой таблице позволяет временно «оживить» Конфигуратор для последующего корректного удаления расширения штатными средствами.ConfigCAS и ConfigCASSave. В этих таблицах непосредственно хранятся скомпилированные данные и кэш расширений. Их полная очистка удаляет все изменения расширений физически с уровня SQL.Выполнив SQL-запрос DELETE FROM _ExtensionsInfo и очистив кэш таблиц конфигурации, вы сможете запустить платформу 1С. После этого рекомендуется зайти в Конфигуратор, убедиться в отсутствии расширений и выполнить пересчет итогов и тестирование базы, чтобы платформа восстановила свою внутреннюю структуру и кэш.