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