Как получить развернутое сальдо по счету в запросе 1С?

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

В практике разработчика 1С часто возникает задача получить данные, идентичные отчету Оборотно-сальдовая ведомость (ОСВ), программным путем. Одной из самых коварных ловушек здесь является получение развернутого сальдо по активно-пассивным счетам, таким как 69, 70, 71 или 76. Обычный запрос к виртуальной таблице остатков часто возвращает «свернутую» сумму (разницу между дебетом и кредитом), в то время как бухгалтер видит в отчете суммы и в дебете, и в кредите одновременно.

В рамках данной статьи мы подробно разберем, как работает механизм разворота сальдо, проанализируем ошибки начинающих разработчиков и составим правильный запрос, который позволит получить корректные данные в разрезе любой аналитики.

Понимаем теорию: Активно-пассивные счета и развернутое сальдо

Прежде чем приступать к написанию кода, давайте выясним причину возникновения проблемы. Развернутое сальдо — это сумма остатков по всем разрезам аналитики без их предварительного взаимозачета. Рассмотрим классический пример: счет 69.11 «Налоги и взносы». По одному виду платежа у организации может быть переплата (дебетовый остаток), а по другому — задолженность (кредитовый остаток).

Если мы просто сложим эти цифры, мы получим свернутое сальдо. Однако для целей бухгалтерского баланса и отчетности нам нужно видеть обе суммы раздельно. В 1С это реализуется через настройки счета в Плане счетов. Только счета, помеченные как Активно-Пассивные, поддерживают корректное хранение и вывод развернутого остатка по дебету и кредиту одновременно.

Выбор правильной виртуальной таблицы

В системе 1С:Предприятие 8 для получения остатков чаще всего используются две виртуальные таблицы регистра бухгалтерии. Рассмотрим особенности каждой из них в контексте нашей задачи.

1. Виртуальная таблица «Остатки»

Эта таблица по умолчанию возвращает свернутый результат. Если вы просто обратитесь к полям СуммаОстатокДт или СуммаОстатокКт, система схлопнет данные. Чтобы получить подобие развернутого сальдо через эту таблицу, необходимо обязательно:

2. Виртуальная таблица «ОстаткиИОбороты»

Это наиболее мощный инструмент для решения нашей задачи. В ней предусмотрены специальные расчетные поля, которые система вычисляет автоматически:

Важно помнить, что эти поля рассчитываются на лету. Их корректность напрямую зависит от седьмого параметра виртуальной таблицы — «Метод построения развернутого сальдо». Рассмотрим подробнее, как использовать этот механизм.

Разбор практического решения задачи

Проанализируем ситуацию, когда нам нужно получить развернутое сальдо по счету 69.11. Основная ошибка заключается в том, что разработчики забывают про иерархию аналитики и настройки разрезов. Чтобы запрос в консоли выдал тот же результат, что и ОСВ, мы должны четко следовать алгоритму.

Шаг 1: Правильная настройка параметров запроса

При обращении к таблице Хозрасчетный.ОстаткиИОбороты мы должны указать период, счет и, что критически важно, состав субконто. Если мы не укажем виды субконто, по которым нужно разворачивать итоги, поля развернутого остатка могут выдать результат, идентичный обычному остатку.

Шаг 2: Написание программного кода запроса

Рассмотрим пример запроса, который успешно решает проблему получения кредитового развернутого сальдо. Мы будем использовать виртуальную таблицу ОстаткиИОбороты, так как она предоставляет наиболее прозрачный доступ к нужным нам полям.


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

В данном примере обратите внимание на следующие моменты:

  1. Поле СуммаКонечныйРазвернутыйОстатокКт: Мы выбираем именно его, а не стандартный СуммаКонечныйОстатокКт.
  2. Параметр МассивВидовСубконто: Сюда мы должны передать массив, содержащий ссылку на ПланВидовХарактеристик ВидыСубконтоХозрасчетные.ВидыПлатежейВБюджет. Без этого разворота не произойдет.
  3. Конструкция ИТОГИ: Использование ИТОГИ СУММА(...) ПО ОБЩИЕ позволяет получить финальную сумму по всем строкам, что часто требуется для вывода в отчет или сверки с балансом.

Влияние измерений «Организация» и «Подразделение»

Выясним еще одну важную причину, по которой данные в запросе могут не сходиться с ОСВ. В типовых конфигурациях (БП 3.0, ERP) Организация является измерением регистра, а не субконто. Это означает, что если в базе ведется учет по нескольким юрлицам, а в запросе не наложен фильтр по организации, система может выдать «кашу» из остатков.

Аналогичная ситуация с Подразделениями. Если на счете включен учет по подразделениям, то сальдо в ОСВ может быть развернуто не только по контрагентам или налогам, но и по офисам/складам. Если вы видите развернутое сальдо в отчете, убедитесь, что в запросе вы также учитываете это измерение в группировках или параметрах виртуальной таблицы.

Оптимизация производительности

Рассмотрим вопрос ресурсов сервера. Использование полей развернутого остатка в таблице ОстаткиИОбороты более ресурсоемко для СУБД, чем работа с простой таблицей Остатки. Чтобы ваш запрос не «вешал» систему на больших объемах данных, придерживайтесь следующих правил:

Резюме по шагам

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

  1. Проверьте, является ли счет Активно-Пассивным в конфигураторе или плане счетов.
  2. Используйте виртуальную таблицу ОстаткиИОбороты.
  3. Обязательно передайте массив ВидыСубконто в шестой параметр таблицы.
  4. Используйте поля СуммаКонечныйРазвернутыйОстатокДт и Кт.
  5. Не забывайте про измерение Организация — оно должно быть либо в фильтре, либо в разрезе запроса.

Соблюдение этих технических нюансов обеспечит полную идентичность ваших данных с типовыми бухгалтерскими отчетами 1С.

← На главную