Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
10 мая 2024, 13:44

Удаление строк из табличной части

Автор alexs-safin, 13 июн 2016, 18:15

0 Пользователей и 1 гость просматривают эту тему.

alexs-safin

Здравствуйте! Подскажите пожалуйста - почему удаляется по половине списка?


Процедура КпТовары1УдалитьИгнорСписок(Кнопка)
Для каждого Наименование ИЗ ИгнорируемыеНаименования Цикл //ТЗ
Если Наименование.Акт = Истина Тогда
ИгнорируемыеНаименования.Удалить(Наименование);
КонецЕсли;
КонецЦикла;

КонецПроцедуры

Kironten

Цитата: alexs-safin от 13 июн 2016, 18:15
Здравствуйте! Подскажите пожалуйста - почему удаляется по половине списка?


Процедура КпТовары1УдалитьИгнорСписок(Кнопка)
Для каждого Наименование ИЗ ИгнорируемыеНаименования Цикл //ТЗ
Если Наименование.Акт = Истина Тогда
ИгнорируемыеНаименования.Удалить(Наименование);
КонецЕсли;
КонецЦикла;

КонецПроцедуры

Насколько я помню, с табличной частью это работает так:
Вы удаляете строку 1, в результате строка с номером 2 перемещается на место строки номер 1. Но поскольку считается, что строка 1 уже обработана в первом шаге цикла, то строка 2 перемещенная в результате удаления на первую позицию - пропускается.
Лучше было бы скопировать ТЧ в массив, полностью очистить ТЧ и потом обрабатывая элементы массива и проводя условия, заполнить ТЧ заново.

pavl_vs

alexs-safin, используйте обратный цикл.

Luzer1C

Используй удаление строк по счетчику:
Сч = 1;
Пока Сч <= ИгнорируемыеНаименования.Количество() Цикл
Если ИгнорируемыеНаименования[Сч - 1].Акт = Истина Тогда
ИгнорируемыеНаименования.Удалить(Сч - 1);
Иначе
Сч = Сч + 1;
КонецЕсли;
КонецЦикла;

На решение такой проблемы даже у Павла Чистова есть отдельное видео.
Халамбалам.

Тём

Воспользуйтесь временным массивом. Так значительно удобнее.

Процедура КпТовары1УдалитьИгнорСписок(Кнопка)
    МассивУдаляемыхСтрок = Новый Массив;
    Для каждого Наименование ИЗ ИгнорируемыеНаименования Цикл //ТЗ
        Если Наименование.Акт = Истина Тогда
            МассивУдаляемыхСтрок.Добавить(Наименование);
        КонецЕсли;
    КонецЦикла;
   
    Для Каждого ЭлементМассива Из МассивУдаляемыхСтрок Цикл
        ИгнорируемыеНаименования.Удалить(ЭлементМассива );
    КонецЦикла;

КонецПроцедуры

Luzer1C

Любой способ хорош. Только нужно правильно его использовать.
Халамбалам.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск