Важно
- QT — это короткие текстовые шаблоны запроса, которые вы
подставляете в
Unload/ExecuteQ. - Выполнение — всё то же: позиционные параметры (до 8) в порядке
появления
&Парамв тексте. - Мы не создаём дополнительных обёрток выполнения — только возвращаем текст и
вызываем
Unload/ExecuteQ.
Задачи дня
- Собрать набор QT-шаблонов: TopN, Поиск по маске, Диапазон дат, COUNT, EXISTS.
- Научиться использовать их с
UnloadиExecuteQ. - Свести шаблонный код к минимуму (однострочные вызовы).
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 минут)
- Сделайте
QT_TopNНоменклатура()и получите массив имён черезВыгрузитьКолонку("Name"). - Соберите
QT_НомПоМаске()и проверьте работу позиционных параметров(&Лимит, &Маска). - Реализуйте
QT_РеализацииЗаПериод()и посчитайте сумму за сегодня. - Добавьте
QT_CountНоменклатураНеГруппы()и выведите число позиций (не группы). - Сделайте
QT_Существует...и проверьте существование по точному имени.
Чек-лист
- □ Понимаю идею QT: возвращаем текст запроса, выполняем через
Unload/ExecuteQ. - □ Собрал 3–5 шаблонов (TopN, Маска, Период, COUNT, EXISTS).
- □ Везде соблюдён порядок позиционных параметров.
Что дальше
День 7: проверка и оптимизация — как быстро выявлять проблемы и упрощать запросы.