Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Опять к вопросу о дебиторской задолженности

Опять к вопросу о дебиторской задолженности
Я
   asder117
 
04.04.19 - 13:41
Уважаемые коллеги доброго времени суток. Пишу для своих нужд отчет по дебиторской задолженности по срокам долга. Конфигурация УПП.
ВЫБРАТЬ
    т.ДоговорКонтрагента,
    т.Сделка,
    т.ДокументРасчетов,
    т.Долг КАК Долг
ПОМЕСТИТЬ тДолги
ИЗ
    (ВЫБРАТЬ
        ВЫБОР
            КОГДА ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.ВедениеВзаиморасчетов = ЗНАЧЕНИЕ(Перечисление.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом)
                ТОГДА ВзаиморасчетыСКонтрагентамиОстатки.Сделка
            ИНАЧЕ ВзаиморасчетыСКонтрагентамиОстатки.Сделка
        КОНЕЦ КАК Сделка,
        НЕОПРЕДЕЛЕНО КАК ДокументРасчетов,
        ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента КАК ДоговорКонтрагента,
        ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток КАК Долг
    ИЗ
        РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&Дата {(&Дата)}, ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом = ЛОЖЬ) КАК ВзаиморасчетыСКонтрагентамиОстатки
    {ГДЕ
        ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.*,
        ВзаиморасчетыСКонтрагентамиОстатки.Контрагент.*,
        ВзаиморасчетыСКонтрагентамиОстатки.Организация.*}
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ВЫБОР
            КОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.ВедениеВзаиморасчетов = ЗНАЧЕНИЕ(Перечисление.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом)
                ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Сделка
            ИНАЧЕ ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Сделка
        КОНЕЦ,
        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом,
        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента,
        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток
    ИЗ
        РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(&Дата {(&Дата)}, ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом = ИСТИНА) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки
    {ГДЕ
        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.*,
        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Контрагент.*,
        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Организация.*}) КАК т
ГДЕ
    т.Долг <> 0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    т.ДоговорКонтрагента КАК ДоговорКонтрагента,
    т.Сделка КАК Сделка,
    т.ДокументРасчетов КАК ДокументРасчетов,
    т.Период КАК Период,
    т.Регистратор,
    ВЫБОР
        КОГДА тДолги.Долг > 0
            ТОГДА 1
        ИНАЧЕ -1
    КОНЕЦ КАК Знак,
    ВЫБОР
        КОГДА т.Оборот < 0
            ТОГДА -т.Оборот
        ИНАЧЕ т.Оборот
    КОНЕЦ КАК Оборот,
    ВЫБОР
        КОГДА тДолги.Долг > 0
            ТОГДА тДолги.Долг
        ИНАЧЕ -тДолги.Долг
    КОНЕЦ КАК Долг
ПОМЕСТИТЬ тДолгиИОбороты
ИЗ
    (ВЫБРАТЬ
        ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента,
        ВЫБОР
            КОГДА ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента.ВедениеВзаиморасчетов = ЗНАЧЕНИЕ(Перечисление.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом)
                ТОГДА ВзаиморасчетыСКонтрагентамиОбороты.Сделка
            ИНАЧЕ ВзаиморасчетыСКонтрагентамиОбороты.Сделка
        КОНЕЦ КАК Сделка,
        НЕОПРЕДЕЛЕНО КАК ДокументРасчетов,
        ВзаиморасчетыСКонтрагентамиОбороты.Период КАК Период,
        ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовОборот КАК Оборот,
        ВзаиморасчетыСКонтрагентамиОбороты.Регистратор КАК Регистратор
    ИЗ
        РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(
                &НачДата,
                &Дата {(&Дата)},
                Регистратор,
                ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом = ЛОЖЬ
                    И ДоговорКонтрагента В
                        (ВЫБРАТЬ
                            т.ДоговорКонтрагента
                        ИЗ
                            тДолги КАК т)) КАК ВзаиморасчетыСКонтрагентамиОбороты
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.ДоговорКонтрагента,
        ВЫБОР
            КОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.ДоговорКонтрагента.ВедениеВзаиморасчетов = ЗНАЧЕНИЕ(Перечисление.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом)
                ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Сделка
            ИНАЧЕ ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Сделка
        КОНЕЦ,
        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.ДокументРасчетовСКонтрагентом,
        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Период,
        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.СуммаВзаиморасчетовОборот,
        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Регистратор
    ИЗ
        РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Обороты(
                &НачДата,
                &Дата {(&Дата)},
                Регистратор,
                ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом = ИСТИНА
                    И ДоговорКонтрагента В
                        (ВЫБРАТЬ
                            т.ДоговорКонтрагента
                        ИЗ
                            тДолги КАК т)) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты) КАК т
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ тДолги КАК тДолги
        ПО т.ДоговорКонтрагента = тДолги.ДоговорКонтрагента
            И т.Сделка = тДолги.Сделка
            И т.ДокументРасчетов = тДолги.ДокументРасчетов
ГДЕ
    (тДолги.Долг > 0
                И т.Оборот > 0
            ИЛИ тДолги.Долг < 0
                И т.Оборот < 0)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЗаказыПокупателейОбороты.ЗаказПокупателя,
    ЗаказыПокупателейОбороты.СуммаВзаиморасчетовРасход,
    ЗаказыПокупателейОбороты.Регистратор
ПОМЕСТИТЬ ЗаказыПокупателей
ИЗ
    РегистрНакопления.ЗаказыПокупателей.Обороты(&НачДата, &Дата, Регистратор, ) КАК ЗаказыПокупателейОбороты
;

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

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

ИМЕЮЩИЕ
    Т1.Долг - СУММА(ЕСТЬNULL(Т2.Оборот, 0)) > 0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДоговорыКонтрагентов.Организация КАК Организация,
    ДоговорыКонтрагентов.Владелец КАК Контрагент,
    тИтоги.ДоговорКонтрагента КАК ДоговорКонтрагента,
    тИтоги.Сделка КАК Сделка,
    тИтоги.ДокументРасчетов КАК ДокументРасчетов,
    тИтоги.Глубина КАК Глубина,
    тИтоги.Регистратор КАК Документ,
    ВЫБОР
        КОГДА тИтоги.Знак = 1
            ТОГДА тИтоги.Задолж
        ИНАЧЕ 0
    КОНЕЦ КАК Дебиторка,
    ВЫБОР
        КОГДА тИтоги.Знак = -1
            ТОГДА тИтоги.Задолж
        ИНАЧЕ 0
    КОНЕЦ КАК Кредиторка,
    тИтоги.ДокументОтгрузки,
    тИтоги.СуммаВзаиморасчетовРасход,
    тИтоги.ДатаПогашениеЗадолженности,
    тИтоги.ДнейПросрочки
ИЗ
    тИтоги КАК тИтоги
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
        ПО тИтоги.ДоговорКонтрагента = ДоговорыКонтрагентов.Ссылка
Работает в принципе хорошо, но возникает проблема в том, что до 2019 года взаиморасчеты велись по договору в целом, а с 2019 по заказам.
Если брать 2019 год то показывает все четко, но за период 2018 года сделку и  документ реализации не показывает.....зато сумму показывает.
Может кто подскажет, направит на путь истинный где ошибка может быть в запросе. Спасибо заранее
 
 
   asder117
 
1 - 04.04.19 - 22:02
подниму тему...может кто подскажет
   МихаилМ
 
2 - 05.04.19 - 01:58
ТОГДА ВзаиморасчетыСКонтрагентамиОстатки.Сделка 
            ИНАЧЕ ВзаиморасчетыСКонтрагентамиОстатки.Сделка 

????
   asder117
 
3 - 05.04.19 - 06:53
(2) Эту ошибку заметил исправил.убрал вообще условие выбора.
в самом начале было
ТОГДА ВзаиморасчетыСКонтрагентамиОстатки.Сделка 
            ИНАЧЕ НЕОПРЕДЕЛЕНО
больше идей никаких??? в результате выводит заказы и реализации только 2019 года. а у других сумма есть а доков нет

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.