Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Процедура пошуку номенклатури в БАС Бухгалтерії: проблема в дублювані позицій при загрузці через обробку
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
bandrah
Створив обробку для завантаження звітів про роздрібні продажі, перший раз все ок, при повтрній вгрузці дублюється номенклатура, додаю процедуру, що роблю не правильно вже не можу поняти, дякую всім наперед, впевнений, що світ не без добрих людей

необходимо зарегистрироваться для просмотра ссылки
&НаСервере
Функция НайтиНоменклатуру(Номенкл, СтавкаПДВ, АртикулП)
    
    Если СокрЛП(СтавкаПДВ)="" Тогда
        СтавкаПДВ = 0;
    КонецЕсли;
    Артикул = СокрЛП(АртикулП);
    
    СтавкаНоменкл = Перечисления.СтавкиНДС.НДС20;
    //Если СтавкаПДВ = 7 Тогда
    //    СтавкаНоменкл = Перечисления.СтавкиНДС.НДС7;
    //ИначеЕсли СтавкаПДВ = 20 Тогда
    //    СтавкаНоменкл = Перечисления.СтавкиНДС.НДС20;
    //Иначе
    //    СтавкаНоменкл = Перечисления.СтавкиНДС.НДС0;
    //КонецЕсли;
    
    Если Артикул <> "" Тогда
        НайдАрт = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",АртикулП);
        Если СокрЛП(НайдАрт)<> "" Тогда
            Артикул = НайдАрт.Ссылка;
            
        Иначе
            НовДов = Справочники.Номенклатура.СоздатьЭлемент();
            НовДов.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("2009"); // шт
            
            НовДов.Наименование = Номенкл;
            НовДов.НаименованиеПолное = Номенкл;
            Если Артикул<>""  Тогда
                НовДов.Артикул = Артикул;
            КонецЕсли;    
            
            НовДов.СтавкаНДС = СтавкаНоменкл;
            
            Запись = НовДов.ЕдиницыИзмерения.Добавить();
            Запись.Коэффициент         = 1;
            Запись.ЕдиницаИзмерения = НовДов.БазоваяЕдиницаИзмерения;
            
            НовДов.Записать();
            
            Возврат НовДов.Ссылка;
        КонецЕсли;
    КонецЕсли;
    
    Запит = Новый Запрос;
    Запит.Текст = "ВЫБРАТЬ
    |    Номенклатура.Ссылка КАК Номенкл,
    |    Номенклатура.Наименование
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |    Номенклатура.ПометкаУдаления = ЛОЖЬ
    |    И Номенклатура.Наименование = &Назва
    |    И Номенклатура.Артикул = &Артикул
    |    И Номенклатура.СтавкаНДС = &СтавкаПДВ";
    
    Запит.УстановитьПараметр("Назва", Номенкл);
    Запит.УстановитьПараметр("СтавкаПДВ", СтавкаНоменкл);
    Запит.УстановитьПараметр("Артикул", АртикулП);
    Виб = Запит.Выполнить().Выбрать();
    Если Виб.Следующий() Тогда
        Если Артикул<>"" И СокрЛП(Виб.Номенкл.Артикул)="" Тогда
            Об = Виб.Номенкл.ПолучитьОбъект();
            Об.Артикул = Артикул;
            Об.Записать();
        КонецЕсли;    
        
        Если СтавкаНоменкл <> Виб.Номенкл.СтавкаНДС Тогда
            Об = Виб.Номенкл.ПолучитьОбъект();
            Об.СтавкаНДС = СтавкаНоменкл;
            Об.Записать();
        КонецЕсли;
        
        Возврат Виб.Номенкл;
    КонецЕсли;
    
КонецФункции
logist
У вас нет понимания что такое типы данных, это касается всего кода.
И в следствии этого, скорее всего не срабатывает это условие:
Цитата(bandrah @ 26.05.21, 22:10) необходимо зарегистрироваться для просмотра ссылки
Если СокрЛП(НайдАрт)<> "" Тогда

bandrah
logist @ Сегодня, 21:35 необходимо зарегистрироваться для просмотра ссылки ,
дякую за наводку (типы данных), артикул був числом, а має бути строка, виправив - все запрацювало коректно
logist
Цитата(bandrah @ 26.05.21, 23:19) необходимо зарегистрироваться для просмотра ссылки
ртикул був числом, а має бути строка, виправив - все запрацювало коректно

Насправді проблема створення може бути й тут "НайдАрт", бо це не строка а СправочникСсылка, і тут треба використовувати НайдАрт.Пустая() або ЗначениеЗаполнено(НайдАрт)
bandrah
logist @ Сегодня, 22:27 необходимо зарегистрироваться для просмотра ссылки ,
дякую за підказку
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.