• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

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

SimonenkoT

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

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

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

Darlock

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

SimonenkoT

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

В данном случае код взять из обработке для загрузки данных из Экселя.
Там 3 столбца. Код. Наименование номенклатуры. и КодТНЭВ.
Нужно модифицировать существующую номенклатуру.
 
A

alxrie

Код - это "Артикул"?
Тогда создать новый элемент справочника можно так:

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

Дайнеко

Попробую почитать:
Код:
Процедура СоздаемДокументы()

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

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

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

КонецЦикла;

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

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

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

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

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

Нужно модифицировать существующую номенклатуру.
А где же команды изменения спр-ка? :mellow:
 
A

Allexei

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

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