Имя: Пароль:
1C
1С v8
Проблема с запросом
,
0 John342
 
05.06.20
15:49
Добрый день, форумчане.

Пытаюсь выполнить запрос на данные, расположенные в Документ.ЗаказКлиента

В модуле своей обработки пишу следующее:

        МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    ЗапросНаДанныеТаблицы = Новый Запрос;
    ЗапросНаДанныеТаблицы.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
    ЗапросНаДанныеТаблицы.УстановитьПараметр("Табл",Документы.ЗаказКлиента);
    ЗапросНаДанныеТаблицы.Текст = "
    |ВЫБРАТЬ
    |Табл.Номер КАК Номер,
    |Табл.Дата КАК Дата,
    |Табл.Партнер КАК Партнер,
    |Табл.СуммаДокумента КАК СуммаДокумента,
    |Табл.Менеджер КАК Менеджер
    |ИЗ
    | &Табл КАК Табл";
    Рез = ЗапросНаДанныеТаблицы.Выполнить();

На это мне выдаёт ошибку:
{ВнешняяОбработка.Оповещение_руководителя_о_крупных_заказах.МодульОбъекта(32)}: Ошибка при вызове метода контекста (Выполнить)
    Рез = ЗапросНаДанныеТаблицы.Выполнить();
по причине:
Содержимое объекта данных может быть выбрано только во временную таблицу.

Так я вроде указал временную таблицу. Или чего-то не понимаю? Объясните, пожалуйста.
1 BaHgaJI
 
05.06.20
15:50
Документы.ЗаказКлиента выгрузи в отз
2 BaHgaJI
 
05.06.20
15:50
тз*
3 John342
 
05.06.20
15:51
(2) Тз это мне нужно создать новый объект ТаблицаЗначений?
4 BaHgaJI
 
05.06.20
15:51
и надо добавить ПОМЕСТИТЬ вт
5 John342
 
05.06.20
15:52
(4) Кажется, понял. Сейчас попробую.
6 BaHgaJI
 
05.06.20
15:55
|ВЫБРАТЬ
    |    Таблица.Поле1,
    |    Таблица.Поле2
    |ПОМЕСТИТЬ вт
    |ИЗ
    |    &ТаблицаКАК Таблица

А менеджер зачем?
7 HJ894
 
05.06.20
16:02
Поместить надо в табл тебе уже написали
8 John342
 
05.06.20
16:05
(4) Теперь ругается вот на это:
{ВнешняяОбработка.Оповещение_руководителя_о_крупных_заказах.МодульОбъекта(32)}: Ошибка при вызове метода контекста (Выполнить)
    ЗапросНаДанныеТаблицы.Выполнить();
по причине:
{(10, 2)}: Неверные параметры "Табл"
<<?>>&Табл КАК Табл
9 BaHgaJI
 
05.06.20
16:16
Тут телепатов нет, весь код покажи с установкой параметров
10 John342
 
05.06.20
16:23
(9)     //МВТ = новый МенеджерВременныхТаблиц;
    МояТаблица = новый ТаблицаЗначений;
    МояТаблица.Колонки.Добавить("Номер",Новый ОписаниеТипов("Строка"));
    МояТаблица.Колонки.Добавить("Дата",Новый ОписаниеТипов("Дата"));
    МояТаблица.Колонки.Добавить("Клиент",Новый ОписаниеТипов("Строка"));
    МояТаблица.Колонки.Добавить("Сумма",Новый ОписаниеТипов("Строка"));
    МояТаблица.Колонки.Добавить("Менеджер",Новый ОписаниеТипов("Строка"));

    ЗапросНаДанныеТаблицы = Новый Запрос;
    //ЗапросНаДанныеТаблицы.МенеджерВременныхТаблиц = МВТ;
    ЗапросНаДанныеТаблицы.УстановитьПараметр("ТаблКуда",МояТаблица);

    ЗапросНаДанныеТаблицы.Текст = "
    |ВЫБРАТЬ
    |Табл.Номер КАК Номер,
    |Табл.Дата КАК Дата,
    |Табл.Партнер КАК Партнер,
    |Табл.СуммаДокумента КАК СуммаДокумента,
    |Табл.Менеджер КАК Менеджер
    |ПОМЕСТИТЬ ТаблКуда
    |ИЗ
    | Документ.ЗаказКлиента КАК Табл";
    ЗапросНаДанныеТаблицы.Выполнить();
11 John342
 
05.06.20
16:24
(9) Убрал параметр. Было
ЗапросНаДанныеТаблицы.УстановитьПараметр("Табл",Документ.ЗаказКлиента);
12 arsik
 
гуру
05.06.20
16:26
(10) херня какая то.
13 BaHgaJI
 
05.06.20
16:27
(12) согласен=)
14 AlvlSpb
 
05.06.20
16:27
(10) Бред. См подсказку https://helpf.pro/faq83/view/1722.html
15 BaHgaJI
 
05.06.20
16:28
ЗапросНаДанныеТаблицы.УстановитьПараметр("Таблица",Документ.ЗаказКлиента.Выгрузить());

    ЗапросНаДанныеТаблицы.Текст = "
    |ВЫБРАТЬ
    |Табл.Номер КАК Номер,
    |Табл.Дата КАК Дата,
    |Табл.Партнер КАК Партнер,
    |Табл.СуммаДокумента КАК СуммаДокумента,
    |Табл.Менеджер КАК Менеджер
    |ПОМЕСТИТЬ ТаблКуда
    |ИЗ
    | &Таблица КАК Таблица";
    ЗапросНаДанныеТаблицы.Выполнить();
16 AlvlSpb
 
05.06.20
16:28
(14) + Если не использовать МВТ, то два запроса в примере надо объединить в один (два пакета)
17 John342
 
05.06.20
16:30
Всем спасибо. Буду пробовать =)
18 AlvlSpb
 
05.06.20
16:36
(15) ЗапросНаДанныеТаблицы.УстановитьПараметр("Таблица",Документ.ЗаказКлиента.Выгрузить());©
Это как? ))))) Документ.ЗаказКлиента.Выгрузить()?
19 John342
 
05.06.20
16:39
(18) Да, это не работает ) Мне надо как-то достучаться до этой области, т.к. запрос возвращает мне "пустоту".
20 BaHgaJI
 
05.06.20
16:40
(18) :DDD  ну тупанул, почему то подумал, что ЗаказаКлиента это тч, а в документ сама ссылка.
21 John342
 
05.06.20
16:43
(20) Не, ЗаказКлиента-документ. Там внутри ещё реквизиты, табличные части и формы.
22 BaHgaJI
 
05.06.20
16:43
А что нужно вытащить то?
23 BaHgaJI
 
05.06.20
16:44
Для чего документ пихать в запрос?
24 John342
 
05.06.20
16:44
(22) Реквизиты из этого документа.
25 John342
 
05.06.20
16:45
(23) Не знаю, я только постигаю запросы) Я новичок в 1с =)
26 John342
 
05.06.20
16:45
(23) Вообще я взял за основу запрос из динамического списка. Но видать, его нужно делать как-то иначе.
27 BaHgaJI
 
05.06.20
16:49
(26)  А так не судьба?

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗаказКлиента.Номер КАК Номер,
        |    ЗаказКлиента.Дата КАК Дата
        |ИЗ
        |    Документ.ЗаказКлиента  КАК ЗаказКлиента
        |ГДЕ
        |    ЗаказКлиента.Ссылка = &Ссылка";
    
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        
    КонецЦикла;
28 John342
 
05.06.20
16:56
(27) Попробую)
29 AlvlSpb
 
05.06.20
17:08
(28) Эмммм. А по каким-нибудь книжкам не пробовал делать и учить? Поверь, это более продуктивно.
30 Kassern
 
06.06.20
10:15
(0) Когда ты используешь МенеджерВременныхТаблиц, ты должен понимать зачем ты это делаешь. Если тебе надо сделать выборку из пары таблиц, то можешь написать простой запрос, где используя временные таблицы (или вложенные запросы) в итоге получаешь выборку данных. Если же у тебя очень сложный запрос состоящий из множества таблиц, которые нужно получать тоже различными запросами, тогда ты можешь поэтапно делать запрос пихать его во временную таблицу, а эту таблицу уже в МенеджерВременныхТаблиц и таких таблиц можно напихать множество в этот менеджер... А в конце взять все эти временные таблицы из менеджера объединить одним запросом и вывести нужные данные в выборку. В этом случае у тебя будет красивый итоговый запрос, читаемый код и корректно раскидана нагрузка на сервер (т.к. все запросы выполняются поэтапно и последовательно уничтожаются временные таблицы). Без МенеджерВременныхТаблиц, такие бы запросы выглядели убогими с огромным количеством временных таблиц в одном запросе.