Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Каталоги справочника.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
akella
Доброго времени суток.
Появилась небольшой вопрос.
Пишу я обработку для загрузки из хлс в справочник номенклатуры данных. появилась проблема такого плана.
В файле хлс есть столбик с наименованием фирмы поставщика.
так вот надо при загрузки создавать каталог с этим наименоваием и загружать туда данные из строки)

//Определение номера необходимых колонок
    НомерКолонкиАртикулаТовара=1;
    НомерКолонкиНаименованияТовара= 2;
    НомерКолонкиПолнНаименованияТовара= 3;
    НомерКолонкиЕдИзмТовара=4;
    НомерКолонкиНаименованияПоставщика=5;
    НомерКолонкиЦеныТовара=6;
  
    
    // Выбираем данные из файла
    Для а = 1 по ФайлСтрок Цикл          
      
      
        //Полуим данные из ячеек
        КодТовара=СокрЛП(Excel.Cells(а,НомерКолонкиАртикулаТовара).Value);
        НаименованиеТовара=СокрЛП(Excel.Cells(а,НомерКолонкиНаименованияТовара).Value);
        ПолнНаименование=СокрЛП(Excel.Cells(а,НомерКолонкиПолнНаименованияТовара).Value);
        НаименованиеПоставшика=СокрЛП(Excel.Cells(а,НомерКолонкиНаименованияПоставщика).Value);
        Цена= Число(Excel.Cells(а,НомерКолонкиЦеныТовара).Value);
        
        Товар=СоздатьОбъект("Справочник.Номенклатура");
        Товар1=Товар.НайтиПоНаименованию(НаименованиеПоставшика);
        
           Товар.НайтиПоНаименованию(НаименованиеПоставшика);
           Товар.ВыбратьЭлементы(НаименованиеПоставшика);
           ИндГруппы=Товар.ЭтоГруппа();
           
        Если (ПустоеЗначение(НаименованиеПоставшика)=1) тогда
            Записать(Товар,КодТовара,НаименованиеТовара,ПолнНаименование,Цена,НаименованиеПоставш
ика);
        иначе
        
            Если (Товар1=1) и (ИндГруппы=1)  тогда
                Товар=СоздатьОбъект("Справочник.Номенклатура");
                Товар.ВыбратьЭлементы();
                Товар.Родитель=НаименованиеПоставшика;
                //Товар.ИспользоватьРодителя(НаименованиеПоставшика);
                
                Записать(Товар,КодТовара,НаименованиеТовара,ПолнНаименование,Цена,НаименованиеПоставш
ика);
                //продолжить;
                //тут должен быть код в котором будет описана "процедура" записи данных из функии записать(тоесть данные с строки ексела)
                // в существующую группу которую нашли.
            иначеЕсли ИндГруппы=0 тогда
                //тут обязана быть хрень в которой будет описан механизм создание группы которую не нашли и запись в ней данных их строкиэекселя
                
                Товар=СоздатьОбъект("Справочник.Номенклатура");
                Товар.ВыбратьЭлементы();
                Товар.НоваяГруппа();
                Товар.Наименование=НаименованиеПоставшика;
                Товар.Записать();
                Товар.Родитель=НаименованиеПоставшика;
                Записать(Товар,КодТовара,НаименованиеТовара,ПолнНаименование,Цена,НаименованиеПоставш
ика);
                
                
                //продолжить;
            КонецЕсли;


вот беда с позиционированием родителя..чет не могу нормльно объявить. чтобы запись шла в каталог выбранный мной.
буду рад помощи)))
kalyamov
А вот на эту строку - Товар.Родитель=НаименованиеПоставшика; - Ваша обработка ничего вульгарного не пишет ? Товар.Родитель - это тоже объект ("Справочник.Номенклатура"), а Вы его строкой хотите сделать. Да и вообще, как то странно написана обработка. Может фрагмент xls файла покажите ?
akella
не вульгарного не пишет.

формат хлс файла простой.

Артикул- Наименование- ПолноеНаименование- Поставщик- ед измерения- цена

в данном случае я ед езмерения не брал. ненужно пока.

она собственно все заполняет, но только сразу в справочник номенклатура. все хорошо проходит по условиям, все срабатывает, а вот именно заставить записывать в нужный каталог чет не могу(( не доходит мой моск)
kalyamov
Ну если все срабатывает и запинка только в этом месте, тогда попробуйте так:

    иначеЕсли ИндГруппы=0 тогда
                ТоварГр=СоздатьОбъект("Справочник.Номенклатура");
                ТоварГр.НоваяГруппа();
                ТоварГр.Наименование=НаименованиеПоставшика;
                ТоварГр.Записать();
                Товар.Родитель=ТоварГр;
                Записать(Товар,КодТовара,НаименованиеТовара,ПолнНаименование,Цена,НаименованиеПоставш
ика);

    КонецЕсли;


Но повторюсь - подозрительно, что все нормально срабатывает.
alex040269
Цитата(akella @ 24.11.11, 10:16) необходимо зарегистрироваться для просмотра ссылки
//Определение номера необходимых колонок
          Товар.Родитель=НаименованиеПоставшика;


НаименованиеПоставшика - доджен быть Справочник.Номенклаьура причем группа.

примерно так:

СпрНаименованиеПоставшика = СоздатьОбъект("Справочник.Номенклатура");
Если СпрНаименованиеПоставшика.НайтиПоНаименлованию(НаименованиеПоставшика) = 0 Тогда
        СпрНаименованиеПоставшика.НоваяГруппа();
       СпрНаименованиеПоставшика.Наименование = НаименованиеПоставшика;
       СпрНаименованиеПоставшика.Записать();
КонецЕсли;
Товар.Родитель=СпрНаименованиеПоставшика;
akella
Переделал как вы показали. хм. чет пока не хочет. я тут забыл еще функцию записать показать. скорей всего именно неправильная передача данных в неё.
иначеЕсли ИндГруппы=0 тогда
                //тут обязана быть хрень в которой будет описан механизм создание группы которую не нашли и запись в ней данных их строкиэекселя
                
                ТоварГр=СоздатьОбъект("Справочник.Номенклатура");
                ТоварГр.ВыбратьЭлементы();
                ТоварГр.НоваяГруппа();
                ТоварГр.Наименование=НаименованиеПоставшика;
                ТоварГр.Записать();
                Товар.Родитель=ТоварГр;
                Записать(товар,КодТовара,НаименованиеТовара,ПолнНаименование,Цена,НаименованиеПо
ставшика);
                
                
                
КонецЕсли;


Функция Записать(спр,КодТовара1,НаименованиеТовара1,ПолнНаименование1,Цена1,НаименованиеПоста
вшика1);

    Товар1=спр.НайтиПоКоду(КодТовара1);
    Товар1=спр.НайтиПоНаименованию(НаименованиеТовара1);
    
    Если Товар1=0 тогда
        
            спр.Новый();
            спр.Артикул=КодТовара1;
            спр.Наименование=НаименованиеТовара1;
            спр.ПолноеНаименование=ПолнНаименование1;
            спр.ОтпЦена=Цена1;
            спр.Записать();
        
    КонецЕсли;

КонецФункции


Вот тут я так понимаю нехватает Использовать родителя?) он всеравно почему-то проверяет справочник номенклатура а не группу справочника.
Flexy
иначеЕсли ИндГруппы=0 тогда
                //тут обязана быть хрень в которой будет описан механизм создание группы которую не нашли и запись в ней данных их строкиэекселя
                
                ТоварГр=СоздатьОбъект("Справочник.Номенклатура");
                //ТоварГр.ВыбратьЭлементы();
                ТоварГр.НоваяГруппа();
                ТоварГр.Наименование=НаименованиеПоставшика;
                ТоварГр.Записать();
                Товар.ИспользоватьРодителя(ТоварГр.ТекущийЭлемент());
                Записать(товар,КодТовара,НаименованиеТовара,ПолнНаименование,Цена,НаименованиеПо
ставшика);
                
                КонецЕсли;
kalyamov
Функция Записать(спр,КодТовара1,НаименованиеТовара1,ПолнНаименование1,Цена1,НаименованиеПоста
вшика1,Родитель1);

    Товар1=спр.НайтиПоКоду(КодТовара1);
    Товар1=спр.НайтиПоНаименованию(НаименованиеТовара1);
    
    Если Товар1=0 тогда
        
            спр.Новый();
            Если ПустоеЗначение(Родитель1)=0 Тогда
                   Спр.Родитель = Родитель1;
            КонецЕсли;  
            спр.Артикул=КодТовара1;
            спр.Наименование=НаименованиеТовара1;
            спр.ПолноеНаименование=ПолнНаименование1;
            спр.ОтпЦена=Цена1;
            спр.Записать();
        
    КонецЕсли;

КонецФункции
//Определение номера необходимых колонок
    НомерКолонкиАртикулаТовара=1;
    НомерКолонкиНаименованияТовара= 2;
    НомерКолонкиПолнНаименованияТовара= 3;
    НомерКолонкиЕдИзмТовара=4;
    НомерКолонкиНаименованияПоставщика=5;
    НомерКолонкиЦеныТовара=6;
  
    
    // Выбираем данные из файла
    Для а = 1 по ФайлСтрок Цикл          
        //Полуим данные из ячеек
        КодТовара=СокрЛП(Excel.Cells(а,НомерКолонкиАртикулаТовара).Value);
        НаименованиеТовара=СокрЛП(Excel.Cells(а,НомерКолонкиНаименованияТовара).Value);
        ПолнНаименование=СокрЛП(Excel.Cells(а,НомерКолонкиПолнНаименованияТовара).Value);
        НаименованиеПоставшика=СокрЛП(Excel.Cells(а,НомерКолонкиНаименованияПоставщика).Value);
        Цена= Число(Excel.Cells(а,НомерКолонкиЦеныТовара).Value);
        
        Товар = СоздатьОбъект("Справочник.Номенклатура");
        РодительТовара = СоздатьОбъект("Справочник.Номенклатура");
                
                Если ПустоеЗначение(НаименованиеПоставщика)=0) Тогда

                Если (РодительТовара.НайтиПоНаиенованию(НаименованиеПоставщика)=0) Тогда
                       РодительТовара.НоваяГруппа();
                       РодительТовара.Наименование = НаименованиеПоставщика;
                       РодительТовара.Записать();
                КонецЕсли;
                       Записать(Товар,КодТовара,НаименованиеТовара,ПолнНаименование,Цена,НаименованиеПоставш
ика,РодительТовара.ТекущийЭлемент());
                Иначе
                       Записать(Товар,КодТовара,НаименованиеТовара,ПолнНаименование,Цена,НаименованиеПоставш
ика,НаименованиеПоставщика);
        КонецЕсли;


Ну может так будет работать.
akella
спасибо заработало) осталось только чуток поправить сортировку) и все) огромное спасиб кто помогал)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.