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