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

Важно

Задачи дня

QT.TopN — «первые N» из справочника


Функция QT_TopNНоменклатура() Экспорт
    Возврат
    "ВЫБРАТЬ ПЕРВЫЕ &Лимит
     |    Ном.Ссылка       КАК ID,
     |    Ном.Наименование КАК Name
     |ИЗ Справочник.Номенклатура КАК Ном
     |УПОРЯДОЧИТЬ ПО Name";
КонецФункции

// Использование:
Таб = A1sQ.Unload(QT_TopNНоменклатура(), 10); // &Лимит = 10
Имена = Таб.ВыгрузитьКолонку("Name");
Сообщить("Всего: " + Таб.Количество() + "; пример: " + ?(Имена.Количество()>0, Имена[0], ""));
      

QT.FindByMask — поиск по маске + лимит


Функция QT_НомПоМаске() Экспорт
    Возврат
    "ВЫБРАТЬ ПЕРВЫЕ &Лимит
     |    Ном.Ссылка       КАК ID,
     |    Ном.Наименование КАК Name
     |ИЗ Справочник.Номенклатура КАК Ном
     |ГДЕ Ном.Наименование ПОДОБНО &Маска
     |УПОРЯДОЧИТЬ ПО Name";
КонецФункции

// Использование (порядок: &Лимит, &Маска):
Таб = A1sQ.Unload(QT_НомПоМаске(), 20, "%кабель%");
Возврат Таб.ВыгрузитьКолонку("Name");
      

QT.Period — выборка документов за период


Функция QT_РеализацииЗаПериод() Экспорт
    Возврат
    "ВЫБРАТЬ
     |    Док.Ссылка         КАК ID,
     |    Док.Дата           КАК Dt,
     |    Док.СуммаДокумента КАК Amount
     |ИЗ Документ.РеализацияТоваровУслуг КАК Док
     |ГДЕ Док.Дата МЕЖДУ &Начало И &Конец
     |УПОРЯДОЧИТЬ ПО Dt";
КонецФункции

// Использование (порядок: &Начало, &Конец):
Нач = НачалоДня(ТекущаяДата());
Кон = КонецДня(ТекущаяДата());
Рез = A1sQ.ExecuteQ(QT_РеализацииЗаПериод(), Нач, Кон);
Вб  = Рез.Выбрать();

Сумма = 0; Cnt = 0;
Пока Вб.Следующий() Цикл
    Сумма = Сумма + Вб.Amount;
    Cnt   = Cnt + 1;
КонецЦикла;
A1sLog.Info("Day6", "Документов: " + Cnt + ", сумма: " + Сумма);
      

QT.Count — посчитать строки без выгрузки


Функция QT_CountНоменклатураНеГруппы() Экспорт
    Возврат
    "ВЫБРАТЬ
     |    COUNT(Ном.Ссылка) КАК Cnt
     |ИЗ Справочник.Номенклатура КАК Ном
     |ГДЕ Ном.ЭтоГруппа = &ТолькоГруппы";
КонецФункции

// Использование (порядок: &ТолькоГруппы):
Рез = A1sQ.ExecuteQ(QT_CountНоменклатураНеГруппы(), Ложь);
Вб  = Рез.Выбрать();
Cnt = 0;
Если Вб.Следующий() Тогда Cnt = Вб.Cnt; КонецЕсли;
A1sLog.Info("Day6", "Позиции (не группы): " + Cnt);
      

QT.Exists — проверить существование записи

Используем приём «вернуть 1 строку/значение». Для получения значения применяем утилиту ExecuteQFirstValue из Дня 4.


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

// Использование (вернёт Истина/Ложь):
Первое = ExecuteQFirstValue(QT_СуществуетНоменклатураПоНаименованию(), "Кабель ПВС");
Есть   = A1sO.NotEmpty(Первое); // 1 → Истина, Неопределено → Ложь
A1sLog.Info("Day6", "Есть точное совпадение: " + A1sS.AsString(Есть));
      

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

  1. Сделайте QT_TopNНоменклатура() и получите массив имён через ВыгрузитьКолонку("Name").
  2. Соберите QT_НомПоМаске() и проверьте работу позиционных параметров (&Лимит, &Маска).
  3. Реализуйте QT_РеализацииЗаПериод() и посчитайте сумму за сегодня.
  4. Добавьте QT_CountНоменклатураНеГруппы() и выведите число позиций (не группы).
  5. Сделайте QT_Существует... и проверьте существование по точному имени.

Чек-лист

Что дальше

День 7: проверка и оптимизация — как быстро выявлять проблемы и упрощать запросы.