|
Удаление строк документа как оптимизировать? вложенный цикл
| ☑ |
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 строк надо удалять и они в екселе идут прям последовательно.
|
|