Конфликт блокировок при зугрузке товаров из json
Приветствую!
Подскажите как правильно установить блокировку при загрузке товаров в УНФ из json. В базе есть виды цен, которые рассчитываются динамически. Во время загрузки фоновое задание "Очередь расчета цен" блокирует справочник Номенклатуры и вываливается в ошибку. Делаю так :
Пробую блокировать так, но тогда получаю Ошибку расчета цен из очереди:
Подскажите как правильно установить блокировку при загрузке товаров в УНФ из json. В базе есть виды цен, которые рассчитываются динамически. Во время загрузки фоновое задание "Очередь расчета цен" блокирует справочник Номенклатуры и вываливается в ошибку. Делаю так :
Для Каждого СтрТЗ Из ТЗТовары Цикл
НовыйТовар = Справочники.Номенклатура.СоздатьЭлемент();
НовыйТовар.Наименование = СтрТЗ.Наименование;
НовыйТовар.Родитель = Группа2Уровня;
НовыйТовар.НаименованиеПолное = СтрТЗ.Наименование;
НовыйТовар.КатегорияНоменклатуры = Справочники.КатегорииНоменклатуры.НайтиПоНаименованию("Одежда");
НовыйТовар.Артикул = СтрТЗ.Артикул;
НовыйТовар.Комментарий = СтрТЗ.Описание;
НовыйТовар.ИспользоватьХарактеристики = 1;
НовыйТовар.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Запас;
НовыйТовар.ЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.шт;
НовыйТовар.ВидМаркировки = Перечисления.ВидыМаркировки.НеМаркируется;
НовыйТовар.МетодОценки = Перечисления.МетодОценкиЗапасов.ПоСредней;
НовыйТовар.НаправлениеДеятельности = Справочники.НаправленияДеятельности.ОсновноеНаправление;
НовыйТовар.СпособПополнения = Перечисления.СпособыПополненияЗапасов.Закупка;
НовыйТовар.СчетУчетаЗапасов = Планысчетов.Управленческий.СырьеИМатериалы;
НовыйТовар.СчетУчетаЗатрат = Планысчетов.Управленческий.КоммерческиеРасходы;
НовыйТовар.Записать();
КонецЦикла;
ПоказатьПробую блокировать так, но тогда получаю Ошибку расчета цен из очереди:
НачатьТранзакцию();
Попытка
БлокировкаДанных = Новый БлокировкаДанных;
ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("Справочник.Номенклатура");
ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный;
БлокировкаДанных.Заблокировать();
// тут создание элемента
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ЗаписьЖурналаРегистрации(НСтр("ru = 'Заметки'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение;
КонецПопытки;
ПоказатьОтветы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Ты блокируешь ВЕСЬ справочник. Управляемые блокировки не для этих целей предназначены. Нужно использовать:
ЭлементБлокировкиДанных.УстановитьЗначение();
либо (более подходит к твоему случаю)
ЭлементБлокировкиДанных.ИспользоватьИзИсточникаДанных();
Если массив данных большой, то рекомендую разбить его на более мелкие партии для освобождения справочника от блокировки, чтобы платформа не послала через интервал таймаута.
ЭлементБлокировкиДанных.УстановитьЗначение();
либо (более подходит к твоему случаю)
ЭлементБлокировкиДанных.ИспользоватьИзИсточникаДанных();
Если массив данных большой, то рекомендую разбить его на более мелкие партии для освобождения справочника от блокировки, чтобы платформа не послала через интервал таймаута.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот