Перейти к содержанию
#std787

Вычисление количества записей в запросах

1.

При вычислении количества записей в запросе всегда используйте функцию КОЛИЧЕСТВО, а не СУММА.

Иначе при количестве записей 10 млн и более возможно переполнение: платформа 1С:Предприятие передает СУБД число по умолчанию с 7 разрядами.

Правильно

КОЛИЧЕСТВО(*)
КОЛИЧЕСТВО(<Поле>)

Неправильно

СУММА(1)
ЕСТЬNULL(СУММА(1), 0)
2.

Если количество нужно вычислять условно и КОЛИЧЕСТВО применить нельзя, расширяйте разрядность числа по умолчанию через ВЫРАЗИТЬ (например, до 17 разрядов).

Правильно

ВЫБРАТЬ
    КОЛИЧЕСТВО(*) КАК Количество,
    СУММА(ВЫБОР
        КОГДА Номенклатура.ЭтоГруппа
            ТОГДА ВЫРАЗИТЬ(1 КАК ЧИСЛО(17, 0))
        ИНАЧЕ 0
    КОНЕЦ) КАК КоличествоГрупп,
    СУММА(ВЫБОР
        КОГДА НЕ Номенклатура.ЭтоГруппа
            ТОГДА ВЫРАЗИТЬ(1 КАК ЧИСЛО(17, 0))
        ИНАЧЕ 0
    КОНЕЦ) КАК КоличествоЭлементов
ИЗ
    Справочник.Номенклатура КАК Номенклатура

Неправильно

ВЫБРАТЬ
    КОЛИЧЕСТВО(*) КАК Количество,
    СУММА(ВЫБОР
        КОГДА Номенклатура.ЭтоГруппа
            ТОГДА 1
        ИНАЧЕ 0
    КОНЕЦ) КАК КоличествоГрупп,
    СУММА(ВЫБОР
        КОГДА НЕ Номенклатура.ЭтоГруппа
            ТОГДА 1
        ИНАЧЕ 0
    КОНЕЦ) КАК КоличествоЭлементов
ИЗ
    Справочник.Номенклатура КАК Номенклатура
См. также
Источники