Как получить реальный кредитовый остаток по счету расчетов в 1С 8.3 без закрытых сумм

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

При переносе остатков или формировании проводок по взаиморасчетам разработчики часто сталкиваются с ситуацией, когда по данным оборотного сальдо контрагент и договор полностью закрыты, однако запрос к виртуальной таблице остатков по трем субконто упорно возвращает строки с суммами. Проанализируем, почему это происходит и как правильно составить запрос для получения корректного кредитового сальдо.

Выясним причину появления ложных остатков

Разберем типичные ошибки, приводящие к неверному результату выборки:

  1. Некорректное условие отбора по кредитовому сальдо. Счета расчетов (например, 76.09 или 60.01) являются активно-пассивными. В платформе 1С поля СуммаОстатокДт и СуммаОстатокКт в виртуальной таблице остатков всегда принимают неотрицательные значения ($\ge 0$). Условие СуммаОстаток < 0 или СуммаОстатокКт < 0 является ошибочным. Для получения кредитового сальдо необходимо использовать поле СуммаОстатокКт и условие СуммаОстатокКт > 0.
  2. Развернутое сальдо по третьему субконто («Документы расчетов с контрагентом»). Если расчеты закрывались ручным документом ОперацияБух, в котором в третьем субконто по дебету был выбран сам документ операции, а по кредиту числится исходное ПоступлениеНаРасчетныйСчет, то на уровне двух субконто (Контрагент и Договор) сальдо будет нулевым. Однако в разрезе трех субконто на счете одновременно повиснут дебетовый и кредитовый остатки одинаковой суммы.

Способ 1. Получение остатков через временные таблицы и соединение

Если нам необходимо перенести только реальный кредитовый остаток и при этом сохранить ссылку на исходный документ расчетов, свяжем свернутые остатки по договору с развернутыми остатками по документам. Рассмотрим текст запроса:


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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
    ХозрасчетныйОстатки.Субконто2 КАК Договор,
    ХозрасчетныйОстатки.Субконто3 КАК ДокументРасчетов,
    ХозрасчетныйОстатки.СуммаОстатокКт КАК СуммаОстатокКт
ПОМЕСТИТЬ ВТ_РазвернутыеОстатки
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(
        &Период,
        Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПрочиеРасчетыСРазнымиДебиторамиИКредиторами),
        ,
        ) КАК ХозрасчетныйОстатки
ГДЕ
    ХозрасчетныйОстатки.СуммаОстатокКт > 0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Развернутые.Контрагент КАК Контрагент,
    Развернутые.Договор КАК Договор,
    Развернутые.ДокументРасчетов КАК ДокументРасчетов,
    Развернутые.СуммаОстатокКт КАК СуммаОстатокКт
ИЗ
    ВТ_РазвернутыеОстатки КАК Развернутые
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_СвернутыеОстатки КАК Свернутые
        ПО Развернутые.Контрагент = Свернутые.Контрагент
            И Развернутые.Договор = Свернутые.Договор

Разберем параметры виртуальной таблицы в первой части запроса. В качестве третьего параметра &МассивДвухСубконто в коде 1С передается массив видов субконто:


МассивСубконто = Новый Массив;
МассивСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты);
МассивСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры);

Запрос.УстановитьПараметр("МассивДвухСубконто", МассивСубконто);
Запрос.УстановитьПараметр("Период", ГраницаПериода);

Важный момент: передача ограниченного списка видов субконто указывает СУБД рассчитывать итоги строго по первым двум разрезам аналитики, исключая искажение остатков по расчетным документам.

Способ 2. Автоматическое исправление пересорта в учете перед переносом

Если в базе наблюдается сильный пересорт по субконто3, программный перенос остатков может перенести развернутые суммы, которые превышают фактический долг. Для устранения проблемы на уровне учета разберем штатные шаги:

  1. Использование документа «Корректировка долга». Создадим документ с видом операции Зачет авансов или Прочие корректировки, нажмем кнопку автоматического заполнения по остаткам. Механизм 1С автоматически подберет встречные остатки по Дт и Кт одного договора и сформирует проводки для закрытия «хвостов».
  2. Корректировка ручных операций. Если перенос задолженности выполняется документом ОперацияБух, в дебетовой строке в качестве субконто3 необходимо выбирать не саму операцию, а первоначальный расчетный документ, по которому образовался кредитовый долг.

Способ 3. Сворачивание аналитики при переносе

Если восстановить исторические документы расчетов невозможно, а бухгалтерия ведет учет по договору в целом, можно выполнить перенос остатков без детализации до расчетных документов:

  1. Формируем выборку остатков только по двум субконто (Контрагент, Договор), где СуммаОстатокКт > 0.
  2. При создании проводок переноса в субконто3 указываем документ переноса (или оставляем поле пустым, если конфигурация позволяет), тем самым открывая чистые взаиморасчеты на новом счете.
← На главную