Имя: Пароль:
1C
1С v8
Удаление элементов справочника
,
0 YHVVH
 
24.12.12
14:12
Можно ли несколькими фоновыми заданиями удалять РАЗНЫЕ элементы справочника.
т.е. разбиваю на порции, запихиваю в массивы, запускаю фоновые задания на каждую порцию, передаю туда соответствующий массив элементов.
В обработке задания перебираю массив и удаляю элементы методом Удалить().

Когда использую около 10 фоновых заданий появляются ошибки (в случае 1-4 заданий работает всегда, в случае 5-9 через раз)

Ошибка при вызове метода контекста (Удалить)
по причине:

Конфликт блокировок при выполнении транзакции:
Неустранимый конфликт блокировок"

Вопрос, как удалять элементы в "несколько потоков"?
1 YHVVH
 
24.12.12
14:12
+(0) в базе пользователей нет.
2 ДенисЧ
 
24.12.12
14:13
Блокировку управляемую накладывай...
3 YHVVH
 
24.12.12
14:15
(2) попробую щас
4 YHVVH
 
24.12.12
14:33
(2) а в какой момент устанавливать эту блокировку?
5 YHVVH
 
24.12.12
14:33
в фоновом задании или непосредственно перед вызовом ?
6 ДенисЧ
 
24.12.12
14:34
(4) когда у тебя получен набор элементов к удалениб
7 ДенисЧ
 
24.12.12
14:34
в задании
8 YHVVH
 
24.12.12
14:34
(7) не получается, тоже самое
9 vmv
 
24.12.12
14:36
мож там кофликт пересечения, т.е. разные порции(задания) пытаються удалить один и тот же элемент
10 YHVVH
 
24.12.12
14:36
(9) нет
11 YHVVH
 
24.12.12
14:38
вот код

&НаСервере
Процедура УдалитьНафигФоново(Знач МЗаписи)  Экспорт
   
   
       
   Для каждого эл ИЗ МЗаписи Цикл
       
       мС = Новый Массив;
       мС.Добавить(эл);
       
       Рез = НайтиПоСсылкам(мС);
       
       БлокировкаДанных = Новый БлокировкаДанных;
       ЭлементБлокировки = БлокировкаДанных.Добавить("Справочник.НоменклатураПоставщиков");
       ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
       ЭлементБлокировки.УстановитьЗначение("Ссылка", эл);
       БлокировкаДанных.Заблокировать();
       
       Об = эл.ПолучитьОбъект();
       Если Рез.Количество()=0 тогда
           Об.Удалить();
       иначе
           Об.УстановитьПометкуУдаления(Истина);
       КонецЕсли;
       
   КонецЦикла

КонецПроцедуры
12 vmv
 
24.12.12
14:39
попробуй работать с порциями через запрос с термом "ДЛЯ ИЗМЕНИНИЯ", тогда каждая порция будет захватывать "свой" набор данных, хотя я не спец по блокам, Гилева зови в помощь, ну и СУБД озвуч, тож не лишнее, если пострги, то не взлетит)
13 YHVVH
 
24.12.12
14:41
ms sql , на счет изменений можно попробовать , но боюсь это только решит проблему - захватывать "свой" набор данных.
14 vmv
 
24.12.12
14:42
(11) в подобном коде у меня была трабла на пустом месте, оазалось что текущая итерация идет быстрее, чем завершаться все операции по удалению в текущей - фантастически но было, правда на 8.1. ставил в цикле в начале итерации паузу

С тех пор я редко пользуюсь менеджерами для удаления
15 YHVVH
 
24.12.12
14:43
(14) С тех пор я редко пользуюсь менеджерами для удаления

не понял, поясни, а чем пользуешься?
16 vmv
 
24.12.12
14:43
я конечно туповат, но это не понимаю

 Если Рез.Количество()=0 тогда
           Об.Удалить();
       иначе
           Об.УстановитьПометкуУдаления(Истина);
       КонецЕсли;
есть матерые, разъясните
17 YHVVH
 
24.12.12
14:44
(16) а что не понятно? анализирую если есть ссылки то помечаю на удаления, если нет то удаляю.
18 vmv
 
24.12.12
14:46
(17) я бы помечал на удаление все безусловно, ибо никто не ведает, что твориться с БД при непосредственном удалении записи, возможно ошибка в этом
19 YHVVH
 
24.12.12
14:48
(18) желательно удалить
20 vmv
 
24.12.12
14:49
вот на группу вроде ссылок 0, да

ты ее грохаешь из базы без пометки, т.е. непосредственно

и потом начинаеться удалении, возможно в другом потоке, элементов этой группы.

куда должна послеть платформа разработчика сего универсализма?
21 vmv
 
24.12.12
14:50
если есть иерархия или подчинение, то лучше пометить группы/владельцев единоразово, а элементы уже крушить порциями. на третьем шаге - удалить группы штатно
22 YHVVH
 
24.12.12
14:53
(21) у меня элементы которые я удаляю могут принадлежать разным владельцам
23 YHVVH
 
24.12.12
14:53
я не подумал про это
24 YHVVH
 
24.12.12
14:54
возможно ты прав на счет владельца
25 YHVVH
 
24.12.12
14:55
+(22) т.е. на разным а одинаковым
26 YHVVH
 
24.12.12
14:56
ну тогда получается что число потоков будет ограниченно количеством владельцев
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn