При переносе остатков или формировании проводок по взаиморасчетам разработчики часто сталкиваются с ситуацией, когда по данным оборотного сальдо контрагент и договор полностью закрыты, однако запрос к виртуальной таблице остатков по трем субконто упорно возвращает строки с суммами. Проанализируем, почему это происходит и как правильно составить запрос для получения корректного кредитового сальдо.
Разберем типичные ошибки, приводящие к неверному результату выборки:
76.09 или 60.01) являются активно-пассивными. В платформе 1С поля СуммаОстатокДт и СуммаОстатокКт в виртуальной таблице остатков всегда принимают неотрицательные значения ($\ge 0$). Условие СуммаОстаток < 0 или СуммаОстатокКт < 0 является ошибочным. Для получения кредитового сальдо необходимо использовать поле СуммаОстатокКт и условие СуммаОстатокКт > 0.ОперацияБух, в котором в третьем субконто по дебету был выбран сам документ операции, а по кредиту числится исходное ПоступлениеНаРасчетныйСчет, то на уровне двух субконто (Контрагент и Договор) сальдо будет нулевым. Однако в разрезе трех субконто на счете одновременно повиснут дебетовый и кредитовый остатки одинаковой суммы.Если нам необходимо перенести только реальный кредитовый остаток и при этом сохранить ссылку на исходный документ расчетов, свяжем свернутые остатки по договору с развернутыми остатками по документам. Рассмотрим текст запроса:
ВЫБРАТЬ
ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
ХозрасчетныйОстатки.Субконто2 КАК Договор,
ХозрасчетныйОстатки.СуммаОстатокКт КАК СуммаИтого
ПОМЕСТИТЬ ВТ_СвернутыеОстатки
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(
&Период,
Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПрочиеРасчетыСРазнымиДебиторамиИКредиторами),
&МассивДвухСубконто,
) КАК ХозрасчетныйОстатки
ГДЕ
ХозрасчетныйОстатки.СуммаОстатокКт > 0
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
ХозрасчетныйОстатки.Субконто2 КАК Договор,
ХозрасчетныйОстатки.Субконто3 КАК ДокументРасчетов,
ХозрасчетныйОстатки.СуммаОстатокКт КАК СуммаОстатокКт
ПОМЕСТИТЬ ВТ_РазвернутыеОстатки
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(
&Период,
Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПрочиеРасчетыСРазнымиДебиторамиИКредиторами),
,
) КАК ХозрасчетныйОстатки
ГДЕ
ХозрасчетныйОстатки.СуммаОстатокКт > 0
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Развернутые.Контрагент КАК Контрагент,
Развернутые.Договор КАК Договор,
Развернутые.ДокументРасчетов КАК ДокументРасчетов,
Развернутые.СуммаОстатокКт КАК СуммаОстатокКт
ИЗ
ВТ_РазвернутыеОстатки КАК Развернутые
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_СвернутыеОстатки КАК Свернутые
ПО Развернутые.Контрагент = Свернутые.Контрагент
И Развернутые.Договор = Свернутые.Договор
Разберем параметры виртуальной таблицы в первой части запроса. В качестве третьего параметра &МассивДвухСубконто в коде 1С передается массив видов субконто:
МассивСубконто = Новый Массив;
МассивСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты);
МассивСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры);
Запрос.УстановитьПараметр("МассивДвухСубконто", МассивСубконто);
Запрос.УстановитьПараметр("Период", ГраницаПериода);
Важный момент: передача ограниченного списка видов субконто указывает СУБД рассчитывать итоги строго по первым двум разрезам аналитики, исключая искажение остатков по расчетным документам.
Если в базе наблюдается сильный пересорт по субконто3, программный перенос остатков может перенести развернутые суммы, которые превышают фактический долг. Для устранения проблемы на уровне учета разберем штатные шаги:
Зачет авансов или Прочие корректировки, нажмем кнопку автоматического заполнения по остаткам. Механизм 1С автоматически подберет встречные остатки по Дт и Кт одного договора и сформирует проводки для закрытия «хвостов».ОперацияБух, в дебетовой строке в качестве субконто3 необходимо выбирать не саму операцию, а первоначальный расчетный документ, по которому образовался кредитовый долг.Если восстановить исторические документы расчетов невозможно, а бухгалтерия ведет учет по договору в целом, можно выполнить перенос остатков без детализации до расчетных документов:
СуммаОстатокКт > 0.