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

A1sQ.GetBalancesQueryText

Назначение: вернуть готовую строку QueryText для получения остатков по счетам и субконто из регистра бухгалтерии.
Регистратор: по умолчанию используется регистр "Хозрасчетный", но имя можно передать вторым параметром.
Гибкость: в конец текста можно добавить свой фрагмент (например, WHERE/ORDER BY/GROUP BY) через параметр WhereConditionText.

Сигнатура

Function GetBalancesQueryText(WhereConditionText = Неопределено, НазваниеРегистраБухгалтерии = "Хозрасчетный") Export

Как работает (по исходному коду)

// Внутри функции строится текст запроса вида:
ВЫБРАТЬ
    Остатки.Субконто1 КАК Субконто1,
    Остатки.Субконто2 КАК Субконто2,
    Остатки.Субконто3 КАК Субконто3,
    Остатки.Счет     КАК СчетУчета,
    /* ... поля суммы остатков (Дт/Кт), обороты при необходимости ... */
ИЗ
    /* подзапрос, получающий остатки по выбранному регистру
       (НазваниеРегистраБухгалтерии), с фильтром по Организации */
    ( ... ГДЕ Организация = &Организация ... ) КАК Остатки;

// Если WhereConditionText заполнен — он как есть добавляется в конец:
Если ValueIsFilled(WhereConditionText) Тогда
    QueryText = QueryText + " " + WhereConditionText;
КонецЕсли;
Важно: функция не добавляет ключевые слова автоматически. Если вы хотите отфильтровать результат, передавайте строку с нужным ключевым словом, например: "ГДЕ СчетУчета В(&Счета)" или "УПОРЯДОЧИТЬ ПО СчетУчета".

Какие колонки формируются

Точный список зависит от ресурсов регистра и логики внутри подзапроса «Остатки». По фрагменту исходного кода гарантированы как минимум:

  • Субконто1, Субконто2, Субконто3 — измерения субконто.
  • СчетУчета — счёт (из Остатки.Счет).
  • Суммы остатков — по данным регистра (например, Остатки.СуммаОстатокДт, Остатки.СуммаОстатокКт), алиасы могут быть заданы внутри текста.

Если в вашем регистре есть ресурсы «Обороты», в подзапрос также могут попадать колонки оборотов — смотрите сгенерированный текст.

Параметры и требования

  • WhereConditionText — дополнительный фрагмент запроса, добавляемый в самый конец. Допускаются любые корректные конструкции языка запросов (например, ГДЕ, СГРУППИРОВАТЬ ПО, УПОРЯДОЧИТЬ ПО).
  • НазваниеРегистраБухгалтерии — строка с именем регистра бухгалтерии (по умолчанию «Хозрасчетный»).
  • Параметры запроса — внутри подзапроса используется, как минимум, параметр &Организация; его необходимо установить перед выполнением.

Примеры

1) Все остатки по организации

QT = A1sQ.GetBalancesQueryText(); // регистр: "Хозрасчетный"
Q  = A1sQ.CreateQ(QT);
Q.УстановитьПараметр("Организация", ТекОрганизация);
ТЗ = Q.Выполнить().Выгрузить();

2) Остатки только по заданным счетам

Where = "ГДЕ СчетУчета В(&Счета)";
QT    = A1sQ.GetBalancesQueryText(Where);
Q     = A1sQ.CreateQ(QT);
Q.УстановитьПараметр("Организация", ТекОрганизация);
Q.УстановитьПараметр("Счета", СписокСчетов);
ТЗ    = Q.Выполнить().Выгрузить();

3) Фильтр по субконто и сортировка

Where = "ГДЕ Субконто1 = &Контрагент УПОРЯДОЧИТЬ ПО СчетУчета, Субконто1";
QT    = A1sQ.GetBalancesQueryText(Where, "Хозрасчетный");
Q     = A1sQ.CreateQ(QT);
A1sQ.SetQParams(Q, Новый Структура("Организация, Контрагент", ТекОрганизация, ВыбранныйКонтрагент));
ТЗ    = Q.Выполнить().Выгрузить();

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

✅ Удобно — даёт готовую заготовку запроса по остаткам
✅ Гибко — можно дописать собственные WHERE/ORDER BY/GROUP BY
❗ &Организация — обязательный параметр (используется внутри подзапроса)
❗ Функция не валидирует имя регистра и не ловит ошибки внутри Try/Except (исключение игнорируется) — итогом будет строка (в т.ч. пустая при проблемах)
❗ WhereConditionText добавляется «как есть» — пишите ключевые слова сами
❗ Состав колонок зависит от вашего регистра и конфигурации
  • CreateQ / SetQParams — создать запрос и задать параметры.
  • Validate / IsValid — проверить корректность текста перед выполнением.
  • ExecuteQ / Unload — получить выборку или выгрузить таблицу.