Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Как передать в реквизит объекта значение дополнительного реквизита из результата запроса?

Как передать в реквизит объекта значение дополнительного реквизита из результата запроса?
Я
   dimul_05
 
06.07.18 - 17:35
Добрый день!
Пытаюсь заполнить поля и табличные части справочника данными, которые уже есть в справочнике "Номенклатура". В заполняемом справочнике, помимо схожих реквизитов, добавлен реквизит "ЗаполнитьНаОсновании", являющийся ссылкой на справочник "Номенклатура". Так же добавлена команда "Заполнить", для которой и пишу функцию, выполняемую на сервере. Возникла проблема с получением значений, которые хранятся в таблице "ДополнительныеРеквизиты" справочника "Номенклатура". Просто не знаю как их вытянуть. Цикл нужен? Подскажите пожалуйста, или ссылкой в меня киньте, так как нагуглить не смог. Может быть я не правильно пытаюсь получить данные и это надо делать отдельным запросом?
(Управление торговлей для Украины 3.0)
http://prntscr.com/k3ccs8
 
 
   almar
 
1 - 06.07.18 - 17:40
Можно, конечно, и циклом, но запросом лучше
   polosov
 
2 - 06.07.18 - 17:56
Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    Номенклатура.Ссылка,
        |    Номенклатура.Родитель,
        |    Номенклатура.ВидНоменклатуры,
        |    Номенклатура.Качество
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |    Номенклатура.Ссылка = &Номенклатура
        |;
        |
        ////////////////////////////////////////////////////////////////////////////////

        |ВЫБРАТЬ
        |    НоменклатураДополнительныеРеквизиты.Свойство,
        |    НоменклатураДополнительныеРеквизиты.Значение
        |ИЗ
        |    Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
        |ГДЕ
        |    НоменклатураДополнительныеРеквизиты.Ссылка = &Номенклатура";
    
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    
    РезультатЗапроса = Запрос.ВыполнитьПакет();
    
    ТЗОсновныеРеквизиты = РезультатЗапроса[0].Выгрузить();
    ТЗДопРеквизиты = РезультатЗапроса[0].Выгрузить();

    
    НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
    ЗаполнитьЗначенияСвойств(ТЗОсновныеРеквизиты[0]);
    
    Для Каждого СтрокаТЗ ИЗ ТЗДопРеквизиты Цикл
        НоваяСтрока = НовыйЭлемент.ДополнительныеРеквизиты.Добавить();
        ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЗ);
    КонецЦикла;
    
    НовыйЭлемент.Записать();
   polosov
 
3 - 06.07.18 - 17:56
ТЗДопРеквизиты = РезультатЗапроса[1].Выгрузить();
   polosov
 
4 - 06.07.18 - 17:58
Реквизиты от балды брал, так что пробовать работоспособность примера не нужно. Делай на его основе.
   dimul_05
 
5 - 06.07.18 - 17:59
Спасибо!
Такое не пробовал. Попробую - отпишусь.
   dimul_05
 
6 - 07.07.18 - 23:51
Попробовал.

Для Каждого СтрокаТЗ ИЗ ТЗДопРеквизиты Цикл
        НоваяСтрока = НовыйЭлемент.ДополнительныеРеквизиты.Добавить();
        ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЗ);
    КонецЦикла;

Приведенный кусок кода, как я понимаю, должен в какой-то таблице заполняемого справочника создать строки, аналогичные строкам ТЗ.

Дело в том, что в обоих справочниках, дополнительные реквизиты являются строками (не табличной части).

Попробовал получать значения по индексу, но столкнулся с тем, что у разных позиций номенклатуры может быть заполнено разное количество реквизитов, а значит по одному и тому же индексу получаю разные реквизиты. Да и если какие-то реквизиты не заполнены, то запрашиваемый реквизит может быть за границами массива. Вот так:

    Объект.ЗаголовокТовара = ТЗДопРеквизиты[3].Значение;
    Объект.ОписаниеТовара = ТЗДопРеквизиты[4].Значение;
    Объект.ПоисковыеСинонимы = ТЗДопРеквизиты[5].Значение;

Нельзя ли вытянуть из ТЗ значение строки с определенным свойством? Сказать что-то вида: Объект.ЗаголовокТовара = Значение строки ТЗДопРеквизиты у которой Свойство "seo_title_russian"?

Список тем форума
Рекламное место пустует  Рекламное место пустует
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует