Имя: Пароль:
1C
1С v8
СозданиеНоменклатуры в УТ
,
0 Leshasem
 
02.01.25
23:38
Всем привет, второй раз пишу обработку и совсем завис, нужно из файла выгрузить информацию в справочник Номенклатура в 1с УТ 11. Вот пример части, я сильно запутался в Объектах и в ссылочных типах:

СсылкаН = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Продукция", Истина);


    ОбъектН = СсылкаН.ПолучитьОбъект();
    
    
    НовыйЭлемент                     = Справочники.Номенклатура.СоздатьЭлемент();
        НовыйЭлемент.ОбменДанными.Загрузка = Истина;
    НовыйЭлемент.ВидНоменклатуры    = ОбъектН.Ссылка;  
    НовыйЭлемент.Наименование         = "Сок";
    НовыйЭлемент.ЕдиницаИзмерения     = ЕдИзм.Ссылка;
    НовыйЭлемент.Артикул             = "123";
    НовыйЭлемент.Родитель            = НоваяГруппа.Ссылка;
    НовыйЭлемент.Записать();        

Всё записывается при создании нового элемента, кроме ВидаНоменклатуры, оно имеет ссылочный тип, но для его записи, нужно вручную открывать и записывать, как исправить?
1 Звездец
 
02.01.25
23:42
чем штатная загрузка из внешнего файла не устроила?

а код в (0) сильно не полон и по нему ответить по сути нечего
2 Leshasem
 
02.01.25
23:52
СсылкаН=Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Продукция", Истина);
ОбъектН = СсылкаН.ПолучитьОбъект();
НовыйЭлемент.ВидНоменклатуры    = ОбъектН.Ссылка;

Вопрос только в этой части, непосредственно создание элемента справочника =(
3 Звездец
 
02.01.25
23:55
(2) отладчик в зубы и вперед. И вообще 2 строка не нужна. Если в первой строке ты правильно получил ссылку, то нет никакого смысла получать объект и потом из него снова получать ссылку
4 Волшебник
 
03.01.25
00:01
дурдом
5 AlvlSpb
 
03.01.25
00:20
(0) Зачем получать объект, если с ним ничего не планируется делать?
НовыйЭлемент                     = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.ВидНоменклатуры    = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Продукция");
6 Злопчинский
 
03.01.25
00:48
(0) "но для его записи, нужно вручную открывать и записывать, как исправить?"
какая мутная хрень...
я вот нихера не понял.
то есть запустил обработку. создался элемент. Открываю его ручками, ВидНоменклатуры - пустой? Жму "записать" - и система не ругается и ВидНоменклатуры оказывается после кнопки "Записать" заполненным? или как?
.
Могу ошибаться, но использование конструкций типа
Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Продукция");
без последующей проверки а действительно ли найдено - это откровенный говнокод. Хотя бы тупую заглушку вставили типа
Если не найдено тогда
а = 1/0; // ибо херня
КонецЕсли
.
7 AAA
 
03.01.25
09:06
Виды номенклатуры вообще лучше создать руками. Это очень важный справочник. А затем уже цеплять нужные ссылки на элементы номенклатуры
8 Волшебник
 
03.01.25
10:56
(6) Это Ваше "а = 1/0;" - говнокод, а НайтиПоНаименованию() возвращает пустую ссылку, которая вполне годится для присваивания.
9 Волшебник
 
03.01.25
10:58
(0) А где чтение файла? где цикл?
10 Злопчинский
 
03.01.25
11:12
(8) я в курсе про пустую ссылку. Но пустой ссылки не должно быть там где должна быть непустая ссылка.
11 Волшебник
 
03.01.25
11:14
(10) А тут никто не говорил, что вид номенклатуры должен быть заполнен. Более того, здесь вообще нет никакого файла и цикла по его элементам, хотя утверждается "нужно из файла выгрузить информацию в справочник Номенклатура". Вся эта задача — полный бред от тупого бота.
12 Александр111
 
03.01.25
11:15
Если СсылкаН<>Справочники.ВидыНоменклатуры.ПустаяСсылка() Тогда НовыйЭлемент.ВидНоменклатуры=СсылкаН Иначе
Сообщить("Не такого вида номенклатуры");
Возврат;
КонецЕсли;
13 Волшебник
 
03.01.25
11:37
(12) нарушение лесенки
14 Злопчинский
 
03.01.25
11:54
//Проверка лесенки табом
Если Чтото Тогда
    КудаТо = КогдаТо + КтоТо;
КонецЕсли;
15 Злопчинский
 
03.01.25
11:55
//Проверка лесенки спейсом
Если Чтото Тогда
  КудаТо = КогдаТо + КтоТо;
КонецЕсли;
16 Leshasem
 
03.01.25
12:26
Проблема в том, что ссылка не является пустой, она получает уже значение вида Номенклатуры "Продукция" с описанием, но только при создании новой номенклатуры, почему-то в поле ввода написано слово Продукция, но оно не выбрано, нужно вручную еще раз выбрать Продукцию, и тогда становятся доступны остальные уже настроенные параметры под этот вид нуменклатуры, ставка НДС, характеристики, тип товара
17 Александр111
 
03.01.25
12:40
Тогда добавить пред записью
НовыйЭлемент.Заполнить(Неопределено);
https://its.1c.ru/db/v8std/content/451/hdoc
18 Волшебник
 
03.01.25
13:42
давайте уже читать файл!
Что мы возимся с этим соком?! Что там ещё в файле? Гвозди и валенки?
19 Злопчинский
 
03.01.25
13:42
" получает уже значение вида Номенклатуры "Продукция" с описанием,"
- "с описанием".. хм.. что бы это значило, ну чисто интересно.
20 Злопчинский
 
03.01.25
13:43
(16) а какой тип реквизита ВидНоменклатуры на форме еще до заполнения?
21 Leshasem
 
03.01.25
13:56
(20) СправочникСсылка.ВидыНоменклатуры
(18) Я убрал полностью цикл, чтобы посмотреть, что происходит , если добавить хотя бы 1 элемент
22 Leshasem
 
03.01.25
15:15
(19) Вид номенклатуры состоит из наименования и описания
23 Волшебник
 
03.01.25
17:08
Интересное решение выставлять
ОбменДанными.Загрузка = Истина;

И пытаться заполнить элемент интерактивно.
Если не хватает СтавкаНДС, так добавьте строчку в программу

Чтобы элемент нУменклатуры получился красивый
24 ИС-2
 
naïve
03.01.25
17:20
(0) поставь точку оставновки в событии ПередЗаписью у объекта Номенклатура.

И если она не заполнена, то Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Продукция", Истина) не нашло ВидНоменклатуры.

Если заполнена, то иди отладчик (F10) и смотри в табло (меню отладка-табло) когда она станет пустой.

Только не забудь добавить в табло переменную ЭтотОбъект.ВидНоменклатуры
25 Волшебник
 
03.01.25
17:48
(24) правильно так: НовыйЭлемент.ВидНоменклатуры
26 Leshasem
 
03.01.25
22:18
upd. решено
Просто во время создания элемента вызвал экспортную функцию
ЗаполнитьРеквизитыПоВидуНоменклатуры
27 Волшебник
 
03.01.25
23:24
(26) ой, там ещё много будет открытий, не прощаемся
28 Злоп
 
04.01.25
01:39
Я пока сделал вывод что некоторые восьмерочники нифига не знают что должно и зачем отрабатываться при создании нового элемента...
29 craxx
 
04.01.25
09:21
По поводу "ОбменДанными.Загрузка = Истина;" в УТ11/КА2/ERP.
Вообще это путь в ад, не только касательно номенклатуры.
Ей потом пользоваться невозможно будет, если ты что-то неверно заполнил. Мало того, там создается еще служебная информация, которая в режиме загрузки не создастся.
30 Звездец
 
04.01.25
09:30
(28) к сожалению это так, но не восьмерошники тут виноваты, а архитектура. Сейчас очень много действий навешано и многие из них выполнены очень не прозрачно и далеко не интуитивно понятно. Хотя если бы многие из них были выделены в отдельные небольшие методы, которые выполнялись бы после действий с объектом в фоне и с возможностью их отслеживания - то было бы сильно проще. А так да, что бы понимать, нужно очень плотно работать с объектом
31 craxx
 
04.01.25
09:38
(30) а еще есть ОбъектыРасчетов, которые используются примерно везде, превращая программное создание данных в адский ад.