A1sQ.CountQ
Назначение: получить число строк «в одно действие».
Два сценария:
Два сценария:
- передали имя таблицы + опциональное условие → функция сама соберёт ВЫБРАТЬ КОЛИЧЕСТВО(*);
- передали текст запроса (начинается с «ВЫБРАТЬ») → выполнит его как есть и возьмёт значение из [0,0].
Сигнатура
Function CountQ(QueryText,
Condition = "",
Value1 = Undefined, Value2 = Undefined, Value3 = Undefined, Value4 = Undefined,
Value5 = Undefined, Value6 = Undefined, Value7 = Undefined, Value8 = Undefined) Export
Как работает (по исходнику)
FinalQueryText = QueryText;
// Если это не SELECT, а простое имя таблицы — соберём запрос через QT()
If StrFind(Upper(QueryText), "ВЫБРАТЬ") = 0 Then
FinalQueryText = QT("КОЛИЧЕСТВО(*)", QueryText, Condition);
EndIf;
// Выполним и вернём первую ячейку, по умолчанию 0
Return ValueQ(FinalQueryText, 0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8);
QT() — это хелпер, который формирует строку запроса вида "ВЫБРАТЬ <Что> ИЗ <Откуда> [ГДЕ <Условие>]". Здесь он используется как QT("КОЛИЧЕСТВО(*)", Таблица, Условие).
Параметры
- QueryText — либо имя таблицы (например, "Справочник.Номенклатура"), либо текст SELECT.
- Condition — строка условия для варианта с именем таблицы (вставляется после ГДЕ как есть).
- Value1..Value8 — значения параметров для запроса (если они используются в тексте).
Возвращает
Число — результат КОЛИЧЕСТВО(*) или значения [0,0] пользовательского SELECT.
При ошибке выполнения/ошибке синтаксиса ValueQ вернёт 0 (и запишет ошибку в лог).
Примеры
1) Считать активные элементы справочника
N = A1sQ.CountQ("Справочник.Номенклатура", "НЕ ПометкаУдаления");
2) С условием по периоду
N = A1sQ.CountQ("Документ.ПоступлениеТоваровУслуг",
"Дата МЕЖДУ &D1 И &D2",
НачалоПериода, КонецПериода);
3) Передать готовый SELECT
N = A1sQ.CountQ("ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ Справочник.Пользователи ГДЕ НЕ Заблокирован");
Нюансы и ограничения
✅ Удобно: имя таблицы → авто‑COUNT(*)
✅ Безопасно: ошибки → 0 (через ValueQ c Try/Except)
❗ При передаче «готового SELECT» ответственность за корректность лежит на вас — функция просто берёт [0,0]
❗ Строка Condition не экранируется — используйте параметры (&Param), а значения передавайте через аргументы Value1..Value8
❗ Если нужно лишь проверить наличие, используйте ExistsQ — быстрее благодаря «ПЕРВЫЕ 1»
Связанные функции
- ValueQ — получить [0,0] с дефолтом при ошибке.
- ExistsQ — проверка существования строк (быстрее для булевой проверки).
- QT — формирование простых SELECT‑ов из частей.
- IsEmptyResult / IsNotEmptyResult — альтернативные проверки результата.