![]() |
![]() |
![]() |
|
Ошибка "Неверные параметры" при использовании временной таблицы в запросе | ☑ | ||
---|---|---|---|---|
0
AeroRed
18.02.15
✎
17:08
|
Здравствуйте! Задача: написать запрос, формирующий статистику продаж по номенклатуре, а именно максимальные дневные продажи за период. Хочу реализовать это именно через временную таблицу по некоторым причинам. Использую универсальный отчет, на данный момент написал 2 запроса:
Запрос №1: "СформироватьВТ()". Выгружает ТаблицуЗначений по продажам. Он довольно длинный и заурядный, но если нужно тоже выложу. Запрос №2: Выводит итоговый результат. Параметр &ВТПродажи берется из результатов первого запроса следующей строчкой: УниверсальныйОтчет.ПостроительОтчета.Параметры.Вставить("ВТПродажи", СформироватьВТ()); Данный запрос сократил, для удобства чтения, т.к. на ошибку это не влияет. ВЫБРАТЬ РАЗРЕШЕННЫЕ ВТПродажи.Количество, ВТПродажи.Номенклатура, ВТПродажи.Склад, ВТПродажи.День ПОМЕСТИТЬ ВыборкаПродажи ИЗ &ВТПродажи КАК ВТПродажи ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ МАКСИМУМ(ВыборкаПродажи.Количество) КАК Количество, ВложенныйНоменклатура.Склад, ВложенныйНоменклатура.Номенклатура ИЗ (ВЫБРАТЬ Склады.Ссылка КАК Склад, Номенклатура.Ссылка КАК Номенклатура ИЗ Справочник.Склады КАК Склады, Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.ЭтоГруппа = ЛОЖЬ И Склады.ЭтоГруппа = ЛОЖЬ) КАК ВложенныйНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ ВыборкаПродажи КАК ВыборкаПродажи ПО ВложенныйНоменклатура.Склад = ВыборкаПродажи.Склад И ВложенныйНоменклатура.Номенклатура = ВыборкаПродажи.Номенклатура СГРУППИРОВАТЬ ПО ВложенныйНоменклатура.Склад, ВложенныйНоменклатура.Номенклатура Полный текст ошибки: {ВнешнийОтчет.ЗапасыИТочкиЗаказа.МодульОбъекта(157)}: Ошибка при установке значения атрибута контекста (Текст) УниверсальныйОтчет.ПостроительОтчета.Текст = ТекстЗапроса; по причине: {(8, 2)}: Неверные параметры "ВТПродажи" <<?>>&ВТПродажи КАК ВТПродажи Подскажите пожалуйста, где я ошибся? Спасибо! |
|||
1
vicof
18.02.15
✎
17:09
|
Типы в ТЗ нужно явно опредлять
|
|||
2
vicof
18.02.15
✎
17:10
|
Только нафига с двумя запросами извращаться, когда все можно сделать одним
|
|||
3
AeroRed
18.02.15
✎
17:16
|
2 запроса нужны, т.к. предполагается дополнительно обрабатывать временную таблицу прежде чем подсунуть в итоговый запрос (будет очистка статистики).
"Типы в ТЗ нужно явно опредлять" - не совсем понял, это в 1-м запросе нужно сделать? |
|||
4
vicof
18.02.15
✎
17:18
|
Это надо сначала описать колонки в тз, потом через выборку обходить первый запрос из пихать его в таблицу.
|
|||
5
vicof
18.02.15
✎
17:19
|
Или менеджер временных таблиц использовать
|
|||
6
AeroRed
18.02.15
✎
17:55
|
Не получается что-то. Прилагаю код 1-го запроса, добавил обход результата, но ошибка та же. Может не так понял что-то? Или еще вариант, может в универсальном отчете через построитель есть какие-то нюансы?
Функция СформироватьВТ() ВТЗапрос = Новый Запрос; ВТЗапрос.Текст = "ВЫБРАТЬ | ВложенныйЗапрос.Номенклатура КАК Номенклатура, | СУММА(ВложенныйЗапрос.Количество) КАК Количество, | ВложенныйЗапрос.День КАК День, | ВложенныйЗапрос.Склад КАК Склад |ИЗ | (ВЫБРАТЬ | Продажи.Номенклатура КАК Номенклатура, | СУММА(Продажи.Количество) КАК Количество, | НАЧАЛОПЕРИОДА(Продажи.Период, ДЕНЬ) КАК День, | Продажи.Регистратор.Склад КАК Склад | ИЗ | РегистрНакопления.Продажи КАК Продажи | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ЗаказыПокупателей.Номенклатура КАК Номенклатура, | СУММА(ЗаказыПокупателей.Количество) КАК Количество, | ЗаказыПокупателей.ЗаказПокупателя КАК ЗаказПокупателя, | ЗаказыПокупателей.Регистратор КАК Регистратор | ИЗ | РегистрНакопления.ЗаказыПокупателей КАК ЗаказыПокупателей | ГДЕ | (ТИПЗНАЧЕНИЯ(ЗаказыПокупателей.Регистратор) = ТИП(Документ.ЗаказПокупателя) | ИЛИ ТИПЗНАЧЕНИЯ(ЗаказыПокупателей.Регистратор) = ТИП(Документ.КорректировкаЗаказаПокупателя)) | | СГРУППИРОВАТЬ ПО | ЗаказыПокупателей.Номенклатура, | ЗаказыПокупателей.ЗаказПокупателя, | ЗаказыПокупателей.Регистратор) КАК ВложенныйЗаказыПокупателей | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | МИНИМУМ(ИсторияИзмененияОбъектовСрезПоследних.Период) КАК Период, | ИсторияИзмененияОбъектовСрезПоследних.Объект КАК Объект | ИЗ | РегистрСведений.ИсторияИзмененияОбъектов.СрезПоследних(, Действие = ЗНАЧЕНИЕ(Перечисление.ДействияНаОбъектами.Проведение)) КАК ИсторияИзмененияОбъектовСрезПоследних | | СГРУППИРОВАТЬ ПО | ИсторияИзмененияОбъектовСрезПоследних.Объект) КАК ВложенныйИстория | ПО ВложенныйЗаказыПокупателей.Регистратор = ВложенныйИстория.Объект | ПО Продажи.Номенклатура = ВложенныйЗаказыПокупателей.Номенклатура | И Продажи.ЗаказПокупателя = ВложенныйЗаказыПокупателей.ЗаказПокупателя | ГДЕ | Продажи.Период МЕЖДУ &ДатаНачала И &ДатаКонца | И ТИПЗНАЧЕНИЯ(Продажи.Регистратор) = ТИП(Документ.РеализацияТоваровУслуг) | И РАЗНОСТЬДАТ(ВложенныйИстория.Период, Продажи.Период, ДЕНЬ) = 0 | И НЕ &ТолькоОРП | | СГРУППИРОВАТЬ ПО | Продажи.Номенклатура, | НАЧАЛОПЕРИОДА(Продажи.Период, ДЕНЬ), | Продажи.Регистратор.Склад | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | Продажи.Номенклатура, | СУММА(Продажи.Количество), | НАЧАЛОПЕРИОДА(Продажи.Период, ДЕНЬ), | Продажи.Регистратор.Склад | ИЗ | РегистрНакопления.Продажи КАК Продажи | ГДЕ | Продажи.Период МЕЖДУ &ДатаНачала И &ДатаКонца | И ТИПЗНАЧЕНИЯ(Продажи.Регистратор) = ТИП(Документ.ОтчетОРозничныхПродажах) | | СГРУППИРОВАТЬ ПО | Продажи.Номенклатура, | НАЧАЛОПЕРИОДА(Продажи.Период, ДЕНЬ), | Продажи.Регистратор.Склад) КАК ВложенныйЗапрос | |СГРУППИРОВАТЬ ПО | ВложенныйЗапрос.Номенклатура, | ВложенныйЗапрос.Склад, | ВложенныйЗапрос.День"; ВТЗапрос.УстановитьПараметр("ДатаНачала", УниверсальныйОтчет.ПостроительОтчета.Параметры.Начало); ВТЗапрос.УстановитьПараметр("ДатаКонца", УниверсальныйОтчет.ПостроительОтчета.Параметры.Конец); ВТЗапрос.УстановитьПараметр("ТолькоОРП", ТолькоОРП); ВТРезультат = ВТЗапрос.Выполнить().Выгрузить(); ВТПродажи = Новый ТаблицаЗначений; ВТПродажи.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура")); ВТПродажи.Колонки.Добавить("Склад", Новый ОписаниеТипов("СправочникСсылка.Склады")); ВТПродажи.Колонки.Добавить("День", Новый ОписаниеТипов("Дата",,, Новый КвалификаторыДаты)); ВТПродажи.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10,0))); Для Каждого Эл из ВТРезультат Цикл НоваяСтрока = ВТПродажи.Добавить(); НоваяСтрока.Номенклатура=Эл.Номенклатура; НоваяСтрока.Склад=Эл.Склад; НоваяСтрока.День=Эл.День; НоваяСтрока.Количество=Эл.Количество; КонецЦикла; Возврат ВТПродажи; КонецФункции |
|||
7
FIXXXL
18.02.15
✎
17:59
|
попробуй не через функцию получать ТЗ, а в той же процедуре, где ее подсовываешь, должно и без типизации взлететь
|
|||
8
AeroRed
24.02.15
✎
12:17
|
Пришел к выводу что данная конструкция неработоспособна в "Универсальном отчете". Возможно он вообще не поддерживает временные таблицы. Если у кого есть опровержение с примером, буду благодарен за ссылку или пример кода.
Сейчас же пришлось реализовать в виде внешней обработки, заполняя результатом табличное поле. Там всё завелось сразу с 2-мя запросами и без типизации. Всем спасибо за участие! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |