Пытаюсь удалить элемент в табличной части после некой проверки.
Получаю ошибку - Недопустимое значение параметра (параметр номер '1')
8.3 Управление торговлей, редакция 11 (11.4.11.84)

```1c
    Товары = Объект.Товары.Выгрузить();
    Для каждого СтрокаТоваров из Товары Цикл
    Если СтрокаТоваров.Номенклатура.Код = "00-00005130" ИЛИ СтрокаТоваров.Номенклатура.Код = "ЦБ-00005141" Тогда
    Объект.Товары.Удалить(СтрокаТоваров.НомерСтроки);
    КонецЕсли;
    КонецЦикла;
```
---
за место выгрузки в тз напишите Товары = Объект.Товары
а удаляете Товары.Удалить(стр)

```1c
    Товары = Объект.Товары;
    Для каждого СтрокаТоваров из Товары Цикл
    Если СтрокаТоваров.Номенклатура.Код = "00-00005130" ИЛИ СтрокаТоваров.Номенклатура.Код = "ЦБ-00005141" Тогда
    Товары.Удалить(СтрокаТоваров);
    КонецЕсли;
    КонецЦикла;
```
---
```1c
    Объект.Товары.Удалить(СтрокаТоваров.НомерСтроки);
```

Зачем НомерСтроки?
```1c
    Объект.Товары.Удалить(СтрокаТоваров);
```
---
```1c
    Объект.Товары.Удалить(СтрокаТоваров);
```
---
это не решило проблему...
---
Это не решило проблему потому что возникла другая проблема - удаление другим циклом
---
А еще удалять нужно через цикл Для сч=0, а не Для Каждого Стр
---
Можете написать как это будет выглядеть в данном случае?
---
Как то так

```1c
    Для сч = 0 По Товары.Количество()-1 Цикл

    Строка = Товары[сч];
    // Начало Условия
    Товары.Удалить(Строка);
    сч = сч - 1;
    // Конец условия

    КонецЦикла;
```
---
а зачем тут счётчик с -1 ?
---
зачем его плюсовать после удаления, если строка сдвинулась вверх?
---
понял идею) но в этом случае, если что то удалит, вылетит ошибка скорее всего, т.к. не будет столько строк у товаров.
---
во избежании ошибок тут вообще надо не с нуля по количество обходить, а с количества по ноль.
---
Представьте себе домино лежат одна на другой. Когда вы самую нижнюю уберете, то вторая станет первой, поэтому и сч нужно минусовать.
---
Ну обычно в таких случаях счтчик видут сверху вниз
т.е.

```1c
    КоличествоСтрок = Товары.Количество()-1;
    Для сч = 0 По КоличествоСтрок Цикл

    Строка = Товары[КоличествоСтрок-сч];
    ............
```

Или же не сразу строки удалять, а делается массив с удаляемыми строками, и после цикла основного цикл по массиву удаляемых строк

Вариантов много
Но ваш я вижу впервые...
Кстати по идее он должен будет выдать ошибку в конце что индекс находиться за пределами
Так как строки удалили а счетчик то не уменьшили...
---
это на самом деле дело вкуса) Я например никогда не видел чтобы с конца шли, только чтобы массив собрать для удаления.
баг пофиксен в (19)
---
Строка = Товары[сч];
ругается на эту строку что индекс находится за пределами массива..
---
Вам бы пару уроков взять по программированию)

в начале цикла добавьте

```1c
    Если Товары.Количество() = 0 Тогда
    Прервать;
    КонецЕсли;
```
---
После Тогда не надо ставить точку с запятой
Если СтрокаТоваров.Номенклатура.Код = "00-00005130" ИЛИ СтрокаТоваров.Номенклатура.Код = "ЦБ-00005141" Тогда
---
случайно попала да, но дело не в этом
---
А еще можно в таблице значений сделать отбор по ссылке и удалить найденные строки в выборке.
---
за место выгрузки в тз напишите Товары = Объект.Товары
а удаляете Товары.Удалить(стр)

```1c
    Товары = Объект.Товары;
    Для каждого СтрокаТоваров из Товары Цикл
    Если СтрокаТоваров.Номенклатура.Код = "00-00005130" ИЛИ СтрокаТоваров.Номенклатура.Код = "ЦБ-00005141" Тогда
    Товары.Удалить(СтрокаТоваров);
    КонецЕсли;
    КонецЦикла;
```
---
Попробуй так:

Товары = Объект.Товары.Выгрузить();
Номенклатура1 = Справочники.Номенклатура.НайтиПоКоду("00-00005130");
Номенклатура2 = Справочники.Номенклатура.НайтиПоКоду("ЦБ-00005141");
Пока НЕ Товары.Найти(Номенклатура1,"Номенклатура") = Неопределено Цикл
         Товары.Удалить(Товары.Найти(Номенклатура1,"Номенклатура") );
КонецЦикла;
Пока НЕ Товары.Найти(Номенклатура2,"Номенклатура") = Неопределено Цикл
         Товары.Удалить(Товары.Найти(Номенклатура2,"Номенклатура") );
КонецЦикла;
Объект.Товары.Загрузить(Товары);
---
ИЛИ ТАК:

        НомерСтрокиТЧ = Товары.Количество()-1;
 Пока НомерСтрокиТЧ >= 0 Цикл
  СтрокаТоваров = Товары[НомерСтрокиТЧ];
  Если СтрокаТоваров.Номенклатура.Код = "00-00005130"
                      ИЛИ СтрокаТоваров.Номенклатура.Код = "ЦБ-00005141" Тогда
   Товары.Удалить(СтрокаТоваров);
  КонецЕсли;
  НомерСтрокиТЧ = НомерСтрокиТЧ -1;
 КонецЦикла;