Имя: Пароль:
1C
1С v8
Удалить из регистра сведений "ненужные" записи
0 Serg_1960
 
13.03.12
19:03
Из независимого, периодического регистра сведений ОсновныеСпецификацииНоменклатуры (это УПП) нужно удалить записи, в которых спецификация помечена на удаление (ресурс регистра СпецификацииНоменклатуры)...
1 Serg_1960
 
13.03.12
19:04
Написал простенький алгоритм:

   Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
                  |    ОсновныеСпецификацииНоменклатуры.Номенклатура,
                  |    ОсновныеСпецификацииНоменклатуры.ХарактеристикаНоменклатуры,
                  |    ОсновныеСпецификацииНоменклатуры.Подразделение
                  |ИЗ
                  |    РегистрСведений.ОсновныеСпецификацииНоменклатуры КАК ОсновныеСпецификацииНоменклатуры
                  |ГДЕ
                  |    ОсновныеСпецификацииНоменклатуры.СпецификацияНоменклатуры.ПометкаУдаления = ИСТИНА
                  |    И ОсновныеСпецификацииНоменклатуры.СпецификацияНоменклатуры.ЭтоГруппа = ЛОЖЬ";
                 
   Выборка = Запрос.Выполнить().Выбрать();
   
   Пока Выборка.Следующий() Цикл
       
         НаборЗаписей=РегистрыСведений.ОсновныеСпецификацииНоменклатуры.СоздатьНаборЗаписей();
         НаборЗаписей.Отбор.Номенклатура.Установить(Выборка.Номенклатура);
         НаборЗаписей.Отбор.ХарактеристикаНоменклатуры.Установить(Выборка.ХарактеристикаНоменклатуры);
         НаборЗаписей.Отбор.Подразделение.Установить(Выборка.Подразделение);
       
       НаборЗаписей.Прочитать();
       
       ВсегоЗаписей = НаборЗаписей.Количество();
       
       Для ОбратныйИндекс = 1 По ВсегоЗаписей Цикл
           Элемент = НаборЗаписей[ВсегоЗаписей - ОбратныйИндекс];
           Если Элемент.СпецификацияНоменклатуры.ПометкаУдаления Тогда
               НаборЗаписей.Удалить(Элемент);
           КонецЕсли;
       КонецЦикла;
       
         НаборЗаписей.Записать();
       
   КонецЦикла;
2 Serg_1960
 
13.03.12
19:05
Не нравится мне строка "Если Элемент.СпецификацияНоменклатуры.ПометкаУдаления Тогда".

А как иначе?
3 ptrtss
 
13.03.12
19:07
Фильтруйте просто по спецификации и просто записывайте пустой набор записей
4 ptrtss
 
13.03.12
19:08
Не обязательно в отборе указывать все измерения
5 Kashemir
 
13.03.12
19:09
(4) Все "основные" - более чем обязательно
6 Serg_1960
 
13.03.12
19:10
СпецификацияНоменклатуры - это не измерение. Это ресурс. Отбор по нему - "Низя"(с)
7 Kashemir
 
13.03.12
19:11
Как вариант - сначала получить временную таблицу - проиндексировать и проверять на вхождение
8 ptrtss
 
13.03.12
19:12
(5)
Не уверен в этом
9 Kashemir
 
13.03.12
19:12
(7) Отменяется - не дочитал тз
10 ptrtss
 
13.03.12
19:12
(6)
Мм...
11 Kashemir
 
13.03.12
19:13
(8) А зря.
12 Serg_1960
 
13.03.12
19:14
Сообственно говоря, алгоритм - рабочий. Но вот строка "Элемент.СпецификацияНоменклатуры.ПометкаУдаления" - чтение объекта вызывает из базы. Так ведь? А это совсем не комильфо :(
13 ptrtss
 
13.03.12
19:14
ВГраница = ВсегоЗаписей-1
Для ОбратныйИндекс = 0 По ВГраница Цикл
           Элемент = НаборЗаписей[ВГраница - ОбратныйИндекс];

Лучше так ^^
14 ptrtss
 
13.03.12
19:15
(12)
Вы эту обработку каждую секунду будете запускать?))
15 ptrtss
 
13.03.12
19:16
Хотя, не, про ВГраница это не обязательно, и так хорошо
16 ptrtss
 
13.03.12
19:17
Можно в выборку взять номера записей с помеченными спецификациями, а итоги сделать по измерениям
17 Serg_1960
 
13.03.12
19:18
(14) Нет :) Но записей в этом регистре и спецификаций, помеченных на удаление - мама не горюй :(
18 Kashemir
 
13.03.12
19:18
(12) Не комильфо - но альтернативы лучше не вижу
19 Serg_1960
 
13.03.12
19:21
Ок. Буду думать дальше. Если алгоритм надолго повесит (заблокирует) регистр - меня самого узверы повесят.
20 Kashemir
 
13.03.12
19:21
(17) Кстати тут можно напрямую скульным запросом удалить. Ибо все равно регистр сведений независимый - ничем кроме индексов не связан
21 Kashemir
 
13.03.12
19:22
+(20) Конечно если нет распределени
22 Serg_1960
 
13.03.12
19:34
Хм... это мысль. Спасибо. Но у меня РИБ-база :( И наверняка после обмена придется повторить "очистку".
23 n koretsky
 
13.03.12
19:57
(22) кроме того, может, стоит рассмотреть вариант избежать подобного рода ситуаций.
а именно - в обработке при отмене проведения удалять сходу записи из регистра?
24 Serg_1960
 
13.03.12
20:12
(23) Сорри, Вы не в теме :(
25 Fram
 
13.03.12
20:20
(12) что мешает вытащить в выборку запроса пометку удаления?
26 Fram
 
13.03.12
20:21
(25) упс. туплю под вечер
2 + 2 = 3.9999999999999999999999999999999...