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

1С:Предприятие ::

Метки: 

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

Я
   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"?


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