Имя: Пароль:
1C
1С v8
Запрос с ЕСТЬNULL, бд Postrges, Деление на 0
0 denya_novichek
 
29.03.21
17:56
Коллеги, база Postgres, ошибка Деление на ноль. Помогите найти, всё что видел обернул в ЕСТЬNULL, всё равно ошибка.


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

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ВЫБОР
        КОГДА ВыручкаИСебестоимостьПродажОбороты.Регистратор = НЕОПРЕДЕЛЕНО
            ТОГДА NULL
        ИНАЧЕ ВыручкаИСебестоимостьПродажОбороты.Регистратор
    КОНЕЦ,
    ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура,
    ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Характеристика,
    ВыручкаИСебестоимостьПродажОбороты.Склад,
    0,
    0,
    0,
    ВыручкаИСебестоимостьПродажОбороты.ПериодСекунда,
    ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот,
    ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот,
    ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот / ЕСТЬNULL(ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот, 1),
    ВыручкаИСебестоимостьПродажОбороты1.КоличествоОборот,
    ВыручкаИСебестоимостьПродажОбороты1.СуммаВыручкиОборот,
    ВыручкаИСебестоимостьПродажОбороты1.СуммаВыручкиОборот / ЕСТЬNULL(ВыручкаИСебестоимостьПродажОбороты1.КоличествоОборот, 1),
    ВыручкаИСебестоимостьПродажОбороты2.КоличествоОборот,
    ВыручкаИСебестоимостьПродажОбороты2.СуммаВыручкиОборот,
    ВыручкаИСебестоимостьПродажОбороты2.СуммаВыручкиОборот / ЕСТЬNULL(ВыручкаИСебестоимостьПродажОбороты2.КоличествоОборот, 1),
    ВыручкаИСебестоимостьПродажОбороты3.КоличествоОборот,
    ВыручкаИСебестоимостьПродажОбороты3.СуммаВыручкиОборот,
    ВыручкаИСебестоимостьПродажОбороты3.СуммаВыручкиОборот / ЕСТЬNULL(ВыручкаИСебестоимостьПродажОбороты3.КоличествоОборот, 1),
    ВЫБОР
        КОГДА РАЗНОСТЬДАТ(&ДатаНач, &ДатаКон, МЕСЯЦ) > 0
            ТОГДА ЕСТЬNULL(ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот, 0) / ЕСТЬNULL(РАЗНОСТЬДАТ(&ДатаНач, &ДатаКон, МЕСЯЦ) * &Расчет, 1)
        ИНАЧЕ 0
    КОНЕЦ,
    ЕСТЬNULL(ВыручкаИСебестоимостьПродажОбороты1.КоличествоОборот, 0) + ЕСТЬNULL(ВыручкаИСебестоимостьПродажОбороты2.КоличествоОборот, 0) + ЕСТЬNULL(ВыручкаИСебестоимостьПродажОбороты3.КоличествоОборот, 0) / 3 * &Расчет,
    0,
    ЦеныНоменклатурыСрезПоследних.Цена,
    0,
    ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура.Артикул
ИЗ
    РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(
            &ДатаНач,
            &ДатаКон,
            Авто,
            НЕ (АналитикаУчетаНоменклатуры.Номенклатура, АналитикаУчетаНоменклатуры.Характеристика, Склад) В
                    (ВЫБРАТЬ
                        ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
                        ТоварыНаСкладахОстатки.Характеристика КАК Характеристика,
                        ТоварыНаСкладахОстатки.Склад КАК Склад
                    ИЗ
                        РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКон, ) КАК ТоварыНаСкладахОстатки)) КАК ВыручкаИСебестоимостьПродажОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(ДОБАВИТЬКДАТЕ(&ДатаНач, МЕСЯЦ, -1), &ДатаКон, Авто, ) КАК ВыручкаИСебестоимостьПродажОбороты1
        ПО ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура = ВыручкаИСебестоимостьПродажОбороты1.АналитикаУчетаНоменклатуры.Номенклатура
            И ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Характеристика = ВыручкаИСебестоимостьПродажОбороты1.АналитикаУчетаНоменклатуры.Характеристика
            И ВыручкаИСебестоимостьПродажОбороты.Склад = ВыручкаИСебестоимостьПродажОбороты1.Склад
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(ДОБАВИТЬКДАТЕ(&ДатаНач, МЕСЯЦ, -2), ДОБАВИТЬКДАТЕ(&ДатаКон, МЕСЯЦ, -1), Авто, ) КАК ВыручкаИСебестоимостьПродажОбороты2
        ПО ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура = ВыручкаИСебестоимостьПродажОбороты2.АналитикаУчетаНоменклатуры.Номенклатура
            И ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Характеристика = ВыручкаИСебестоимостьПродажОбороты2.АналитикаУчетаНоменклатуры.Характеристика
            И ВыручкаИСебестоимостьПродажОбороты.Склад = ВыручкаИСебестоимостьПродажОбороты2.Склад
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(ДОБАВИТЬКДАТЕ(&ДатаНач, МЕСЯЦ, -3), ДОБАВИТЬКДАТЕ(&ДатаКон, МЕСЯЦ, -2), Авто, ) КАК ВыручкаИСебестоимостьПродажОбороты3
        ПО ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура = ВыручкаИСебестоимостьПродажОбороты3.АналитикаУчетаНоменклатуры.Номенклатура
            И ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Характеристика = ВыручкаИСебестоимостьПродажОбороты3.АналитикаУчетаНоменклатуры.Характеристика
            И ВыручкаИСебестоимостьПродажОбороты.Склад = ВыручкаИСебестоимостьПродажОбороты3.Склад
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних({(&ДатаКон)}, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
        ПО ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
1 Вафель
 
29.03.21
17:59
количество оборот может равняться 0
2 conscious
 
29.03.21
18:01
В данных может быть не NULL, а 0.

Вот это вот вообще для чего: ЕСТЬNULL(РАЗНОСТЬДАТ(&ДатаНач, &ДатаКон, МЕСЯЦ) * &Расчет, 1)? Для чего тут проверка на ЕСТЬNULL?
3 Fragster
 
гуру
29.03.21
18:06
нужно больше естьNULL
4 denya_novichek
 
29.03.21
18:10
(1) Огромное спасибо!
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший