8.х Загрузка номенклатуры БП 3.0.29.7

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем Svet42, 4 мар 2014.

  1. TopicStarter Overlay
    Svet42
    Offline

    Svet42 Опытный в 1С

    Регистрация:
    19 окт 2013
    Сообщения:
    200
    Симпатии:
    1
    Баллы:
    29
    И снова всем здравствуйте,прошу у вас совета, пишу обработку по загрузке справочника номенклатуры из .txt, но пока только ошибка, Поле объекта не обнаружено (БазоваяЕдиницаИзмерения), если такая тема обсуждалась, то прошу прощения,вот код обработки, буду рада любому совету)
    Код:
    Процедура КнопкаВыполнитьНажатие(Кнопка)
      
        ТекстДок = Новый ТекстовыйДокумент;
        ТекстДок.Прочитать("c:\СпрНом.txt");
        Тип   = "";
        Код   = "";
        ПКод  = "";
        Наим  = "";
        ПНаим = "";
        Арт   = "";
        Усл   = "";
        ЕИн   = "";
        ЕИпн  = "";
        ЕИк   = "";
        СтНДС = "";
        КодР  = "";
        Комм  = "";
        ГТД   = "";
        СтранаК = "";
        СтранаН = "";
        Для К=1 По ТекстДок.КоличествоСтрок() Цикл
            Строка = ТекстДок.ПолучитьСтроку(К);
            Тип    = СокрЛП(Лев(Строка,Найти(Строка,"#")-1)); // Признак группы
            Строка = Сред(Строка,Найти(Строка,"#")+1);
            Код    = СокрЛП(Лев(Строка,Найти(Строка,"#")-1)); // Код
            Строка = Сред(Строка,Найти(Строка,"#")+1);
            ПКод   = СокрЛП(Лев(Строка,Найти(Строка,"&")-1)); // Полный код
            Строка = Сред(Строка,Найти(Строка,"#")+1);
            Наим   = СокрЛП(Лев(Строка,Найти(Строка,"#")-1)); // Наименование
            Строка = Сред(Строка,Найти(Строка,"#")+1);
            ПНаим  = СокрЛП(Лев(Строка,Найти(Строка,"#")-1)); // Полное наименование
            Строка = Сред(Строка,Найти(Строка,"#")+1);
            Арт    = СокрЛП(Лев(Строка,Найти(Строка,"#")-1)); // артикул
            Строка = Сред(Строка,Найти(Строка,"#")+1);
            Усл    = СокрЛП(Лев(Строка,Найти(Строка,"#")-1)); // вид номенклатуры
            Строка = Сред(Строка,Найти(Строка,"#")+1);
            ЕИн    = СокрЛП(Лев(Строка,Найти(Строка,"#")-1)); // ед.изм.наименование
            Строка = Сред(Строка,Найти(Строка,"#")+1);
            ЕИпн   = СокрЛП(Лев(Строка,Найти(Строка,"#")-1)); // ед.изм.наименование полное
            Строка = Сред(Строка,Найти(Строка,"#")+1);
            ЕИк    = СокрЛП(Лев(Строка,Найти(Строка,"#")-1)); // ед.изм. код
            Строка = Сред(Строка,Найти(Строка,"#")+1);
            СтНДС  = СокрЛП(Лев(Строка,Найти(Строка,"#")-1)); // ставка НДС
            Строка = Сред(Строка,Найти(Строка,"#")+1);
            КодР   = СокрЛП(Лев(Строка,Найти(Строка,"#")-1)); // код родителя
            Строка = Сред(Строка,Найти(Строка,"#")+1);
            Комм   = СокрЛП(Лев(Строка,Найти(Строка,"#")-1)); // комментарий
            Строка = Сред(Строка,Найти(Строка,"#")+1);
            ГТД    = СокрЛП(Лев(Строка,Найти(Строка,"#")-1)); // номер ГТД
            Строка  = Сред(Строка,Найти(Строка,"#")+1);
            СтранаК = СокрЛП(Лев(Строка,Найти(Строка,"#")-1)); // страна код
            Строка  = Сред(Строка,Найти(Строка,"#")+1);
            СтранаН = СокрЛП(Строка);                          // страна наименование
          
            Если Тип="1" Тогда
                Нов = Справочники.Номенклатура.СоздатьГруппу();
                Нов.Код         = Код;
                Нов.Наименование = Наим;
                Если КодР <> "ПервыйУровень" Тогда
                    Группа       = Справочники.Номенклатура.НайтиПоКоду(КодР);
                    Нов.Родитель = Группа.Ссылка;
                КонецЕсли;
                сообщить("**********************"+Наим);
                попытка 
                    Нов.Записать();
                исключение
                    сообщить(Тип+"----"+Наим+"----"+Код);
                конецпопытки;
            Иначе
              
                Если Справочники.Номенклатура.НайтиПоКоду(Код) = Справочники.Номенклатура.ПустаяСсылка() Тогда
                    Нов = Справочники.Номенклатура.СоздатьЭлемент();
                    Нов.Код                = Код;
                    Нов.Наименование       = Наим;
                    Нов.НаименованиеПолное = ПНаим;
                    Нов.Артикул            = Арт;
                    Нов.Комментарий        = Комм;
                    Если Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду(ЕИк) <> НЕОПРЕДЕЛЕНО
                        И Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду(ЕИк) <> Справочники.КлассификаторЕдиницИзмерения.ПустаяСсылка() Тогда
                        Нов.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду(ЕИк).Ссылка;
                    Иначе  
                        Если ЕИк = "???" Тогда
                            Нов.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт").Ссылка;
                        Иначе
                            НовЕдИзм = Справочники.КлассификаторЕдиницИзмерения.СоздатьЭлемент();
                            НовЕдИзм.Наименование       = ЕИн;
                            НовЕдИзм.НаименованиеПолное = ЕИпн;
                            НовЕдИзм.Код                = ЕИк;
                            НовЕдИзм.Записать();
                            Нов.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду(ЕИк).Ссылка;
                        КонецЕсли;
                    КонецЕсли;
                    Если Усл = "Услуга" ИЛИ Усл = "Работа" Тогда
                        Нов.Услуга=Истина      
                    КонецЕсли;
                    // номера гтд
                    Если ГТД="нет" Тогда
                    Иначе
                    Если Справочники.НомераГТД.НайтиПоКоду(ГТД) <> НЕОПРЕДЕЛЕНО
                        И Справочники.НомераГТД.НайтиПоКоду(ГТД) <> Справочники.НомераГТД.ПустаяСсылка() Тогда
                        Нов.НомерГТД = Справочники.НомераГТД.НайтиПоКоду(ГТД).Ссылка;
                    Иначе  
                        НовГТД = Справочники.НомераГТД.СоздатьЭлемент();
                        НовГТД.Код = ГТД;
                        НовГТД.Записать();
                        Нов.НомерГТД = Справочники.НомераГТД.НайтиПоКоду(ГТД).Ссылка;
                    КонецЕсли;
                    КонецЕсли;
                    // страна происхождения
                    Если СтранаК="нет" Тогда
                    Иначе
                    Если Справочники.КлассификаторСтранМира.НайтиПоКоду(СтранаК) <> НЕОПРЕДЕЛЕНО
                        И Справочники.КлассификаторСтранМира.НайтиПоКоду(СтранаК) <> Справочники.КлассификаторСтранМира.ПустаяСсылка() Тогда
                        Нов.СтранаПроисхождения = Справочники.КлассификаторСтранМира.НайтиПоКоду(СтранаК).Ссылка;
                    Иначе  
                        НовСтрана = Справочники.КлассификаторСтранМира.СоздатьЭлемент();
                        НовСтрана.Код          = СтранаК;
                        НовСтрана.Наименование = СтранаН;
                        НовСтрана.Записать();
                        Нов.СтранаПроисхождения = Справочники.КлассификаторСтранМира.НайтиПоКоду(СтранаК).Ссылка;
                    КонецЕсли;
                    КонецЕсли;
                  
                    Если КодР <> "ПервыйУровень" Тогда
                        Род          = Справочники.Номенклатура.НайтиПоКоду(КодР);
                        Нов.Родитель = Род.Ссылка;
                    КонецЕсли;  
                    Нов.СтавкаНДС   = ПолучитьСтавкуНДС(СтНДС);
                    сообщить("::::::::::::::::::::::"+Наим);
                    попытка
                        Нов.Записать();
                    исключение
                        сообщить(Тип+"----"+Наим+"----"+Код);
                        Прервать;
                    конецпопытки;
                КонецЕсли;
            КонецЕсли;
          
        КонецЦикла;
      
    КонецПроцедуры
    
    Функция ПолучитьСтавкуНДС(Название)
                                       
        Для каждого ЭлементПеречисления Из Метаданные.Перечисления.СтавкиНДС.ЗначенияПеречисления Цикл
            Если ЭлементПеречисления.Синоним = Название Тогда
                СсылкаНаПеречисление = Перечисления.СтавкиНДС[ЭлементПеречисления.Имя];
                Прервать;
            КонецЕсли;
        КонецЦикла;
        Возврат СсылкаНаПеречисление;
      
    КонецФункции
    
  2. jonsony
    Offline

    jonsony Опытный в 1С Заблокирован

    Регистрация:
    16 апр 2009
    Сообщения:
    224
    Симпатии:
    25
    Баллы:
    29
    скорее всего название "вашей" баз. ед. измер не совпадает с тем что в базе, там из классификатора, так что подгоняйте в той базе откуда данные берёте

    PS
    а через эксель типовой обработкой "загрузка данных из табличного документа"?
    более удобно, и док лучше в MXL, а не в XLS
    Последнее редактирование: 4 мар 2014
    Svet42 нравится это.
  3. TopicStarter Overlay
    Svet42
    Offline

    Svet42 Опытный в 1С

    Регистрация:
    19 окт 2013
    Сообщения:
    200
    Симпатии:
    1
    Баллы:
    29
    Это я уже позже стала пробовать, найти по наименованию "шт", пробовала еще найти по коду 796, но результата никакого, хотя названия одинаковые, а через эксель я не умею пока еще, и честно это вообще моя первая обработка на выгрузку-загрузку номенклатуры, до этого типовыми средствами всегда обходилась. Буду пробовать через эксель, как появятся какие то результаты обязательно отпишусь.[/quote]
  4. jonsony
    Offline

    jonsony Опытный в 1С Заблокирован

    Регистрация:
    16 апр 2009
    Сообщения:
    224
    Симпатии:
    25
    Баллы:
    29
    если есть номер то лучше по нему, однозначней будет
    и при этом справочник единиц измерений в базе приёмнике должен быть заполнен всеми встречающимися из базы источника

Поделиться этой страницей