• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы Natalya
  • Дата начала
N

Natalya

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

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

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

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

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

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

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

puh14

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

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

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

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

Natalya

Спасибо, всё получилось.

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

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

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

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

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

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

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

puh14

спрокеи.ВыбратьЭлементы();

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

Natalya

спрокеи.ВыбратьЭлементы();

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

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

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