Уже замучился, перерыл весь интернет в поисках решения (Не в прямом смысле). Создает 202 документа в Поступление товаров и услуг, но надо чтобы он одинаковые контрагенты в 1 документ делал, а не несколько и в табличную часть товары, заносил все данные по строчкам Эксель по отбору контрагент (Заносит только 1 строчку, вместо несколько). Вот код:

```1c
    Если МассивКолонок.Количество() <> 0 и МассивКолонок.НайтиСтроки(Новый Структура("НазваниеКолонки", "Номенклатура")).Количество() <> 0 Тогда
    Для СтрокаОтсчета = 2 по КоличествоСтрок Цикл
    ТекущееЗначения = Excel.Cells(СтрокаОтсчета, 23).Text;
    Хрень = Excel.Cells (СтрокаОтсчета,23).Text;
    Для каждого СтрокаМассив из МассивКолонок Цикл
    Если Справочники.Контрагенты.НайтиПоНаименованию(ТекущееЗначения, Истина) = Excel.Cells (СтрокаОтсчета,23).Text Тогда
    Продолжить;
    Иначе
    НовыйДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
    КонецЕсли;
    НовыйДокумент.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(ТекущееЗначения, Истина);
    НовыйДокумент.Дата = ТекущаяДата();
    НовыйДокумент.Организация = Объект.Организация;
    НовыйДокумент.ВидОперации = Объект.ВидОперации;
    НовыйДокумент.Склад = Справочники.Склады.НайтиПоНаименованию("Основной склад", Истина);
    НовыйДокумент.ВалютаДокумента = Справочники.Валюты.НайтиПоНаименованию("руб.", Истина);
    НСтрк = НовыйДокумент.Товары.Добавить();

    Для каждого СтрокаМассив из МассивКолонок Цикл
    ТекущееЗначение = Excel.Cells(СтрокаОтсчета, СтрокаМассив.НомерКолонки).Value;
    ИмяКолонки = Excel.Cells(1, СтрокаМассив.НомерКолонки).Text;
    Если ИмяКолонки = "Номенклатура" Тогда
    НСтрк.Номенклатура = Объект.Номенклатура;
    ИначеЕсли
    ИмяКолонки = "Количество" Тогда
    НСтрк.Количество = ТекущееЗначение;
    ИначеЕсли
    ИмяКолонки = "Цена" Тогда
    НСтрк.Цена = ТекущееЗначение;
    ИначеЕсли
    ИмяКолонки = "Сумма" Тогда
    НСтрк.Сумма = НСтрк.Количество*НСтрк.Цена;
    ИначеЕсли
    ИмяКолонки = "Ставка НДС" Тогда
    НСтрк.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    НовыйДокумент.Записать(РежимЗаписиДокумента.ОтменаПроведения);
    КонецЦикла;
    Сообщить("Создан и заполнен документ " + Строка(НовыйДокумент));
    Иначе
    Сообщить("В Excel файле не достаточно данных для заполнения документа!");
    КонецЕсли;

    Excel.DisplayAlerts = 0;
    Excel.Quit();
    Excel.DisplayAlerts = 1;
```
---
```1c
    Если МассивКолонок.Количество() <> 0 и МассивКолонок.НайтиСтроки(Новый Структура("НазваниеКолонки", "Номенклатура")).Количество() <> 0 Тогда
    ТекущийКонтрагент = Справочники.Контрагенты.ПустаяСсылка();
    ОсновнойСклад = Справочники.Склады.НайтиПоНаименованию("Основной склад", Истина);
    ВалютаДокумента = Справочники.Валюты.НайтиПоНаименованию("руб.", Истина);
    НовыйДокумент = Неопределено;

    Для СтрокаОтсчета = 2 по КоличествоСтрок Цикл
    ТекущееЗначения = Excel.Cells(СтрокаОтсчета, 23).Text;

    Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(ТекущееЗначения, Истина);

    Если Контрагент <> ТекущийКонтрагент Тогда
    Если НовыйДокумент <> Неопределено Тогда
    НовыйДокумент.Записать();
    Сообщить("Создан и заполнен документ " + Строка(НовыйДокумент));
    КонецЕсли;

    НовыйДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
    НовыйДокумент.Контрагент = Контрагент;
    НовыйДокумент.Дата = ТекущаяДата();
    НовыйДокумент.Организация = Объект.Организация;
    НовыйДокумент.ВидОперации = Объект.ВидОперации;
    НовыйДокумент.Склад = ОсновнойСклад;
    НовыйДокумент.ВалютаДокумента = ВалютаДокумента;

    ТекущийКонтрагент = Контрагент;
    КонецЕсли;

    НСтрк = НовыйДокумент.Товары.Добавить();
    Для каждого СтрокаМассив из МассивКолонок Цикл
    ТекущееЗначение = Excel.Cells(СтрокаОтсчета, СтрокаМассив.НомерКолонки).Value;
    ИмяКолонки = Excel.Cells(1, СтрокаМассив.НомерКолонки).Text;
    Если ИмяКолонки = "Номенклатура" Тогда
    НСтрк.Номенклатура = Объект.Номенклатура;
    ИначеЕсли
    ИмяКолонки = "Количество" Тогда
    НСтрк.Количество = ТекущееЗначение;
    ИначеЕсли
    ИмяКолонки = "Цена" Тогда
    НСтрк.Цена = ТекущееЗначение;
    ИначеЕсли
    ИмяКолонки = "Сумма" Тогда
    НСтрк.Сумма = НСтрк.Количество*НСтрк.Цена;
    ИначеЕсли
    ИмяКолонки = "Ставка НДС" Тогда
    НСтрк.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;

    Если НовыйДокумент <> Неопределено Тогда
    НовыйДокумент.Записать();
    Сообщить("Создан и заполнен документ " + Строка(НовыйДокумент));
    КонецЕсли;
    Иначе
    Сообщить("В Excel файле не достаточно данных для заполнения документа!");
    КонецЕсли;

    Excel.DisplayAlerts = 0;
    Excel.Quit();
    Excel.DisplayAlerts = 1;
```
---
```1c
    Справочники.Контрагенты.НайтиПоНаименованию(ТекущееЗначения, Истина)
```
возвращает ссылку на контрагента, а вы ее сравниваете с тектовым полем
```1c
    Excel.Cells (СтрокаОтсчета,23).Text
```
Естественно, сравнение даст ложь. Сравнивайте вот это
```1c
    СокрЛП(Справочники.Контрагенты.НайтиПоНаименованию(ТекущееЗначения, Истина))
```
---
Ну и вообще неплохо бы оптимизировать код. Зачем вам дважды поиск?

```1c
    Если Справочники.Контрагенты.НайтиПоНаименованию(ТекущееЗначения, Истина)
```
и

```1c
    НовыйДокумент.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(ТекущееЗначения, Истина)
```
если вернется одно и то же значение?

Зачем при обработке каждой строки искать

```1c
    НовыйДокумент.Склад = Справочники.Склады.НайтиПоНаименованию("Основной склад", Истина);
    НовыйДокумент.ВалютаДокумента = Справочники.Валюты.НайтиПоНаименованию("руб.", Истина);
```
если можно найти один раз до цикла?
---
Все равно также
---
Теперь еще контрагенты не показываются
---
```1c
    Если МассивКолонок.Количество() <> 0 и МассивКолонок.НайтиСтроки(Новый Структура("НазваниеКолонки", "Номенклатура")).Количество() <> 0 Тогда
    ТекущийКонтрагент = Справочники.Контрагенты.ПустаяСсылка();
    ОсновнойСклад = Справочники.Склады.НайтиПоНаименованию("Основной склад", Истина);
    ВалютаДокумента = Справочники.Валюты.НайтиПоНаименованию("руб.", Истина);
    НовыйДокумент = Неопределено;

    Для СтрокаОтсчета = 2 по КоличествоСтрок Цикл
    ТекущееЗначения = Excel.Cells(СтрокаОтсчета, 23).Text;

    Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(ТекущееЗначения, Истина);

    Если Контрагент <> ТекущийКонтрагент Тогда
    Если НовыйДокумент <> Неопределено Тогда
    НовыйДокумент.Записать();
    Сообщить("Создан и заполнен документ " + Строка(НовыйДокумент));
    КонецЕсли;

    НовыйДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
    НовыйДокумент.Контрагент = Контрагент;
    НовыйДокумент.Дата = ТекущаяДата();
    НовыйДокумент.Организация = Объект.Организация;
    НовыйДокумент.ВидОперации = Объект.ВидОперации;
    НовыйДокумент.Склад = ОсновнойСклад;
    НовыйДокумент.ВалютаДокумента = ВалютаДокумента;

    ТекущийКонтрагент = Контрагент;
    КонецЕсли;

    НСтрк = НовыйДокумент.Товары.Добавить();
    Для каждого СтрокаМассив из МассивКолонок Цикл
    ТекущееЗначение = Excel.Cells(СтрокаОтсчета, СтрокаМассив.НомерКолонки).Value;
    ИмяКолонки = Excel.Cells(1, СтрокаМассив.НомерКолонки).Text;
    Если ИмяКолонки = "Номенклатура" Тогда
    НСтрк.Номенклатура = Объект.Номенклатура;
    ИначеЕсли
    ИмяКолонки = "Количество" Тогда
    НСтрк.Количество = ТекущееЗначение;
    ИначеЕсли
    ИмяКолонки = "Цена" Тогда
    НСтрк.Цена = ТекущееЗначение;
    ИначеЕсли
    ИмяКолонки = "Сумма" Тогда
    НСтрк.Сумма = НСтрк.Количество*НСтрк.Цена;
    ИначеЕсли
    ИмяКолонки = "Ставка НДС" Тогда
    НСтрк.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;

    Если НовыйДокумент <> Неопределено Тогда
    НовыйДокумент.Записать();
    Сообщить("Создан и заполнен документ " + Строка(НовыйДокумент));
    КонецЕсли;
    Иначе
    Сообщить("В Excel файле не достаточно данных для заполнения документа!");
    КонецЕсли;

    Excel.DisplayAlerts = 0;
    Excel.Quit();
    Excel.DisplayAlerts = 1;
```
---
Спс тебе огромное, выручил. Кстати я проверил, если в Эксель не стоит сортировка по контрагенту, то создает 81, с сортировкой 53. Это можно как то исправить? Чтобы каждый раз не приходилось сортировку делать.
---
```1c
    Если МассивКолонок.Количество() <> 0 и МассивКолонок.НайтиСтроки(Новый Структура("НазваниеКолонки", "Номенклатура")).Количество() <> 0 Тогда
    ОсновнойСклад = Справочники.Склады.НайтиПоНаименованию("Основной склад", Истина);
    ВалютаДокумента = Справочники.Валюты.НайтиПоНаименованию("руб.", Истина);

    СозданныеДокументы = Новый Соответствие;

    Для СтрокаОтсчета = 2 по КоличествоСтрок Цикл
    Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(Excel.Cells(СтрокаОтсчета, 23).Text, Истина);

    НовыйДокумент = СозданныеДокументы[Контрагент];
    Если НовыйДокумент = Неопределено Тогда
    НовыйДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
    НовыйДокумент.Контрагент = Контрагент;
    НовыйДокумент.Дата = ТекущаяДата();
    НовыйДокумент.Организация = Объект.Организация;
    НовыйДокумент.ВидОперации = Объект.ВидОперации;
    НовыйДокумент.Склад = ОсновнойСклад;
    НовыйДокумент.ВалютаДокумента = ВалютаДокумента;

    СозданныеДокументы.Вставить(Контрагент, НовыйДокумент);
    КонецЕсли;

    НСтрк = НовыйДокумент.Товары.Добавить();
    Для каждого СтрокаМассив из МассивКолонок Цикл
    ТекущееЗначение = Excel.Cells(СтрокаОтсчета, СтрокаМассив.НомерКолонки).Value;
    ИмяКолонки = Excel.Cells(1, СтрокаМассив.НомерКолонки).Text;
    Если ИмяКолонки = "Номенклатура" Тогда
    НСтрк.Номенклатура = Объект.Номенклатура;
    ИначеЕсли
    ИмяКолонки = "Количество" Тогда
    НСтрк.Количество = ТекущееЗначение;
    ИначеЕсли
    ИмяКолонки = "Цена" Тогда
    НСтрк.Цена = ТекущееЗначение;
    ИначеЕсли
    ИмяКолонки = "Сумма" Тогда
    НСтрк.Сумма = НСтрк.Количество*НСтрк.Цена;
    ИначеЕсли
    ИмяКолонки = "Ставка НДС" Тогда
    НСтрк.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;

    Для каждого КлючИЗначение из СозданныеДокументы Цикл
    НовыйДокумент = КлючИЗначение.Значение;
    НовыйДокумент.Записать();
    Сообщить("Создан и заполнен документ " + Строка(НовыйДокумент));
    КонецЦикла;
    Иначе
    Сообщить("В Excel файле не достаточно данных для заполнения документа!");
    КонецЕсли;

    Excel.DisplayAlerts = 0;
    Excel.Quit();
    Excel.DisplayAlerts = 1;
```