|
Использование менеджера временных таблиц | ☑ | ||
---|---|---|---|---|
0
Norbertano
22.07.14
✎
16:21
|
Приветствую. Прошу совета. Есть два запроса, в одном создается временная таблица, а во втором хочу ее использовать. Но при выполнении второго запроса ругается, что временная таблица не найдена
Процедура ОбработкаПроведения((Отказ, Режим)) Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.Текст = "ВЫБРАТЬ | ПродажаТоваровСписокТоваров.Номенклатура, | СУММА(ПродажаТоваровСписокТоваров.Количество) КАК Количество, | СУММА(ПродажаТоваровСписокТоваров.Сумма) КАК Стоимость |ПОМЕСТИТЬ ДокТЧ |ИЗ | Документ.РасходнаяНакладная.СписокТоваров КАК ПродажаТоваровСписокТоваров |ГДЕ | ПродажаТоваровСписокТоваров.Ссылка = &Ссылка | И ПродажаТоваровСписокТоваров.Номенклатура.Услуга = ЛОЖЬ | |СГРУППИРОВАТЬ ПО | ПродажаТоваровСписокТоваров.Номенклатура | |ИНДЕКСИРОВАТЬ ПО | ПродажаТоваровСписокТоваров.Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ОстаткиТоваровОстатки.Номенклатура, | ОстаткиТоваровОстатки.КоличествоОстаток, | ОстаткиТоваровОстатки.Номенклатура.Представление |ИЗ | РегистрНакопления.ОстаткиТоваров.Остатки( | &МоментИтогов, | (Номенклатура, Склад) В | (ВЫБРАТЬ | ДокТЧ.Номенклатура, | &Склад | ИЗ | ДокТЧ КАК ДокТЧ)) КАК ОстаткиТоваровОстатки |ГДЕ | ОстаткиТоваровОстатки.КоличествоОстаток < 0"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("Склад", Склад); Если Режим = РежимПроведенияДокумента.Оперативный Тогда МоментИтогов = '00010101' Иначе МоментИтогов = Новый Граница(МоментВремени(), ВидГраницы.Включая); КонецЕсли; Запрос.УстановитьПараметр("МоментИтогов", МоментИтогов); РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл //..... КонецЦикла; Запрос.Текст = "ВЫБРАТЬ | ДокТЧ.Номенклатура, | СУММА(ДокТЧ.Количество) КАК Количество, | СУММА(ДокТЧ.Сумма) КАК Сумма, | ПартииТоваровОстатки.Партия, | ПартииТоваровОстатки.КоличествоОстаток, | ПартииТоваровОстатки.СтоимостьОстаток |ИЗ | ДокТЧ КАК ДокТЧ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваров.Остатки КАК ПартииТоваровОстатки | ПО ДокТЧ.Номенклатура = ПартииТоваровОстатки.Номенклатура | |СГРУППИРОВАТЬ ПО | ДокТЧ.Номенклатура, | ПартииТоваровОстатки.Партия, | ПартииТоваровОстатки.КоличествоОстаток, | ПартииТоваровОстатки.СтоимостьОстаток"; Запрос.УстановитьПараметр("МоментИтогов", МоментВремени()); Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("Склад", Склад); ПросмотрВТ(Запрос, "ДокТЧ"); РезультатЗапроса = Запрос.Выполнить(); ВыборкаИтоги = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаИтоги.Следующий() Цикл //...... КонецЦикла; //...... КонецПроцедуры //В то же время, если использовать функцию для выгрузки ВТ в таблицу //значений, ошибок нет Функция ПросмотрВТ(Запрос, ИмяВнутреннейТаблицы) Экспорт Перем ЗапросТМП, Р; //Получаем таблицу из менеджера временных таблиц запроса ЗапросТМП=Новый Запрос("ВЫБРАТЬ * ИЗ "+ИмяВнутреннейТаблицы); ЗапросТМП.МенеджерВременныхТаблиц=Запрос.МенеджерВременныхТаблиц; Р=ЗапросТМП.Выполнить().Выгрузить(); Возврат Р; КонецФункции |
|||
1
Wobland
22.07.14
✎
16:23
|
это то того, что МВТ у второго нет
|
|||
2
DrWatson
22.07.14
✎
16:26
|
поменяй строчки местами:
ПросмотрВТ(Запрос, "ДокТЧ"); РезультатЗапроса = Запрос.Выполнить(); |
|||
3
Norbertano
22.07.14
✎
16:35
|
(2) ошибка выпала та же.
Перед выполнением первого запроса я создал МВТ. Второй запрос это тот же первый, только с другим текстом запроса. (1) нужно создать еще один МВТ |
|||
4
Norbertano
22.07.14
✎
16:35
|
?
|
|||
5
Norbertano
22.07.14
✎
16:41
|
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.Текст = "Выбрать "; //Первый запрос //.... Запрос.Текст = "Выбрать"; //Второй запрос //Где здесь создавать второй МВТ |
|||
6
Serginio1
22.07.14
✎
16:43
|
Менеджер=новый МенеджерВременныхТаблиц();
Запрос.МенеджерВременныхТаблиц = Менеджер; ЗапросТМП.МенеджерВременныхТаблиц= Менеджер; |
|||
7
Norbertano
22.07.14
✎
16:46
|
это нужно создать новый запросТМП. То есть я не могу использовать все один запрос
|
|||
8
DrWatson
22.07.14
✎
16:51
|
Где ошибка-то, во втором запросе в ОбработкаПроведения, или в ПросмотрВТ?
|
|||
9
Norbertano
22.07.14
✎
16:53
|
(2) если поменять местами, как Вы говорили, то в просмотрВТ. Если ничего не трогать в ОбработкаПроведения
|
|||
10
rozer76
22.07.14
✎
16:53
|
(7) переделай через "пакетный" как вариант а так походу все правильно
|
|||
11
Широкий
22.07.14
✎
16:55
|
(Номенклатура, Склад) В
| (ВЫБРАТЬ | ДокТЧ.Номенклатура, | &Склад Это нужно переделать |
|||
12
Norbertano
22.07.14
✎
16:57
|
(6) Сделал, как Вы сказали. Все равно та же ошибка
Запрос = Новый Запрос; Менеджер=новый МенеджерВременныхТаблиц(); Запрос.МенеджерВременныхТаблиц = Менеджер; Запрос.Текст ="Выбрать ..."; РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); //Цикл ЗапросТМП = Новый Запрос; ЗапросТМП.МенеджерВременныхТаблиц = Менеджер; ЗапросТМП.Текст="Выбрать"; РезультатЗапроса2 = ЗапросТМП.Выполнить(); Выборка2 = РезультатЗапроса2.Выбрать(); //Цикл |
|||
13
rozer76
22.07.14
✎
17:01
|
(12) сделай через пакет и "ВыполнитьПакет()" и разбирай массив - учись по типовым конфам ))
|
|||
14
DrWatson
22.07.14
✎
17:04
|
Да вроде всё правильно написано. Вот для примера себе написал - работает. Посмотри, сравни.
|
|||
15
alle68
22.07.14
✎
17:05
|
(12) Запрос должен быть один, меняется только текст.
|
|||
16
Бледно Золотистый
22.07.14
✎
17:05
|
А не закрывает ли одинеска ЗапросТМП.МенеджерВременныхТаблиц автоматом в конце процедуры при уничтожении переменной ЗапросТМП?
|
|||
17
Norbertano
22.07.14
✎
17:07
|
(14) Вот беда, а у меня этот код выполняется с той же ошибкой в каркасной конфигурации во внешней обработке :(
|
|||
18
Serginio1
22.07.14
✎
17:08
|
(15) Необязательно.
|
|||
19
DrWatson
22.07.14
✎
17:08
|
(16) права не имеет, на МВТ есть ещё одна ссылка, из ещё существующего первого запроса
|
|||
20
Norbertano
22.07.14
✎
17:09
|
(17) в типовой конфигурации тоже ошибка
|
|||
21
Бледно Золотистый
22.07.14
✎
17:10
|
(20) Да там понятно откуда. Во 2 - запрос новый с новым МенеджерВременныхТаблиц .
|
|||
22
DrWatson
22.07.14
✎
17:12
|
(21) Да, удалить забыл когда писал
|
|||
23
Norbertano
22.07.14
✎
18:26
|
Всем спасибо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |