|
Построитель запроса и использование временных таблиц в качестве параметра. | ☑ | ||
---|---|---|---|---|
0
DeadLine
01.04.21
✎
11:41
|
Привет всем! Задаю вопрос в связи с тем, что все статьи, которые я нашел по этой "избитой" теме являются очень старыми. Вопрос собственно не новый. Можно ли как-то красиво передать внешнюю таблицу в построитель запросов НЕ в качестве источника данных, поскольку тогда текст запроса полностью игнорируется, а виде временной таблицы или в виде параметра. Единственное, более-менее адекватное решение нашел тут, но возможно есть что-то поновее, поскольку тут всё равно нужен финт ушами.
https://infostart.ru/1c/articles/96970/ год 2011. |
|||
1
Kondarat
01.04.21
✎
12:16
|
(0) И что не работает? Это оно?
ТекстЗапроса = "ВЫБРАТЬ | Пользователи.Ссылка КАК Ссылка |ПОМЕСТИТЬ ВТ_Менеджеры |ИЗ | Справочник.Пользователи КАК Пользователи |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПродажиОбороты.Менеджер КАК Менеджер, | ПродажиОбороты.Номенклатура КАК Номенклатура |ИЗ | ВТ_Менеджеры КАК ВТ_Менеджеры | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты | ПО ВТ_Менеджеры.Ссылка = ПродажиОбороты.Менеджер"; ПЗ = Новый ПостроительЗапроса(); ПЗ.Текст = ТекстЗапроса; ТЗ = ПЗ.Результат.Выгрузить(); Все работает. Платформа 8.3.18.1289 |
|||
2
DeadLine
01.04.21
✎
12:24
|
(1) Вот поменяй теперь справочник.Пользователи на &Пользователи и попробуй передать таблицу в качестве параметра или попробуй реализовать тоже самое через использование менеджера временных таблиц.В обоих случаях ВНЕШНЮЮ таблицу не должно удастся так легко передать в построитель запроса.
|
|||
3
Said_We
01.04.21
✎
12:34
|
(0) Не понял вопроса. Какая ошибка и когда возникает?
|
|||
4
Said_We
01.04.21
✎
12:41
|
(0) Какая платформа?
|
|||
5
Kondarat
01.04.21
✎
12:44
|
(2) >>а виде временной таблицы или в виде параметра
Я тебе показал пример с временной таблицей. Что еще надо. >>тоже самое через использование менеджера временных Причем здесь построитель и МенеджерВременныхТаблиц? |
|||
6
Said_We
01.04.21
✎
12:46
|
(0) Не я один вопроса не понял.
|
|||
7
DeadLine
01.04.21
✎
12:57
|
(5)я не знаю, чего ты не понимаешь. Если я в этом сообщении четко указал ВНЕШНЮЮ - Справочник.Пользователи это не внешняя таблица, которую нужно передавать в построитель запроса.
Внешнюю таблицу можно передать в запрос либо в качестве параметра, либо через МенеджерВременныхТаблиц. А вот в построитель запроса получается нельзя, по крайней мере у меня не получается, передать внешнюю таблицу в качестве параметра и нельзя реализовать через МенеджерВременныхТаблиц, поскольку построитель не умеет с ним работать. |
|||
8
Chameleon1980
01.04.21
✎
13:05
|
запрос для по строителя ты сам накидал?
покажи |
|||
9
Dzenn
гуру
01.04.21
✎
13:07
|
(0) Привет! ПостроительОтчета больше не развивается (на его место пришла СКД), и в нём как не было возможности передавать в него ТаблицуЗначений в качестве параметра, так и не будет. Если нужен именно ПостроительОтчета, ищи какие-то обходные пути, иначе никак.
|
|||
10
DeadLine
01.04.21
✎
13:16
|
(9) спасибо за ответ,теперь понятно,почему так редко этот инструмент встречается в типовых.
|
|||
11
ptiz
01.04.21
✎
13:20
|
(0) Да, только через ПолучитьЗапрос() можно так использовать ТаблицуЗначений.
|
|||
12
DeadLine
01.04.21
✎
14:00
|
(11) Можешь приложить код? По-моему в построителе при ЗаполнитьНастройки() выйдет ошибка, а без динамических настроек в построителе и смысла нету.
|
|||
13
ptiz
01.04.21
✎
15:55
|
(12) Ты же сам ссылку привел на статью, где всё описано:
1) в текст построителя пихаем заглушку вместо ТЗ 2) по кнопке "Сформировать" в отчете делаем финт ушами: а) Запрос = Построитель.ПолучитьЗапрос() б) подменяем в тексте запроса заглушку на &ТЗ и устанавливаем параметр запроса: Запрос.УстановитьПараметр("ТЗ", ТЗ); |
|||
14
DeadLine
01.04.21
✎
16:36
|
(13) это понятно, я думал может и через ПолучитьЗапрос(),но как-то по-другому , вариант описанный в статье это далеко не идеал...
|
|||
15
Said_We
01.04.21
✎
20:15
|
(7) Всё равно не понимаю в чем вопрос.
Запрос.УстановитьПараметр("ТЗ", ТЗ); - передается параметр в запрос. А надо куда тогда и что передать, если это не то что необходимо? |
|||
16
Said_We
02.04.21
✎
11:34
|
Первое апреля прошло....
|
|||
17
DeadLine
02.04.21
✎
11:43
|
(16) ты понимаешь разницу между построителем запроса и запросом? Если да, то я хз, что ты прикопался или чего ты не понимаешь. Я ответ на свой вопрос получил.
|
|||
18
TormozIT
гуру
02.04.21
✎
12:04
|
В ИР широко используется такая подмена.
Обработка.ирПлатформа // Размаскирует обращения к временным таблицам в тексте запроса. // // Параметры: // ТекстЗапроса – Строка; // МассивВременныхТаблиц – Массив – элементами являются имена временных таблиц, замаскированных ранее. // // Возвращаемое значение: // Строка - новые текст запроса. // Функция РазмаскироватьВременныеТаблицы(ТекстЗапроса, МассивВременныхТаблиц, выхВсеРазмаскировано = Ложь) Экспорт // Получает текст запроса, где каждая временная таблица заменена своим имитатором. // // Параметры: // ОбъектЗапроса – Запрос; // *ТекстЗапроса – Строка, *Неопределено; // *МассивВременныхТаблиц - Массив, *Неопределено - все подменяемые таблицы заносятся сюда. // // Возвращаемое значение: // Строка - новый текст запроса. // Функция ЗамаскироватьВременныеТаблицы(ОбъектЗапроса, Знач ТекстЗапроса = Неопределено, |
|||
19
Said_We
02.04.21
✎
12:05
|
(17) Я не понимаю зачем использовать построитель в нынешнем 2021 году. Даже в 2011 уже не понимаю зачем.
|
|||
20
TormozIT
гуру
02.04.21
✎
12:07
|
(19) Так в компоновке та же проблема. Менеджер временных таблиц там появился совсем недавно и еще хромой.
|
|||
21
Said_We
02.04.21
✎
12:09
|
(20) А внешнего источника данных нет в СКД?
|
|||
22
TormozIT
гуру
02.04.21
✎
12:13
|
(21) Если ты про "набор данных объект", то к нему запрос выполнить нельзя. Это следующий этап конвейра компоновки - он выполняется в процессе 1С, а не в СУБД.
|
|||
23
Said_We
02.04.21
✎
12:16
|
(20) На первой закладке в СКД наборы данных. Добавляешь не запрос, а набор данных и задаешь ему имя и описываешь структуру. А как этот набор данных был получен - не важно. Хоть каким-то запросом, хоть ручками...
Я же правильно понимаю задачу - главное некую таблицу передать в запрос для использования данных этой таблицы при выполнении запроса. Обычный запрос это умеет. А СКД умеет это счастье компоновать и даже выводить. |
|||
24
Said_We
02.04.21
✎
12:17
|
Я задачу не понимаю, в которой необходимо использовать построитель. Что на входе, что на выходе.
|
|||
25
АнализДанных
02.04.21
✎
14:09
|
(24) Построитель удобен, когда текст запроса собирается динамически.
Например, можно склеить запрос из разных условий, но это будет не налгядно, сложные запросы не открыть конструктором, не проверить синтаксис, сложно дорабатывать, читать: "ВЫБРАТЬ | Номенклатура.Ссылка КАК Ссылка" + ?(ВыводитьКод=Истина, ", Номенклатура.Код КАК Код", "") + ?(ВыводитьАртикул = Истина, ", Номенклатура.Артикул КАК Артикул", "") |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ" | ИСТИНА + ?(ЗначениеЗаполнено(Производитель), " И Номенклатура.Производитель = &Производитель", "") + ?(ЗначениеЗаполнено(СрокГодности), " И Номенклатура.СрокГодности = &СрокГодности", ""); А можно использовать построитель, тогда запрос будет читабельней и проще. Его можно редактировать конструктором: "ВЫБРАТЬ | Номенклатура.Ссылка КАК Ссылка |{ВЫБРАТЬ | Номенклатура.Код, | Номенклатура.Артикул} |ИЗ | Справочник.Номенклатура КАК Номенклатура |{ГДЕ | Номенклатура.Производитель.*, | Номенклатура.СрокГодности}" |
|||
26
Said_We
02.04.21
✎
15:32
|
(25) В типовых забили на всё это. Динамически собирают запросы постоянно. Конструктором в коде ничего не откроешь.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |