Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 13:42

как сделать что-бы выполнялась суммирование при загрузки в в 1с предприятие 8.3 ?

Автор сергей123, 28 янв 2019, 16:11

0 Пользователей и 1 гость просматривают эту тему.

сергей123

как сделать что-бы выполнялась суммирование при загрузки в в 1с предприятие 8.3  ?

Данная обработка работает некорректно, при вводе нового товара из excel файла в 1с предприятие 8.3 создаётся новый товар с тем же название.
В базе был товар onyх с артикулем 5-1
загружаем еще одну позицию onyх с артикулем 5-1
получаем два товара раздельно с одим артиулем
как сделать что-бы выполнялась суммирование?
что-бы после загрузки было два товара вместе а не раздельно.

полный текст обработки
https://yadi.sk/i/ElPTXFFlA05M-g

https://yadi.sk/d/DCoitpQO-bw_jg



&НаСервере
Функция ПолучитьНоменклатуру(СтрокаТекст)
   
    Запрос = Новый Запрос;
    Артикул = СтрокаТекст.Артикул;
    Наименование = СтрокаТекст.Наименование;
   
//   Запрос.УстановитьПараметр("Артикул", Артикул);
//   Запрос.Текст = "ВЫБРАТЬ
//                  |    Номенклатура.Ссылка
//                  |ИЗ
//                  |    Справочник.Номенклатура КАК Номенклатура
//                  |ГДЕ
//                  |    Номенклатура.Артикул = &Артикул
//                  |    И НЕ Номенклатура.ПометкаУдаления";
   
//   Выборка = Запрос.Выполнить().Выбрать();
   
//   Если Выборка.Следующий() тогда
       
//       НоменклатураСсылка = Выборка.Ссылка;
       
//   Иначе   
       
        РодительСсылка = ГруппаНоменклатуры;
       
        // Производитель
        ТекстПроизводитель = СокрЛП(СтрокаТекст.Производитель);
        Если ЗначениеЗаполнено(ТекстПроизводитель) тогда
            Запрос = Новый Запрос;
            Запрос.УстановитьПараметр("Наименование",    ТекстПроизводитель);
            Запрос.УстановитьПараметр("Владелец",         ХарактеристикаПроизводитель);
            Запрос.Текст = "ВЫБРАТЬ
                           |    ЗначенияСвойствОбъектов.Ссылка
                           |ИЗ
                           |    Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                           |ГДЕ
                           |    ЗначенияСвойствОбъектов.Наименование = &Наименование
                           |    И ЗначенияСвойствОбъектов.Владелец = &Владелец";
           
            ВыборкаПроизводитель = Запрос.Выполнить().Выбрать();
            Если ВыборкаПроизводитель.Следующий() тогда
                ПроизводительСсылка = ВыборкаПроизводитель.Ссылка;
            Иначе
                ПроизводительОбъект = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
                ПроизводительОбъект.Владелец = ХарактеристикаПроизводитель;
                ПроизводительОбъект.Наименование = ТекстПроизводитель;
                Попытка
                    ПроизводительОбъект.Записать();
                Исключение
                    Сообщить(ОписаниеОшибки());
                КонецПопытки;   
                ПроизводительСсылка = ПроизводительОбъект.Ссылка;
            КонецЕсли;
        Иначе
            ПроизводительСсылка = Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка();
        КонецЕсли;   
           
        НоменклатураОбъект = Справочники.Номенклатура.СоздатьЭлемент();
        НоменклатураОбъект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар;
        НоменклатураОбъект.ВидНоменклатуры = ВидНоменклатуры;
        НоменклатураОбъект.Качество = Перечисления.ГрадацииКачества.Новый;
        НоменклатураОбъект.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
       
        ЗаполнитьЗначенияСвойств(НоменклатураОбъект, ВидНоменклатуры, , "Ссылка, Владелец, ПометкаУдаления, ВерсияДанных, Предопределенный, ЭтоГруппа, Родитель, Описание, Наименование, Код, ИмяПредопределенныхДанных");
       
        Если ИспользоватьУпаковки тогда
            НоменклатураОбъект.ИспользоватьУпаковки = ИспользоватьУпаковки;
            НоменклатураОбъект.НаборУпаковок = НаборУпаковок;
            НоменклатураОбъект.ЕдиницаИзмерения = НаборУпаковок.ЕдиницаИзмерения;
        КонецЕсли;   
       
        ГруппаДоступаНоменклатурыДляКонтроля      = ВидНоменклатуры.ГруппаДоступа;
        ШаблонНаименованияДляПечати               = ВидНоменклатуры.ШаблонНаименованияДляПечатиНоменклатуры;
        ШаблонРабочегоНаименования                = ВидНоменклатуры.ШаблонРабочегоНаименованияНоменклатуры;
        ЗапретРедактированияНаименованияДляПечати = ВидНоменклатуры.ЗапретРедактированияНаименованияНоменклатурыДляПечати;
        ЗапретРедактированияРабочегоНаименования  = ВидНоменклатуры.ЗапретРедактированияРабочегоНаименованияНоменклатуры;
        НаборСвойств                              = ВидНоменклатуры.НаборСвойств;
        ИспользоватьХарактеристики                = ВидНоменклатуры.ИспользоватьХарактеристики;
        ЭтоНабор                                  = Ложь;
        ВидСодержитДрагоценныеМатериалы           = Ложь;
       
        НоменклатураОбъект.Наименование = Наименование;
        НоменклатураОбъект.НаименованиеПолное = Наименование;
        НоменклатураОбъект.Артикул = Артикул;
        НоменклатураОбъект.Родитель = РодительСсылка;
       
        ЗаписьПроизводитель = НоменклатураОбъект.ДополнительныеРеквизиты.Добавить();
        ЗаписьПроизводитель.Значение = ПроизводительСсылка;
        ЗаписьПроизводитель.Свойство = ХарактеристикаПроизводитель;
       
        Попытка
            НоменклатураОбъект.Записать();
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;   
        НоменклатураСсылка = НоменклатураОбъект.Ссылка;
                   
//    КонецЕсли;   
   
    Возврат НоменклатураСсылка;
   
КонецФункции

wise

(0) вот ТУТ Вы ищите "Производителя":
Цитата: сергей123 от 28 янв 2019, 16:11Если ВыборкаПроизводитель.Следующий() тогда
                ПроизводительСсылка = ВыборкаПроизводитель.Ссылка;
            Иначе
                ПроизводительОбъект = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
                ПроизводительОбъект.Владелец = ХарактеристикаПроизводитель;
                ПроизводительОбъект.Наименование = ТекстПроизводитель;
                Попытка
                    ПроизводительОбъект.Записать();
                Исключение
                    Сообщить(ОписаниеОшибки());
                КонецПопытки;   
                ПроизводительСсылка = ПроизводительОбъект.Ссылка;
            КонецЕсли;
        Иначе
            ПроизводительСсылка = Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка();
        КонецЕсли;   

и ЕСЛИ нашли, то подставляете ССЫЛКУ...
А номенклатуры Вы НЕ ищите, а СРАЗУ создаёте...
вот и ПОЛУЧАЕТСЯ задвоение...
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

сергей123

Как доработать код?
как искать номенклатуру и если не нашли создать новую а если нашли добавить к существующей с последней ценой?

antoneus


сергей123

Раскомментить запрос и следующие строки!  Покажите в тексте что нужно комментировать?
Добавлено: 01 фев 2019, 10:36


т е отключить следующие строки а цена какая будет установлена
как сделать что-бы была установлена последняя цена


&НаСервере
Функция ПолучитьНоменклатуру(СтрокаТекст)
   
    Запрос = Новый Запрос;
    Артикул = СтрокаТекст.Артикул;
    Наименование = СтрокаТекст.Наименование;
   
//   Запрос.УстановитьПараметр("Артикул", Артикул);
//   Запрос.Текст = "ВЫБРАТЬ
//                  |    Номенклатура.Ссылка
//                  |ИЗ
//                  |    Справочник.Номенклатура КАК Номенклатура
//                  |ГДЕ
//                  |    Номенклатура.Артикул = &Артикул
//                  |    И НЕ Номенклатура.ПометкаУдаления";
   
//   Выборка = Запрос.Выполнить().Выбрать();
   
//   Если Выборка.Следующий() тогда
       
//       НоменклатураСсылка = Выборка.Ссылка;
       
//   Иначе   
       
        РодительСсылка = ГруппаНоменклатуры;
       
        // Производитель
        ТекстПроизводитель = СокрЛП(СтрокаТекст.Производитель);
        Если ЗначениеЗаполнено(ТекстПроизводитель) тогда
            Запрос = Новый Запрос;
            Запрос.УстановитьПараметр("Наименование",    ТекстПроизводитель);
            Запрос.УстановитьПараметр("Владелец",         ХарактеристикаПроизводитель);
            Запрос.Текст = "ВЫБРАТЬ
                           |    ЗначенияСвойствОбъектов.Ссылка
                           |ИЗ
                           |    Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                           |ГДЕ
                           |    ЗначенияСвойствОбъектов.Наименование = &Наименование
                           |    И ЗначенияСвойствОбъектов.Владелец = &Владелец";
           
            ВыборкаПроизводитель = Запрос.Выполнить().Выбрать();
      //     Если ВыборкаПроизводитель.Следующий() тогда
       //         ПроизводительСсылка = ВыборкаПроизводитель.Ссылка;
        //    Иначе
         //       ПроизводительОбъект = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
          //      ПроизводительОбъект.Владелец = ХарактеристикаПроизводитель;
           //     ПроизводительОбъект.Наименование = ТекстПроизводитель;
           //     Попытка
           //         ПроизводительОбъект.Записать();
           //     Исключение
           //         Сообщить(ОписаниеОшибки());
            //    КонецПопытки;   
            //    ПроизводительСсылка = ПроизводительОбъект.Ссылка;
          //  КонецЕсли;
        Иначе
            ПроизводительСсылка = Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка();
        КонецЕсли;   
           
        НоменклатураОбъект = Справочники.Номенклатура.СоздатьЭлемент();
        НоменклатураОбъект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар;
        НоменклатураОбъект.ВидНоменклатуры = ВидНоменклатуры;
        НоменклатураОбъект.Качество = Перечисления.ГрадацииКачества.Новый;
        НоменклатураОбъект.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
       
        ЗаполнитьЗначенияСвойств(НоменклатураОбъект, ВидНоменклатуры, , "Ссылка, Владелец, ПометкаУдаления, ВерсияДанных, Предопределенный, ЭтоГруппа, Родитель, Описание, Наименование, Код, ИмяПредопределенныхДанных");
       
        Если ИспользоватьУпаковки тогда
            НоменклатураОбъект.ИспользоватьУпаковки = ИспользоватьУпаковки;
            НоменклатураОбъект.НаборУпаковок = НаборУпаковок;
            НоменклатураОбъект.ЕдиницаИзмерения = НаборУпаковок.ЕдиницаИзмерения;
        КонецЕсли;   
       
        ГруппаДоступаНоменклатурыДляКонтроля      = ВидНоменклатуры.ГруппаДоступа;
        ШаблонНаименованияДляПечати               = ВидНоменклатуры.ШаблонНаименованияДляПечатиНоменклатуры;
        ШаблонРабочегоНаименования                = ВидНоменклатуры.ШаблонРабочегоНаименованияНоменклатуры;
        ЗапретРедактированияНаименованияДляПечати = ВидНоменклатуры.ЗапретРедактированияНаименованияНоменклатурыДляПечати;
        ЗапретРедактированияРабочегоНаименования  = ВидНоменклатуры.ЗапретРедактированияРабочегоНаименованияНоменклатуры;
        НаборСвойств                              = ВидНоменклатуры.НаборСвойств;
        ИспользоватьХарактеристики                = ВидНоменклатуры.ИспользоватьХарактеристики;
        ЭтоНабор                                  = Ложь;
        ВидСодержитДрагоценныеМатериалы           = Ложь;
       
        НоменклатураОбъект.Наименование = Наименование;
        НоменклатураОбъект.НаименованиеПолное = Наименование;
        НоменклатураОбъект.Артикул = Артикул;
        НоменклатураОбъект.Родитель = РодительСсылка;
       
        ЗаписьПроизводитель = НоменклатураОбъект.ДополнительныеРеквизиты.Добавить();
        ЗаписьПроизводитель.Значение = ПроизводительСсылка;
        ЗаписьПроизводитель.Свойство = ХарактеристикаПроизводитель;
       
        Попытка
            НоменклатураОбъект.Записать();
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;   
        НоменклатураСсылка = НоменклатураОбъект.Ссылка;
                   
//    КонецЕсли;   
   
    Возврат НоменклатураСсылка;
   
КонецФункции

Цитата: antoneus от 29 янв 2019, 12:14
Раскомментить запрос и следующие строки!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск