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

Тема в разделе "1C и всё что с ней связано", создана пользователем Natalya, 31 мар 2011.

  1. Natalya

    Natalya Active Member

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

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

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

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

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

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

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

    puh14 Well-Known Member
    1C Team

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

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

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

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

    Natalya Active Member

    Регистрация:
    2 фев 2008
    Сообщения:
    25
    Симпатии:
    0
    Спасибо, всё получилось.

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

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

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

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

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

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

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

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    спрокеи.ВыбратьЭлементы();

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

    Natalya Active Member

    Регистрация:
    2 фев 2008
    Сообщения:
    25
    Симпатии:
    0
    Ещё раз спасибо. Не знала об этом. Теперь не пишу лишний раз "ВыбратьЭлементы()".
     
Загрузка...

Поделиться этой страницей