A1sCode библиотека 1С

A1sQ.IsNotEmptyResult

Назначение: выполнить запрос и ответить True/False, есть ли хотя бы одна строка в результате.
Безопасно: ошибки перехватываются — при исключении возвращается Ложь и пишется в лог через 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 должен соответствовать порядку первых уникальных &Парам
  • ExistsQ — оптимизированная проверка существования.
  • ExecuteQ — получить курсор и обработать данные.
  • ValueQ / FirstRowQ — быстрый скаляр/первая строка.