Как получить общий остаток по счету 62 для группы контрагентов в запросе 1С?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При разработке отчетов или встроенных обработок в 1С часто возникает задача получить взаиморасчеты по счету 62 «Расчеты с покупателями и заказчиками» не по одному конкретному контрагенту, а суммарно по всей группе (папке) справочника. В этой статье мы разберем, как правильно составить текст запроса к виртуальной таблице остатков регистра бухгалтерии, как избавиться от детализации по отдельным элементам и как верно обработать результат в коде 1С.

Синтаксис отбора по иерархии в виртуальных таблицах

Проанализируем типичную ошибку при попытке задать иерархический отбор. Начинающие разработчики иногда пишут условие вида Субконто1 = Контрагент В ИЕРАРХИИ (&ГрупКонтр), что приводит к синтаксической ошибке при компиляции запроса.

Для корректного отбора всех элементов, входящих в группу (включая вложенные подгруппы), в параметрах виртуальной таблицы РегистрБухгалтерии.Хозрасчетный.Остатки используется оператор В ИЕРАРХИИ непосредственно после поля субконто.

Рассмотрим пример запроса, который выбирает остатки с детализацией по каждому контрагенту из папки:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
    |	ХозрасчетныйОстатки.СуммаОстаток КАК СуммаОстаток
    |ИЗ
    |	РегистрБухгалтерии.Хозрасчетный.Остатки(
    |		&Период,
    |		Счет В ИЕРАРХИИ (&Счет),
    |		,
    |		Субконто1 В ИЕРАРХИИ (&ГрупКонтр)
    |	) КАК ХозрасчетныйОстатки";

Как получить одну общую сумму по всей группе контрагентов

Если цель задачи — получить единый итоговый остаток долга по всей группе без разбивки по контрагентам, из секции ВЫБРАТЬ необходимо полностью исключить поле Субконто1.

Разберем по шагам, как это работает: виртуальная таблица регистра бухгалтерии автоматически группирует итоги по тем измерениям и субконто, которые указаны в предложении ВЫБРАТЬ. Если указан только ресурс СуммаОстаток, система вернет ровно одну строку с суммарным остатком по всем контрагентам, удовлетворяющим условию отбора.

Текст запроса для получения свернутой суммы выглядит следующей формой:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ХозрасчетныйОстатки.СуммаОстаток КАК СуммаОстаток
    |ИЗ
    |	РегистрБухгалтерии.Хозрасчетный.Остатки(
    |		&Период,
    |		Счет В ИЕРАРХИИ (&Счет),
    |		,
    |		Субконто1 В ИЕРАРХИИ (&ГрупКонтр)
    |	) КАК ХозрасчетныйОстатки";

Запрос.УстановитьПараметр("Период", НачДата);
Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.РасчетыСПокупателямиИЗаказчиками);
Запрос.УстановитьПараметр("ГрупКонтр", ГруппаПокупателей);

Правильная обработка результата запроса в коде

Выясним причину, почему при корректном запросе разработчики иногда получают незаполненные данные. Распространенная ошибка заключается в том, что после вызова метода Запрос.Выполнить().Выбрать() сразу пытаются обратиться к полям результата без перехода на первую строку.

Объект ВыборкаИзРезультатаЗапроса требует позиционирования на записи с помощью метода Следующий(), даже если запрос возвращает всего одну итоговую строку.

Посмотрим на пример правильного получения итоговой суммы в коде:


Результат = Запрос.Выполнить();

Если НЕ Результат.Пустой() Тогда
    Записи = Результат.Выбрать();
    // Переходим к первой (и единственной) строке выборки
    Если Записи.Следующий() Тогда
        ОбщийОстаток = Записи.СуммаОстаток;
        Сообщить("Остаток долга по группе на дату " + Формат(НачДата, "ДФ=dd.MM.yyyy") + ": " + ОбщийОстаток + " руб.");
    КонецЕсли;
Иначе
    Сообщить("Остатки по выбранной группе контрагентов отсутствуют.");
КонецЕсли;

Особенности работы со счетом 62 и иерархическими отборами

При работе с остатками по счету 62 рекомендуем учитывать следующие практические нюансы:

  1. Учет активно-пассивных субсчетов: Счет 62 включает как дебиторскую задолженность (субсчет 62.01), так и авансы полученные (субсчет 62.02). Поле СуммаОстаток возвращает свернутое сальдо. Если вам требуется отдельно дебиторская задолженность и полученные авансы, вместо СуммаОстаток следует выбирать поля СуммаОстатокДт и СуммаОстатокКт.
  2. Проверка порядка субконто: В запросе выше используется обращение к Субконто1. Обращение работает по порядковому номеру субконто на счете. Для повышения надежности рекомендуется явно передавать вид субконто в третий параметр виртуальной таблицы: ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты.
← На главную