При работе в конфигурации 1С:Управление производственным предприятием (УПП) 1.3 пользователи и программисты нередко сталкиваются с ситуацией, когда документ Корректировка реализации отказывается проводиться, выдавая сообщение: «Запись не верна! Корреспонденция между балансовыми и забалансовыми счетами (Регистр бухгалтерии: Журнал проводок; Номер строки: X)». Эта ошибка является критической и блокирует отражение документа в учете.
Рассмотрим детально причины возникновения этой проблемы, разберем технические ограничения платформы «1С:Предприятие» и выработаем пошаговый алгоритм диагностики и решения задачи.
Прежде всего, проанализируем, почему возникает данное сообщение. В системе 1С:Предприятие счета бухгалтерского учета делятся на два типа: балансовые и забалансовые. Это свойство определяется флагом «Забалансовый» в плане счетов Хозрасчетный.
Согласно правилам платформы, в одной проводке (одной записи регистра бухгалтерии) нельзя одновременно использовать балансовый счет и забалансовый счет. Если счет дебета имеет признак балансового, то и счет кредита должен быть балансовым. Если же один из них забалансовый (например, счет 002 или 004), то второй счет либо должен отсутствовать (одинарная запись, характерная для забалансового учета), либо также должен быть забалансовым.
Ошибка при проведении Корректировки реализации означает, что алгоритм проведения пытается записать в регистр Хозрасчетный строку, где, например, по Дебету указан счет 41.01 (балансовый), а по Кредиту — 002 (забалансовый), или наоборот.
Выясним причину, по которой конкретная позиция номенклатуры вызывает сбой. В УПП счета для проводок подтягиваются из регистра сведений Счета учета номенклатуры. Рассмотрим последовательность действий:
Счета учета номенклатуры (через панель навигации или операции).Счет учета, Счет учета на складе (ГФУ) и Счет учета НДС.Если в настройках для одной позиции по ошибке указан забалансовый счет (например, 002 — ТМЦ на ответственном хранении) вместо балансового 41.01, система попытается сформировать корректирующую проводку, используя этот некорректный счет в паре с балансовым счетом выручки (90.01) или себестоимости (90.02).
Если визуальный осмотр счетов не дал результата, перейдем к активной фазе диагностики с помощью отладчика. Часто программисты жалуются, что не могут поймать момент возникновения ошибки, так как она происходит глубоко в модулях проведения. Разберем, как это сделать гарантированно:
Конфигуратор и подключимся к сеансу Предприятия.Предприятие и попробуем провести проблемный документ Корректировка реализации.Система автоматически прервет выполнение кода на той строке, где происходит попытка записи некорректного набора записей. Обычно это метод Движения.Записать() или завершение процедуры ОтражениеВБухгалтерскомУчете.
В этот момент проанализируем содержимое коллекции проводок. Для этого в окне Вычислить выражение введем:
Движения.Хозрасчетный.Выгрузить()
В выгруженной таблице найдем строку номер 4 (как указано в тексте ошибки) и посмотрим, какие именно значения стоят в колонках СчетДт и СчетКт. Это даст точный ответ, какой именно счет является "виновником".
В сообщении упоминалось, что ошибка происходит внутри вызова процедуры УправлениеЗапасамиПартионныйУчет.ДвижениеПартийТоваров. Это важный сигнал. В УПП корректировка реализации часто делает сторнирующие записи по партиям.
Если первичный документ реализации был проведен по схеме, предполагающей использование забалансовых счетов (например, реализация товаров, принятых на комиссию или на ответственное хранение), а корректировка пытается вернуть товар на балансовый счет, возникает конфликт. Проанализируем движения исходного документа по регистру накопления Партии товаров на складах (бухгалтерский учет). Счета, зафиксированные в этом регистре при первой реализации, будут использоваться системой для формирования сторно-записей в корректировке.
Рассмотрим ситуацию, описанную в теме: в исходной реализации были проводки Дт 90 - Кт 41 и одновременно Дт 002. Типовая УПП редко делает такие проводки в одном документе без специфических настроек (например, ордерная схема или передача на хранение). Если конфигурация «допилена», необходимо проверить код в подписках на события или в модуле документа.
Посмотрим на пример кода, который может приводить к ошибке, если он не учитывает специфику Корректировки реализации:
// Пример некорректной логики в модуле проведения
Проводка = Движения.Хозрасчетный.Добавить();
Проводка.Период = Дата;
Проводка.СчетДт = ПланыСчетов.Хозрасчетный.ТоварыНаСкладах; // Балансовый 41
Проводка.СчетКт = Справочники.СчетаУчета.НайтиПоКоду("002"); // ОШИБКА: Забалансовый
Проводка.Сумма = СуммаДокумента;
При корректировке система пытается инвертировать движения или создать новые на основании старых. Если ваш программный код принудительно подставляет забалансовый счет в проводку, где уже определен балансовый счет, вы получите описываемую ошибку. Решение здесь — разделение движений: балансовые счета должны корреспондировать с балансовыми (например, через вспомогательный счет 000, если это ввод остатков, хотя в корректировке это недопустимо), а забалансовые записи должны быть одинарными (только Дебет или только Кредит без указания корреспондирующего счета).
Для исправления ошибки «Корреспонденция между балансовыми и забалансовыми счетами» мы рекомендуем придерживаться следующего плана:
Счета учета номенклатуры для проблемной позиции не затесался забалансовый счет в полях, предназначенных для балансового учета.Движения.Хозрасчетный, где нарушено правило корреспонденции.Реализации товаров и услуг. Корректировка должна повторять логику счетов оригинала, но с другими суммами или количеством.002 (или любому другому забалансовому) поле корреспондирующего счета остается пустым.Помните, что платформа 1С строго следит за целостностью бухгалтерской модели, и смешивание типов счетов в одной записи технически невозможно. Тщательный анализ движений в отладчике — самый быстрый способ локализовать и устранить данную проблему.