Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Чтение данных из xlsx файла в справочник номенклатура

Чтение данных из xlsx файла в справочник номенклатура
Я
   Hammond
 
07.10.20 - 19:19
Добрый Вечере. Нужна помощь новичку 1с.
есть задание, суть которого:
1. создание внешней обработки
2. сделать поле "путь к файлу", при помощи которого через диалоговое окно windows указать на файл, который при нажатии на "открыть" открывается
3. сделать поле вид цены, которая через вложенный список показывает виды цены, находящиеся в документах
4. Ключ поиска, вложенный список с заранее известными атрибутами
5. Перезапись дублей. булево значение, должно быть истинно
6. сделать на форме кнопку "загрузить"
Это все я сделал, но столкнулся с трудностями дальше
При нажатии на кнопку «Загрузить» указанный файл считывается, и для каждой строчки создается отдельный элемент справочника «Номенклатура». При этом загружается изображение товара и устанавливается основным для карточки товара.
В справочнике «Номенклатура» должна строиться иерархия товаров в соответствии с данными в файле (колонка «Группа»).
Для каждого товара должна регистрироваться цена продажи по выбранному виду цен.
Перед загрузкой данных по товару должен происходить поиск по указанному пользователем ключу. Если товар найден в справочнике, то проверяется флаг «Перезаписывать дубли». Если флаг установлен – найденный элемент перезаполняется, иначе просто пропускается. Если такой товар не найден, то создается новый товар.
Помогите с кодом, не понимаю, как это сделать
   МихаилМ
 
1 - 07.10.20 - 19:24
вы каждый день тут попрошайничаете
   Hammond
 
2 - 07.10.20 - 19:27
бывает иногда)
   hhhh
 
3 - 07.10.20 - 19:39
(2) на сайте 1clancer пишешь задачу, тебе за пару часов сделают. И по цене там немного, пару-тройку тысяч.
   Hammond
 
4 - 07.10.20 - 19:47
Да я понимаю, что можно купить работу, но я сам хочу разобраться с ней.
просто нуждаюсь в каких-то советах по выполнению. мне бы разобраться с кнопкой загрузить, чтобы она считывала и записывала, все остальное я, думаю, сделаю сам. читал много всего в интернете, писал некоторый функции, но сталкивался с проблемами, которые не в силах пофиксить.
   Chameleon1980
 
5 - 07.10.20 - 19:50
ну и пиши что не получается, а не всю портянку с заланием
   Hammond
 
6 - 07.10.20 - 19:59
Хорошо
использую данный код для Выбора файла, все работает
&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка=ложь;
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Заголовок = "Выберите файл";
    Диалог.ПолноеИмяФайла = ""; 
    Фильтр = "XLSX (*.xlsx)|*.xlsx"; 
    Диалог.Фильтр = Фильтр; 
    Диалог.МножественныйВыбор = Ложь;
    Диалог.Каталог = "C:\";
    Если Диалог.Выбрать() Тогда
        Объект.ПутьКФайлу = Диалог.ПолноеИмяФайла;
    КонецЕсли;
КонецПроцедуры

дальше при помощи данного кода открываю файл для просмотра
Процедура ПутьКФайлуОткрытие(Элемент, СтандартнаяОбработка)
  // текСтрока = Элементы.Выбрать.ТекущаяСтрока; 

    ИмяФайла = Объект.ПутьКФайлу;
    ЗапуститьПриложение(ИмяФайла);
КонецПроцедуры

это все работает легко и понятно.
дальше использую найденный в интернете код:
Функция ИзExcelВТаблицу(Объект.ПутьКФайлу, НомерСтраницы = 1, ПерСтрокаЗаголовок = Ложь , ФормаИндикатора = Неопределено)
    Попытка
        Док = ПолучитьCOMОбъект(Объект.ПутьКФайлу); 
    Исключение
        Сообщить("Произошла ошибка при обращение к Excel:" + Символы.ПС + ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;       
 
    ЗакрытьФормуИндиктаора = Ложь;  
    Если ФормаИндикатора = Неопределено тогда
        ЗакрытьФормуИндиктаора = Истина;
//        ФормаИндикатора = ПолучитьОбщуюФорму("ХодВыполненияОбработкиДанных");       

        ФормаИндикатора.Открыть();  
    КонецЕсли;      
    ФормаИндикатора.КомментарийЗначения = "Загрузка данных из Excel...";
     
    ТЗ = Новый ТаблицаЗначений();   
    Страница = Док.Sheets(НомерСтраницы);
    МакСтрок = Страница.UsedRange.Rows.Count;      // макс. колич. строк

    МакСтолб = Страница.UsedRange.Columns.Count;    // макс. колич. столбцов    

     
    Для Столбец = 1 по МакСтолб цикл
        ИмяСтолбца = "Столбец_"  + Столбец;
        Если ПерСтрокаЗаголовок тогда
            ИмяСтолбца = Страница.Cells(1,Столбец).Value;
            ИмяСтолбца = СокрЛП(ИмяСтолбца);
            ИмяСтолбца = СтрЗаменить(ИмяСтолбца," ","_");
        КонецЕсли;                      
        ТЗ.Колонки.Добавить(ИмяСтолбца, Новый ОписаниеТипов("Строка"));
    КонецЦикла; 
     
    НачальнаяСтрока = 1;    
    Если ПерСтрокаЗаголовок тогда                                       
        НачальнаяСтрока = 2;
    КонецЕсли;          
     
    Для НомСтрока = НачальнаяСтрока по МакСтрок цикл
        СтрТЗ = ТЗ.Добавить();
        Для НомСтолбец = 1 по МакСтолб цикл
            Данные = Страница.Cells(НомСтрока,НомСтолбец).Value;                
            СтрТЗ[НомСтолбец-1] = Данные;
        КонецЦикла;     
         
        ФормаИндикатора.ЭлементыФормы.Индикатор.Значение = НомСтрока/МакСтрок * 100;        
    КонецЦикла;     
     
    Если ЗакрытьФормуИндиктаора тогда
        ФормаИндикатора.Закрыть();
    КонецЕсли;      
     
    Возврат ТЗ; 
КонецФункции 

Ругается на "Объект.ПутьКФайлу" в параментрах процедуры. там нужно указать путь до файла exel, который у меня хранится в объект.путькфайлу, но указать его не получается
   acht
 
7 - 07.10.20 - 20:03
(4) > читал много всего в интернете, писал некоторый функции,

Ну, значит, о синтаксе параметров процедур и функций знаешь. Продолжай.
   Hammond
 
8 - 07.10.20 - 20:43
разместил в модуле объекта 
Функция ИзExcelВТаблицу(ИмяФайла, НомерСтраницы = 1, ПерСтрокаЗаголовок = Ложь , ФормаИндикатора = Неопределено) Экспорт
и Функция ЭлементСправочника(Номенклатура = "",ИмяЭлемента, ИмяРодителя = Неопределено, Параметры = Неопределено, СоздатьЕслиНетЭлемента=Истина) Экспорт
в модуле формы написал 
&НаСервере
Процедура ЗагрузитьОбъект()
    
    ЗагрузитьОбъект = РеквизитФормыВЗначение("Объект");
    
    ЗагрузитьОбъект.ИзExcelВТаблицу ();
    
    ЗагрузитьОбъект.ЭлементСправочника ();

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

&НаКлиенте
Процедура Загрузить(Команда)
    ПроверитьЗаполнение();
    ЗагрузитьОбъект();
    КонецПроцедуры


Все сохраняется, но при нажатии на кнопку загрузить появляется ошибка "Недостаточно фактических параметров"
   lEvGl
 
9 - 07.10.20 - 23:32
А со списком видов цен сделал? Как?
   hhhh
 
10 - 07.10.20 - 23:42
(8) посчитай сколько параметров ты здесь задал
   ЗагрузитьОбъект.ИзExcelВТаблицу ();

и сколько должно быть.
   Злопчинский
 
11 - 07.10.20 - 23:49
(0) то что ты написал это есть практически штатная УНФ "загрузка из внешних источников".
   Chameleon1980
 
12 - 08.10.20 - 05:25
копипастеры, которые даже задумываться не хотят

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.