1С Загрузка Данных УТ 10.3

1. _7445_ 07.03.19 15:02 Сейчас в теме
Здравствуйте. Я плохо знаю русский. Извините за этого. Я еще новичок в 1С программирование. В УТ 10.3. Сам код работает, загружает данные и заполняет табличный часть. Но пользователю надо что он могла вводить номер колонку. Пример : В Excel есть 4 колонку (Номенклатура, Цена, Количество, Сумма). Но Номенклатуры в третий колонке, цена 2, сумма 4 и количество 1.
У меня в экселя номенклатуры написан в третий колонке. И есть только одно товар (Пример ; Клавиатура).
Код такой -
НоменклатураКолонка = 3; // я сам это поставил 
        ВвестиЗначение(НоменклатураКолонка, "Введите номер колонки ""Номенклатура""");
///// .......
Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Эксель.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;   
    Конецесли;
НоменклатураКолонка = 3; // я сам это поставил 
        ВвестиЗначение(НоменклатураКолонка, "Введите номер колонки ""Номенклатура""");
КоличествоКолонка = 0; // я сам это поставил 
        ВвестиЗначение(КоличествоКолонка , "Введите номер колонки ""Количество""");
ЦенаКолонка = 0; // я сам это поставил 
        ВвестиЗначение(ЦенаКолонка , "Введите номер колонки ""Цена""");
СуммаКолонка = 0; // я сам это поставил 
        ВвестиЗначение(СуммаКолонка , "Введите номер колонки ""Сумма""");
Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Эксель.Cells(Стр,НоменклатураКолонка).Value));
        Если Номенклатура.Пустая() Тогда 
            Сообщить("Строка - " + ФайлСтрок + " Номенклатура " + """" + СокрЛП(Эксель.Cells(Стр,НоменклатураКолонка).Value) + """" + " не найдена!"); 
            СсылкаСправочник = Справочники.Номенклатура.СоздатьЭлемент();
            СсылкаСправочник.Наименование = Номенклатура;
            СсылкаСправочник.ПолноеНаименование = Номенклатура;
            СсылкаСправочник.БазоваяЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("ƏD"); 
            СсылкаСправочник.Записать();
            НоваяСтрока = ТЗ.Добавить(); 
            НоваяСтрока.Номенклатура = Номенклатура; 
            НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,КоличествоКолонка).Value); 
            НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,ЦенаКолонка).Value); 
            НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,СуммаКолонка).Value); 
Иначе
НоваяСтрока = ТЗ.Добавить(); 
            НоваяСтрока.Номенклатура = Номенклатура; 
            НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,КоличествоКолонка).Value); 
            НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,ЦенаКолонка).Value); 
            НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,СуммаКолонка).Value); 
            НоваяСтрока.Номенклатура = Номенклатура; 
        Конецесли 
    КонецЦикла; 
    
    
    Эксель.ActiveWorkbook.Close();
    Эксель.Application.Quit();

    ПереборСтрокТЗ();
КонецПроцедуры
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. alxarz 31 07.03.19 15:32 Сейчас в теме
(1)
Но код выбирает самую первую который есть списке справочнике номенклатура.

может так?
Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Эксель.Cells(Стр,НоменклатураКолонка).Value), истина);
5. _7445_ 07.03.19 15:50 Сейчас в теме
6. D_e_X_T_e_R 573 07.03.19 16:53 Сейчас в теме
(5)А что отладчик показывает тут: Эксель.Cells(Стр,НоменклатураКолонка).Value)?
8. ganjaman 08.03.19 16:46 Сейчас в теме
(1) базовая единица измерения в ут10 - это классификатор единиц измерения, а не единица созданная на его основе
и как то конецикла есть в процедуре выбора файла, а начала нет - по-моему, это немного неправильно )
2. D_e_X_T_e_R 573 07.03.19 15:10 Сейчас в теме
А почему нельзя использовать обработку с ИТС "Загрузка данных из табличного документа"? Там есть возможность выбирать порядок колонок.
3. _7445_ 07.03.19 15:17 Сейчас в теме
(2)
Это проста задания для обучение программированию. Можете дать подсказки для решению этого проблему
7. user902161 07.03.19 17:18 Сейчас в теме
У вас ошибка в синтаксисе.
Скорее всего неверно откуда то скопировали.
Должно быть что-то на подобии
 Для каждого Стр из ТЗ Цикл
        Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Эксель.Cells(Стр,НоменклатураКолонка).Value));
        Если Номенклатура.Пустая() Тогда 
            Сообщить("Строка - " + ФайлСтрок + " Номенклатура " + """" + СокрЛП(Эксель.Cells(Стр,НоменклатураКолонка).Value) + """" + " не найдена!"); 
            СсылкаСправочник = Справочники.Номенклатура.СоздатьЭлемент();
            СсылкаСправочник.Наименование = Номенклатура;
            СсылкаСправочник.ПолноеНаименование = Номенклатура;
            СсылкаСправочник.БазоваяЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("ƏD"); 
            СсылкаСправочник.Записать();
            НоваяСтрока = ТЗ.Добавить(); 
            НоваяСтрока.Номенклатура = Номенклатура; 
            НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,КоличествоКолонка).Value); 
            НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,ЦенаКолонка).Value); 
            НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,СуммаКолонка).Value); 
        Иначе
           НоваяСтрока = ТЗ.Добавить(); 
            НоваяСтрока.Номенклатура = Номенклатура; 
            НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,КоличествоКолонка).Value); 
            НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,ЦенаКолонка).Value); 
            НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,СуммаКолонка).Value); 
            НоваяСтрока.Номенклатура = Номенклатура; 
        КонецЕсли; 
КонецЦикла; 
Показать

Проверьте синтаксис получше и вдумайтесь в код. Тогда есть вероятность, что он отработает
Оставьте свое сообщение

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