Имя: Пароль:
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. в виртуальных таблицах оборотов СКД автоматом создает параметры НачалоПериода и КонецПериода. Несмотря на то, что я явно указал параметр Срок. таблица оборотов брала значения именно этих параметров. на закладке Компоновка данных установил в параметрах таблиц свой Срок аналогично первой закладке в конструкторе запросов. после этого заработало.

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