Имя: Пароль:
1C
1С v8
Чтение данных из xlsx файла в справочник номенклатура
,
0 Hammond
 
07.10.20
19:19
Добрый Вечере. Нужна помощь новичку 1с.
есть задание, суть которого:
1. создание внешней обработки
2. сделать поле "путь к файлу", при помощи которого через диалоговое окно windows указать на файл, который при нажатии на "открыть" открывается
3. сделать поле вид цены, которая через вложенный список показывает виды цены, находящиеся в документах
4. Ключ поиска, вложенный список с заранее известными атрибутами
5. Перезапись дублей. булево значение, должно быть истинно
6. сделать на форме кнопку "загрузить"
Это все я сделал, но столкнулся с трудностями дальше
При нажатии на кнопку «Загрузить» указанный файл считывается, и для каждой строчки создается отдельный элемент справочника «Номенклатура». При этом загружается изображение товара и устанавливается основным для карточки товара.
В справочнике «Номенклатура» должна строиться иерархия товаров в соответствии с данными в файле (колонка «Группа»).
Для каждого товара должна регистрироваться цена продажи по выбранному виду цен.
Перед загрузкой данных по товару должен происходить поиск по указанному пользователем ключу. Если товар найден в справочнике, то проверяется флаг «Перезаписывать дубли». Если флаг установлен – найденный элемент перезаполняется, иначе просто пропускается. Если такой товар не найден, то создается новый товар.
Помогите с кодом, не понимаю, как это сделать
1 МихаилМ
 
07.10.20
19:24
вы каждый день тут попрошайничаете
2 Hammond
 
07.10.20
19:27
бывает иногда)
3 hhhh
 
07.10.20
19:39
(2) на сайте 1clancer пишешь задачу, тебе за пару часов сделают. И по цене там немного, пару-тройку тысяч.
4 Hammond
 
07.10.20
19:47
Да я понимаю, что можно купить работу, но я сам хочу разобраться с ней.
просто нуждаюсь в каких-то советах по выполнению. мне бы разобраться с кнопкой загрузить, чтобы она считывала и записывала, все остальное я, думаю, сделаю сам. читал много всего в интернете, писал некоторый функции, но сталкивался с проблемами, которые не в силах пофиксить.
5 Chameleon1980
 
07.10.20
19:50
ну и пиши что не получается, а не всю портянку с заланием
6 Hammond
 
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, который у меня хранится в объект.путькфайлу, но указать его не получается
7 acht
 
07.10.20
20:03
(4) > читал много всего в интернете, писал некоторый функции,

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

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

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


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

   ЗагрузитьОбъект.ИзExcelВТаблицу ();

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