Важно
- Unload:
Unload(Текст, П1?, …, П8?), ExecuteQ:ExecuteQ(Текст, П1?, …, П8?). - Параметры передаются позиционно и соответствуют порядку
&Парамв тексте. - Для UX-списков берите минимальные поля +
ПЕРВЫЕ &Лимити корректную сортировку.
Поиск по префиксу (быстро, по индексу)
Функция НайтиНоменклатуруПоПрефиксу(Префикс, Лимит = 20) Экспорт
ТекстQ = "
|ВЫБРАТЬ ПЕРВЫЕ &Лимит
| Ном.Ссылка КАК ID,
| Ном.Наименование КАК Name
|ИЗ Справочник.Номенклатура КАК Ном
|ГДЕ Ном.Наименование НАЧИНАЕТСЯ С &Префикс
|УПОРЯДОЧИТЬ ПО Name
";
Таб = A1sQ.Unload(ТекстQ, Лимит, Префикс); // порядок: &Лимит, &Префикс
Возврат Таб; // для UI можно: Таб.ВыгрузитьКолонку("Name")
КонецФункции
Префикс быстрее масок вида "%текст%", так как чаще позволяет использовать
индекс.
Поиск по маске (фрагмент внутри строки)
Функция НайтиНоменклатуруПоМаске(Фрагмент, Лимит = 20) Экспорт
Маска = "%" + Фрагмент + "%"; // формируем маску на стороне кода
ТекстQ = "
|ВЫБРАТЬ ПЕРВЫЕ &Лимит
| Ном.Ссылка КАК ID,
| Ном.Наименование КАК Name
|ИЗ Справочник.Номенклатура КАК Ном
|ГДЕ Ном.Наименование ПОДОБНО &Маска
|УПОРЯДОЧИТЬ ПО Name
";
Возврат A1sQ.Unload(ТекстQ, Лимит, Маска); // &Лимит, &Маска
КонецФункции
Используйте маску только если префикс недостаточен: маска дороже по производительности.
Фильтр по диапазону дат
Функция РеализацииЗаДень(День, Лимит = 100) Экспорт
Начало = НачалоДня(День);
Конец = КонецДня(День);
ТекстQ = "
|ВЫБРАТЬ ПЕРВЫЕ &Лимит
| Док.Ссылка КАК ID,
| Док.Дата КАК Dt,
| Док.СуммаДокумента КАК Amount
|ИЗ Документ.РеализацияТоваровУслуг КАК Док
|ГДЕ Док.Дата МЕЖДУ &Начало И &Конец
|УПОРЯДОЧИТЬ ПО Dt
";
Возврат A1sQ.Unload(ТекстQ, Лимит, Начало, Конец); // &Лимит, &Начало, &Конец
КонецФункции
Выбор по списку значений (IN)
Функция НомПоСпискуID(СписокID, Лимит = 100) Экспорт
// СписокID — Массив ссылок (или значений), оператор "В (&Список)" в запросе
ТекстQ = "
|ВЫБРАТЬ ПЕРВЫЕ &Лимит
| Ном.Ссылка КАК ID,
| Ном.Наименование КАК Name
|ИЗ Справочник.Номенклатура КАК Ном
|ГДЕ Ном.Ссылка В (&Список)
|УПОРЯДОЧИТЬ ПО Name
";
Возврат A1sQ.Unload(ТекстQ, Лимит, СписокID); // &Лимит, &Список
КонецФункции
Передавайте параметром Массив того же типа, что и поле (ссылки справочника).
Комбинация условий: префикс + категория
Функция НомПоПрефиксуИГруппе(Префикс, Группа, Лимит = 30) Экспорт
ТекстQ = "
|ВЫБРАТЬ ПЕРВЫЕ &Лимит
| Ном.Ссылка КАК ID,
| Ном.Наименование КАК Name
|ИЗ Справочник.Номенклатура КАК Ном
|ГДЕ Ном.Наименование НАЧИНАЕТСЯ С &Префикс
| И Ном.Родитель = &Группа
|УПОРЯДОЧИТЬ ПО Name
";
Возврат A1sQ.Unload(ТекстQ, Лимит, Префикс, Группа); // &Лимит, &Префикс, &Группа
КонецФункции
Минимальный набор полей для UI
- Для списков:
IDиNameпочти всегда достаточно. - Доп. поля подгружайте по клику/выбору (второй запрос), чтобы не тормозить первичный список.
- Сортируйте по отображаемому полю, чтобы пагинация была стабильной.
ТекстQ = "
|ВЫБРАТЬ ПЕРВЫЕ &Лимит
| Ном.Ссылка КАК ID,
| Ном.Наименование КАК Name
|ИЗ Справочник.Номенклатура КАК Ном
|УПОРЯДОЧИТЬ ПО Name
";
Таб = A1sQ.Unload(ТекстQ, 50);
Имена = Таб.ВыгрузитьКолонку("Name"); // быстрое заполнение выпадающего списка
Первая подходящая запись (EXISTS/First)
Для проверок «есть ли совпадение» используйте приём «ПЕРВЫЕ 1» и утилиту ExecuteQFirstValue (из Дня 4).
Функция ЕстьТочноеИмя(Имя) Экспорт
ТекстQ = "
|ВЫБРАТЬ ПЕРВЫЕ 1
| 1 КАК One
|ИЗ Справочник.Номенклатура КАК Ном
|ГДЕ Ном.Наименование = &Имя
";
Возврат A1sO.NotEmpty(ExecuteQFirstValue(ТекстQ, Имя));
КонецФункции
Практика (15–30 минут)
- Сделайте поиск по префиксу с лимитом и сортировкой по
Name; выведите первые 10 имён. - Соберите масочный поиск (формируйте маску в коде) — сравните скорость с префиксом.
- Добавьте фильтр по группе (родителю) к поиску по префиксу.
- Реализуйте выбор по списку ссылок (
В (&Список)). - Сделайте проверку существования по точному имени через «ПЕРВЫЕ 1».
Чек-лист
- □ Использую префикс, когда это возможно (быстро).
- □ Маску — только при необходимости (дороже).
- □ Ограничиваю поля и строки:
ПЕРВЫЕ &Лимит, алиасыID/Name. - □ Соблюдаю порядок позиционных параметров.
- □ Для «есть/нет» — «ПЕРВЫЕ 1» +
ExecuteQFirstValue.
Что дальше
День 9: Массовые и пакетные запросы — как эффективно обрабатывать большие объёмы.