Имя: Пароль:
1C
1С v8
Проблема с запросом
0 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 выбор и куча условий - с ними разберись
2 asder117
 
30.09.20
17:24
(1) вот и не могу понять что не так
3 palpetrovich
 
30.09.20
17:27
проверь за 2 раза, не меняя параметров
так
ТОГДА ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовПриход
и так
ТОГДА ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовРасход
4 Жан Пердежон
 
30.09.20
17:27
выведи все значения все значения в отдельные колонки и увидишь
как вариант - у какого-то регистратора нет поля "ДатаПогашениеЗадолженности "
5 asder117
 
30.09.20
17:29
(4) ИЛИ ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.ДатаПогашениеЗадолженности ЕСТЬ NULL и проверяет это
6 asder117
 
30.09.20
17:31
(3) В первом случае показал 31 500 во втором 0
7 Жан Пердежон
 
30.09.20
17:32
(5) в (0) этого нет
8 palpetrovich
 
30.09.20
17:35
(6)  ну дык, все верно показывает, ищи где NULL  получился
9 asder117
 
30.09.20
17:36
(5) ВЫБОР
                        КОГДА ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.ДатаПогашениеЗадолженности = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                        ИЛИ ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.ДатаПогашениеЗадолженности ЕСТЬ NULL
                    //И ВзаиморасчетыСКонтрагентамиОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг

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

КОГДА ЕСТЬNULL(ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.ДатаПогашениеЗадолженности, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0))
= ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)

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