|
СКД, оптимизатор(вроде) | ☑ | ||
---|---|---|---|---|
0
samozvanec
10.12.13
✎
12:29
|
есть отчет, там выбираются в одном наборе договоры, по ним обороты, ну и прочее, а во втором - просрочка на определенный день, получаемый из первого набора. и все вроде было хорошо.
запрос второго набора выглядел так ВЫБРАТЬ &Срок КАК Срок, ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента, ВЫБОР КОГДА ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток - ЕСТЬNULL(ВзаиморасчетыСКонтрагентамиОбороты.СуммаУпрРасход, 0) <= 0 ТОГДА 0 ИНАЧЕ ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток - ЕСТЬNULL(ВзаиморасчетыСКонтрагентамиОбороты.СуммаУпрРасход, 0) КОНЕЦ КАК Просрочено ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&Срок {(&Срок)}, ДоговорКонтрагента = &ДоговорКонтрагента) КАК ВзаиморасчетыСКонтрагентамиОстатки ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(&Срок {(&Срок)}, КОНЕЦПЕРИОДА(&Срок, ДЕНЬ) {(КОНЕЦПЕРИОДА(&Срок, ДЕНЬ))}, , ДоговорКонтрагента = &ДоговорКонтрагента) КАК ВзаиморасчетыСКонтрагентамиОбороты ПО ВзаиморасчетыСКонтрагентамиОстатки.Контрагент = ВзаиморасчетыСКонтрагентамиОбороты.Контрагент И ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента = ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента получалась сумма, сколько было просрочено конкретно в день оплаты. теперь решили учесть и платежки, которые пришли после, конкретно - до конца периода выборки. т.е. параметр &КонецПериода, который уже используется в первом наборе. но вот незадача - как только я меняю КОНЕЦПЕРИОДА(&Срок, ДЕНЬ) {(КОНЕЦПЕРИОДА(&Срок, ДЕНЬ))} на КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ) {(КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ))} выполнение валится с ошибкой: {Форма.Форма.Форма(396)}: Ошибка при вызове метода контекста (Выполнить) МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанныхКонсоли, ИсполняемыеНастройки, ДанныеРасшифровкиКонсоли); по причине: Ошибка компоновки макета по причине: Ошибка создания набора данных "НаборДанных2" по причине: Ошибка в запросе набора данных по причине: Неверные параметры "И" подразумеваю, что срабатывает оптимизатор. подскажите, пожалуйста, что в такой ситуации можно предпринять |
|||
1
samozvanec
10.12.13
✎
12:31
|
пробовал вставлять параметр &КонецПериодаЕПТА вместо &КонецПериода, а в выражении ему указать &КонецПериода - та же ошибка
|
|||
2
samozvanec
10.12.13
✎
12:32
|
пробовал вот такую прикольную конструкцию
{(КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&Срок, СЕКУНДА, РАЗНОСТЬДАТ(&Срок, &КонецПериода, СЕКУНДА)), ДЕНЬ))} та же ошибка |
|||
3
Cube
10.12.13
✎
12:35
|
СКД не любит в параметрах виртуальных таблиц выкрутасы типа КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&Срок, СЕКУНДА, РАЗНОСТЬДАТ(&Срок, &КонецПериода, СЕКУНДА)), ДЕНЬ)
Так что, выпендривайся в модулях, а СКД корми только готовыми блюдами типа &КонецПериодаЕПТА, без всяких выпендрежей. |
|||
4
samozvanec
10.12.13
✎
12:37
|
(3) дык он ни то ни то не ест
|
|||
5
samozvanec
10.12.13
✎
12:38
|
+(4) это я чисто из любопытства попробовал
|
|||
6
Cube
10.12.13
✎
12:40
|
(4) Ты этого нигде не сказал. Во всех твоих примерах в параметры виртуальных таблиц ты помимо параметра суешь что-то вроде КОНЕЦПЕРИОДА()... А я тебе говорю - не надо...
|
|||
7
milan
10.12.13
✎
12:40
|
посмотри запрос который формирует СКД, в консоли отчетов вроде можно
|
|||
8
samozvanec
10.12.13
✎
12:42
|
(6) ладно уж, КОНЕЦПЕРИОДА() она должна проглатывать
(7) консоль запрос не показывает, видимо, ошибка вылетает раньше, чем она его получает |
|||
9
samozvanec
10.12.13
✎
12:46
|
(6) ты оказался прав. &КонецПериодаЕПТА, в выражении которого стоит КонецПериода(&КонецПериода, "ДЕНЬ"), оно проглотило и облизнулось. спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |