Имя: Пароль:
1C
1С v8
СКД, два набора, передача параметра
0 samozvanec
 
27.09.13
12:24
последний подзапрос набора 1 выглядит так:

ВЫБРАТЬ
    ВТ_ДоГруппировки.Период КАК Период,
    ВТ_ДоГруппировки.Регистратор,
    ВТ_ДоГруппировки.Контрагент,
    ВТ_ДоГруппировки.ДоговорКонтрагента,
    СУММА(ВТ_ДоГруппировки.ДолгНаНачало) КАК ДолгНаНачало,
    СУММА(ВТ_ДоГруппировки.ПереданоНаНачало) КАК ПереданоНаНачало,
    СУММА(ВТ_ДоГруппировки.ПереданоНаРеализацию) КАК ПереданоНаРеализацию,
    СУММА(ВТ_ДоГруппировки.Реализовано) КАК Реализовано,
    СУММА(ВТ_ДоГруппировки.Оплачено) КАК Оплачено,
    СУММА(ВТ_ДоГруппировки.СуммаВознаграждения) КАК СуммаВознаграждения,
    СУММА(ВТ_ДоГруппировки.ДолгНаКонец) КАК ДолгНаКонец,
    СУММА(ВТ_ДоГруппировки.ПереданоНаКонец) КАК ПереданоНаКонец,
    ЕСТЬNULL(ВТ_СрокиПоДоговорам.Срок, ДАТАВРЕМЯ(1, 1, 2)) КАК Срок
ИЗ
    ВТ_ДоГруппировки КАК ВТ_ДоГруппировки
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СрокиПоДоговорам КАК ВТ_СрокиПоДоговорам
        ПО ВТ_ДоГруппировки.ДоговорКонтрагента = ВТ_СрокиПоДоговорам.Договор

СГРУППИРОВАТЬ ПО
    ВТ_ДоГруппировки.Регистратор,
    ВТ_ДоГруппировки.ДоговорКонтрагента,
    ВТ_ДоГруппировки.Контрагент,
    ВТ_ДоГруппировки.Период,
    ЕСТЬNULL(ВТ_СрокиПоДоговорам.Срок, ДАТАВРЕМЯ(1, 1, 2))

запрос набора 2(в который передается параметр):

ВЫБРАТЬ
    &Срок КАК Срок,
    ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента,
    СУММА(ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток) КАК ОстНаНачСрок,
    СУММА(ЕСТЬNULL(ВзаиморасчетыСКонтрагентамиОбороты.СуммаУпрРасход, 0)) КАК СуммаПлатежаВДеньОплаты,
    СУММА(ВЫБОР
            КОГДА ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток - ЕСТЬNULL(ВзаиморасчетыСКонтрагентамиОбороты.СуммаУпрРасход, 0) <= 0
                ТОГДА 0
            ИНАЧЕ ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток - ЕСТЬNULL(ВзаиморасчетыСКонтрагентамиОбороты.СуммаУпрРасход, 0)
        КОНЕЦ) КАК Просрочено,
    ВзаиморасчетыСКонтрагентамиОбороты.Регистратор КАК РегистраторОплаты,
    ВзаиморасчетыСКонтрагентамиОбороты.Период КАК ПериодОплаты
ИЗ
    РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&Срок, Контрагент В ИЕРАРХИИ (&Франчайзи)) КАК ВзаиморасчетыСКонтрагентамиОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(&Срок, КОНЕЦПЕРИОДА(&Срок, ДЕНЬ), Регистратор, Контрагент В ИЕРАРХИИ (&Франчайзи)) КАК ВзаиморасчетыСКонтрагентамиОбороты
        ПО ВзаиморасчетыСКонтрагентамиОстатки.Контрагент = ВзаиморасчетыСКонтрагентамиОбороты.Контрагент
            И ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента = ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента

СГРУППИРОВАТЬ ПО
    ВзаиморасчетыСКонтрагентамиОбороты.Регистратор,
    ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента,
    ВзаиморасчетыСКонтрагентамиОстатки.Контрагент,
    ВзаиморасчетыСКонтрагентамиОбороты.Период


суть отчета - показать просрочку относительно установленных дней оплаты, в данном конкретном случае - это вторник и пятница.
вторник подхватывает верно(24.09), и остаток на начало вторника тоже подхватывает верно, но кроме того подхватывает и платежку от 25го.
в консоли запросов результат верный, в консоли отчетов - нет. подскажите, почему?

связь наборов:
http://s016.radikal.ru/i337/1309/ea/6463f65ec333.png
результат в консоли запросов:
http://s018.radikal.ru/i527/1309/5b/d107a332783c.png
результат в консоли отчетов:
http://s019.radikal.ru/i600/1309/4b/0a0fbec58a0d.png
1 samozvanec
 
27.09.13
12:36
конкретно непонятно, почему при значении параметра Срок начало дня 24.09 из таблицы
....РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(&Срок, КОНЕЦПЕРИОДА(&Срок, ДЕНЬ)....
попадает запись с периодом 25.09
2 samozvanec
 
27.09.13
12:46
значение Срока пробовал выводить отдельно из обоих наборов. берется верно и всегда совпадает
3 samozvanec
 
30.09.13
09:56
всем доброе утро! вопрос актуален, апаю. надеюсь, понедельник пятницы мудренее
4 Rovan
 
гуру
30.09.13
11:57
сделай так
...
ЛЕВОЕ СОЕДИНЕНИЕ ( ВЫБРАТЬ
ВзаиморасчетыСКонтрагентамиОбороты.Контрагент,
ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента,
ВзаиморасчетыСКонтрагентамиОбороты.Регистратор,
ВзаиморасчетыСКонтрагентамиОбороты.Период
ИЗ
РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(&Срок, КОНЕЦПЕРИОДА(&Срок, ДЕНЬ), Регистратор, Контрагент В ИЕРАРХИИ (&Франчайзи)) КАК ВзаиморасчетыСКонтрагентамиОбороты )
КАК ВзаиморасчетыСКонтрагентамиОбороты
        ПО ВзаиморасчетыСКонтрагентамиОстатки.Контрагент = ВзаиморасчетыСКонтрагентамиОбороты.Контрагент
            И ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента = ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента
5 samozvanec
 
30.09.13
15:08
так сделать не получится, потому что срок для каждого договора свой и рассчитывается в первом наборе. сделал по-другому, надеюсь мое наблюдение будет полезно для последователей.

1. во втором наборе вместо "Контрагент В ИЕРАРХИИ (&Франчайзи)" в обоих таблицах Договор = &Договор. и на закладке связи его передаю. но это не суть, суть в другом. так просто логически верно.
2. в виртуальных таблицах оборотов СКД автоматом создает параметры НачалоПериода и КонецПериода. Несмотря на то, что я явно указал параметр Срок. таблица оборотов брала значения именно этих параметров. на закладке Компоновка данных установил в параметрах таблиц свой Срок аналогично первой закладке в конструкторе запросов. после этого заработало.

важный момент:
не пойму почему, но если на первой закладке конструктора параметры виртуальных таблиц не выставлять, они не подставляются совсем.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.