Имя: Пароль:
1C
1С v8
массовое удаление номенклатуры v8.2
,
0 Njurick
 
04.07.12
21:35
Добрый вечер!
Помогите советом.
Ситуация: 30 баз, в каждой около 145-150 тысяч! позиций номенклатуры, ссылки есть на 5% из всего списка. Решено было сначала искать ссылки, потом помечать на удаление, потом удалять то что не используется, но это все безумно долго, времени нет. Насколько неправильно будет пометить  всю номенклатуру на удаление, удалить все что можно и снять пометку, не напортачу ли я так? Базы Бух Государственного Учреждения.
1 izekia
 
04.07.12
21:35
дроп тейбл?
2 izekia
 
04.07.12
21:36
(0) даже страшно подумать что это за зачистка в госучереждениях)
3 Живой Ископаемый
 
04.07.12
21:37
нет, не напортачишь, а и даже  если все-таки да, то скажешь что тебе на форуме сказали что можно
4 Njurick
 
04.07.12
21:37
не сказала: базы периферийные, побились из-за некорректных обменов с центром.
5 Njurick
 
04.07.12
21:38
)) меня просто запугали, что при массовой пометке, и следом зачистке я могу убить корректные подчиненные объекты. но откуда они там корректные.
6 Maniac
 
04.07.12
21:38
Напиши обработку которая найдет номенклатуру которой нет в приходных накладных. этого более чем достаточно.
7 AlexNew
 
04.07.12
21:38
(1) А может у нее файловая?
8 izekia
 
04.07.12
21:39
о, сейчас дам обработку)
9 Maniac
 
04.07.12
21:39
выбираешь весь справочник номенклатуры запросом. к нему левым поступление.
если в выборке нету ссылки на поступление - помечаем на удаление
10 izekia
 
04.07.12
21:39
(7) шифт-дел, остальное руками набьют - быстрее будет чем убивать 140к со ссылками в файловой)
11 AlexNew
 
04.07.12
21:40
(6) Правда? А если они списывали не пойми что.
12 izekia
 
04.07.12
21:40
(9) Женя, иди быстрее решение пиши, продажь его за бабло, будет у тебя много счастливых государственных клиентов
13 Njurick
 
04.07.12
21:40
ага, файловая)
14 Maniac
 
04.07.12
21:41
(11) она не удалится и останется. надо делать методом исключений
15 PiVa123
 
04.07.12
21:41
(5)
Пол: Мужской
Njurick: не сказала:

Странно как-то звучит - или я что-то не понимаю в нынешней жизни

А по вопросу "УдалитьОбъекты" решить ваши проблемы, если действительно ссылок на остальное нет
16 izekia
 
04.07.12
21:41
это первая часть:

   удаляемыеОбъекты = Новый ТаблицаЗначений;
   удаляемыеОбъекты.Колонки.Добавить("Ссылка");
   удаляемыеОбъекты.Колонки.Добавить("Метаданные");
   удаляемыеОбъекты.Колонки.Добавить("Итерация");
   удаляемыеОбъекты.Индексы.Добавить("Ссылка");
   
   НайтиСсылки(ТабУдаляемыеОбъекты.ВыгрузитьКолонку("Ссылка"), удаляемыеОбъекты);
   удаляемыеОбъекты.Сортировать("Итерация Убыв");
   НачатьТранзакцию();
   Для Каждого строка из удаляемыеОбъекты Цикл
       Если Найти(ТипЗнч(строка.Ссылка), "Регистр сведений ключ записи") = 0 Тогда
           строка.Ссылка.ПолучитьОбъект().УстановитьПометкуУдаления(Истина);
       Иначе
           запись = РегистрыСведений[строка.Метаданные.Имя].СоздатьМенеджерЗаписи();
           ЗаполнитьЗначенияСвойств(запись, строка.Ссылка);
           запись.Прочитать();
           Если запись.Выбран() Тогда
               запись.Удалить();
           КонецЕсли;
       КонецЕсли;
   КонецЦикла;
   ЗафиксироватьТранзакцию();
17 izekia
 
04.07.12
21:42
это вторая:
Процедура НайтиСсылки(ссылки, найденныеОбъекты, итерация = 0)
   ссылкиНаОбъекты = НайтиПоСсылкам(ссылки);
   Сообщить("Итерация: " + итерация + ". Найдено " + ссылкиНаОбъекты.Количество() + " объектов");                      
   ссылкиНаУдаляемыеОбъекты = Новый Массив;
   Для каждого строка из ссылкиНаОбъекты Цикл
       Если найденныеОбъекты.Найти(строка[1], "Ссылка") = Неопределено Тогда
           строкаОбъектов = найденныеОбъекты.Добавить();
           строкаОбъектов.Ссылка = строка[1];
           строкаОбъектов.Метаданные = строка[2];
           строкаОбъектов.Итерация = итерация;
           
           Если Найти(ТипЗнч(строка[1]), "Регистр сведений ключ записи") = 0 Тогда
               ссылкиНаУдаляемыеОбъекты.Добавить(строка[1]);
           Иначе
               строкаОбъектов.Итерация = -1;
           КонецЕсли;
       КонецЕсли;
   КонецЦикла;
   Если ссылкиНаУдаляемыеОбъекты.Количество() > 0 Тогда
       НайтиСсылки(ссылкиНаУдаляемыеОбъекты, найденныеОбъекты, итерация + 1);
   КонецЕсли;
КонецПроцедуры
18 izekia
 
04.07.12
21:42
Женя, как продашь - с тебя 150к
19 AlexNew
 
04.07.12
21:43
(13) Хороший номер, радуешься правильно.
20 Njurick
 
04.07.12
21:44
сейчас сравню с обработкой, что у меня)
21 Njurick
 
04.07.12
21:44
Спасибо)
22 Defender77
 
04.07.12
21:44
(0) я под это дело обработку давно написал. можно взять тут: http://infostart.ru/public/77323/
23 izekia
 
04.07.12
21:45
(22) не возьмешь уже)
24 izekia
 
04.07.12
21:46
(20) у меня она немного наоборот работает, ей скармливаешь ссылки а она все что их держит тоже помечает на удаление
25 Defender77
 
04.07.12
21:46
э... в смысле?
26 AlexNew
 
04.07.12
21:46
(24) Круто!