Имя: Пароль:
1C
1С v8
Не распределяет доход если отсутствует расход
0 1ctube
 
25.01.18
09:08
Привет. Такая ситуация: есть не типовой отчет, он выводит доход, если например в текущем месяце есть расход, то он распределяет доход по фондам. Как выяснилось если нет в тек.месяце расход то он его не распределяет. После исследования выявил проблемный участок запроса:

|ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    ""1912"",
    |    ""Фонды"",
    |    СметаЗатратФонды.Фонд,
    |    NULL,
    |    NULL,
    |    ИтоговаяТаблицаДоходов.Период, ИтоговаяТаблицаРасходов.Период),
    |    0,
    |    0,
    |    ВЫРАЗИТЬ(ВЫБОР
    |            КОГДА ОбщаяРаспределениеЧистогоДохода.ОбщаяДоля = 0
    |                ТОГДА 0
    |            ИНАЧЕ СметаЗатратФонды.Доля * (ЕСТЬNULL(ИтоговаяТаблицаДоходов.СуммаДоходов, 0) - ЕСТЬNULL(ИтоговаяТаблицаРасходов.СуммаРасходов, 0)) / ОбщаяРаспределениеЧистогоДохода.ОбщаяДоля
        |        КОНЕЦ КАК ЧИСЛО(15, 2)),
    |    0,
    |    0,
    |    0
    |ИЗ
    |    Документ.СметаЗатрат.РаспределениеЧистогоДохода КАК СметаЗатратФонды
    |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |            СУММА(ОбщаяРаспределениеЧистогоДохода.Доля) КАК ОбщаяДоля
    |        ИЗ
    |            Документ.СметаЗатрат.РаспределениеЧистогоДохода КАК ОбщаяРаспределениеЧистогоДохода
    |        ГДЕ
    |            ОбщаяРаспределениеЧистогоДохода.Ссылка = &СметаЗатрат) КАК ОбщаяРаспределениеЧистогоДохода
    |        ПО (ИСТИНА)
    |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |            ТаблицаРасходов.Период,
    |            СУММА(ЕСТЬNULL(ТаблицаРасходов.СуммаФакт,0)) КАК СуммаРасходов
    |        ИЗ
    |            ТаблицаРасходов КАК ТаблицаРасходов
    |        СГРУППИРОВАТЬ ПО
    |            ТаблицаРасходов.Период) КАК ИтоговаяТаблицаРасходов
    |        ПО (ИСТИНА)
    |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |            ВЫБОР
    |                КОГДА НАЧАЛОПЕРИОДА(БюджетированиеДоходыОбороты.Период, МЕСЯЦ) >= &ДатаНачала
    |                        И НАЧАЛОПЕРИОДА(БюджетированиеДоходыОбороты.Период, МЕСЯЦ) <= &ДатаОкончания
    |                    ТОГДА НАЧАЛОПЕРИОДА(БюджетированиеДоходыОбороты.Период, МЕСЯЦ)
    |                ИНАЧЕ &ДатаПрочие
    |            КОНЕЦ КАК Период,
    |            СУММА(ЕСТЬNULL(БюджетированиеДоходыОбороты.СуммаОборот,0)) КАК СуммаДоходов
    |        ИЗ
    |            РегистрНакопления.БюджетированиеДоходы.Обороты(
    |                ,
    |                ,
    |                Регистратор,
    |                ВидДвиженияДоходов = ЗНАЧЕНИЕ(Перечисление.SP_ВидыДвиженияДанныхПоБюджетированию.Факт)
    |                    И СметаЗатрат = &СметаЗатрат) КАК БюджетированиеДоходыОбороты
    |        ГДЕ
    |            НЕ БюджетированиеДоходыОбороты.Регистратор ССЫЛКА Документ.КорректировкаРасходов
    |    
    |        СГРУППИРОВАТЬ ПО
    |            ВЫБОР
    |                КОГДА НАЧАЛОПЕРИОДА(БюджетированиеДоходыОбороты.Период, МЕСЯЦ) >= &ДатаНачала
    |                        И НАЧАЛОПЕРИОДА(БюджетированиеДоходыОбороты.Период, МЕСЯЦ) <= &ДатаОкончания
    |                    ТОГДА НАЧАЛОПЕРИОДА(БюджетированиеДоходыОбороты.Период, МЕСЯЦ)
    |                ИНАЧЕ &ДатаПрочие
    |            КОНЕЦ) КАК ИтоговаяТаблицаДоходов
    |    ПО ИтоговаяТаблицаДоходов.Период = ИтоговаяТаблицаДоходов.Период
    |ГДЕ
    |    СметаЗатратФонды.Ссылка = &СметаЗатрат
    |
    |ОБЪЕДИНИТЬ ВСЕ

Тут проблема в левом соединении как  я понял, если расхода нет, то и распределения нет. Как лучше переписать этот участок запроса?
1 1ctube
 
25.01.18
09:10
ПС. в конце азпроса прописано так:
    
|        ПО ИтоговаяТаблицаРасходов.Период = ИтоговаяТаблицаДоходов.Период
    |ГДЕ
    |    СметаЗатратФонды.Ссылка = &СметаЗатрат
2 1ctube
 
25.01.18
10:58
Сейчас создал док который делает движения по расходу, если хоть расход будет на 1, то распределяется, если с нулевой суммой то нет
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн