Обновление на УТ для РБ 3.5.8.383 с модулем CRM 3.1.23.5

1. Xershi 1519 17.04.24 00:37 Сейчас в теме
Приветствую, коллеги!
Наконец дошли руки до обновления и вот опять ошибка в обработчиках обновления:
Запись не верна! Значение поля "Вид папки" не может быть пустым!: Папка учетной записи: X@XXX.XX, (Регистр сведений: Папки учетных записей; Номер строки: 4)

Технические подробности:
Ошибка выполнения фонового задания ДлительныеОперации.ВыполнитьСКонтекстомКлиента с идентификатором 2ed2dadf-27df-47a0-a632-f73bf03c53b7 по причине
Запись не верна! Значение поля "Вид папки" не может быть пустым!: Папка учетной записи: X@eXXX.XX, (Регистр сведений: Папки учетных записей; Номер строки: 4)
{РегистрСведений.CRM_ПапкиУчетныхЗаписей.МодульМенеджера(107)}:НаборЗаписей.Записать();
{РегистрСведений.CRM_ПапкиУчетныхЗаписей.МодульМенеджера(82)}:РегистрыСведений.CRM_ПапкиУчетныхЗаписей.ЗаполнитьПоУмолчанию();
{(1)}:РегистрыСведений.CRM_ПапкиУчетныхЗаписей.ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры[0])
{ОбщийМодуль.ОбщегоНазначения.Модуль(5287)}:Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
{ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль(4628)}:ОбщегоНазначения.ВыполнитьМетодКонфигурации(КонтекстОбработчика.ИмяОбработчика, ПараметрыВызова);
{(1)}:ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенныйОбработчик(Параметры[0],Параметры[1])
{ОбщийМодуль.ОбщегоНазначения.Модуль(5287)}:Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
{ОбщийМодуль.ДлительныеОперации.Модуль(1290)}:ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
{ОбщийМодуль.ДлительныеОперации.Модуль(1280)}:ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры);

по причине:
Запись не верна! Значение поля "Вид папки" не может быть пустым!: Папка учетной записи: X@XXX.XX, (Регистр сведений: Папки учетных записей; Номер строки: 4)

См. также журнал регистрации.
{ОбщийМодуль.ДлительныеОперации.Модуль(861)}:ВызватьИсключение ТекстОшибки;
{ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль(5108)}:ЗаданиеВыполнено = ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания);
{ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль(5201)}:Если ЗавершитьПотокиВыполнившиеФЗ(Потоки, Группы) Тогда
{ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль(3522)}:ОжидатьСвободныйПоток(Группы);
Показать

Раскопав код пришел к данным приводящим ошибку.
Реквизит справочника ПапкиЭлектронныхПисем.CRM_Вид не заполнен.
Проанализировав все хранилище с 2016 года не нашел, чтобы был косяк в заполнении этого реквизита, но возможно проблема была еще ранее!
Заполнение этого реквизита поиском по конфигурации идет из модуля CRM_УправлениеЭлектроннойПочтой.СоздатьПредопределенныеПапкиЭлектронныхПисемДляУчетнойЗаписи­
1С:Предприятие 8.3 (8.3.20.1789)
Управление торговлей для Беларуси, редакция 3.5.8.383
CRMМодуль 3.1.23.5
Прикрепленные файлы:
Найденные решения
2. Xershi 1519 17.04.24 12:32 Сейчас в теме
Проанализировав все данные конфигураций понял, что проблема вылезла еще раньше.
Управление торговлей для Беларуси, редакция 3.4.7.155 на этой версии она была уже.
Написал 2 скрипта в ИР:
Для Справочник.ПапкиЭлектронныхПисем:
Если ТипЗнч(Объект.Ссылка) = Тип("СправочникСсылка.ПапкиЭлектронныхПисем") Тогда
	Объект.ОбменДанными.Загрузка = Истина;
	Объект.CRM_Вид = Перечисления.CRM_ВидыПапокЭлектроннойПочты.ПустаяСсылка();
	Объект.Записать();
КонецЕсли;

Чтобы очистить ошибки и потом записать правильные данные в случае чего!
Для Справочник.УчетныеЗаписиЭлектроннойПочты:
Если ТипЗнч(Объект.Ссылка) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") Тогда
	
	ЭтоОбновление3_5_8 = Метаданные.РегистрыСведений.Найти("CRM_ПапкиУчетныхЗаписей") <> Неопределено;
	
	УчетнаяЗапись = Объект.Ссылка;

	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Владелец", УчетнаяЗапись);
	Запрос.Текст = "ВЫБРАТЬ
	               |	ПапкиЭлектронныхПисем.Наименование,
	               |	ПапкиЭлектронныхПисем.CRM_Вид,
	               |	ПапкиЭлектронныхПисем.РеквизитДопУпорядочивания,
	               |	ПапкиЭлектронныхПисем.Ссылка
	               |ИЗ
	               |	Справочник.ПапкиЭлектронныхПисем КАК ПапкиЭлектронныхПисем
	               |ГДЕ
	               |	ПапкиЭлектронныхПисем.Владелец = &Владелец
	               |	И ПапкиЭлектронныхПисем.ПредопределеннаяПапка";
	   
	//МассивИмеющихсяПапок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Наименование");
	ТаблицаИмеющихсяПапок = Запрос.Выполнить().Выгрузить();

	Для Индекс = 0 По Перечисления.CRM_ВидыПапокЭлектроннойПочты.Количество()-1 Цикл
		
		ВидПапки = Перечисления.CRM_ВидыПапокЭлектроннойПочты[Индекс];
		ИмяПапки = Строка(ВидПапки);
		
		СтрокаТаблицы = ТаблицаИмеющихсяПапок.Найти(ИмяПапки, "Наименование");
		
		//Если МассивИмеющихсяПапок.Найти(ИмяПапки) = Неопределено Тогда
		Если СтрокаТаблицы = Неопределено Тогда
				
			ПапкаОбъект = Справочники.ПапкиЭлектронныхПисем.СоздатьЭлемент();
			ПапкаОбъект.УстановитьНовыйКод();
			ПапкаОбъект.ОбменДанными.Загрузка		= Истина;
			ПапкаОбъект.Владелец					= УчетнаяЗапись;
			ПапкаОбъект.Наименование				= ИмяПапки;
			ПапкаОбъект.CRM_Вид						= ВидПапки;
			ПапкаОбъект.РеквизитДопУпорядочивания	= Индекс + 1;
			ПапкаОбъект.ПредопределеннаяПапка		= Истина;
			ПапкаОбъект.Записать();
			
			Если ЭтоОбновление3_5_8 Тогда
				РегистрыСведений.CRM_ПапкиУчетныхЗаписей.УстановитьПапку(УчетнаяЗапись, ВидПапки, ПапкаОбъект.Ссылка);
			КонецЕсли;
			
		Иначе
			
			ПапкаОбъект = СтрокаТаблицы.Ссылка.ПолучитьОбъект();
			//ПапкаОбъект.УстановитьНовыйКод();
			ПапкаОбъект.ОбменДанными.Загрузка		= Истина;
			//ПапкаОбъект.Владелец					= УчетнаяЗапись;
			//ПапкаОбъект.Наименование				= ИмяПапки;
			ПапкаОбъект.РеквизитДопУпорядочивания	= Индекс + 1;
			ПапкаОбъект.ПредопределеннаяПапка		= Истина;
			ПапкаОбъект.CRM_Вид						= ВидПапки;
			ПапкаОбъект.Записать();
			
			Если ЭтоОбновление3_5_8 Тогда			
				РегистрыСведений.CRM_ПапкиУчетныхЗаписей.УстановитьПапку(УчетнаяЗапись, ВидПапки, ПапкаОбъект.Ссылка);
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЦикла;

КонецЕсли;
Показать

В УТ 3.5.8 появляется новый регистр сведений CRM_ПапкиУчетныхЗаписей. Чтобы скрипт запустить до установки этого обновления и не получать ошибок. Но если уже обновились, то он сделает все как типовая обработка и даже лучше! Код взят как раз из разных версий обновлений.
3. Xershi 1519 17.04.24 12:34 Сейчас в теме
После этого вылезла еще одна проблема.
Не удалось записать данные в регистр РегистрНакопления.РасчетыСКлиентамиПоДокументам , по причине: Конфликт блокировок при выполнении транзакции:
Превышено максимальное время ожидания предоставления блокировки
{ОбщийМодуль.ОбновлениеИнформационнойБазы.Модуль(113)}:НаборЗаписей.Записать(Замещать);
{РегистрНакопления.РасчетыСКлиентамиПоДокументам.МодульМенеджера(340)}:ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей);
{(1)}:РегистрыНакопления.РасчетыСКлиентамиПоДокументам.ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры[0])
{ОбщийМодуль.ОбщегоНазначения.Модуль(5287)}:Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
{ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль(4628)}:ОбщегоНазначения.ВыполнитьМетодКонфигурации(КонтекстОбработчика.ИмяОбработчика, ПараметрыВызова);
{(1)}:ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенныйОбработчик(Параметры[0],Параметры[1])
{ОбщийМодуль.ОбщегоНазначения.Модуль(5287)}:Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
{ОбщийМодуль.ДлительныеОперации.Модуль(1290)}:ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
{ОбщийМодуль.ДлительныеОперации.Модуль(1280)}:ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры);

по причине:
Конфликт блокировок при выполнении транзакции:
Превышено максимальное время ожидания предоставления блокировки
Показать

Обновление выполняется более 12 часов.
В ЖР обнаружил проблему с
РегистрыНакопления.РасчетыСКлиентамиПоДокументам.ОбработатьДанныеДляПереходаНаНовуюВерсию
Почему то постоянно падало в конфликт блокировок. Возможно пересекалось с другими объектами и выполнялось в 1 поток.
Я решил просто отменить фоновые задания и по новой запустить их. Конфликты сразу ушли и обработка запустилась в многопоточном режиме! Хотя спустя 10 минут вылезло еще парочку блокировок, но уже почти все объекты были обработаны, если затормозит, то в течении часа перезапустите еще раз.
Успехов в обновлении!
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Xershi 1519 17.04.24 12:32 Сейчас в теме
Проанализировав все данные конфигураций понял, что проблема вылезла еще раньше.
Управление торговлей для Беларуси, редакция 3.4.7.155 на этой версии она была уже.
Написал 2 скрипта в ИР:
Для Справочник.ПапкиЭлектронныхПисем:
Если ТипЗнч(Объект.Ссылка) = Тип("СправочникСсылка.ПапкиЭлектронныхПисем") Тогда
	Объект.ОбменДанными.Загрузка = Истина;
	Объект.CRM_Вид = Перечисления.CRM_ВидыПапокЭлектроннойПочты.ПустаяСсылка();
	Объект.Записать();
КонецЕсли;

Чтобы очистить ошибки и потом записать правильные данные в случае чего!
Для Справочник.УчетныеЗаписиЭлектроннойПочты:
Если ТипЗнч(Объект.Ссылка) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") Тогда
	
	ЭтоОбновление3_5_8 = Метаданные.РегистрыСведений.Найти("CRM_ПапкиУчетныхЗаписей") <> Неопределено;
	
	УчетнаяЗапись = Объект.Ссылка;

	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Владелец", УчетнаяЗапись);
	Запрос.Текст = "ВЫБРАТЬ
	               |	ПапкиЭлектронныхПисем.Наименование,
	               |	ПапкиЭлектронныхПисем.CRM_Вид,
	               |	ПапкиЭлектронныхПисем.РеквизитДопУпорядочивания,
	               |	ПапкиЭлектронныхПисем.Ссылка
	               |ИЗ
	               |	Справочник.ПапкиЭлектронныхПисем КАК ПапкиЭлектронныхПисем
	               |ГДЕ
	               |	ПапкиЭлектронныхПисем.Владелец = &Владелец
	               |	И ПапкиЭлектронныхПисем.ПредопределеннаяПапка";
	   
	//МассивИмеющихсяПапок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Наименование");
	ТаблицаИмеющихсяПапок = Запрос.Выполнить().Выгрузить();

	Для Индекс = 0 По Перечисления.CRM_ВидыПапокЭлектроннойПочты.Количество()-1 Цикл
		
		ВидПапки = Перечисления.CRM_ВидыПапокЭлектроннойПочты[Индекс];
		ИмяПапки = Строка(ВидПапки);
		
		СтрокаТаблицы = ТаблицаИмеющихсяПапок.Найти(ИмяПапки, "Наименование");
		
		//Если МассивИмеющихсяПапок.Найти(ИмяПапки) = Неопределено Тогда
		Если СтрокаТаблицы = Неопределено Тогда
				
			ПапкаОбъект = Справочники.ПапкиЭлектронныхПисем.СоздатьЭлемент();
			ПапкаОбъект.УстановитьНовыйКод();
			ПапкаОбъект.ОбменДанными.Загрузка		= Истина;
			ПапкаОбъект.Владелец					= УчетнаяЗапись;
			ПапкаОбъект.Наименование				= ИмяПапки;
			ПапкаОбъект.CRM_Вид						= ВидПапки;
			ПапкаОбъект.РеквизитДопУпорядочивания	= Индекс + 1;
			ПапкаОбъект.ПредопределеннаяПапка		= Истина;
			ПапкаОбъект.Записать();
			
			Если ЭтоОбновление3_5_8 Тогда
				РегистрыСведений.CRM_ПапкиУчетныхЗаписей.УстановитьПапку(УчетнаяЗапись, ВидПапки, ПапкаОбъект.Ссылка);
			КонецЕсли;
			
		Иначе
			
			ПапкаОбъект = СтрокаТаблицы.Ссылка.ПолучитьОбъект();
			//ПапкаОбъект.УстановитьНовыйКод();
			ПапкаОбъект.ОбменДанными.Загрузка		= Истина;
			//ПапкаОбъект.Владелец					= УчетнаяЗапись;
			//ПапкаОбъект.Наименование				= ИмяПапки;
			ПапкаОбъект.РеквизитДопУпорядочивания	= Индекс + 1;
			ПапкаОбъект.ПредопределеннаяПапка		= Истина;
			ПапкаОбъект.CRM_Вид						= ВидПапки;
			ПапкаОбъект.Записать();
			
			Если ЭтоОбновление3_5_8 Тогда			
				РегистрыСведений.CRM_ПапкиУчетныхЗаписей.УстановитьПапку(УчетнаяЗапись, ВидПапки, ПапкаОбъект.Ссылка);
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЦикла;

КонецЕсли;
Показать

В УТ 3.5.8 появляется новый регистр сведений CRM_ПапкиУчетныхЗаписей. Чтобы скрипт запустить до установки этого обновления и не получать ошибок. Но если уже обновились, то он сделает все как типовая обработка и даже лучше! Код взят как раз из разных версий обновлений.
3. Xershi 1519 17.04.24 12:34 Сейчас в теме
После этого вылезла еще одна проблема.
Не удалось записать данные в регистр РегистрНакопления.РасчетыСКлиентамиПоДокументам , по причине: Конфликт блокировок при выполнении транзакции:
Превышено максимальное время ожидания предоставления блокировки
{ОбщийМодуль.ОбновлениеИнформационнойБазы.Модуль(113)}:НаборЗаписей.Записать(Замещать);
{РегистрНакопления.РасчетыСКлиентамиПоДокументам.МодульМенеджера(340)}:ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей);
{(1)}:РегистрыНакопления.РасчетыСКлиентамиПоДокументам.ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры[0])
{ОбщийМодуль.ОбщегоНазначения.Модуль(5287)}:Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
{ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль(4628)}:ОбщегоНазначения.ВыполнитьМетодКонфигурации(КонтекстОбработчика.ИмяОбработчика, ПараметрыВызова);
{(1)}:ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенныйОбработчик(Параметры[0],Параметры[1])
{ОбщийМодуль.ОбщегоНазначения.Модуль(5287)}:Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
{ОбщийМодуль.ДлительныеОперации.Модуль(1290)}:ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
{ОбщийМодуль.ДлительныеОперации.Модуль(1280)}:ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры);

по причине:
Конфликт блокировок при выполнении транзакции:
Превышено максимальное время ожидания предоставления блокировки
Показать

Обновление выполняется более 12 часов.
В ЖР обнаружил проблему с
РегистрыНакопления.РасчетыСКлиентамиПоДокументам.ОбработатьДанныеДляПереходаНаНовуюВерсию
Почему то постоянно падало в конфликт блокировок. Возможно пересекалось с другими объектами и выполнялось в 1 поток.
Я решил просто отменить фоновые задания и по новой запустить их. Конфликты сразу ушли и обработка запустилась в многопоточном режиме! Хотя спустя 10 минут вылезло еще парочку блокировок, но уже почти все объекты были обработаны, если затормозит, то в течении часа перезапустите еще раз.
Успехов в обновлении!
4. Xershi 1519 17.04.24 14:21 Сейчас в теме
(3) еще добавлю, что иногда обработка 1 объекта шла более 5 минут. Итог все остальные задачи в дедлок падали. Выход вижу только в отмене точечно через кластер длительных обработчиков, чтобы не мешали обрабатывать данные остальным. Иначе это 17 часов обрабатывалось и то не факт, что закончилось без помощи и ручного перезапуска!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот