Уже замучился, перерыл весь интернет в поисках решения (Не в прямом смысле). Создает 202 документа в Поступление товаров и услуг, но надо чтобы он одинаковые контрагенты в 1 документ делал, а не несколько и в табличную часть товары, заносил все данные по строчкам Эксель по отбору контрагент (Заносит только 1 строчку, вместо несколько). Вот код:
Если МассивКолонок.Количество() <> 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;
ПоказатьПрикрепленные файлы:
По теме из базы знаний
- Монитор обмена с групповой обработкой и просмотром коллизий
- Возможные ошибки ЗУП 3.0, обработка пересчета ФОТ
- Обработка для драйвера ФР Штрих-М-ПТК (4.12.472), печать QR кодов, ЕГАИС
- Обработка обмена из Комплексной автоматизации 1.1 (2012г.) в Бухгалтерию 3.0 (для сотен организаций с плохими данными)
- Выполнение тестов и обработка их результатов в 1С: Тестировщик
Найденные решения
(5)
Если МассивКолонок.Количество() <> 0 и МассивКолонок.НайтиСтроки(Новый Структура("НазваниеКолонки", "Номенклатура")).Количество() <> 0 Тогда
ТекущийКонтрагент = Справочники.Контрагенты.ПустаяСсылка();
ОсновнойСклад = Справочники.Склады.НайтиПоНаименованию("Основной склад", Истина);
ВалютаДокумента = Справочники.Валюты.НайтиПоНаименованию("руб.", Истина);
НовыйДокумент = Неопределено;
Для СтрокаОтсчета = 2 по КоличествоСтрок Цикл
ТекущееЗначения = Excel.Cells(СтрокаОтсчета, 23).Text;
Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(ТекущееЗначения, Истина);
Если Контрагент <> ТекущийКонтрагент Тогда
Если НовыйДокумент <> Неопределено Тогда
НовыйДокумент.Записать();
Сообщить("Создан и заполнен документ " + Строка(НовыйДокумент));
КонецЕсли;
НовыйДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
НовыйДокумент.Контрагент = Контрагент;
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Организация = Объект.Организация;
НовыйДокумент.ВидОперации = Объект.ВидОперации;
НовыйДокумент.Склад = ОсновнойСклад;
НовыйДокумент.ВалютаДокумента = ВалютаДокумента;
ТекущийКонтрагент = Контрагент;
КонецЕсли;
НСтрк = НовыйДокумент.Товары.Добавить();
Для каждого СтрокаМассив из МассивКолонок Цикл
ТекущееЗначение = Excel.Cells(СтрокаОтсчета, СтрокаМассив.НомерКолонки).Value;
ИмяКолонки = Excel.Cells(1, СтрокаМассив.НомерКолонки).Text;
Если ИмяКолонки = "Номенклатура" Тогда
НСтрк.Номенклатура = Объект.Номенклатура;
ИначеЕсли
ИмяКолонки = "Количество" Тогда
НСтрк.Количество = ТекущееЗначение;
ИначеЕсли
ИмяКолонки = "Цена" Тогда
НСтрк.Цена = ТекущееЗначение;
ИначеЕсли
ИмяКолонки = "Сумма" Тогда
НСтрк.Сумма = НСтрк.Количество*НСтрк.Цена;
ИначеЕсли
ИмяКолонки = "Ставка НДС" Тогда
НСтрк.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если НовыйДокумент <> Неопределено Тогда
НовыйДокумент.Записать();
Сообщить("Создан и заполнен документ " + Строка(НовыйДокумент));
КонецЕсли;
Иначе
Сообщить("В Excel файле не достаточно данных для заполнения документа!");
КонецЕсли;
Excel.DisplayAlerts = 0;
Excel.Quit();
Excel.DisplayAlerts = 1;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Справочники.Контрагенты.НайтиПоНаименованию(ТекущееЗначения, Истина)
Excel.Cells (СтрокаОтсчета,23).Text
СокрЛП(Справочники.Контрагенты.НайтиПоНаименованию(ТекущееЗначения, Истина))
Ну и вообще неплохо бы оптимизировать код. Зачем вам дважды поиск?
и
если вернется одно и то же значение?
Зачем при обработке каждой строки искать
если можно найти один раз до цикла?
Если Справочники.Контрагенты.НайтиПоНаименованию(ТекущееЗначения, Истина)
НовыйДокумент.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(ТекущееЗначения, Истина)
Зачем при обработке каждой строки искать
НовыйДокумент.Склад = Справочники.Склады.НайтиПоНаименованию("Основной склад", Истина);
НовыйДокумент.ВалютаДокумента = Справочники.Валюты.НайтиПоНаименованию("руб.", Истина);
(5)
Если МассивКолонок.Количество() <> 0 и МассивКолонок.НайтиСтроки(Новый Структура("НазваниеКолонки", "Номенклатура")).Количество() <> 0 Тогда
ТекущийКонтрагент = Справочники.Контрагенты.ПустаяСсылка();
ОсновнойСклад = Справочники.Склады.НайтиПоНаименованию("Основной склад", Истина);
ВалютаДокумента = Справочники.Валюты.НайтиПоНаименованию("руб.", Истина);
НовыйДокумент = Неопределено;
Для СтрокаОтсчета = 2 по КоличествоСтрок Цикл
ТекущееЗначения = Excel.Cells(СтрокаОтсчета, 23).Text;
Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(ТекущееЗначения, Истина);
Если Контрагент <> ТекущийКонтрагент Тогда
Если НовыйДокумент <> Неопределено Тогда
НовыйДокумент.Записать();
Сообщить("Создан и заполнен документ " + Строка(НовыйДокумент));
КонецЕсли;
НовыйДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
НовыйДокумент.Контрагент = Контрагент;
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Организация = Объект.Организация;
НовыйДокумент.ВидОперации = Объект.ВидОперации;
НовыйДокумент.Склад = ОсновнойСклад;
НовыйДокумент.ВалютаДокумента = ВалютаДокумента;
ТекущийКонтрагент = Контрагент;
КонецЕсли;
НСтрк = НовыйДокумент.Товары.Добавить();
Для каждого СтрокаМассив из МассивКолонок Цикл
ТекущееЗначение = Excel.Cells(СтрокаОтсчета, СтрокаМассив.НомерКолонки).Value;
ИмяКолонки = Excel.Cells(1, СтрокаМассив.НомерКолонки).Text;
Если ИмяКолонки = "Номенклатура" Тогда
НСтрк.Номенклатура = Объект.Номенклатура;
ИначеЕсли
ИмяКолонки = "Количество" Тогда
НСтрк.Количество = ТекущееЗначение;
ИначеЕсли
ИмяКолонки = "Цена" Тогда
НСтрк.Цена = ТекущееЗначение;
ИначеЕсли
ИмяКолонки = "Сумма" Тогда
НСтрк.Сумма = НСтрк.Количество*НСтрк.Цена;
ИначеЕсли
ИмяКолонки = "Ставка НДС" Тогда
НСтрк.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если НовыйДокумент <> Неопределено Тогда
НовыйДокумент.Записать();
Сообщить("Создан и заполнен документ " + Строка(НовыйДокумент));
КонецЕсли;
Иначе
Сообщить("В Excel файле не достаточно данных для заполнения документа!");
КонецЕсли;
Excel.DisplayAlerts = 0;
Excel.Quit();
Excel.DisplayAlerts = 1;
Показать
(7)
Если МассивКолонок.Количество() <> 0 и МассивКолонок.НайтиСтроки(Новый Структура("НазваниеКолонки", "Номенклатура")).Количество() <> 0 Тогда
ОсновнойСклад = Справочники.Склады.НайтиПоНаименованию("Основной склад", Истина);
ВалютаДокумента = Справочники.Валюты.НайтиПоНаименованию("руб.", Истина);
СозданныеДокументы = Новый Соответствие;
Для СтрокаОтсчета = 2 по КоличествоСтрок Цикл
Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(Excel.Cells(СтрокаОтсчета, 23).Text, Истина);
НовыйДокумент = СозданныеДокументы[Контрагент];
Если НовыйДокумент = Неопределено Тогда
НовыйДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
НовыйДокумент.Контрагент = Контрагент;
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Организация = Объект.Организация;
НовыйДокумент.ВидОперации = Объект.ВидОперации;
НовыйДокумент.Склад = ОсновнойСклад;
НовыйДокумент.ВалютаДокумента = ВалютаДокумента;
СозданныеДокументы.Вставить(Контрагент, НовыйДокумент);
КонецЕсли;
НСтрк = НовыйДокумент.Товары.Добавить();
Для каждого СтрокаМассив из МассивКолонок Цикл
ТекущееЗначение = Excel.Cells(СтрокаОтсчета, СтрокаМассив.НомерКолонки).Value;
ИмяКолонки = Excel.Cells(1, СтрокаМассив.НомерКолонки).Text;
Если ИмяКолонки = "Номенклатура" Тогда
НСтрк.Номенклатура = Объект.Номенклатура;
ИначеЕсли
ИмяКолонки = "Количество" Тогда
НСтрк.Количество = ТекущееЗначение;
ИначеЕсли
ИмяКолонки = "Цена" Тогда
НСтрк.Цена = ТекущееЗначение;
ИначеЕсли
ИмяКолонки = "Сумма" Тогда
НСтрк.Сумма = НСтрк.Количество*НСтрк.Цена;
ИначеЕсли
ИмяКолонки = "Ставка НДС" Тогда
НСтрк.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Для каждого КлючИЗначение из СозданныеДокументы Цикл
НовыйДокумент = КлючИЗначение.Значение;
НовыйДокумент.Записать();
Сообщить("Создан и заполнен документ " + Строка(НовыйДокумент));
КонецЦикла;
Иначе
Сообщить("В Excel файле не достаточно данных для заполнения документа!");
КонецЕсли;
Excel.DisplayAlerts = 0;
Excel.Quit();
Excel.DisplayAlerts = 1;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот