Здравствуйте. Я плохо знаю русский. Извините за этого. Я еще новичок в 1С программирование. Данные загружается из эксель файла. Мне надо что он проверил все товары. Таким образом как есть ли токай товар в базе или нет. Если нет тогда он в низу показывало сообщение что токай товар не найден и он не добавил его в ТЗ документа. Сообщение сделал можно но как фильтр поставить ?
Написал код но он добавляет товара. Мне проста надо подсказка что как исправится с этим.
Ниже код и картинка
Спасибо всем за ранее.

```1c
    Перем ТЗ экспорт;
    Процедура СоздатьТЗ()

    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Номенклатура",,,);
    ТЗ.Колонки.Добавить("Количество",,,);
    ТЗ.Колонки.Добавить("Цена",,,);
    ТЗ.Колонки.Добавить("Сумма",,,);

    КонецПроцедуры // СоздатьТЗ()

    Процедура ПереборСтрокВЭксель()

    Путь = "C:\Users\User\Desktop\Лист Microsoft Excel.xlsx";
    Эксель = Новый COMОбъект("Excel.Application");
    Эксель.Workbooks.Open(Путь);
    Эксель.Sheets(1).Select();
    Версия = Лев(Эксель.Version,Найти(Эксель.Version,".")-1);
    Если Версия = "8" тогда
    ФайлСтрок = Эксель.Cells.CurrentRegion.Rows.Count;
    ФайлКолонок = Макс(Эксель.Cells.CurrentRegion.Columns.Count, 13);
    Иначе
    ФайлСтрок = Эксель.Cells(1,1).SpecialCells(11).Row;
    ФайлКолонок = Эксель.Cells(1,1).SpecialCells(11).Column;
    Конецесли;

    Для Стр = 1 ПО ФайлСтрок Цикл
    НоваяСтрока = ТЗ.Добавить();
    НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Эксель.Cells(Стр,1).Value));
    НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,2).Value);
    НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,3).Value);
    НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,4).Value);
    КонецЦикла;

    Эксель.ActiveWorkbook.Close();
    Эксель.Application.Quit();
    КонецПроцедуры

    Процедура ПереборСтрокТЗ()
    Для Каждого Ст из ТЗ Цикл
    Стр = Товары.Добавить();
    Стр.Номенклатура = Ст.Номенклатура;
    Стр.Количество = Ст.Количество;
    Стр.Цена = Ст.Цена;
    Стр.Сумма = Ст.Сумма;
    Стр.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
    Стр.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("ƏD");
    Стр.Коэффициент = 1;
    КонецЦикла;
    КонецПроцедуры

    Процедура ОсновныеДействияФормыЗагрузкаДанный(Кнопка)
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Заголовок = "Выберите excel - файл";
    Диалог.ПолноеИмяФайла = "С:\";
    Диалог.Фильтр = "Таблицы (*.xls,*.xlsx)|*.xls;*.xlsx;|Microsoft Excel 97/2000/XP/2003 (*.xls)|*.xls|Microsoft Excel 2007/2010 (*.xlsx)|*.xlsx";

    Если Диалог.Выбрать() Тогда
    Предупреждение(Диалог.ПолноеИмяФайла, 10 , "Файл выбран.");
    Иначе
    Предупреждение("Файл не выбран.");
    Возврат;
    КонецЕсли;

    СоздатьТЗ();

    ПереборСтрокВЭксель();

    ПереборСтрокТЗ();

    КонецПроцедуры
```
---
можно просто не добавлять эту строку и все

Для Стр = 1 ПО ФайлСтрок Цикл
Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Эксель.Cells(Стр,1).Value));
Если Номенклатура.Пустая() Тогда
Сообщить("Номенклатура " + СокрЛП(Эксель.Cells(Стр,1).Value) + " не найдена!");
Иначе
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Номенклатура = Номенклатура;
НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,2).Value);
НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,3).Value);
НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,4).Value);
НоваяСтрока.Номенклатура = Номенклатура;
Конецесли
КонецЦикла;

Проблему можно так решить
---
В коде добишите вот в этом месте

```1c
    Для Стр = 1 ПО ФайлСтрок Цикл
    НоваяСтрока = ТЗ.Добавить();
    Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Эксель.Cells(Стр,1).Value));
    Если Номенклатура.Пустая() Тогда
    Сообщить("Номенклатура " + СокрЛП(Эксель.Cells(Стр,1).Value) + " не найдена!");
    Иначе
    НоваяСтрока.Номенклатура = Номенклатура;
    Конецесли
    //НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Эксель.Cells(Стр,1).Value));
    НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,2).Value);
    НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,3).Value);
    НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,4).Value);
    КонецЦикла;
```
---
Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Эксель.Cells(Стр,1).Value));
Если Номенклатура.Пустая() Тогда
Сообщить("Номенклатура " + СокрЛП(Эксель.Cells(Стр,1).Value) + " не найдена!");
Иначе
НоваяСтрока.Номенклатура = Номенклатура;
Конецесли
Спасибо вам за вниманию
Код работает но по моему надо добавить код для удаление строк из ТЗ или сразу в экселя.
Это так надо решить или есть более оптимальный вариант?
---
можно просто не добавлять эту строку и все

Для Стр = 1 ПО ФайлСтрок Цикл
Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Эксель.Cells(Стр,1).Value));
Если Номенклатура.Пустая() Тогда
Сообщить("Номенклатура " + СокрЛП(Эксель.Cells(Стр,1).Value) + " не найдена!");
Иначе
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Номенклатура = Номенклатура;
НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,2).Value);
НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,3).Value);
НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,4).Value);
НоваяСтрока.Номенклатура = Номенклатура;
Конецесли
КонецЦикла;

Проблему можно так решить
---
Спасибо вам огромное. Вы много раз помогли мне решить проблему.
Но интересна что почему этот код не работал
```1c
    Эксель.Rows(Строка(Стр)).Delete();
```
 или
```1c
    Эксель.Worksheets("Лист1").Rows(Стр).Delete();
```
. Когда запускаешь программу бывает без конечный цикл.
И еще последний какие книги можете рекомендовать для программирование и для COM объектов?
Спасибо вам еще раз
---
Да не зачто!

Вот по вопросу Эксель.Rows(Строка(Стр)).Delete(); Смотрите, в екселе 250 тыс. строк, если вы хоть какую то удалите то их количество все равно останется. Сам я ни когда не пробывал удалять строки в ексель но чтобы убедиться работатает или нет, до сделайте 10 строк в екселе с разными цветами и удалите хоть одну, если вы действительно увидите что они удалились то тогда данный функционал работает.

Что касается книжек, мне большего всего нравиться книга "Просты примеры разработки на 1С:Предприятии" в ней собраны основные методы и подходы к решению, там кстати и про com-объекты есть описание

А вот если у вас зацикливание происходит, следовательно, у вас программа не знает когда ее завершить. Тут нужен какой-то либо признак или счетчик чтобы выходит из цикла