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

1. _7445_ 07.03.19 10:08 Сейчас в теме
Здравствуйте. Я плохо знаю русский. Извините за этого. Я еще новичок в 1С программирование. В УТ 10.3. Сам код работает, загружает данные и заполняет табличный часть. Но пользователю надо что он могла вводить номер колонку. Пример : В Excel есть 4 колонку (Номенклатура, Цена, Количество, Сумма). Но Номенклатуры в третий колонке, цена 2, сумма 4 и количество 1.Создал форму, добавил новую реквизиты. Код изменил. Код выбирает номер колонку который пользователь вводил. Но
Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Эксель.Cells(Стр,НоменклатураКолонка).Value));

здесь он выбирает первую номенклатуру ( это группа в первом списке). Можете проста дать подсказку для решения. Спасибо за ранее
Вот полный код
Перем ТЗ Экспорт;

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

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

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

Процедура ВыберитеФайлНажатие(Элемент)
     СоздатьТЗ();
    
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Заголовок = "Выберите excel - файл";
    Диалог.ПолноеИмяФайла = "С:\";
    Диалог.Фильтр = "Таблицы (*.xls,*.xlsx)|*.xls;*.xlsx;|Microsoft Excel 97/2000/XP/2003 (*.xls)|*.xls|Microsoft Excel 2007/2010 (*.xlsx)|*.xlsx";
    
    Если Диалог.Выбрать() Тогда
        Предупреждение(Диалог.ПолноеИмяФайла, 10 , "Файл выбран.");
    Иначе
        Предупреждение("Файл не выбран.");
        Возврат;
    КонецЕсли;
    ПолеВвода1 = Диалог.ПолноеИмяФайла;
    
    Эксель = Новый 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(Стр,НоменклатураКолонка).Value));
        Если Номенклатура.Пустая() Тогда 
            Сообщить("Строка - " + ФайлСтрок + " Номенклатура " + """" + СокрЛП(Эксель.Cells(Стр,НоменклатураКолонка).Value) + """" + " не найдена!"); 
            СсылкаСправочник = Справочники.Номенклатура.СоздатьЭлемент();
            СсылкаСправочник.Наименование = Номенклатура;
            СсылкаСправочник.ПолноеНаименование = Номенклатура;
            СсылкаСправочник.БазоваяЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("ƏD"); 
            СсылкаСправочник.Записать();
            НоваяСтрока = ТЗ.Добавить(); 
            НоваяСтрока.Номенклатура = Номенклатура; 
            НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,КоличествоКолонка).Value); 
            НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,ЦенаКолонка).Value); 
            НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,СуммаКолонка).Value); 
            НоваяСтрока.Номенклатура = Номенклатура;
        Иначе 
            НоваяСтрока = ТЗ.Добавить(); 
            НоваяСтрока.Номенклатура = Номенклатура; 
            НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,КоличествоКолонка).Value); 
            НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,ЦенаКолонка).Value); 
            НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,СуммаКолонка).Value); 
            НоваяСтрока.Номенклатура = Номенклатура; 
        Конецесли 
    КонецЦикла; 
    
    
    Эксель.ActiveWorkbook.Close();
    Эксель.Application.Quit();

    ПереборСтрокТЗ();
КонецПроцедуры
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dka80 20 07.03.19 10:46 Сейчас в теме
1. Прочитай эксель-файл в табличный документ.
2. Табличный документ преобразуй в таблицу значений следующим кодом:

Функция ПреобразоватьТабличныйДокументВТаблицуЗначений(ИмяТД) 
	
	ТабДокумент = ЭтаФорма[ИмяТД];
	ПоследняяСтрока = ТабДокумент.ВысотаТаблицы;
	ПоследняяКолонка = ТабДокумент.ШиринаТаблицы;
	Если ИмяТД = "СписокСотрудников" Тогда
		ОбластьЯчеек = ТабДокумент.Область(8, 1, ПоследняяСтрока, ПоследняяКолонка); 
	Иначе
		ОбластьЯчеек = ТабДокумент.Область(1, 1, ПоследняяСтрока, ПоследняяКолонка); 
	КонецЕсли;
	// Создаем описание источника данных на основании области ячеек табличного документа.
	ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек);  
	// Создаем объект для интеллектуального построения отчетов,
	// указываем источник данных и выполняем построение отчета.
	ПостроительОтчета = Новый ПостроительОтчета; 
	ПостроительОтчета.ИсточникДанных = ИсточникДанных;
	ПостроительОтчета.Выполнить();
	// Результат выгружаем в таблицу значений.
	ТабЗначений = ПостроительОтчета.Результат.Выгрузить();
	Возврат ТабЗначений;
	
КонецФункции
Показать
3. anton13m 2 07.03.19 10:56 Сейчас в теме
В процедуре ПереборСтрокТЗ() на каждую строку создается свой документ.
СсылкаДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
СсылкаДокумент.Дата = ТекущаяДата();
Для Каждого Ст из ТЗ Цикл
    ТекСтрокаТовары = СсылкаДокумент.Товары.Добавить();
    ТекСтрокаТовары.Номенклатура = Ст.Номенклатура;
    ТекСтрокаТовары.Количество = Ст.Количество;
    ТекСтрокаТовары.Цена = Ст.Цена;
    ТекСтрокаТовары.Сумма = Ст.Сумма;
    ТекСтрокаТовары.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС; 
    ТекСтрокаТовары.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("ƏD");
    ТекСтрокаТовары.Коэффициент = 1;
КонецЦикла;
СсылкаДокумент.Записать();
Показать
Оставьте свое сообщение

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