A1sQ.IsNotEmptyResult
Назначение: выполнить запрос и ответить True/False, есть ли хотя бы одна строка в результате.
Безопасно: ошибки перехватываются — при исключении возвращается Ложь и пишется в лог через A1sS.Print.
Безопасно: ошибки перехватываются — при исключении возвращается Ложь и пишется в лог через A1sS.Print.
Сигнатура
Function IsNotEmptyResult(
QueryText,
Value1 = Undefined, Value2 = Undefined, Value3 = Undefined, Value4 = Undefined,
Value5 = Undefined, Value6 = Undefined, Value7 = Undefined, Value8 = Undefined
) Export
Как работает
// По исходному коду A1sQ
Функция IsNotEmptyResult(Текст, V1..V8) Экспорт
Попытка
S = ExecuteQ(Текст, V1, V2, V3, V4, V5, V6, V7, V8); // курсор
Возврат S.Следующий(); // True, если есть хотя бы одна строка
Исключение
A1sS.Print("IsNotEmptyResult: ошибка выполнения запроса: " + ОписаниеОшибки());
Возврат Ложь;
КонецПопытки;
КонецФункции
Про производительность: IsNotEmptyResult не модифицирует текст запроса. Если цель — только проверить существование строк в больших наборах, используйте ExistsQ, чтобы автоматически добавить ПЕРВЫЕ 1 и избежать избыточной выборки.
Параметры
- QueryText — текст запроса 1С.
- Value1..Value8 — значения для первых уникальных параметров (позиционно, как в BuildQ).
Возвращает
Булево — Истина, если в результате есть хотя бы одна строка; Ложь — если строк нет или возникла ошибка.
Примеры
1) Есть ли живые элементы номенклатуры
Если A1sQ.IsNotEmptyResult("
|ВЫБРАТЬ Ссылка
|ИЗ Справочник.Номенклатура
|ГДЕ НЕ ПометкаУдаления") Тогда
Сообщить("В базе есть активные товары");
Иначе
Сообщить("Активных товаров не найдено");
КонецЕсли;
2) С параметрами периода
ЕстьПродажи = A1sQ.IsNotEmptyResult("
|ВЫБРАТЬ Ссылка
|ИЗ Документ.РеализацияТоваровУслуг
|ГДЕ Дата МЕЖДУ &D1 И &D2", НачалоПериода, КонецПериода);
3) Рекомендуемый вариант для больших таблиц — ExistsQ
// ExistsQ добавит "ПЕРВЫЕ 1" автоматически
ЕстьПоставки = A1sQ.ExistsQ("
|ВЫБРАТЬ Ссылка
|ИЗ Документ.ПоступлениеТоваровУслуг
|ГДЕ Организация = &Орг", ТекОрганизация);
Сравнение
| Функция | Что делает | Когда выбрать |
|---|---|---|
| IsNotEmptyResult | Выполнить + Следующий() с Try/Except | Нужен Boolean и «тихий» фейл = Ложь |
| ExistsQ | То же, но автоматически добавляет ПЕРВЫЕ 1 | Большие наборы/перфоманс |
| ExecuteQ | Вернуть Выборку | Нужно читать данные, а не только факт наличия |
| ValueQ | Забрать первую ячейку | Нужен скаляр и значение по умолчанию |
| FirstRowQ | Вернуть первую строку (курсор позиционирован) | Нужно сразу работать с полями первой записи |
Нюансы и ограничения
✅ Перехватывает ошибки и возвращает Ложь (без исключений наружу)
✅ Поддерживает позиционную подстановку до 8 значений
❗ Не оптимизирует текст запроса — при больших наборах добавляйте ПЕРВЫЕ 1 вручную или используйте ExistsQ
❗ Нет TempTablesManager — для ВТ создавайте запрос вручную (CreateQ/CreateQEnhanced)
❗ Порядок Value1..Value8 должен соответствовать порядку первых уникальных &Парам