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

Важно

Задачи дня

Базовый пример


ТекстQ = "ВЫБРАТЬ 1 КАК One";
Таб = A1sQ.Unload(ТекстQ);
Сообщить("Строк: " + Таб.Количество()); // 1
      

С параметрами (позиционно)

Лимит строк


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

Для каждого Стр Из Таб Цикл
    Сообщить(Стр.ID + ": " + Стр.Name);
КонецЦикла;
      

Диапазон дат


ТекстQ = "
|ВЫБРАТЬ
|    Док.Ссылка         КАК ID,
|    Док.Дата           КАК Dt,
|    Док.СуммаДокумента КАК Amount
|ИЗ Документ.РеализацияТоваровУслуг КАК Док
|ГДЕ Док.Дата МЕЖДУ &Начало И &Конец
";
// Порядок: &Начало, затем &Конец
Нач = НачалоДня(ТекущаяДата());
Кон = КонецДня(ТекущаяДата());
Таб = A1sQ.Unload(ТекстQ, Нач, Кон);

Если Таб.Количество() = 0 Тогда
    A1sLog.Info("Day3", "Нет документов за сегодня");
КонецЕсли;
      

Несколько параметров (3+)


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

Проверка колонок и пустых результатов


Таб = A1sQ.Unload("ВЫБРАТЬ 1 КАК One");
Если Таб.Колонки.Найти("One") = Неопределено Тогда
    A1sLog.Warn("Day3", "Колонка One не найдена");
КонецЕсли;

Если Таб.Количество() = 0 Тогда
    // Пустая таблица — допустимый сценарий
    A1sLog.Info("Day3", "Пустой результат");
КонецЕсли;
      

Микро-утилиты

Список имён (без цикла: ВыгрузитьКолонку)


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

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

    Рез = Новый Массив;
    Для каждого Стр Из Таб Цикл
        Рез.Добавить(Стр.Name);
    КонецЦикла;
    Возврат Рез;
КонецФункции
        

Карта ID → Name (почти без циклов)


Функция КартаIDкИмени(Лимит = 50) Экспорт
    ТекстQ = "
    |ВЫБРАТЬ ПЕРВЫЕ &Лимит
    |    Ном.Ссылка       КАК ID
    |   ,Ном.Наименование КАК Name
    |ИЗ Справочник.Номенклатура КАК Ном
    ";
    Таб = A1sQ.Unload(ТекстQ, Лимит);

    IDs   = Таб.ВыгрузитьКолонку("ID");
    Names = Таб.ВыгрузитьКолонку("Name");

    Карта = Новый Соответствие;
    Для Номер = 0 По IDs.Количество()-1 Цикл
        Карта.Вставить(IDs[Номер], Names[Номер]);
    КонецЦикла;
    Возврат Карта;
КонецФункции
      

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

  1. Соберите текстовый запрос с параметром &Лимит. Передайте число вторым аргументом в Unload.
  2. Сделайте запрос по диапазону дат (&Начало, &Конец) и передайте даты позиционно.
  3. Добавьте 3-й параметр (&Маска или флаг) и проверьте порядок.
  4. Сформируйте массив имён через ВыгрузитьКолонку и карту ID → Name.

Чек-лист

Что дальше

День 4: ExecuteQ — выполнение запросов и обработка результата.

Параметры-конструкторы (BuildQ, QT) — Дни 5–6.