расширение: ошибка блокировки объекта

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

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

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

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

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

Никак не могу отловить закономерность. Расширение то работает, то ругается такой ошибкой.
Помогает только полное удаление расширения со всеми данными.
Прикрепленные файлы:
It-developer; +1 Ответить
По теме из базы знаний
Найденные решения
13. impextr 88 23.09.20 16:44 Сейчас в теме
Проблему удалось обойти, но не совсем понятно на сколько это корректно.

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

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


т.е. просто отключил команду вызывающую исключение
It-developer; +1 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. impextr 88 23.09.20 13:28 Сейчас в теме
Пробовал делать расширение неактивным - не помогает.
Конфигурация типовая - украинская локализация КА2.0.
3. impextr 88 23.09.20 13:32 Сейчас в теме
Ошибка возникает при обращении к одному отчету. Даже если открыть его как внешний файл - всё равно возникает ошибка.
4. impextr 88 23.09.20 13:36 Сейчас в теме
Исключение происходит в этой функции.
Типовая конфигурация зачем-то пытается удалить расширения. Приблизительно догадываюсь что это как-то связано с обновлением справочника "Идентификаторы объектов МД", но не понимаю логики.

// Для функции СвойстваРасширений.
Функция УдаленныеРасширения(КоличествоУстановленных = 0)
	
	УдаленныеРасширения = Новый Структура;
	
	ВсеРасширения = РасширенияКонфигурации.Получить();
	Расширения = Новый Массив;
	ДанныеРасширений = Новый Массив;
	Индекс = ВсеРасширения.Количество()-1;
	
	НачатьТранзакцию();
	Попытка
		Пока Индекс >= КоличествоУстановленных Цикл
			Расширение = ВсеРасширения[Индекс];
			Расширения.Вставить(0, Расширение);
			ДанныеРасширений.Вставить(0, Расширение.ПолучитьДанные());
			Попытка
				Расширение.Удалить();
			Исключение
				ИнформацияОбОшибке = ИнформацияОбОшибке();
				ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
					НСтр("ru='При выполнении операции над расширением ""%1"" возникла ошибка:
                               |%2
                               |
                               |Убедитесь, что все расширения закрыты в конфигураторе.'
                               |;uk='При виконанні операції над розширенням ""%1"" помилка:
                               |%2
                               |
                               |Переконайтеся, що всі розширення закриті в конфігураторі.'"),
					Расширение.Имя,
					КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
				ВызватьИсключение ТекстОшибки;
			КонецПопытки;
			Индекс = Индекс - 1;
		КонецЦикла;
		ЗафиксироватьТранзакцию();
	Исключение
		ОтменитьТранзакцию();
		ВызватьИсключение;
	КонецПопытки;
	
	Возврат Новый Структура("Расширения, ДанныеРасширений", Расширения, ДанныеРасширений);
	
КонецФункции
Показать
5. oleg-x 26 23.09.20 14:14 Сейчас в теме
Ну для начала закройте конфигуратор и запустите клиент. Пусть БСП отработает.
6. impextr 88 23.09.20 15:18 Сейчас в теме
(5)
Прикрепленные файлы:
7. oleg-x 26 23.09.20 15:23 Сейчас в теме
(6) Не увидел, читаю ошибку. Вполне возможно повис сеанс или еще что то. Как вариант запустите под другим пользователем, будет так же ругаться на этого пользователя или на того кто запустил.
8. impextr 88 23.09.20 15:43 Сейчас в теме
(7) при активном расширении ни под каким пользователем не дает зайти с такой ошибкой

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

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

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

Т.е. таки точно проблема в том, что не может отработать обновление идентификаторов объектом МД.
10. oleg-x 26 23.09.20 16:29 Сейчас в теме
(9) Пробовали запустить отладку с ключем "/РежимОтладки"
11. impextr 88 23.09.20 16:39 Сейчас в теме
(10) она у меня постоянно включена
12. oleg-x 26 23.09.20 16:43 Сейчас в теме
(11) Я не знаю с чем это связано, есть обсуждение на партнерском форуме (у меня нет доступа туда), но советуют при отладке расширения запускать отладку из конфигуратора с параметром /РежимОтладки. И этот параметр не связан режимом debug на сервере.
14. impextr 88 23.09.20 16:46 Сейчас в теме
13. impextr 88 23.09.20 16:44 Сейчас в теме
Проблему удалось обойти, но не совсем понятно на сколько это корректно.

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

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


т.е. просто отключил команду вызывающую исключение
It-developer; +1 Ответить
15. impextr 88 24.09.20 10:18 Сейчас в теме
(13) в конечном итоге осталось невыясненным почему расширение не удалялось программно, но разработчики типовой конфигурации не правы в том, что вводят пользователя в заблуждение тем, что допускают что расширение может не удаляться только из-за того, что оно занято конфигуратором. Написали бы просто - не удаляется расширение, возможная причина конфигуратор.
It-developer; +1 Ответить
16. It-developer 24 18.11.21 18:33 Сейчас в теме
Опять у меня проблема с этой частью. Сейчас с " Расширение.Удалить();" когда пытался сделать "/С ЗапуститьОбновлениеИнформационнойБазы". Для файловой все работает, для SQL - эта строка просто не выполняется и все валится. В целом проблема решилась пришлось использовать: Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеДанных(Истина, ЛОЖЬ,"Полный"); плюс еще кучу мест пришлось поменять.

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

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

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)