| 
    
            
         
         | 
    
  | 
Построитель запроса и использование временных таблиц в качестве параметра. | ☑ | ||
|---|---|---|---|---|
| 
    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) В типовых забили на всё это. Динамически собирают запросы постоянно. Конструктором в коде ничего не откроешь.     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |