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

A1sQ.FirstRow

Назначение: «продвинуть» выборку на первую запись и вернуть её, если запись существует.
В одном вызове: вместо стандартного Если Sel.Следующий() Тогда ....

Сигнатура

Function FirstRow(Selection) Export

Как работает (по исходному коду)

Если Selection.Следующий() Тогда
    Возврат Selection; // позиционирована на первую запись
КонецЕсли;
Возврат Неопределено;
Что возвращается: та же самая Selection, но уже позиционированная на первую строку. Сразу можно обращаться к полям: Selection.Поле.

Параметры

  • Selection — ВыборкаИзРезультатаЗапроса, полученная, например, как Query.Execute().Select() или через ExecuteQ.

Возвращает

Selection — если первая запись существует (уже на ней).
Неопределено — если записей нет.

Примеры

1) Короткий паттерн «возьми первую»

Sel = A1sQ.ExecuteQ("ВЫБРАТЬ Ссылка, Наименование ИЗ Справочник.Номенклатура");
Row = A1sQ.FirstRow(Sel);
Если Row <> Неопределено Тогда
    Сообщить("Первая номенклатура: " + Row.Наименование);
Иначе
    Сообщить("Справочник пуст");
КонецЕсли;

2) В связке с параметрами

Sel = A1sQ.ExecuteQ("ВЫБРАТЬ Ссылка, Наименование ИЗ Справочник.Пользователи ГДЕ Ссылка = &User", ТекущийПользователь());
If A1sQ.FirstRow(Sel) <> Неопределено Then
    // Sel уже позиционирован: можно сразу читать поля
    Имя = Sel.Наименование;
EndIf;

3) Безопасная обёртка для пользовательского запроса

Q = A1sQ.CreateQSafe(QT);
Если Q = Неопределено Тогда Возврат; КонецЕсли;
Row = A1sQ.FirstRow(Q.Выполнить().Выбрать());
Если Row = Неопределено Тогда Возврат; КонецЕсли;
// Работаем с первой строкой...

Сравнение

ФункцияЧто делаетКогда использовать
FirstRowДвигает готовую выборку на первую записьУ вас уже есть Selection
FirstRowQВыполняет запрос и возвращает позиционированную выборкуЕсть только текст запроса и параметры
ValueQВозвращает единственное значение [0,0]Нужно одно поле из первой строки
ExistsQПроверяет наличие строк (SELECT TOP 1)Нужен быстрый boolean‑ответ

Нюансы и ограничения

✅ Упрощает шаблонный код проверки первой записи
✅ Возвращает ту же выборку — без копий/выгрузки
❗ Не выполняет проверок типа и Неопределено — передавайте валидную Selection
❗ Повторный вызов .Следующий() после FirstRow переместит курсор ко второй записи
❗ Это не «ленивая» загрузка: если нужна таблица в память — используйте Unload
  • FirstRowQ — сразу выполняет запрос и даёт первую строку.
  • ExecuteQ — получить выборку из текста.
  • ValueQ — одно значение из [0,0].
  • ExistsQ — проверка существования строк.
  • Unload — выгрузка всего результата в ТаблицаЗначений.