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


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Как быстро удалить список документов в 1с77 торговля склад

v7: Как быстро удалить список документов в 1с77 торговля склад
Я
   VBMADD
 
23.12.12 - 19:49
Привет братьям по разуму.

Запустил обратотку на выполнение, а там оказалось 100 000 документов.
Уже 5 часов удаляет а конца не видно.

можно ли как то ускорить такой процесс, как для этого нужно модернизировать обработку
Процедура Выполнить()
 //================================
 
Док = СоздатьОбъект("Документ.Чек"); 
    Док.ВыбратьДокументы(Дата1,Дата2);
    Колво=0;
    Пока Док.ПолучитьДокумент() = 1 Цикл
        Колво = Колво + 1;
    КонецЦикла;
Сообщить("Всего чеков - " + Колво); 

    Пока Док.ПолучитьДокумент() = 1 Цикл
        Док.СделатьНеПроведенным();
        Состояние(Колво + "Удален Чек № " + СокрЛП(Док.НомерДок) + " от " + Док.ДатаДок);
        Док.Удалить();
        Колво = Колво + 1;
    КонецЦикла;
КонецПроцедуры


Спасибо всем кто откликнулся
 
 
   Torquader
 
1 - 23.12.12 - 19:51
Чего-то у вас в обработке совсем не то написано.
По крайней мере, второй цикл выполняться не должен.

Потом, полезно удаление "завернуть" в транзакцию по 10-100 документов - будет быстрее.
Также нежелательно удалять документы сразу в выборке.
   Скользящий
 
2 - 23.12.12 - 19:52
А не проще дбфку с нужным документом грохнуть? )
   Cthulhu
 
3 - 23.12.12 - 19:53
(2): а движения - хренсними, Ок.
   ДенисЧ
 
4 - 23.12.12 - 19:53
(3) А ТИИ на что? :-)
   Torquader
 
5 - 23.12.12 - 19:54
(2) Во-первых, dbf-ки может быть и две (а иногда и ни одной), но журнале ссылки на документ останутся, да и распровести нужно, чтобы не было движений в регистрах от неизвестно кого.
   МимохожийОднако
 
6 - 23.12.12 - 19:54
Процедура Выполнить()
 //================================
 
 
Док = СоздатьОбъект("Документ.Чек"); 
    Док.ВыбратьДокументы(Дата1,Дата2);
    Колво=0;
    Пока Док.ПолучитьДокумент() = 1 Цикл
   //    Колво = Колво + 1;
 
   //КонецЦикла;
 
//Сообщить("Всего чеков - " + Колво); 

 //  Пока Док.ПолучитьДокумент() = 1 Цикл
 
        Док.СделатьНеПроведенным();
        Состояние(Колво + "Удален Чек № " + СокрЛП(Док.НомерДок) + " от " + Док.ДатаДок);
        Док.Удалить();
    //   Колво = Колво + 1;
 
    КонецЦикла;
КонецПроцедуры
   VBMADD
 
7 - 23.12.12 - 19:54
Вот это выполняется но долго

Док = СоздатьОбъект("Документ.Чек"); 
    Колво=0;
Док.ВыбратьДокументы(Дата1,Дата2);
    Пока Док.ПолучитьДокумент() = 1 Цикл
          Док.СделатьНеПроведенным();
         Состояние(Колво + "Удален Чек № " + СокрЛП(Док.НомерДок) + " от " + Док.ДатаДок);
         Док.Удалить();
         Колво = Колво + 1;
    КонецЦикла;
   Cthulhu
 
8 - 23.12.12 - 19:55
(4): быстрое такое, угу...
   Torquader
 
9 - 23.12.12 - 19:55
Не - ребята - съезд дятлов в другой ветке - конечно - есть много способов - запоганить базу, но удалить dbf-это как раз из этого.
   ДенисЧ
 
10 - 23.12.12 - 19:56
Док.ВыбратьДокументы(Дата1,Дата2);
сч = 0;
начать транзакцию();
    Пока Док.ПолучитьДокумент() = 1 Цикл
          Док.СделатьНеПроведенным();
         Состояние(Колво + "Удален Чек № " + СокрЛП(Док.НомерДок) + " от " + Док.ДатаДок);
         Док.Удалить();
         Колво = Колво + 1;

сч = сч +1;
Если сч >= 1000 Тогда
ЗафиксироватьТранзакцию();
НачатьТранзакцию();
    КонецЦикла;
ЗафиксироватьТранзакцию();
 
 Рекламное место пустует
   VBMADD
 
11 - 23.12.12 - 19:56
(6) Это выполняется но уж очень медленно, а хотца как бы побыстрее
   VBMADD
 
12 - 23.12.12 - 19:57
(10) это будет быстрее ?
Почему?
   Cthulhu
 
13 - 23.12.12 - 19:57
(10): так оно будет начиная с 1000-го документа на каждом документе фиксировать транзакцию... вот времени-то сэкономится!.. )))
   Torquader
 
14 - 23.12.12 - 19:57
НачатьТранзакцию();
сч=1;
Колво=0;
док = СоздатьОбъект("Документ.Чек"); 
Док.ВыбратьДокументы(Дата1,Дата2);
Пока Док.ПолучитьДокумент() = 1 Цикл
 Док.СделатьНеПроведенным();
 Состояние(Колво + "Удален Чек № " + СокрЛП(Док.НомерДок) + " от " + Док.ДатаДок);
 Док.Удалить();
 сч=сч+1;
 Колво = Колво + 1;
 Если сч>100 Тогда
  ЗафиксироватьТранзакцию();
  сч=1;
  НачатьТранзакцию();
 КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();
   Скользящий
 
15 - 23.12.12 - 19:59
Прямыми запросами можно быстро удалить. но это надо темой владеть )
   Torquader
 
16 - 23.12.12 - 20:00
100 000 чеков - ну вы и наторговали под новый год.
   ДенисЧ
 
17 - 23.12.12 - 20:00
(13) Ви непоеврите, но таки да, оно будет таки быстрее. На дбф.
   VBMADD
 
18 - 23.12.12 - 20:01
(15) Ну дык раскрой тепу то по подробней...
   ДенисЧ
 
19 - 23.12.12 - 20:01
(12) Транзакции - они, с**а, такие... Пока не зафиксируешь - в памяти сидят... (для дбф)
   Torquader
 
20 - 23.12.12 - 20:02
(15) Основное время тратится на "СделатьНепроведенным" - его прямыми запросами очень сложно ускорить, так как нужно смотреть все движения, которые этот документ формирует, и удалять их.
А удаление - оно и штатно быстро выполняется.
   VBMADD
 
21 - 23.12.12 - 20:04
(17) Эдак процентов на 5 бастрее что ли
Вон спец про запросы тему поднял а раскравать подробней не хочет...
(20) Может убрать из обработки сделать непроведенным...
   Torquader
 
22 - 23.12.12 - 20:07
(21) И чем это поможет ?
Распроведение документов - достаточно медленная операция, и ускорить её можно только прямым выполнением того, что делает 1С при распроведении документа.
При удалении система сама распрводит документ, так что убирать эту команду не стоит.
   VBMADD
 
23 - 23.12.12 - 20:10
Запустил обработку от (14) с транзакциями засек время будем посмотреть
   Базис
 
24 - 23.12.12 - 20:14
ТА уже вспомнили?
   Скользящий
 
25 - 23.12.12 - 20:15
(18) Мне специалист по прямым запросам удалял документы из базы скульной где было около 25млн документов. В дбф вряд ли поможет. )
   Cthulhu
 
26 - 23.12.12 - 20:17
(17): Ви не поверите, но таки у Вас чито-то с глазами или где-то между ними и затылком. прочитать попробуйте по слогам и мой комментарий, и Ваш код (в котором обнуление щоччика при фиесации транзакций так мило позабыто).
   Скользящий
 
27 - 23.12.12 - 20:17
Поскольку база была бух, код тебе мало поможет. Сначала удалялись периодические реквизиты, потом очистка движений документов, потом удаление документов с контролем ссылочной целостности.

Для примера как удалялись движения в скуле.
Процедура Сформировать()
    Мета = СоздатьОбъект("MetaDatawork");
    Запрос = СоздатьОбъект("ODBCRecordset");
    Запрос.УстановитьТекстовыйПараметр("ВыбОперация",ВыбОперация);
    Сообщить("Время начала: "+ТекущееВремя());
    ТекстЗапроса = "
    |delete from _1sentry where Date_Time_DocId<:ВыбОперация~~~~";
    Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
    
    ТекстЗапроса = "
    |delete from _1soper where Date_Time_DocId<:ВыбОперация~~~~";
    Запрос.УстановитьТекстовыйПараметр("ВыбОперация",ВыбОперация);
    Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
    ТекстЗапроса = "
    |drop table [dbo].[_1SSBSEL]";
    Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
    ТекстЗапроса = "
    |drop table [dbo].[_1SACCSEL]";
    Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
    ТекстЗапроса = "
    |drop table _1sbkttl";
    Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
    ТекстЗапроса = "
    |drop table _1sbkttlc";
    Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
    ТекстЗапроса = "
    |update _1sjourn set closed = 0, ismark = 1 where Date_Time_Iddoc<:ВыбОперация~~~~";
    Запрос.УстановитьТекстовыйПараметр("ВыбОперация",ВыбОперация);
    Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
    
    Сообщить("Время окончания: "+ТекущееВремя());
КонецПроцедуры
   Тьма
 
28 - 23.12.12 - 20:21
(24)Прямые запросы проще, непонятно, что ли.
   VBMADD
 
29 - 23.12.12 - 20:29
(28) Если знаешь как дык черкни основной код
   VBMADD
 
30 - 23.12.12 - 20:30
Вобщем за 10 минут порядка 6000 документов удаляет по коду от(14)
   VBMADD
 
31 - 23.12.12 - 20:31
Не ошибся за 20 минут
   МимохожийОднако
 
32 - 23.12.12 - 20:33
Иногда полезно ТА поставить перед дата1
   Torquader
 
33 - 23.12.12 - 20:42
(30) С транзакциями проще прерывать транзакцию (Зафиксировать Начать) после трёх-четырёх секунд выполнения - как показала практика, система упирается в кеширование памяти на диск и кардинальное замедление работы как только не хватает места для хранения сделанных изменений.
 
 
   Cthulhu
 
34 - 23.12.12 - 23:18
(32): тогда и прямыми можно выносить движения - итоги то пересчитывать не надо...


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