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

Проблема с запросом

Проблема с запросом
Я
   asder117
 
30.09.20 - 17:08
Допиливаю огроменный отчет по дебиторской задолженности
Есть кусок запроса
ВЫБРАТЬ
    ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента,
    ВзаиморасчетыСКонтрагентамиОбороты.Сделка КАК Сделка,
    ВзаиморасчетыСКонтрагентамиОбороты.Регистратор,
    ВзаиморасчетыСКонтрагентамиОбороты.Организация,
    ВзаиморасчетыСКонтрагентамиОбороты.Контрагент КАК Контрагент,
    ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовОборот КАК СуммаВзаиморасчетовОборот,
    ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовПриход КАК СуммаВзаиморасчетовПриход,
    ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовРасход КАК СуммаВзаиморасчетовРасход,
    ВзаиморасчетыСКонтрагентамиОбороты.СуммаУпрОборот КАК СуммаУпрОборот,
    ВзаиморасчетыСКонтрагентамиОбороты.СуммаУпрПриход КАК СуммаУпрПриход,
    ВзаиморасчетыСКонтрагентамиОбороты.СуммаУпрРасход КАК СуммаУпрРасход,
    ВЫБОР
        КОГДА РАЗНОСТЬДАТ(ВЫБОР
                        КОГДА ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.ДатаПогашениеЗадолженности = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                            ТОГДА ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.Дата
                        ИНАЧЕ ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.ДатаПогашениеЗадолженности
                    КОНЕЦ, &КонецПериода, ДЕНЬ) > 14
                И РАЗНОСТЬДАТ(ВЫБОР
                        КОГДА ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.ДатаПогашениеЗадолженности = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                            ТОГДА ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.Дата
                        ИНАЧЕ ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.ДатаПогашениеЗадолженности
                    КОНЕЦ, &КонецПериода, ДЕНЬ) <= 30
                И ВЫБОР
                    КОГДА РАЗНОСТЬДАТ(ВЫБОР
                                КОГДА ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.ДатаПогашениеЗадолженности = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                                    ТОГДА ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.Дата
                                ИНАЧЕ ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.ДатаПогашениеЗадолженности
                            КОНЕЦ, &КонецПериода, ДЕНЬ) > 0
                        ТОГДА ИСТИНА
                    ИНАЧЕ ЛОЖЬ
                КОНЕЦ = ИСТИНА
            ТОГДА ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовПриход - ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовРасход
        ИНАЧЕ 0
    КОНЕЦ КАК От60До70Дубль2
ИЗ
    РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(, &КонецПериода, Регистратор, ) КАК ВзаиморасчетыСКонтрагентамиОбороты
ГДЕ
    ВзаиморасчетыСКонтрагентамиОбороты.Контрагент = &Контрагент
    И ВзаиморасчетыСКонтрагентамиОбороты.Сделка = &Сделка
ИТОГИ
    СУММА(СуммаВзаиморасчетовОборот),
    СУММА(СуммаВзаиморасчетовПриход),
    СУММА(СуммаВзаиморасчетовРасход),
    СУММА(СуммаУпрОборот),
    СУММА(СуммаУпрПриход),
    СУММА(СуммаУпрРасход),
    СУММА(От60До70Дубль2)
ПО
    Контрагент,
    Сделка
Сразу оговорюсь это кусок большого запроса, который я выдернул в консоль.
В Итогах Эта конструкция не отрабатывает "ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовПриход - ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовРасход"
Если убрать итоги то выходят 2 строки в одной платежка как приход на 150 700 в другой реализация как расход на 31500
В итоге в поле От60До70Дубль2 он тянет 31 500 а должен тянуть 31500-150700. В платежке это поле должно быть пусто по реализации стоит 31 500 Это правильно так.как реализация приход не делает Что не так в запросе может кто подскажет. Спасибо
   Жан Пердежон
 
1 - 30.09.20 - 17:18
у тебя в поле От60До70Дубль2 выбор и куча условий - с ними разберись
   asder117
 
2 - 30.09.20 - 17:24
(1) вот и не могу понять что не так
   palpetrovich
 
3 - 30.09.20 - 17:27
проверь за 2 раза, не меняя параметров
так
 ТОГДА ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовПриход 
и так 
 ТОГДА ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовРасход
   Жан Пердежон
 
4 - 30.09.20 - 17:27
выведи все значения все значения в отдельные колонки и увидишь
как вариант - у какого-то регистратора нет поля "ДатаПогашениеЗадолженности "
   asder117
 
5 - 30.09.20 - 17:29
(4) ИЛИ ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.ДатаПогашениеЗадолженности ЕСТЬ NULL и проверяет это
   asder117
 
6 - 30.09.20 - 17:31
(3) В первом случае показал 31 500 во втором 0
   Жан Пердежон
 
7 - 30.09.20 - 17:32
(5) в (0) этого нет
   palpetrovich
 
8 - 30.09.20 - 17:35
(6)  ну дык, все верно показывает, ищи где NULL  получился
   asder117
 
9 - 30.09.20 - 17:36
(5) ВЫБОР
                        КОГДА ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.ДатаПогашениеЗадолженности = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                        ИЛИ ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.ДатаПогашениеЗадолженности ЕСТЬ NULL
                    //И ВзаиморасчетыСКонтрагентамиОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг


                            ТОГДА ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.Дата
                        ИНАЧЕ ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.ДатаПогашениеЗадолженности
                    КОНЕЦ КАК ДатаПОгашения,
Эта конструкция проверяет если пусто или null подставляет значение даты документа
   asder117
 
10 - 30.09.20 - 17:37
(8) NULL нет а 0 есть
   Жан Пердежон
 
11 - 30.09.20 - 17:40
(9) и где это в запросе из (0)?
   asder117
 
12 - 30.09.20 - 17:42
(11) Я это уже поправил....но проблему не решил этим
   Жан Пердежон
 
13 - 30.09.20 - 17:48
ну так выведи эти четыре даты и посмотри что к чему
   asder117
 
14 - 30.09.20 - 21:13
(13) Ввел и ничего особого не заметил..в одно месте пустая дата (реализация) в другом NULL в результате оператора выбор проставилась датадокумента
   hhhh
 
15 - 01.10.20 - 00:17
(14) вообще-то так правильно
КОГДА ЕСТЬNULL(ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.ДатаПогашениеЗадолженности, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0))
 = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)

и не нужно никаких ИЛИ
   asder117
 
16 - 01.10.20 - 14:10
(15) И зачем мне пустую дату...в той конструкции я проверяю если дата пустая или поле нет такого то берется дата документа
   Жан Пердежон
 
17 - 01.10.20 - 14:44
(14) то есть ты всё равно предлагаешь нам поугадывать какие у тебя там даты и посчитать за тебя разность дат?
   asder117
 
18 - 01.10.20 - 15:13
(17) У документа поле дата погашения есть но иногда ее не заполняют, у документа платежка ее нет..почему и стоит эта проверка что если пусто или  NULL то брать за первую дату дату документа
   Жан Пердежон
 
19 - 01.10.20 - 15:17
Просто
Выпиши
Даты
   asder117
 
20 - 01.10.20 - 15:31
(19) Разобрался вроде спасибо..все взлетело..в поле последнем не то тянулось..Удачи всем

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