Часто в практике разработки и сопровождения 1С мы сталкиваемся с ситуацией, когда данные в стандартных бухгалтерских отчетах не сходятся. Например, развернутое сальдо на начало текущего периода отличается от конечного сальдо предыдущего периода. При этом в самих документах (в закрытом периоде) визуально все проводки сформированы корректно. Возникает закономерный вопрос: как изменить данные, которые выдает запрос к таблице ОборотыДтКт, если сам период уже закрыт и перепроводить документы нельзя? Давайте разберем эту ситуацию по шагам и выясним истинную причину проблемы.
Рассмотрим классический пример запроса, с которым работает разработчик:
ВЫБРАТЬ
ХозрасчетныйОборотыДтКт.Регистратор КАК Регистратор,
ХозрасчетныйОборотыДтКт.СчетДт КАК СчетДт,
ХозрасчетныйОборотыДтКт.СчетКт КАК СчетКт,
ХозрасчетныйОборотыДтКт.ПодразделениеДт КАК ПодразделениеДт,
ХозрасчетныйОборотыДтКт.ПодразделениеКт КАК ПодразделениеКт
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(...) КАК ХозрасчетныйОборотыДтКт
Возникает желание напрямую изменить значение поля ПодразделениеДт в результатах или в самой базе. Важно понимать: отредактировать виртуальную таблицу физически невозможно. В архитектуре 1С:Предприятие таких таблиц (Остатки, Обороты, ОборотыДтКт) не существует в базе данных как единых физических объектов. Платформа собирает их данные "на лету", транслируя ваш запрос в сложный SQL-запрос. Для формирования результата 1С обращается к реальным таблицам базы: таблице самих движений (где хранятся проводки) и скрытой системной таблице итогов.
Некоторые программисты пытаются обойти проблему, используя конструкцию ВЫБОР КОГДА прямо в запросе отчета:
ВЫБРАТЬ
ВЫБОР
КОГДА ХозрасчетныйОборотыДтКт.ПодразделениеДт = &НеНужноеМне
ТОГДА &НужноеМне
ИНАЧЕ ХозрасчетныйОборотыДтКт.ПодразделениеДт
КОНЕЦ КАК ПодразделениеДт
...
Проанализируем этот подход. Это "костыль", который может временно скрыть проблему в конкретной самописной обработке. Однако в стандартных отчетах (например, в Оборотно-сальдовой ведомости) цифры по-прежнему не будут сходиться. База останется технически сломанной.
Если при анализе проблемы вы замечаете, что в самом регистре бухгалтерии Хозрасчетный проводки идентичны и правильны, но данные из ОборотыДтКт отличаются, а перепроведение документа в копии базы устраняет ошибку — вы столкнулись с классической проблемой "слетевших итогов".
Из-за системного сбоя (отключение электричества, некорректное завершение сеанса, ошибка СУБД) физическая таблица движений рассинхронизировалась со служебной таблицей итогов. При проведении документа платформа заново формирует проводки и принудительно пересчитывает для них итоги. Именно поэтому в копии перепроведение помогает. Но поскольку период закрыт, перепроводить документы нельзя.
Чтобы исправить расхождение данных в закрытом периоде, нам необходимо запустить штатный механизм платформы. Посмотрим на два безопасных способа, которые помогут пересчитать итоги и синхронизировать таблицы.
Способ 1: В режиме Конфигуратора (Тестирование и исправление)
Способ 2: В режиме пользователя (1С:Предприятие)
В процессе поиска решений можно встретить совет исправить данные напрямую через SQL (например, в SQL Server Management Studio). Рассмотрим, почему это опасно. Во-первых, это прямое нарушение лицензионного соглашения. Во-вторых, ручное изменение таблиц с огромной вероятностью нарушит логическую целостность базы данных. Платформа 1С использует сложную внутреннюю структуру, которую невозможно корректно обновить ручным UPDATE-запросом.
Также не следует использовать режим Ручная корректировка для документов в закрытом периоде. Это приведет к изменению версии документа и может повлиять на последовательность проведения или закрытие месяца.
Используйте встроенные механизмы пересчета итогов платформы 1С — это гарантированно, безопасно и технически грамотно устранит рассинхронизацию виртуальных таблиц с физическими движениями.