Каждый опытный специалист 1С рано или поздно сталкивается с ситуацией, когда в Оборотно-сальдовой ведомости (ОСВ) внезапно «вылезают» огромные отрицательные остатки по счетам (например, 51, 52 или 66), хотя первичные документы введены корректно и хронология не нарушена. Мы часто называем это «слётом итогов». Разберем подробно, почему это происходит, как эффективно устранить проблему и, что самое важное, как настроить систему мониторинга, чтобы предотвратить такие инциденты в будущем.
Если вы обнаружили, что остатки «поехали», первым делом необходимо убедиться, что проблема действительно в физических таблицах итогов, а не в ошибке ввода данных. Для этого мы используем стандартный инструмент платформы — Тестирование и исправление (ТИИ). Проанализируем, какая именно опция нам полезна.
Нам потребуется режим «Пересчет итогов». Важно понимать разницу между этим действием и другими проверками. В 1С данные хранятся в двух видах таблиц: таблицы записей (сами проводки в регистре бухгалтерии Хозрасчетный) и таблицы итогов (агрегированные данные по месяцам). При формировании отчета система обращается именно к таблицам итогов для скорости. Если в них записана неверная цифра, отчет покажет ошибку, даже если все проводки верны.
Рассмотрим алгоритм действий:
Многие специалисты ограничиваются пересчетом итогов, но для предотвращения повторения ситуации нам нужно разобраться в причинах. Проанализируем основные факторы:
1. Механизм разделения итогов (Split Totals)
В высоконагруженных конфигурациях (особенно в версии КОРП) включено свойство РазделениеИтогов. Программа записывает данные не в одну строку итога, а в несколько «разделителей», чтобы пользователи не блокировали друг друга при записи. Если в момент фиксации транзакции происходит микросбой сети или блокировка на уровне СУБД, один из разделителей может записаться некорректно. В итоге сумма всех разделителей дает неверный результат в ОСВ.
2. Ошибки на уровне СУБД (SQL Server / PostgreSQL)
Часто причиной становятся «битые» индексы или некорректно завершенные транзакции. Разберем ситуацию: сервер 1С отправил команду на обновление таблиц итогов, но SQL-сервер в этот момент выполнял план обслуживания (например, Shrink или реиндексацию) или произошел скачок напряжения. Транзакция могла откатиться частично, оставив таблицы итогов в «рассинхроне» с основной таблицей движений.
3. Некорректное использование расширений и прямых запросов
Посмотрим на код расширений. Если сторонний разработчик реализовал запись в регистры бухгалтерии напрямую через SQL или с использованием методов, обходящих стандартную проверку итогов, платформа может не получить сигнал о необходимости пересчета агрегатов за конкретный период. Это классическая причина «фантомных» минусов.
Чтобы быть компетентным в решении таких вопросов, недостаточно просто знать кнопку ТИИ. Мы должны уметь пользоваться инструментами глубокой диагностики. Рассмотрим основные из них:
ТЖ позволяет записывать всё, что происходит между сервером 1С и СУБД. Для поиска причин сбоев итогов нам нужно настроить сбор событий DBV8DBDPTR (ошибки работы с базой данных) и EXCP (исключительные ситуации). Пример секции файла logcfg.xml для мониторинга ошибок:
<log location="/var/log/1c/errors" history="24">
<event>
<eq property="Name" value="DBV8DBDPTR"/>
</event>
<event>
<eq property="Name" value="EXCP"/>
</event>
</log>
Проанализировав лог после возникновения сбоя, мы сможем увидеть, какой именно SQL-запрос завершился неудачей и по какой причине (например, Deadlock или Timeout).
Чтобы минимизировать риск появления отрицательного сальдо, рекомендуем внедрить следующие регламентные процедуры:
DBCC CHECKDB. Это поможет выявить повреждения страниц данных на ранней стадии.AccumRgTotals (или аналогичных таблиц итогов бухгалтерии).Для общения с пользователями мы можем использовать простую аналогию. Представим, что в программе есть две тетради. В первой («Первичка») записаны все операции по дням. Во второй («Итоговая») — готовые суммы по месяцам для быстрой выдачи отчетов. Из-за технического сбоя (например, моргнул свет или произошел микрообрыв связи) в «Итоговую» тетрадь записалась неверная сумма, хотя в первой тетради всё верно. Процедура «Пересчет итогов» — это когда программа берет первую тетрадь и заново суммирует все записи, чтобы исправить ошибки во второй тетради. Это абсолютно безопасная штатная процедура, которая не меняет сами документы, а лишь актуализирует отчетную информацию.