8.х Поиск по наименованию

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Dmitrij, 20 фев 2009.

  1. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Выполняется загрузка из файла, почему то создаются одинаковые позиции в справочнике номенклатура
    подскажите в чем может быть проблема
    Код:
    НоменклатураФ=СокрЛП(ФайлВВР.hto);
    АртикулФ=СокрЛП(ФайлВВР.art);
    НДС=СокрЛП(ФайлВВР.NDS);
    НайдНаименование=Справочники.Номенклатура.НайтиПоНаименованию(НоменклатураФ,Истина);
    НайдАртикул=СокрЛП(НайдНаименование.Артикул);
    Если Справочники.Номенклатура.НайтиПоНаименованию(НоменклатураФ,истина)<>Справочники.Номенклатура.ПустаяСсылка() И АртикулФ=НайдАртикул Тогда
    //НайдНаименование=Справочники.Номенклатура.НайтиПоНаименованию(НоменклатураФ,Истина);
    ТекНаименование=НайдНаименование.Ссылка;
    //Если АртикулФ=ТекНаименование.Артикул Тогда
    Если Не ЗначениеЗаполнено(ТекНаименование.КодПоставщика) Тогда
    СпрНаименование=ТекНаименование.ПолучитьОбъект();
    КодПоставщика=СокрЛП(ФайлВВР.cto);
    СпрНаименование.КодПоставщика=УдалПробелов(КодПоставщика);
    Если Не ЗначениеЗаполнено(СпрНаименование.СтавкаНДС) Тогда
    Если  НДС="0" Тогда
    СпрНаименование.СтавкаНДС=Перечисления.СтавкиНДС.БезНДС;
    ИначеЕсли НДС="18" Тогда
    СпрНаименование.СтавкаНДС=Перечисления.СтавкиНДС.НДС18;
    ИначеЕсли НДС="10" Тогда
    СпрНаименование.СтавкаНДС=Перечисления.СтавкиНДС.НДС10;
    КонецЕсли;
    КонецЕсли;
    Страна=Справочники.КлассификаторСтранМира.НайтиПоНаименованию(СокрЛП(ФайлВВР.pro),Истина);		
    Если Не ЗначениеЗаполнено(СпрНаименование.СтранаПроисхождения)Тогда
    Если Страна="" Тогда
    //Пропускаем
    Иначе
    Если Страна <> Справочники.КлассификаторСтранМира.ПустаяСсылка() Тогда
    ТекСтрана=Страна.Ссылка;
    СпрНаименование.ВестиУчетПоСериям=Истина;
    СпрНаименование.СтранаПроисхождения=Справочники.КлассификаторСтранМира.НайтиПоНаименованию(СокрЛП(ТекСтрана),истина);
    Иначе
    //Сообщить ("Не найдена страна производителя либо не совпадает название "+СокрЛП(ФайлВВР.pro));
    КонецЕсли;
    КонецЕсли;
    //КонецЕсли;
    СпрНаименование.Записать();
    КонецЕсли;
    //Заполняе регистр Остатки поставщика		
    ЗаписьРС.Период=ТекущаяДата();
    ЗаписьРС.Наименование=ТекНаименование;
    ЗаписьРС.Цена=СокрЛП(ФайлВВР.cenp);
    ЗаписьРС.Минимум=СокрЛП(ФайлВВР.nu2);
    ЗаписьРС.КодОК=ТекНаименование.КодОК;
    ЗаписьРС.Остаток=СокрЛП(ФайлВВР.ost);
    ЗаписьРС.Записать();
    КонецЕсли;
    Иначе
    //Создаем новую позицию
    НайдНаименование=Справочники.Номенклатура.СоздатьЭлемент();
    НайдНаименование.Наименование=НоменклатураФ;
    НайдНаименование.НаименованиеПолное=НоменклатураФ;
    НайдНаименование.ВидНоменклатуры=Справочники.ВидыНоменклатуры.НайтиПоКоду("000000001");
    НайдНаименование.БазоваяЕдиницаИзмерения=Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("796");
    КодПоставщика=СокрЛП(ФайлВВР.cto);
    Если  НДС="0" Тогда
    НайдНаименование.СтавкаНДС=Перечисления.СтавкиНДС.БезНДС;
    ИначеЕсли НДС="18" Тогда
    НайдНаименование.СтавкаНДС=Перечисления.СтавкиНДС.НДС18;
    ИначеЕсли НДС="10" Тогда
    НайдНаименование.СтавкаНДС=Перечисления.СтавкиНДС.НДС10;
    КонецЕсли;
    НайдНаименование.КодПоставщика=УдалПробелов(КодПоставщика);
    // ищем и если надо, создаём группу "Новый товар"
    ПоискНТ=Справочники.Номенклатура.НайтиПоНаименованию("(Новый товар)",Истина);
    Если ПоискНТ=Справочники.Номенклатура.ПустаяСсылка()=Истина Тогда
    НоваяГруппа=Справочники.Номенклатура.СоздатьГруппу();
    НоваяГруппа.Наименование="(Новый товар)";
    НоваяГруппа.Записать();
    ГруппаНТ=НоваяГруппа.Ссылка;
    Иначе
    ГруппаНТ=Справочники.Номенклатура.НайтиПоНаименованию("(Новый товар)");
    КонецЕсли;
    НайдНаименование.Родитель=ГруппаНТ;
    НайдНаименование.Артикул=АртикулФ;
    НайдНаименование.ВестиУчетПоСериям=Истина;
    Страна=Справочники.КлассификаторСтранМира.НайтиПоНаименованию(СокрЛП(ФайлВВР.pro),Истина);
    Если Страна="" Тогда
    //Пропускаем
    Иначе
    Если Страна = Справочники.КлассификаторСтранМира.ПустаяСсылка() Тогда
    //Сообщить ("Не найдена страна производителя либо не совпадает название "+СокрЛП(ФайлВВР.pro));
    Иначе
    ТекСтрана=Страна.Ссылка;
    НайдНаименование.СтранаПроисхождения=Справочники.КлассификаторСтранМира.НайтиПоНаименованию(СокрЛП(ТекСтрана));
    КонецЕсли;
    КонецЕсли;
    НайдНаименование.Записать();
    ТекТов=НайдНаименование.Ссылка;
    НаимЕд="шт";
    УстановкаЕдИзм(НаимЕд);
    НайдНаименование.ЕдиницаХраненияОстатков=ТекЕд;
    НайдНаименование.ЕдиницаДляОтчетов=ТекЕд;
    НайдНаименование.Записать();
    
    
    
  2. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Код:
    	НайдНаименование=Справочники.Номенклатура.НайтиПоНаименованию(НоменклатураФ,Истина);
    НайдАртикул=СокрЛП(НайдНаименование.Артикул);
    Если Справочники.Номенклатура.НайтиПоНаименованию(НоменклатураФ,истина)<>Справочники.Номенклатура.ПустаяСсылка() И АртикулФ=НайдАртикул Тогда 
    
    Зачем дважды делаете поиск по наименованию?

    Скорее всего есть пробелы или в наименовании или в артикуле. Либо они отличаются. Нужно внимательно проанализировать момент создания дублирующейся номенклатуры. При ее загрузке смотреть отладчиком, на то, что находит поиск, и почему он не совпадает с тем, что есть в базе.
  3. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    делаю в справочнике отбор по наименованию те наименования полностью совпадают и артикулы.
    подскажите как правильно сделать загрузку чтоб дубли не создавались

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