A1sQ.FirstRow
Назначение: «продвинуть» выборку на первую запись и вернуть её, если запись существует.
В одном вызове: вместо стандартного Если Sel.Следующий() Тогда ....
В одном вызове: вместо стандартного Если 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