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

#std787

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

1. При вычислении количества записей на языке запросов следует всегда использовать функцию КОЛИЧЕСТВО, а не СУММА. В противном случае, при количестве записей 10 млн. и более произойдет переполнение, что связано с разрядностью числа по умолчанию (7 разрядов), используемого в СУБД платформой 1С:Предприятие.

Правильно:

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

Неправильно:

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

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

Правильно:

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

Неправильно:

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

См. также