Имя: Пароль:
1C
1С v8
Как удалить строки из ТЗ
0 ЛучшийПрограммер1С
 
02.08.16
10:43
Функция ФильтроватьОтклонения(ВсеОтклонения, ДатаНач, ДатаКон)
    
    Отклонения=ВсеОтклонения.Скопировать();
    Для Каждого Отклонение Из Отклонения Цикл
        Если Отклонение.ПериодЗавершения<ДатаНач ИЛИ Отклонение.Период>ДатаКон Тогда
            Отклонения.Удалить(Отклонение);
        Иначе
            Если Отклонение.Период<ДатаНач Тогда
                Отклонение.Период = ДатаНач;
            КонецЕсли;
            Если Отклонение.ПериодЗавершения>ДатаКон Тогда
                Отклонение.ПериодЗавершения=ДатаКон;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    
    Возврат Отклонения;
    
КонецФункции

Удаляет через одну. Походу такая песня - допустим 5 строк. Первую удалил, осталось четыре строки. Переходит ко второй строке, а по исходной получается к третьей. Как правильно удалить?
1 batman69
 
02.08.16
10:44
(0) Поиск. Мозг.
2 igork1966
 
02.08.16
10:45
(0) Можно обходить с конца. Можно сформировать массив удаляемых и удалить потом
3 Любопытная
 
02.08.16
10:45
Собрать массив удаляемых строк и потом этот массив удалять.
4 mkalimulin
 
02.08.16
10:45
(0) Удаляй с конца.
5 oslokot
 
02.08.16
10:46
всё во вселенной движется по спирали..
6 ЛучшийПрограммер1С
 
02.08.16
10:51
А с конца то как удалять?

Для Каждого Отклонение Из Отклонения Цикл
7 ЛучшийПрограммер1С
 
02.08.16
10:53
(3) Как собрать массив, ну соберу массив, а как удалять его
8 Evgueni
 
02.08.16
10:53
Отклонения=ВсеОтклонения.Скопировать();
мсОтклонения = Новый Массив;
    Для Каждого Отклонение Из Отклонения Цикл
        Если Отклонение.ПериодЗавершения<ДатаНач ИЛИ Отклонение.Период>ДатаКон Тогда
            //Отклонения.Удалить(Отклонение);
мсОтклонения.Добавить(Отклонение);
        Иначе
            Если Отклонение.Период<ДатаНач Тогда
                Отклонение.Период = ДатаНач;
            КонецЕсли;
            Если Отклонение.ПериодЗавершения>ДатаКон Тогда
                Отклонение.ПериодЗавершения=ДатаКон;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;

Для Каждого элмнт Из мсОтклонения Цикл    
Отклонения.Удалить(элмнт);
КонецЦикла;

    Возврат Отклонения;
9 Это_mike
 
02.08.16
10:55
де жа вю...
10 igork1966
 
02.08.16
10:55
(6) Вообще-то это не единственный вариант цикла...

Для (For)
Синтаксис:
Для <Имя переменной> = <Выражение 1> По <Выражение 2> Цикл
// Операторы
[Прервать;]
// Операторы
[Продолжить;]
// Операторы
КонецЦикла;
11 ЛучшийПрограммер1С
 
02.08.16
11:46
(8) Спасибо )