Запись значения в подчинённый справочник

Natalya

Active member
02.02.2008
25
0
#1
Здравствуйте.
Версия программы : 1С 7.7 Комплексная конфигурация, редакция 4.5 (7.70.502).

Нужно записать базовую единицу измерения в справочник "Номенклатура" из таблицы значений.
Это реквизит "БазоваяЕдиница", тип справочник "Единицы", который является подчинённым.
По разному пробовала, появляется ошибка "не выбран элемент". Как правильно записывать элементы в подчинённые справочники.

Код:
спрНоменклатура = СоздатьОбъект("Справочник.Номенклатура");
спрЕдиницы = СоздатьОбъект("Справочник.Единицы");
спрокеи=СоздатьОбъект("Справочник.ОКЕИ");

тзНоменк.ВыбратьСтроки();
Пока тзНоменк.ПолучитьСтроку() = 1 Цикл
спрНоменклатура.Новый();
основединица = ""; 
спрокеи.ВыбратьЭлементы();
Если спрокеи.НайтиПоНаименованию(СокрЛП(тзНоменк.единица), 0, 1) = 1 Тогда
основединица=спрокеи.ТекущийЭлемент();
КонецЕсли;

спрЕдиницы.ИспользоватьВладельца(спрНоменклатура.ТекущийЭлемент());
спрЕдиницы.ВыбратьЭлементы();
//спрЕдиницы.Наименование=основединица;

спрНоменклатура.БазоваяЕдиница = основединица;

спрНоменклатура.Записать();
конеццикла;
 

puh14

Well-known member
11.07.2008
1 412
0
#2
Ругается явно тут "спрЕдиницы.ИспользоватьВладельца(спрНоменклатура.ТекущийЭлемент());"

Логично, так как номенклатура создана, но еще не записана. Посему спрНоменклатура.ТекущийЭлемент() не сработает. Надо сначала записать номенклатуру

далее подсказываю - как вы сами сказали справочник единицы подчинен номенклатуре. Логично что для вновь созданного элемента количество подчиненных единиц равно нулю, следовательно надо не искать или делать выборку - а тупо создавать

ну и напоследок - зачем вам в тексте столько выбратьЭлементы() если они никуда не ведут?
 

Natalya

Active member
02.02.2008
25
0
#3
Спасибо, всё получилось.

Код:
тзНоменк.ВыбратьСтроки();
Пока тзНоменк.ПолучитьСтроку() = 1 Цикл
спрНоменклатура.Новый();
основединица = "";

спрНоменклатура.Записать();

спрокеи.ВыбратьЭлементы();
Если спрокеи.НайтиПоНаименованию(СокрЛП(тзНоменк.единица), 0, 1) = 1 Тогда
основединица=спрокеи.ТекущийЭлемент();
КонецЕсли;

спрЕдиницы.ИспользоватьВладельца(спрНоменклатура.ТекущийЭлемент());

спрЕдиницы.Новый();
спрЕдиницы.ОКЕИ = основединица;
спрЕдиницы.записать();

спрНоменклатура.БазоваяЕдиница = спрЕдиницы.ТекущийЭлемент();

спрНоменклатура.Записать();
КонецЦикла;
 

puh14

Well-known member
11.07.2008
1 412
0
#4
спрокеи.ВыбратьЭлементы();

выбрать элементы имеет смысл только если него идет цикл получения элемента. Найтипнаименованию() работает не зависимо была выборка элементов или нет.
 

Natalya

Active member
02.02.2008
25
0
#5
спрокеи.ВыбратьЭлементы();

выбрать элементы имеет смысл только если него идет цикл получения элемента. Найтипнаименованию() работает не зависимо была выборка элементов или нет.
Ещё раз спасибо. Не знала об этом. Теперь не пишу лишний раз "ВыбратьЭлементы()".