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