|
Помогите с запросом | ☑ | ||
---|---|---|---|---|
0
IvanVlad1
24.08.21
✎
10:00
|
Есть справочник СПР с табличной частью ИмяРеквизита, ЗначениеРеквизита. К примеру, в нём есть элементы:
Элемент1, таб часть Имя1, Значение1 Имя2, Значение2 Элемент2, таб часть Имя2, Значение3 Элемент3, таб часть Имя1, Значение4 Элемент4, таб часть Имя3, Значение5 Имя4, Значение6 Есть временная таблица, в которой есть запись Значение5 Как Имя3, Значение6 Как Имя4 Как сделать запрос, чтобы по значениям из временной таблицы получить Элемент4 ? |
|||
1
RomanYS
24.08.21
✎
10:05
|
||||
2
Ёпрст
24.08.21
✎
10:05
|
Выбрать хрень, справошник.ссылка из временнаятабличка как табличка левое справочник.вася.табличнаячастьнужная как справошник по справошник.реквизиттабчасти = табличка.хрень
|
|||
3
seevkik
24.08.21
✎
10:07
|
"Элемент4, таб часть"
"Имя3, значение5" "Имя4, Значение 6" Являются разными строками? |
|||
4
IvanVlad1
24.08.21
✎
10:12
|
(3) Да, это разные строки табличной части элемента справочника
|
|||
5
IvanVlad1
24.08.21
✎
10:21
|
(1) Немного не то... т.к. в справочнике колонка ИмяРеквизита и значение строковое "Имя3", "Имя4"
т.е. нельзя сделать соединение "ВЫБРАТЬ | ТЧ.Ссылка КАК Ссылка |ИЗ | Справочник.ХарактеристикиНоменклатуры.ДополнительныеРеквизиты КАК ТЧ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ | ПО ТЧ.ИмяРеквизита = ТЗ.Имя3 | И ТЧ.ЗначениеРеквизита = ТЗ.Имя3 |
|||
6
IvanVlad1
24.08.21
✎
10:22
|
Здесь вся проблема в том, что в ТЗ - колонки, а в табличной части справочника строки
|
|||
7
RomanYS
24.08.21
✎
10:34
|
(6) В запросе не получится оперировать заранее неизвестными именами колонок, поэтому в таком общем виде задача запросом не решается
|
|||
8
IvanVlad1
24.08.21
✎
10:51
|
Можно ли составить текст запроса программно?
|
|||
9
brainguard
24.08.21
✎
11:01
|
(8) Используй СхемаЗапроса
|
|||
10
ДенисЧ
24.08.21
✎
11:08
|
(8) Да.
стрЗапрос = "ВЫБРАТЬ |"; стрЗапрос = стрЗапрос + " |а1, а2 |ИЗ"; и т.д. |
|||
11
Said_We
24.08.21
✎
13:02
|
(5) Может будет удобнее если временная таблица будет содержать не одну колонку со значением, а две - ещё и имя.
|
|||
12
IvanVlad1
24.08.21
✎
13:43
|
Сделал составление запроса по входящим параметрам, всё работает
|
|||
13
IvanVlad1
24.08.21
✎
13:43
|
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ИмяТаблицы", ИмяТаблицыРегистра); Запрос.Текст = "ВЫБРАТЬ | НЕОПРЕДЕЛЕНО КАК OBJID |ПОМЕСТИТЬ ВТ_ТаблицаДанных |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СоответствиеОбъектов.Ссылка, | СоответствиеОбъектов.СобственнаяСсылка КАК ВозвращаемаяСсылка, | НЕОПРЕДЕЛЕНО КАК Параметр |ПОМЕСТИТЬ ВТПараметрыВыбора |ИЗ | Справочник.СоответствиеОбъектов КАК СоответствиеОбъектов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СоответствиеОбъектов.ПараметрыВыбора КАК СоответствиеОбъектовПараметрыВыбора | ПО СоответствиеОбъектов.Ссылка = СоответствиеОбъектовПараметрыВыбора.Ссылка |ГДЕ | СоответствиеОбъектов.ИмяТаблицы = &ИмяТаблицы | И НЕ СоответствиеОбъектов.ПометкаУдаления | |СГРУППИРОВАТЬ ПО | СоответствиеОбъектов.Ссылка, | СоответствиеОбъектов.СобственнаяСсылка |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТПараметрыВыбора.ВозвращаемаяСсылка |ИЗ | ВТПараметрыВыбора КАК ВТПараметрыВыбора | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ТаблицаДанных КАК ВТ_ТаблицаДанных | ПО ВТПараметрыВыбора.Параметр = ВТ_ТаблицаДанных.OBJID"; НомерПараметра = 0; ПоляТаблицы = ""; СоединениеТаблиц = ""; ПараметрыЭлементаСправочника = ""; Для каждого ЭлементКлюча Из КлючСсылки Цикл НомерПараметра = НомерПараметра + 1; ПоляТаблицы = ПоляТаблицы + "&ПараметрТаблицы" + НомерПараметра + " КАК " + ЭлементКлюча.Ключ + ","; ПараметрыЭлементаСправочника = ПараметрыЭлементаСправочника + " | МАКСИМУМ(ВЫБОР | КОГДА СоответствиеОбъектовПараметрыВыбора.ИмяРеквизита = &ИмяРеквизита" + НомерПараметра + " | ТОГДА СоответствиеОбъектовПараметрыВыбора.ЗначениеРеквизита | ИНАЧЕ NULL | КОНЕЦ) КАК Параметр" + НомерПараметра + ","; СоединениеТаблиц = СоединениеТаблиц + "ВТПараметрыВыбора.Параметр" + НомерПараметра + " = ВТ_ТаблицаДанных." + ЭлементКлюча.Ключ + " |И "; Запрос.УстановитьПараметр("ПараметрТаблицы" + НомерПараметра, ЭлементКлюча.Значение); Запрос.УстановитьПараметр("ИмяРеквизита" + НомерПараметра, ЭлементКлюча.Ключ); КонецЦикла; СтроковыеФункцииКлиентСервер.УдалитьПоследнийСимволВСтроке(ПоляТаблицы, 1); СтроковыеФункцииКлиентСервер.УдалитьПоследнийСимволВСтроке(ПараметрыЭлементаСправочника, 1); СтроковыеФункцииКлиентСервер.УдалитьПоследнийСимволВСтроке(СоединениеТаблиц, 2); Запрос.Текст = СтрЗаменить(Запрос.Текст, "НЕОПРЕДЕЛЕНО КАК OBJID", ПоляТаблицы); Запрос.Текст = СтрЗаменить(Запрос.Текст, "НЕОПРЕДЕЛЕНО КАК Параметр", ПараметрыЭлементаСправочника); Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВТПараметрыВыбора.Параметр = ВТ_ТаблицаДанных.OBJID", СоединениеТаблиц); |
|||
14
IvanVlad1
24.08.21
✎
13:44
|
(1) Спасибо, помог )
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |