Имя: Пароль:
1C
1С v8
Перенос строк из одной таблицы в другую
0 FuriKuri
 
17.09.13
14:56
В документе есть 2 табличные части. Перед записью дока идет проверка: Если в таблице "товары" у какого либо элемента, количество = 0, то этот элемент переносится в таблицу "вычерки". Но появилась такая проблема, при проведении документа переносятся не все позиции, и приходится нажимать "Провести" несколько раз. Из за чего происходят такие пропуски?

Для каждого СтрокаТаблицыИсточника Из Товары Цикл
        Если СтрокаТаблицыИсточника.Количество=0 тогда
         СтрокаТаблицыПриемника = Вычерки.Добавить();
         ЗаполнитьЗначенияСвойств(СтрокаТаблицыПриемника, СтрокаТаблицыИсточника);
         Товары.Удалить(СтрокаТаблицыИсточника);
         КонецЕсли;
     КонецЦикла;
1 MKZM
 
17.09.13
14:58
Так и есть. Составь индексы и по уже по ним
2 Песец
 
17.09.13
14:58
Из-за пропусков в ДНК :(
3 kosts
 
17.09.13
14:59
(0) Нельзя удалять элементы коллекции в цикле по этой коллекции...
4 НеБорис Нуралиев
 
17.09.13
14:59
(0) Товары.Удалить(СтрокаТаблицыИсточника);

Это очень старый баян.
5 KishMish
 
17.09.13
15:00
создай массив строк, для переноса. потом цикл по массиву и копируй и удаляй эти строки
6 Песец
 
17.09.13
15:00
(3) Почему?
7 FuriKuri
 
17.09.13
15:01
(5) Спасибо. Попробую
8 catena
 
17.09.13
15:02
(6)Потому что при удалении эн-ной строки эн+1 строка становится эн-ной, а твой цикл уже ее проверил и спокойно скачет дальше.
9 FuriKuri
 
17.09.13
15:04
(8) Теперь точно все понял :)
10 Песец
 
17.09.13
15:05
(8) У меня циклы не скачут :)
11 Sabbath
 
17.09.13
15:07
(0) Добавляй в массив и отдельно удаляй