При изучении механизмов бухгалтерского учета на платформе 1С и разработке собственных отчетов, таких как оборотно-сальдовая ведомость (ОСВ), начинающие разработчики часто сталкиваются с ситуацией: документы проведены, суммы совпадают, но итоговый отчет выводит непредвиденные обороты или задвоенные остатки. Проанализируем причину такого поведения и подробно разберем, как правильно формировать записи в регистре бухгалтерии и отлаживать построение отчета.
Самая распространенная причина искажения данных в ОСВ при ручном или полуавтоматическом формировании проводок через табличную часть документа (например, документ «Операция») — это банальная опечатка при обходе строк табличной части и заполнении полей набора записей регистра бухгалтерии.
Посмотрим на пример ошибочного кода в модуле объекта документа:
Движения.Хозрасчетный.Очистить();
Для Каждого Стр Из ТабличнаяЧастьПроводки Цикл
Движение = Движения.Хозрасчетный.Добавить();
Движение.Период = Дата;
Движение.СчетДт = Стр.СчетДт;
// Ошибка: вместо Стр.СчетКт записано Стр.СчетДт
Движение.СчетКт = Стр.СчетДт;
Движение.Сумма = Стр.Сумма;
КонецЦикла;
Движения.Хозрасчетный.Записать();
В приведенном фрагменте в оба поля — СчетДт и СчетКт — подставляется значение из колонки СчетДт табличной части. В результате формируется проводка между одним и тем же счетом (например, Дт Расчеты с учредителями — Кт Расчеты с учредителями), а счет кредита (например, Уставный капитал) вообще не получает никаких движений. Это полностью искажает обороты и сальдо в виртуальных таблицах регистра.
Исправленный вариант кода должен выглядеть следующим образом:
Движения.Хозрасчетный.Записывать = Истина;
Для Каждого Стр Из ТабличнаяЧастьПроводки Цикл
Движение = Движения.Хозрасчетный.Добавить();
Движение.Период = Дата;
Движение.СчетДт = Стр.СчетДт;
Движение.СчетКт = Стр.СчетКт; // Корректное обращение к колонке счета кредита
Движение.Сумма = Стр.Сумма;
Движение.Активность = Истина;
КонецЦикла;
Если отчет показывает неожиданные результаты, разберем по шагам алгоритм диагностики:
ОстаткиИОбороты. Сначала обратимся прямым запросом к физической таблице РегистрБухгалтерии.Хозрасчетный, чтобы увидеть реальные значения в колонках СчетДт, СчетКт, Сумма и Активность. Если в колонке СчетКт продублирован счет дебета или поле Активность равно Ложь, ошибка кроется в алгоритме проведения.Активный, дебетовое сальдо будет отображаться некорректно, а шахматка ведомости потеряет баланс.КонецПериода(&КонецПериода, ДЕНЬ) либо через объект Граница с видом ВидГраницы.Включая.РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты следует выбирать развернутые поля: СуммаНачальныйОстатокДт, СуммаНачальныйОстатокКт, СуммаОборотДт, СуммаОборотКт, СуммаКонечныйОстатокДт, СуммаКонечныйОстатокКт. Использование свернутых полей СуммаНачальныйОстаток и СуммаКонечныйОстаток возвращает единое число со знаком, что не соответствует формату бухгалтерской ведомости.Рассмотрим еще один важный аспект: если счет содержит субконто, недостаточно просто назначить счета и сумму. Заполнение аналитики требует корректного обращения к коллекции субконто соответствующей стороны проводки:
// Пример заполнения субконто для дебета и кредита
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Контрагенты] = Стр.Контрагент;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Договоры] = Стр.Договор;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.СтатьиДвиженияДенежныхСредств] = Стр.СтатьяДДС;
Если аналитика не заполнена или передано значение неверного типа, синтетические обороты по счету сойдутся, однако аналитическая оборотно-сальдовая ведомость с разворотом по субконто будет формировать пустые строки в группировках.