Загрузка данных из экселя

1. _7445_ 22.01.19 17:56 Сейчас в теме
Здравствуйте. Я очень мало знаю русский. Извините за этого. Есть токая задания "Загрузить данные из эксель". Подробнее: В УТ 10.3 Есть Документ.ПоступлениеТоваровУслуг.Товары и в экселе есть колонки номенклатура, количество, цена, сумма. Надо что после выбора и загрузки экселе, в документа (Товары) автоматически заполнялся колонки номенклатура, количество, цена и сумма. Знаю что уже есть токая обработка но мне сома надо написать это. Написал код но есть места которые не знаю как писать. Как исправится с этим?
Огромное Спасибо всем за ранее.
Процедура ТЗЗаполнить()
	
	ТЗ = Новый ТаблицаЗначений;
	ТЗ.Колонки.Добавить("Номенклатура");
	ТЗ.Колонки.Добавить("Наименование");
	ТЗ.Колонки.Добавить("Количество");
	ТЗ.Колонки.Добавить("Цена");
	ТЗ.Колонки.Добавить("Сумма");
	
	ТЗ.Колонки.Добавить("Автор", Новый ОписаниеТипов("СписокЗначений"));
		
	
КонецПроцедуры

Функция ПоискПодстрокам(Подстрока, ПодстрокаРасшифровка)

	ПозицияСимвола = Найти(Подстрока,",");
	ПозицияСимволаВРасшифровке = Найти(ПодстрокаРасшифровка,",");
	
	Если ПозицияСимвола <> 0 тогда
		  ПерваяНоменклатура = Лев(Подстрока, ПозицияСимвола - 1);
		  ПерваяНоменклатураРасшифровка = Лев(ПодстрокаРасшифровка, ПозицияСимволаВРасшифровке - 1);
		  
		  СЗ.Добавить(ПерваяНоменклатура, ПерваяНоменклатураРасшифровка);
		  
		  Остаток = СтрДлина(Подстрока) - (СтрДлина(ПерваяНоменклатура)+1);
		  ОстатокРасшифровка = СтрДлина(ПодстрокаРасшифровка) - (СтрДлина(ПерваяНоменклатураРасшифровка) + 1);
		  
		  Возврат ПоискПодстрокам(Прав(Подстрока,Остаток), Прав(ПодстрокаРасшифровка,ОстатокРасшифровка));

	Иначе
		СЗ.Добавить(СокрЛП(Подстрока),СокрЛП(ПодстрокаРасшифровка));
		Возврат ПозицияСимвола;
		КонецЕсли;

КонецФункции // ПоискПодстрокам()

Процедура ПереборСтрокВЭксель()
Эксель = Новый COMОбъект("Excel.Application");
	
	Эксель.Workbooks.Open(ПолеВвода);
	Эксель.Sheets(1).select();
	
	Для Стр = 1 по 28 Цикл
		НоваяСтрока = ТЗ.Добавить();
		НоваяСтрока.Номенклатура = СокрЛП(Эксель.Cells(Стр,1).Value);
		НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,2).Value);
		НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,3).Value);
		НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,4).Value);
		
		ПозицияСимвол = ПоискПодстрокам(СокрЛП(Эксель.Cells(Стр,2).Value),СокрЛП(Эксель.Cells(Стр,3).Value)); 
		НоваяСтрока.Автор = СЗ;
	КонецЦикла;
	
	Эксель.ActiveWorkbook.Close();
	Эксель.Application.Quit();

	

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

Процедура ПереборСтрокТЗ()

	Для Каждого Ст из ТЗ Цикл
		
		//СтрНом = Справочники.Номенклатура.СоздатьЭлемент();  Это пример для справочника а как могу выбрать данные из документа табличные части. Хотел писать как ЭлементыФорму.Товары.ТекущиеДанные но программ не разрешает.
  
		//СпрНом.Наименование = Ст.Номенклатура;
		КонецЦикла;
		
		
КонецПроцедуры

Процедура КнопкаВыполнитьНажатие(Кнопка)
	ТЗЗаполнить();
	
	ПереборСтрокВЭксель();
	
	
КонецПроцедуры

Процедура ПолеВводаНачалоВыбора(Элемент, СтандартнаяОбработка)
    Режим = РежимДиалогаВыбораФайла.Открытие;
	Диалог = Новый ДиалогВыбораФайла(Режим);
	Диалог.Фильтр = "Формат xlsx (*.xlsx)|*.xlsx|";
 
	Если Диалог.Выбрать() тогда
		ПолеВвода = Диалог.ПолноеИмяФайла;
	Иначе
		Предупреждение("Файл не выбран!");
		КонецЕсли;	
КонецПроцедуры
Показать
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. kumi2012 103 22.01.19 19:45 Сейчас в теме
В ТЗ загружаете Наименование. Затем сопоставляете Номенклатура.
+
3. _7445_ 22.01.19 20:30 Сейчас в теме
(2)
Спасибо за вниманию.
Но можно немножко подробнее?
С кодам как будить
+
4. 24rus 125 23.01.19 04:35 Сейчас в теме
как вариант сопоставления по Артиклу (можно сопоставить по коду и т.д. ):


 
Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", ст.Артикул);  // ст.Артикул, данные из Excel в ТЗ 

Если НЕ ЗначениеЗаполнено(Номенклатура) Тогда
		  //Создаем новый элемент
иначе
                 // Заполняем данными найденного элемента
КонецЕсли;

 
Показать
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот