Имя: Пароль:
1C
1С v8
Программное создание элемента номенклатуры
,
0 enmelnik
 
05.08.15
18:39
Подскажите, пожалуйста, как создать новый элемент номенклатуры без двойной записи.

Есть код:
<code>
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
УИД = Новый УникальныйИдентификатор;
НоваяСсылка = Справочники.Номенклатура.ПолучитьСсылку(УИД);
НовыйЭлемент.УстановитьСсылкуНового(НоваяСсылка);

ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
ЕдиницаИзмерения.Владелец = НовыйЭлемент.ПолучитьСсылкуНового();
ЕдиницаИзмерения.Наименование = "шт";
ЕдиницаИзмерения.ЕдиницаПоКлассификатору = НовыйЭлемент.БазоваяЕдиницаИзмерения;
ЕдиницаИзмерения.Коэффициент = 1;
    
ЕдиницаИзмерения.Записать();
</code>
Вываливаеться ошибка:
Ошибка при вызове метода контекста (Записать)
    ЕдиницаИзмерения.Записать();
по причине:
Значение поля "Номенклатура" не заполнено или заполнено неверно


Что же не так?
1 Fragster
 
гуру
05.08.15
18:41
не вижу заполнения поля "Номенклатура" в коде.

но возможно поможет ЕдиницаИзмерения.ОбменДанными.Загрузка = Истина;
и не забыть транзакцию.
2 Fragster
 
гуру
05.08.15
18:41
ЕдиницаИзмерения.Владелец = НоваяСсылка;
3 Casey1984
 
05.08.15
18:41
ЕдиницаИзмерения.Владелец = НовыйЭлемент.ПолучитьСсылкуНового() - зачем?
4 enmelnik
 
05.08.15
18:43
(3) ПолучитьСсылкуНового (GetNewObjectRef)
Синтаксис:

ПолучитьСсылкуНового()
Возвращаемое значение:

Тип: СправочникСсылка.

Описание:

Позволяет для нового (созданного и еще не записанного) объекта получить ранее установленное методом УстановитьСсылкуНового значение ссылки
5 enmelnik
 
05.08.15
18:44
(1) Поле "Номенклатура" отсутствует
6 Fragster
 
гуру
05.08.15
18:45
(4) ты уже сделал ссылку, она в переменной НоваяСсылка. не обязательно её получать.
7 Fragster
 
гуру
05.08.15
18:45
(5) а в ошибке - присутствует? как так?
8 enmelnik
 
05.08.15
18:48
(6) При
ЕдиницаИзмерения.Владелец = НоваяСсылка;
Тоже выпадает эта же ошибка, а поле "Номенклатура" я так понимаю это Владелец
9 Fragster
 
гуру
05.08.15
18:50
тогда ответ в (1)
10 Casey1984
 
05.08.15
18:50
НоваяСсылка = Справочники.Номенклатура.ПолучитьСсылку(УИД) - без этого попробуй
11 Casey1984
 
05.08.15
18:50
(10) вернее без УИД !!!
12 Casey1984
 
05.08.15
18:51
НоваяСсылка = Справочники.Номенклатура.ПолучитьСсылку()
13 enmelnik
 
05.08.15
18:54
(12) Так нельзя

ПолучитьСсылку(<УникальныйИдентификатор>)
Параметры:

<УникальныйИдентификатор> (необязательный)

Тип: УникальныйИдентификатор.
Уникальный идентификатор, из которого будет формироваться ссылка.
Возвращаемое значение:

Тип: СправочникСсылка.

Описание:

Формирует ссылку из значения типа УникальныйИдентификатор.
Данный уникальный идентификатор может быть в дальнейшем получен из ссылки методом УникальныйИдентификатор.
14 Casey1984
 
05.08.15
18:54
(13) можно <УникальныйИдентификатор> (необязательный)
15 enmelnik
 
05.08.15
18:56
Я имею ввиду, что без этого метода ссылку не получить, и УИД здесь явно не влияет на результат в таком случае
16 Casey1984
 
05.08.15
18:57
(15) почитай до конца справку по этому методу
17 enmelnik
 
05.08.15
19:00
(16) Ну будет сформирован новый УИД, и что? И будет новая ссылка, но единица измерения при записи выдает ошибку все равно))
18 Casey1984
 
05.08.15
19:04
Вот рабочий пример:

    Процедура ПриЗаписи(Отказ)

    Если ЭтоНовый() Тогда

    СсылкаНового = ЭтотОбъект.ПолучитьСсылкуНового();

    Если НЕ ЗначениеЗаполнено(СсылкаНового) Тогда

    СсылкаНового = Справочники.Контрагенты.ПолучитьСсылку();

    КонецЕсли;

    МенеджерЗаписи = РегистрыСведений.КонтактнаяИнформация.СоздатьМенеджерЗаписи();

    МенеджерЗаписи.Партнер = СсылкаНового;

    МенеджерЗаписи.Представление = Адрес;

    ЭтотОбъект.УстановитьСсылкуНового(СсылкаНового);

    КонецЕсли;

    КонецПроцедуры
19 Fragster
 
гуру
05.08.15
19:11
все равно ответ в (1)
20 enmelnik
 
05.08.15
19:17
(18) Справочники.Контрагенты.ПолучитьСсылку()

Возвращает пустую ссылку
21 enmelnik
 
05.08.15
19:21
(19) Да, спасибо! Если добавить строку:

ЕдиницаИзмерения.ОбменДанными.Загрузка = Истина;

То все ОК.