1С Предприятие 8.3.15.1656
режим совместимости 8.3.14
Работаю с расширением конфигурации.
Режим отладки включен.

Никак не могу понять что происходит. Вдруг внезапно выпадает ошибка:

При выполнении операции над расширение "Учет посетителей" возникла ошибка:
Не удалось заблокировать запись. Ну и так далее - полный текст на скрине.

Конфигуратор закрыт.

Пытаюсь выполнить обновление идентификаторов объектом метаданных либо обновление конфигурации (через ключ запуска) - такая же обшибка, обновление конфигурации зависает и НЕ выполняется.

Никак не могу отловить закономерность. Расширение то работает, то ругается такой ошибкой.
Помогает только полное удаление расширения со всеми данными.
---
Проблему удалось обойти, но не совсем понятно на сколько это корректно.

В общем делюсь что удалось нарыть. В текущей версии конфы используется какой-то устаревший метод обновления ИД объектов МД при котором все расширения сначала удаляются (с предварительным сохранением их данных), а затем восстанавливаются из хранилища.
На сколько я понял, это какая-то особенность совместимости 8.3.6 потому что в релизе КА2.0 с совместимостью 8.3.14 ничего такого нет в аналогичной процедуре модуля менеджера справочника ИД объектом МД.

В общем я просто отключил вызов исключения в случае невозможностиудаления расширения и после этого включил расширение, успешно обновил справочник ИД объектов МД и отчет открылся.

```1c
    Функция УдаленныеРасширения(КоличествоУстановленных = 0)

    УдаленныеРасширения = Новый Структура;

    ВсеРасширения = РасширенияКонфигурации.Получить();
    Расширения = Новый Массив;
    ДанныеРасширений = Новый Массив;
    Индекс = ВсеРасширения.Количество()-1;

    НачатьТранзакцию();
    Попытка
    Пока Индекс >= КоличествоУстановленных Цикл
    Расширение = ВсеРасширения[Индекс];
    Расширения.Вставить(0, Расширение);
    ДанныеРасширений.Вставить(0, Расширение.ПолучитьДанные());
    Попытка
    Расширение.Удалить();
    Исключение
    ИнформацияОбОшибке = ИнформацияОбОшибке();
    ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
    НСтр("ru='При выполнении операции над расширением "%1" возникла ошибка:
    |%2
    |
    |Убедитесь, что все расширения закрыты в конфигураторе.'
    |;uk='При виконанні операції над розширенням "%1" помилка:
    |%2
    |
    |Переконайтеся, що всі розширення закриті в конфігураторі.'"),
    Расширение.Имя,
    КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
    //ВызватьИсключение ТекстОшибки;
    КонецПопытки;
    Индекс = Индекс - 1;
    КонецЦикла;
    ЗафиксироватьТранзакцию();
    Исключение
    ОтменитьТранзакцию();
    ВызватьИсключение;
    КонецПопытки;

    Возврат Новый Структура("Расширения, ДанныеРасширений", Расширения, ДанныеРасширений);

    КонецФункции
```

т.е. просто отключил команду вызывающую исключение
---
Пробовал делать расширение неактивным - не помогает.
Конфигурация типовая - украинская локализация КА2.0.
---
Ошибка возникает при обращении к одному отчету. Даже если открыть его как внешний файл - всё равно возникает ошибка.
---
Исключение происходит в этой функции.
Типовая конфигурация зачем-то пытается удалить расширения. Приблизительно догадываюсь что это как-то связано с обновлением справочника "Идентификаторы объектов МД", но не понимаю логики.

```1c
    // Для функции СвойстваРасширений.
    Функция УдаленныеРасширения(КоличествоУстановленных = 0)

    УдаленныеРасширения = Новый Структура;

    ВсеРасширения = РасширенияКонфигурации.Получить();
    Расширения = Новый Массив;
    ДанныеРасширений = Новый Массив;
    Индекс = ВсеРасширения.Количество()-1;

    НачатьТранзакцию();
    Попытка
    Пока Индекс >= КоличествоУстановленных Цикл
    Расширение = ВсеРасширения[Индекс];
    Расширения.Вставить(0, Расширение);
    ДанныеРасширений.Вставить(0, Расширение.ПолучитьДанные());
    Попытка
    Расширение.Удалить();
    Исключение
    ИнформацияОбОшибке = ИнформацияОбОшибке();
    ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
    НСтр("ru='При выполнении операции над расширением "%1" возникла ошибка:
    |%2
    |
    |Убедитесь, что все расширения закрыты в конфигураторе.'
    |;uk='При виконанні операції над розширенням "%1" помилка:
    |%2
    |
    |Переконайтеся, що всі розширення закриті в конфігураторі.'"),
    Расширение.Имя,
    КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
    ВызватьИсключение ТекстОшибки;
    КонецПопытки;
    Индекс = Индекс - 1;
    КонецЦикла;
    ЗафиксироватьТранзакцию();
    Исключение
    ОтменитьТранзакцию();
    ВызватьИсключение;
    КонецПопытки;

    Возврат Новый Структура("Расширения, ДанныеРасширений", Расширения, ДанныеРасширений);

    КонецФункции
```
---
Ну для начала закройте конфигуратор и запустите клиент. Пусть БСП отработает.
---
Не увидел, читаю ошибку. Вполне возможно повис сеанс или еще что то. Как вариант запустите под другим пользователем, будет так же ругаться на этого пользователя или на того кто запустил.
---
при активном расширении ни под каким пользователем не дает зайти с такой ошибкой

в базе больше никого нет, конфигуратор ЗАКРЫТ
---
Если открыт конфигуратор, но ВСЕ расширения закрыты, то запуск 1С в режиме отладки позволяет загрузиться. Все объекты расширения открываются нормально, а при попытке открыть отчёт выдает туже ошибку. Причем даже при попытке открыть внешний отчет тоже ошибка.

Я подозреваю что при открытии отчётов происходит попытка обновить элементы справочника идентификаторы объектов расшерений (и/или метаданных) и уже это действие вызывает ошибку.

PS. Ошибка возникает при открытии ЛЮБОГО внешнего отчета. а так же при открытии меню "Отчеты" любого раздела (Казначенийство, Продажи и т.п.).

Т.е. таки точно проблема в том, что не может отработать обновление идентификаторов объектом МД.
---
Пробовали запустить отладку с ключем "/РежимОтладки"
---
она у меня постоянно включена
---
Я не знаю с чем это связано, есть обсуждение на партнерском форуме (у меня нет доступа туда), но советуют при отладке расширения запускать отладку из конфигуратора с параметром /РежимОтладки. И этот параметр не связан режимом debug на сервере.
---
да, я в курсе
---
Проблему удалось обойти, но не совсем понятно на сколько это корректно.

В общем делюсь что удалось нарыть. В текущей версии конфы используется какой-то устаревший метод обновления ИД объектов МД при котором все расширения сначала удаляются (с предварительным сохранением их данных), а затем восстанавливаются из хранилища.
На сколько я понял, это какая-то особенность совместимости 8.3.6 потому что в релизе КА2.0 с совместимостью 8.3.14 ничего такого нет в аналогичной процедуре модуля менеджера справочника ИД объектом МД.

В общем я просто отключил вызов исключения в случае невозможностиудаления расширения и после этого включил расширение, успешно обновил справочник ИД объектов МД и отчет открылся.

```1c
    Функция УдаленныеРасширения(КоличествоУстановленных = 0)

    УдаленныеРасширения = Новый Структура;

    ВсеРасширения = РасширенияКонфигурации.Получить();
    Расширения = Новый Массив;
    ДанныеРасширений = Новый Массив;
    Индекс = ВсеРасширения.Количество()-1;

    НачатьТранзакцию();
    Попытка
    Пока Индекс >= КоличествоУстановленных Цикл
    Расширение = ВсеРасширения[Индекс];
    Расширения.Вставить(0, Расширение);
    ДанныеРасширений.Вставить(0, Расширение.ПолучитьДанные());
    Попытка
    Расширение.Удалить();
    Исключение
    ИнформацияОбОшибке = ИнформацияОбОшибке();
    ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
    НСтр("ru='При выполнении операции над расширением "%1" возникла ошибка:
    |%2
    |
    |Убедитесь, что все расширения закрыты в конфигураторе.'
    |;uk='При виконанні операції над розширенням "%1" помилка:
    |%2
    |
    |Переконайтеся, що всі розширення закриті в конфігураторі.'"),
    Расширение.Имя,
    КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
    //ВызватьИсключение ТекстОшибки;
    КонецПопытки;
    Индекс = Индекс - 1;
    КонецЦикла;
    ЗафиксироватьТранзакцию();
    Исключение
    ОтменитьТранзакцию();
    ВызватьИсключение;
    КонецПопытки;

    Возврат Новый Структура("Расширения, ДанныеРасширений", Расширения, ДанныеРасширений);

    КонецФункции
```

т.е. просто отключил команду вызывающую исключение
---
в конечном итоге осталось невыясненным почему расширение не удалялось программно, но разработчики типовой конфигурации не правы в том, что вводят пользователя в заблуждение тем, что допускают что расширение может не удаляться только из-за того, что оно занято конфигуратором. Написали бы просто - не удаляется расширение, возможная причина конфигуратор.
---
Опять у меня проблема с этой частью. Сейчас с " Расширение.Удалить();" когда пытался сделать "/С ЗапуститьОбновлениеИнформационнойБазы". Для файловой все работает, для SQL - эта строка просто не выполняется и все валится. В целом проблема решилась пришлось использовать: Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеДанных(Истина, ЛОЖЬ,"Полный"); плюс еще кучу мест пришлось поменять.

Очень много времени уходит на игрульки такого плана.

Очень надеюсь, что разработчики BAS КУП все же обновят этот модуль да и версию режима совместимости поставят "не использовать" или "8.3.18", "8.3.20". В текущей версии имеем какой-то замкнутый круг - можем использовать кучу всяких классных фишек расширений - уже практически все метаданные имеют представление в расширениях и с другой стороны чтобы их использовать - надо поднять версию конфигурации. А как ее поднять если из-за этого валятся ошибки? А уже и не сильно уверен в правильности их использования. Вот с BAS КУП (и др. наверно) более высокого режима совместимости я бы 100% рекомендовал клиентам. А сейчас - хз