Имя: Пароль:
1C
1С v8
Удаление строк документа как оптимизировать? вложенный цикл
0 temsa
 
26.06.16
11:53
Есть таблица ексель. При чем в этой таблице могут быть несколько строк с одного документа которых надо удалить.

Как удалить все нужные строки в один проход в реал документе и записать всего один раз???

Пока у меня так:

&НаСервере
Процедура ОбработатьДанные(Массив,ТабДок)
    
    Если Не Массив[0][0] = "Номер"  Тогда
        Возврат;
    КонецЕсли;              
    ЧислоСтрок = Массив[0].Количество();
    Для  к = 1 По ЧислоСтрок-1 Цикл
        ТекНомер = Массив[0][к];
        ТекКодНом= Массив[1][к];
        ТекНаим  = Массив[2][к];
        ТекКол   = Массив[3][к];
        ТекЦена  = Массив[4][к];
        ТекСумма = Массив[5][к];

        НАйден = 0;
        Документ  = Документы.Продажа.НайтиПоНомеру(ТекНомер);
        Если Не Документ.Пустая() Тогда
            ТабличнаяЧастьДок = Документ.Товары;
            Для Каждого ТекущаяСтрока Из Документ.Товары Цикл
                ТекКодД  =  СокрЛП(ТекущаяСтрока.Номенклатура.Код);
                ТекНаимД =  СокрЛП(ТекущаяСтрока.Номенклатура.Наименование);
                ТекКолД  =  ТекущаяСтрока.Количество;
                Если ((ТекНаим = ТекНаимД) и (ТекКол = ТекКолД)) или ((ТекКодНом = ТекКодД) и (ТекКол = ТекКолД))     Тогда
                    ТабличнаяЧастьДок.Удалить(ТекущаяСтрока.НомерСтроки);
                    НАйден = 1;
                    Прервать;
                Конецесли;    
            КонецЦикла;
            Если НАйден = 0 Тогда
            
            КонецЕсли;
        КонецЕсли;

    КонецЦикла;
    
КонецПроцедуры
1 temsa
 
26.06.16
11:55
Подумал может сделать рекурсию при уже выбранном доку перебирая ексель до номера дока кторый меняется...и на этом рекурсию завершать и по новой.
2 temsa
 
26.06.16
11:56
Счетчик строк = "К" не жестко менять а по условию...
3 jsmith
 
26.06.16
11:58
Лучше бери нужные.
4 temsa
 
26.06.16
12:02
(3) Понял направление мысли. Но ведь построчно надо куда-то временно хранить чтоб потом залить в док один раз...
5 jsmith
 
26.06.16
12:03
Короче. Я щас код почитал. Немного не то.
6 temsa
 
26.06.16
12:05
(5) Пока мой код тупо в двойном цикле по одному убирает строки. При этом каждый раз находит док и каждый раз делает обход. Хотя как я уже сказал возможно 4-5 строк надо удалять и они в екселе идут прям последовательно.