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

Важно

Поиск по префиксу (быстро, по индексу)


Функция НайтиНоменклатуруПоПрефиксу(Префикс, Лимит = 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


ТекстQ = "
|ВЫБРАТЬ ПЕРВЫЕ &Лимит
|    Ном.Ссылка       КАК ID,
|    Ном.Наименование КАК Name
|ИЗ Справочник.Номенклатура КАК Ном
|УПОРЯДОЧИТЬ ПО Name
";
Таб = A1sQ.Unload(ТекстQ, 50);
Имена = Таб.ВыгрузитьКолонку("Name"); // быстрое заполнение выпадающего списка
      

Первая подходящая запись (EXISTS/First)

Для проверок «есть ли совпадение» используйте приём «ПЕРВЫЕ 1» и утилиту ExecuteQFirstValue (из Дня 4).


Функция ЕстьТочноеИмя(Имя) Экспорт
    ТекстQ = "
    |ВЫБРАТЬ ПЕРВЫЕ 1
    |    1 КАК One
    |ИЗ Справочник.Номенклатура КАК Ном
    |ГДЕ Ном.Наименование = &Имя
    ";
    Возврат A1sO.NotEmpty(ExecuteQFirstValue(ТекстQ, Имя));
КонецФункции
      

Практика (15–30 минут)

  1. Сделайте поиск по префиксу с лимитом и сортировкой по Name; выведите первые 10 имён.
  2. Соберите масочный поиск (формируйте маску в коде) — сравните скорость с префиксом.
  3. Добавьте фильтр по группе (родителю) к поиску по префиксу.
  4. Реализуйте выбор по списку ссылок (В (&Список)).
  5. Сделайте проверку существования по точному имени через «ПЕРВЫЕ 1».

Чек-лист

Что дальше

День 9: Массовые и пакетные запросы — как эффективно обрабатывать большие объёмы.