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

A1sQ.UnloadByQT

Назначение: собрать текст запроса (SELECT‑FROM‑WHERE) и безопасно вернуть ТаблицаЗначений (полная выгрузка результата).
Безопасность: ошибки обрабатываются в Попытка/Исключение; при сбое функция пишет в лог и возвращает пустую таблицу.

Сигнатура

Function UnloadByQT(
    Fields,
    FromWhere,
    Condition = "",
    Value1 = Undefined, Value2 = Undefined, Value3 = Undefined, Value4 = Undefined,
    Value5 = Undefined, Value6 = Undefined, Value7 = Undefined, Value8 = Undefined
) Export

Как работает

// По исходному коду A1sQ
Функция UnloadByQT(Fields, FromWhere, Condition = "", V1..V8) Экспорт
    Попытка
        Query = BuildByQT(Fields, FromWhere, Condition, V1, V2, V3, V4, V5, V6, V7, V8);
        Возврат Query.Выполнить().Выгрузить(); // ТаблицаЗначений
    Исключение
        A1sS.Print("UnloadByQT error: " + ОписаниеОшибки(), "Ошибка", ":");
        Возврат Новый ТаблицаЗначений;         // пустая таблица при ошибке
    КонецПопытки;
КонецФункции
Разница с ExecuteByQT: обе функции собирают текст через BuildByQT и работают в Try/Except, но ExecuteByQT возвращает Выборка или Неопределено, а UnloadByQT — ТаблицаЗначений или пустую таблицу.

Параметры

  • Fields — поля SELECT (строка).
  • FromWhere — источник данных (строка).
  • Condition — условие WHERE (строка, опционально). Пустая строка — без WHERE.
  • Value1..Value8 — позиционные значения для первых уникальных &Парам (см. BuildQ).

Возвращает

ТаблицаЗначений — полностью загруженные данные. При ошибке — пустая таблица.

Примеры

1) Минимальный

ТЗ = A1sQ.UnloadByQT(
    "Ссылка, Наименование",
    "Справочник.Номенклатура",
    "НЕ ПометкаУдаления"
);

2) С параметрами

ТЗ = A1sQ.UnloadByQT(
    "Ссылка, Дата, Номер, Сумма",
    "Документ.РеализацияТоваровУслуг",
    "Дата МЕЖДУ &D1 И &D2 И Организация = &Орг",
    НачалоПериода, КонецПериода, ТекОрганизация
);

3) Комбинация с CombineQT

QT1 = A1sQ.QT("Ссылка, Наименование", "Справочник.Номенклатура");
QT2 = A1sQ.QT("Ссылка, Наименование", "Справочник.Контрагенты");
QT  = A1sQ.CombineQT(QT1, QT2) + " УПОРЯДОЧИТЬ ПО Наименование";
ТЗ  = A1sQ.Unload(QT); // здесь удобнее Unload, т.к. есть готовый текст

Сравнение с соседями

ФункцияЧто делаетКогда выбрать
UnloadByQTQT + BuildByQT + Unload + Try/ExceptНужна ТаблицаЗначений и «тихий» фейл в виде пустой таблицы
ExecuteByQTQT + BuildByQT + Select + Try/ExceptНужен курсор и защита от исключений
UnloadBuildQ + Unload (без Try/Except)Есть готовый текст и вы ловите ошибки сами
ExecuteQBuildQ + Select (без Try/Except)Потоковая обработка и готовый текст
ValueQПервая ячейкаНужен скаляр без лишней перегонки

Нюансы и ограничения

✅ Удобное разделение полей/источника/условий
✅ Безопасно: при ошибке — пустая ТаблицаЗначений и запись в лог
✅ Позиционная подстановка до 8 значений
❗ Полная выгрузка — учтите расход памяти; используйте ПЕРВЫЕ N и фильтры
❗ Порядок Value1..Value8 должен соответствовать порядку появления уникальных &Парам
❗ Нет TempTablesManager в сигнатуре — для ВТ создавайте запрос вручную через CreateQ/CreateQEnhanced
  • BuildByQT — основа, на которой собирается запрос.
  • ExecuteByQT — курсор, безопасный режим.
  • Unload — готовый текст, быстрая выгрузка.
  • FirstRowQ / ValueQ / ExistsQ