• 🚨 29 мая стартует курс «Пентест Active Directory: от теории к практике» от Академии Кодебай

    🔍 Изучите реальные техники атак на инфраструктуру Active Directory: от первоначального доступа до полной компрометации.
    🛠️ Освойте инструменты, такие как BloodHound, Mimikatz, CrackMapExec и другие.
    🧪 Пройдите практические лабораторные работы, имитирующие реальные сценарии атак.
    🧠 Получите знания, которые помогут вам стать востребованным специалистом в области информационной безопасности.

    После старта курса запись открыта еще 10 дней Подробнее о курсе ...

  • Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

Обработка для загрузки данных в справочник Номенклатура

  • Автор темы Автор темы SimonenkoT
  • Дата начала Дата начала
S

SimonenkoT

Здравствуйте!
Прошу вас помогите мне.
1С версия 8.2 - 1С:Предприятие 8.2 (8.2.13.202)
Есть обработка для загрузки данных из экселя в справочник номенклатура.
Проблема в том что в процедуре СозданиеДокумента. все работает нормально. но данные в справочник он не записывает . прошу вас помогите.
Заранее благодарю вас.

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

КонецПроцедуры // СоздаемДокументы()
 
А какие данные должны попасть в справочник? Создать новую номенклатуру? или как-то модифицировать существующую?
 
А какие данные должны попасть в справочник? Создать новую номенклатуру? или как-то модифицировать существующую?

В данном случае код взять из обработке для загрузки данных из Экселя.
Там 3 столбца. Код. Наименование номенклатуры. и КодТНЭВ.
Нужно модифицировать существующую номенклатуру.
 
Код - это "Артикул"?
Тогда создать новый элемент справочника можно так:

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

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

Док.Ответственный = глТекущийПользователь;
Док.Комментарий = "Загружен из Excel";
Док.СостояниеЗаявки = Перечисления.brg_СостоянияЗаявокНаВводКонтрагента.НаРассмотрении;
Док.Записать();

Иначе
Сообщить("Нашли номенклатуру по артикулу "+СтрокаПоиска);
КонецЕсли;

КонецЦикла;

КонецПроцедуры // СоздаемДокументы()

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

А дальше пошел длинный текст, в котором я не ищу КонецЕсли
Вожу пальцем по тексту.
Если нашли в справочнике (не будем выяснять что и как), то ничего не делаем, только сообщим.
А не нашли:
- создаем док-т. Не удержусь спросить: Надеюсь, не Вы придумали ему имя "brg_ЗаявкиНаВводНоменклатуры" ?
- Дата = сегодня. И прочие реквизиты в шапке. Проходит.
- А вот это вызывает подозрение:

Док.Наименование = Стр.НомерПП;
Док.НаименованиеПолное = Стр.DESCRIPTION;
Док.Артикул = Стр.КодНоменклатуры;

Есть в шапке [/b]Документа[/b] такие реквизиты? Или забыл добавить строку в табличную часть, или не понимаешь разницы между документом и справочником.

Нужно модифицировать существующую номенклатуру.
А где же команды изменения спр-ка? :mellow:
 
Интересно, это что то типа обработки по централизованному созданию номенклатуры? В данном случае у вас создается только заявка, алгоритм вроде верный. Так что "создавать номенклатуру" должен не алгоритм представленный вами, а скорее всего алгоритм записи или проведения документа. Или манагер который работает с этим видом документов. О том что в данной обработке создается или меняется номенклатура нет ни строчки кода.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!

Курс AD