7.7 Документ.УдалитьСтроку()

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем dedalx7, 26 апр 2010.

  1. TopicStarter Overlay
    dedalx7
    Offline

    dedalx7 Опытный в 1С

    Регистрация:
    20 май 2009
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    Платформа 7.70.017

    Вот такой кусок кода:

    Код:
    ДокРасход.ВыбратьДокументы(НачМесяца(Дата1),КонМесяца(Дата1)); 
    Пока ДокРасход.ПолучитьДокумент() = 1 Цикл
    
    
    НН = 1;
    
    
    
    ДокРасход.ВыбратьСтроки();
    Пока ДокРасход.ПолучитьСтроку() = 1 Цикл 
    
    Пока НН = 1 Цикл
    
    Если ДокРасход.Кво = 0 Тогда
    НН = 1;
    ДокРасход.УдалитьСтроку();
    Продолжить;
    КонецЕсли;
    
    Если ПустоеЗначение(ДокРасход.Кво) = 1 Тогда
    НН = 1;
    ДокРасход.УдалитьСтроку();                
    Продолжить;
    КонецЕсли;
    
    НН = 0;        
    
    КонецЦикла;            
    КонецЦикла;
    
    ДокРасход.Записать();
    
    КонецЦикла;
    
    
    Казалось бы - чего проще: делаем проход по документу, удаляя строки с пустым реквизитом "Кво". Но внезапно оказалось что за один проход удаляется не все. Поэтому ввел переменную НН, которая заставляет обработку пройти по строкам столько раз сколько нужно.

    Но и это не спасло!

    Обработка просто не находит в некоторых документах ненужных строк, хотя они присутствуют. И весело, с чустволм гордости за себя движется к следующему документу.

    Вторая проблема еще цикавее: время от времени обработка тупо останавливается на одном документе. С помощью Сообщить() понял что выявляется ненужная строка. НО НЕ УДАЛЯЕТСЯ.

    Проблемы проявляются в примерно 1-2% документов. Остальные 98% обрабатываются верно, ненужные строки удаляются и т.д.

    Как решить эти проблемы?

    Если что:
    - база изолирована от других юзвере в момент обработки
    - Реквизит Кво - это число 10.2
  2. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Сколько народу на эти грабли наступает...
    Удалять строки надо:
    ИЛИ
    Перебирая с конца
    ИЛИ
    Помещая сначала в массив и потом удаляя по ссылке из массива
  3. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Воспользуйтесь Методом ВыгрузитьТабличнуюЧасть - с ТаблицейЗначений проще....
  4. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    а как с конца перебрать? :)
    можно циклом :unsure:
    Код:
    For i = 1 To oDoc.LinesCnt() Do
    oDoc.GetLineByNum(i);
    If Условие = 1 Then
    oDoc.DeleteLine();
    i = i-1;
    EndIf;
    EndDo;
    oDoc.Write();
    
    

Поделиться этой страницей