Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Удаление элементов справочника

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

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

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

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

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

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

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

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

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

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

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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует