Имя: Пароль:
1C
1С v8
1С 8.3 УФ обработка по загрузке из экселя, как перебрать группу справочника
0 lirt82
 
17.12.15
16:34
Есть внешняя обработка загружает данные(прайсы) от контрагентов.
Проблема как сделать Поиск По Наименованию в справочнике Номенклатура в конкретной группе "Шины"? Сейчас ищет по всему справочнику и если не находит то создает элемент вне группы "Шины".
&НаКлиенте
Процедура Загрузить(Команда)
......
Excel.Workbooks.Open(ИмяФайла);
    НомерЛиста =  НомерЛистаЭксель;
    Лист = Excel.WorkSheets(НомерЛиста);    
    ВсегоКолонок = Excel.Cells(1,1).SpecialCells(11).Column;
    ВсегоСтрок = Excel.Cells(1,1).SpecialCells(11).Row;
    Массив = Новый Массив;
    Для Стр = ПерваяСтрока По ПоследняяСтрока Цикл  
        ПолеНаим = СокрЛП(Лист.Cells(Стр, Наименование).Value);
        СпрНом = НайтиСправочникПоНаименованию(ПолеНаим,"Номенклатура");
        //        СпрНом = Справочники.Номенклатура.НайтиПоНаименованию(ПолеНаим,,"Шины");
        ПолеАртикул = ?(Артикул=0,0,СокрЛП(Лист.Cells(Стр, Артикул).Value));
        ПолеТипоразмер = ?(Типоразмер=0,0,СокрЛП(Лист.Cells(Стр, Типоразмер).Value));
........
Реквизиты = Новый Структура;
        Реквизиты.Вставить("Номенклатура", СпрНом);
        Реквизиты.Вставить("Артикул", ПолеАртикул);
        Реквизиты.Вставить("Типоразмер", ПолеТипоразмер);
........
Массив.Добавить(Реквизиты);
    КонецЦикла;
    ОбработатьДанные(Массив);
    
    Excel.ActiveWorkbook.Close();
    Excel.Quit();
    Excel = Неопределено;
    
        ОткрытьФормуМодально("ЖурналыДокументов.ЗагрузкиОтПоставщиков.ФормаСписка");  // 2 ошибка
    // Форма.Открыть();

    //ФормаСписка = ПолучитьФорму("ЖурналыДокументов.ЗагрузкиОтПоставщиков.ФормаСписка");
    //ФормаСписка.Открыть();
    
КонецПроцедуры
&НаСервере
Функция НайтиСправочникПоНаименованию(ПолеНаим,Вид)
    Нашли = Справочники[Вид].НайтиПоНаименованию(ПолеНаим);
    Если Нашли = Справочники[Вид].ПустаяСсылка() Тогда
        СпрОбъект = Справочники[Вид].СоздатьЭлемент();
        СпрОбъект.Наименование = ПолеНаим;
        СпрОбъект.Записать();
        Возврат СпрОбъект.Ссылка;
    Иначе    
        Возврат Справочники[Вид].НайтиПоНаименованию(ПолеНаим);
    КонецЕсли;
КонецФункции    

&НаСервере
Процедура ОбработатьДанные(Массив)
    Док =  Документы.ЗагрузкаДанныхИзФайлаЭксель.СоздатьДокумент();
    Док.Дата = ТекущаяДата();
    Док.Партнер = Контрагент; //3 ошибка
Для Каждого Элемент Из Массив Цикл
        СтрТЧ =  Док.Товары.Добавить();
        СтрТЧ.Наименование = Элемент.Номенклатура;
        СтрТЧ.Артикул = Элемент.Артикул;
............
СтрТЧ.ЦенаОптовая = Элемент.ЦенаОптовая;
        ЗаполнитьЗначенияСвойств(СтрТЧ,Элемент);
    КонецЦикла;
    Док.Записать(РежимЗаписиДокумента.Запись);
        
КонецПроцедуры

2 ошибка) при выполнении кода ОткрытьФорму(), ПолучитьФорму() выдается ошибка {Форма.Форма.Форма(78)}: Ошибка при вызове метода контекста (ОткрытьФормуМодально)
        ОткрытьФормуМодально("ЖурналыДокументов.ЗагрузкиОтПоставщиков.ФормаСписка");
по причине:
Неизвестное имя формы. Имя: "ЖурналыДокументов.ЗагрузкиОтПоставщиков.ФормаСписка"
но у журнала есть ФормаСписка!
3 ошибка) отладчик видит значение Контрагент в Док.Партнер = Контрагент; // но не записывает его, как понять?