При разработке и настройке документов ввода остатков или первичных документов в нетиповых и самописных конфигурациях разработчики часто сталкиваются с ситуацией, когда проведение документа по забалансовому счету завершается ошибкой. Платформа «1С:Предприятие» выдает сообщение о том, что нельзя сделать проводку между балансовым и забалансовым счетом, даже если в документе визуально заполнена только одна сторона проводки (Дебет или Кредит).
Рассмотрим подробно причины возникновения этой проблемы, проанализируем ограничения платформы при работе с забалансовыми счетами, изучим особенности программного заполнения движений и разберем практические шаги по устранению ошибки.
В регистрах бухгалтерии, поддерживающих корреспонденцию счетов, действуют строгие правила платформы «1С:Предприятие»:
Если при попытке формирования проводки платформа видит, что один из счетов имеет признак Забалансовый = Истина, а второй заполнен или воспринимается системой как балансовый счет, транзакция отменяется с ошибкой.
Разберем частую ошибку в алгоритме обработки таблицы движений. Проанализируем пример кода, в котором для балансовых счетов подставляется вспомогательный счет 00, а для забалансовых счетов счет-корреспондент очищается:
врБР = РегистрыБухгалтерии.РегистрБухгалтерииФилиалы;
врВалюта = Константы.ВалютаДоллар.Получить();
врСчет00 = ПланыСчетов.План1.НайтиПоКоду("00");
Для Каждого СтрТаб Из ТаблицаДвижений Цикл
врСчет1 = "";
врСубк1 = "";
врСубк2 = "";
врСубк3 = "";
Если СтрТаб.БухгСчет.Забалансовый = Ложь Тогда
врСчет1 = врСчет00;
врСубк1 = СтрТаб.Субконто1;
врСубк2 = СтрТаб.Субконто2;
врСубк3 = СтрТаб.Субконто3;
КонецЕсли;
Если СтрТаб.ДебетКредит = "Дт" Тогда
врБР.СделатьПроводку(ЭтотОбъект, СтрТаб.БухгСчет, СтрТаб.Субконто1, СтрТаб.Субконто2, СтрТаб.Субконто3,
врСчет1, врСубк1, врСубк2, врСубк3,
СтрТаб.СуммаРуб, СтрТаб.Количество, СтрТаб.СуммаВал, врВалюта, "Ввод начальных остатков");
Иначе
врБР.СделатьПроводку(ЭтотОбъект, врСчет1, врСубк1, врСубк2, врСубк3,
СтрТаб.БухгСчет, СтрТаб.Субконто1, СтрТаб.Субконто2, СтрТаб.Субконто3,
СтрТаб.СуммаРуб, СтрТаб.Количество, СтрТаб.СуммаВал, врВалюта, "Ввод начальных остатков");
КонецЕсли;
КонецЦикла;
В представленном алгоритме следует обратить внимание на несколько ключевых моментов:
врСчет1 инициализируется как пустая строка "". При записи в набор движений платформа обычно автоматически приводит пустую строку к пустой ссылке соответствующего плана счетов, однако более корректным и безопасным подходом является явное использование метода ПланыСчетов.ИмяПланаСчетов.ПустаяСсылка().СтрТаб.БухгСчет.Забалансовый действительно установлен флаг Истина в плане счетов.Если код написан корректно, но документ ранее проводился, а после перепроведения начал вызывать ошибку, проанализируем возможные скрытые причины:
ПередЗаписью) или в подписках на события, который при пустом кор. счете автоматически подставляет какой-либо дефолтный балансовый счет.Забалансовый у нужного счета в плане счетов.Забалансовый) у текущего сеанса пользователя может сохраниться старый кэш, из-за чего платформа продолжает считать счет балансовым.Если логика кода верна, счета настроены правильно, но платформа продолжает отбивать транзакцию с ошибкой некорректной корреспонденции, причиной является сбой индексов информационной базы или некорректный пересчет итогов регистра бухгалтерии.
Для устранения этой проблемы выполним процедуру Тестирование и исправление информационной базы:
После проведения процедуры реиндексации и пересчета итогов таблицы регистра бухгалтерии и индексы плана счетов обновляются. Документ ввода остатков успешно проводится без ошибок корреспонденции счетов.