Конфликт блокировок при зугрузке товаров из json

1. user779012 29.12.24 15:15 Сейчас в теме
Приветствую!
Подскажите как правильно установить блокировку при загрузке товаров в УНФ из json. В базе есть виды цен, которые рассчитываются динамически. Во время загрузки фоновое задание "Очередь расчета цен" блокирует справочник Номенклатуры и вываливается в ошибку. Делаю так :

Для Каждого СтрТЗ Из ТЗТовары Цикл
	НовыйТовар = Справочники.Номенклатура.СоздатьЭлемент();
	НовыйТовар.Наименование = СтрТЗ.Наименование; 
	НовыйТовар.Родитель = Группа2Уровня;
	НовыйТовар.НаименованиеПолное = СтрТЗ.Наименование;
	НовыйТовар.КатегорияНоменклатуры = Справочники.КатегорииНоменклатуры.НайтиПоНаименованию("Одежда");
	НовыйТовар.Артикул = СтрТЗ.Артикул;
	НовыйТовар.Комментарий = СтрТЗ.Описание;
	НовыйТовар.ИспользоватьХарактеристики = 1;
	НовыйТовар.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Запас;
	НовыйТовар.ЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.шт;
	НовыйТовар.ВидМаркировки = Перечисления.ВидыМаркировки.НеМаркируется; 
	НовыйТовар.МетодОценки = Перечисления.МетодОценкиЗапасов.ПоСредней;
	НовыйТовар.НаправлениеДеятельности = Справочники.НаправленияДеятельности.ОсновноеНаправление; 
	НовыйТовар.СпособПополнения = Перечисления.СпособыПополненияЗапасов.Закупка;
	НовыйТовар.СчетУчетаЗапасов = Планысчетов.Управленческий.СырьеИМатериалы;
	НовыйТовар.СчетУчетаЗатрат = Планысчетов.Управленческий.КоммерческиеРасходы;
	НовыйТовар.Записать();
КонецЦикла;
Показать


Пробую блокировать так, но тогда получаю Ошибку расчета цен из очереди:

НачатьТранзакцию();
Попытка	
БлокировкаДанных = Новый БлокировкаДанных;
ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("Справочник.Номенклатура");
ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный;  
БлокировкаДанных.Заблокировать(); 

// тут создание элемента

ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ЗаписьЖурналаРегистрации(НСтр("ru = 'Заметки'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение;
КонецПопытки;
Показать
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. erazh 30.12.24 10:57 Сейчас в теме
Ты блокируешь ВЕСЬ справочник. Управляемые блокировки не для этих целей предназначены. Нужно использовать:

ЭлементБлокировкиДанных.УстановитьЗначение();

либо (более подходит к твоему случаю)

ЭлементБлокировкиДанных.ИспользоватьИзИсточникаДанных();

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

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