Имя: Пароль:
1C
1С v8
СКД, оптимизатор(вроде)
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) ты оказался прав. &КонецПериодаЕПТА, в выражении которого стоит КонецПериода(&КонецПериода, "ДЕНЬ"), оно проглотило и облизнулось. спасибо!