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

Проблема с созданием номенклатуры с помощью обработки

Автор Sellen, 25 сен 2024, 17:55

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

Sellen

Есть таблица, в которой указаны артикул и наименование товара. Нужно создать по данным товарам номенклатуры вида продукция с помощью обработки. При этом автоматически ставится ндс 20%, также в этом случае номенклатура не создается, если не указать единицу хранения. Я написал процедуру, которая создает номенклатуры по данным таблицы, но по какой-то причине не указывается единица хранения, единица для отчетов и ставка ндс, хотя в процедуре все это есть.


Вот сам код:

&НаСервере
Процедура СоздатьНоменклатуруИзТаблицы()
   
   // Создаем копию таблицы значений
    ВременнаяТаблицаДанных = ТабличнаяЧасть.Выгрузить();   
   ПапкаНоменклатуры = ПолучитьИлиСоздатьЭлементПродукцияСайта();
   
    Для Каждого Строка Из ВременнаяТаблицаДанных Цикл
      
      НайденныйЭлемент = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Строка.Артикул);
       
        Если НайденныйЭлемент <> Справочники.Номенклатура.ПустаяСсылка() Тогда
                Сообщить("Продукция с артикулом " + Строка.Артикул + " уже существует.");
            Продолжить;
        КонецЕсли;
      
      НоваяНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
      
      НоваяНоменклатура.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Продукция");
      НоваяНоменклатура.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар;   
      НоваяНоменклатура.Артикул = Строка.Артикул;
        НоваяНоменклатура.Наименование = Строка.Наименование;
      НоваяНоменклатура.Родитель = Справочники.Номенклатура.НайтиПоНаименованию("Номенклатуры с сайта") ; // Указываем группу
      
      // Установка и проверка единицы измерения
      ЕдиницаИзмерения = Справочники.ЕдиницыИзмеренияВЕТИС.НайтиПоНаименованию("шт.");
      Если ЗначениеЗаполнено(ЕдиницаИзмерения) Тогда
          НоваяНоменклатура.ЕдиницаИзмерения = ЕдиницаИзмерения;
          Сообщить("Единица измерения установлена: " + НоваяНоменклатура.ЕдиницаИзмерения.Наименование);
      Иначе
          Сообщить("Единица измерения не установлена.");
          Продолжить;
      КонецЕсли;

      // Установка и проверка единицы для отчетов
      ЕдиницаДляОтчетов = Справочники.ЕдиницыИзмеренияВЕТИС.НайтиПоНаименованию("шт.");
      Если ЗначениеЗаполнено(ЕдиницаДляОтчетов) Тогда
          НоваяНоменклатура.ЕдиницаДляОтчетов = ЕдиницаДляОтчетов;
          Сообщить("Единица для отчетов установлена: " + НоваяНоменклатура.ЕдиницаДляОтчетов.Наименование);
      Иначе
          Сообщить("Единица для отчетов не установлена.");
          Продолжить;
      КонецЕсли;

      // Установка и проверка НДС
      СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
      Если ЗначениеЗаполнено(СтавкаНДС) Тогда
          НоваяНоменклатура.СтавкаНДС = СтавкаНДС;
          Сообщить("Ставка НДС установлена: " + НоваяНоменклатура.СтавкаНДС);
      Иначе
          Сообщить("Ставка НДС не установлена.");
          Продолжить;
      КонецЕсли;
      
        //Проверка на заполнение вида номенклатуры
      Если ЗначениеЗаполнено(НоваяНоменклатура.ВидНоменклатуры) Тогда
          НоваяНоменклатура.Записать();
          Сообщить("Номенклатура сохранена успешно с видом: " + НоваяНоменклатура.ВидНоменклатуры);
      Иначе
          Сообщить("Ошибка: Вид номенклатуры не задан.");
      КонецЕсли;
      
   КонецЦикла;

    Сообщить("Создание номенклатуры завершено.");
КонецПроцедуры


Прикрепил 2 картинки с номенклатурами, с артикулом ABC00004 та, которая создана программой, а с артикулом ABC000041 я создал через 1С:Предприятие руками. Видно что в той, которая создано программно также не хватает полей характеристики, оформление продажи и качество

alexandr_ll

У номенклатуры тип реквизита Единица Измерения - СправочникСсылка.УпаковкиЕдиницыИзмерения, а не ЕдиницыИзмеренияВетис.

fruitella

Думаю так

&НаСервере
Процедура СоздатьНоменклатуруИзТаблицы()
   
   // Создаем копию таблицы значений
   ВременнаяТаблицаДанных = ТабличнаяЧасть.Выгрузить();   
   ПапкаНоменклатуры = ПолучитьИлиСоздатьЭлементПродукцияСайта();
   
   ЕдиницаИзмеренияСсылка = Справочники.УпаковкиЕдиницыИзмерения.НайтиПоНаименованию("шт.");
   ВидНоменклатурыСсылка = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Продукция");
   ТипНоменклатурыСсылка = Перечисления.ТипыНоменклатуры.Товар;
   ГруппаНоменклатурыСсылка = Справочники.Номенклатура.НайтиПоНаименованию("Номенклатуры с сайта");
   СтавкаНДС20Ссылка = Перечисления.СтавкиНДС.НДС20;
   
   Если ЕдиницаИзмеренияСсылка.Пустая() Тогда
    Сообщить("Не найдена единица измерения ""шт.""");
Возврат; 
    ИначеЕсли ВидНоменклатурыСсылка.Пустая() Тогда
    Сообщить("Не найден вид номенклатуры ""Продукция""");
Возврат;
ИначеЕсли ТипНоменклатурыСсылка.Пустая() Тогда
    Сообщить("Не найден тип ""Товар""");
Возврат;
ИначеЕсли ГруппаНоменклатурыСсылка.Пустая() Тогда
    Сообщить("Не найдена группа номенклатуры ""Номенклатуры с сайта""");
Возврат;
ИначеЕсли СтавкаНДС20Ссылка.Пустая() Тогда
Сообщить("Не нейдена ставка НДС 20%");
Возврат;
КонецЕсли;
 
    Для Каждого Строка Из ВременнаяТаблицаДанных Цикл

НайденныйЭлемент = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Строка.Артикул);
       
        Если НайденныйЭлемент <> Справочники.Номенклатура.ПустаяСсылка() Тогда
                Сообщить("Продукция с артикулом " + Строка.Артикул + " уже существует.");
            Продолжить;
        КонецЕсли;

НоваяНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();     
    НоваяНоменклатура.ТипНоменклатуры = ТипНоменклатурыСсылка;   
    НоваяНоменклатура.Артикул = Строка.Артикул;
    НоваяНоменклатура.Наименование = Строка.Наименование;
    НоваяНоменклатура.Родитель =  ГруппаНоменклатурыСсылка.Ссылка; // На группу нужна ссылка 
    НоваяНоменклатура.ЕдиницаИзмерения = ВидНоменклатурыСсылка;
НоваяНоменклатура.ЕдиницаДляОтчетов = ВидНоменклатурыСсылка;
НоваяНоменклатура.СтавкаНДС = СтавкаНДС20Ссылка;
НоваяНоменклатура.ВидНоменклатуры = ВидНоменклатурыСсылка.Ссылка; // На вид нужна ссылка   
 
Попытка
Справочники.Номенклатура.ЗаполнитьРеквизитыПоВидуНоменклатуры(НоваяНоменклатура);
НоваяНоменклатура.Записать();
Сообщить("Номенклатура сохранена успешно с видом: " + НоваяНоменклатура.ВидНоменклатуры);
Исключение
Сообщить("Ошибка при записи: " + ОписаниеОшибки());
КонецПопытки;

   КонецЦикла;

    Сообщить("Создание номенклатуры завершено.");
КонецПроцедуры


Sellen

alexandr_ll, Спасибо, это помогло. Теперь единица хранения и единица для отчетов ставится верно. Я попробовал сохранить созданную номенклатуру через 1С:Предприятие и выходит сообщение что надо также заполнить Использование характеристик на не используются, Качество на новый, Оформление продажи и Ставку НДС

Sellen

fruitella, Золотой Вы человек! Спасибо большое, все заработало)

Теги:

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

Рейтинг@Mail.ru

Поиск