В процессе работы с платформой 1С:Предприятие 7.7 пользователи часто сталкиваются с парадоксальной ситуацией: при формировании отчета «Ведомость по остаткам» данные не сходятся. Математика проста: Начальный остаток + Приход - Расход должен давать определенное число, но система упорно показывает 0 или другое неверное значение. Из-за этого становится невозможно оформить продажу товара, который фактически есть на складе.
Рассмотрим детально, почему это происходит, как проанализировать проблему и какими способами можно восстановить корректные данные в информационной базе.
Для начала проанализируем, как 1С 7.7 хранит данные о движениях и остатках. В отличие от современных версий, здесь архитектура таблиц регистров в формате DBF разделена на две части:
Проблема «математической ошибки» (когда 3 + 8 - 10 = 0 в отчете) возникает из-за рассинхронизации этих таблиц. Движение в таблицу RA записалось, а итоговая таблица RG по какой-то причине (сбой сети, блокировка файла, некорректное завершение работы) не обновилась. Отчет «Ведомость по остаткам» чаще всего берет готовое число из таблицы итогов, поэтому он показывает неверный результат.
Прежде чем приступать к радикальным мерам, выясним, не является ли ошибка следствием «человеческого фактора». Проанализируем ситуацию по шагам:
Основной склад, а расход пытаются провести по Складу №2 или вовсе без указания склада. В общем итоге по товару может получиться ноль, но в разрезе конкретного склада остаток будет висеть.Если после проверки всех измерений (Склад, Товар, Партия) ошибка сохраняется, переходим к техническим методам исправления.
Первое, что стоит попробовать в файловой базе — это стандартные сервисные процедуры. Рассмотрим их последовательность:
.cdx, которые связывают данные в таблицах.При перепроведении документа 1С заново инициирует запись в регистры, что может принудительно обновить таблицу итогов RG для данного конкретного товара.
Если «точечное» исправление не помогло, воспользуемся штатным механизмом восстановления целостности данных. Это самый надежный способ решить проблему рассинхронизации.
Порядок действий:
Во время этой процедуры система полностью очистит таблицы RG* и заново рассчитает все остатки, последовательно проходя по всем документам из таблиц RA*. Это гарантирует, что математический расчет 3 + 8 - 10 превратится в верную 1.
Если база очень большая и штатный пересчет занимает часы, опытные администраторы используют метод «сброса» итогов. Разберем, как это сделать правильно:
RG*.dbf и RG*.cdx. Внимание: не перепутайте с RA* — файлы движений трогать нельзя!Этот метод заставляет систему «пересобрать» итоги с нуля. Часто это работает быстрее, чем запуск полного тестирования и исправления всех таблиц.
Иногда проблема кроется не в базе, а в настройках операционной системы. Рассмотрим технический нюанс, называемый OpLocks (Opportunistic Locking). На современных серверах Windows (начиная с 2008 R2 и выше) механизмы кэширования SMB могут приводить к тому, что 1С считает запись в файл успешной, а Windows «придерживает» данные в кэше. Если в этот момент произойдет микро-сбой сети, индекс обновится, а реальные данные в RG — нет. Для стабильной работы 1С 7.7 в сетевом режиме рекомендуется отключать OpLocks на сервере и клиентских машинах.
Также проанализируем ситуацию с ценами. Если ведомость строится «по розничным ценам», и в середине периода была сделана некорректная переоценка, остаток в штуках может быть верным, но в денежном выражении отчет будет «глючить». Всегда проверяйте остатки в базовых единицах измерения и без привязки к суммам, чтобы локализовать проблему.
Ситуация, когда «в руках штука есть, а в программе — ноль», в 90% случаев лечится полным пересчетом итогов. Если это происходит регулярно, стоит задуматься о переходе на SQL-версию или проверить стабильность локальной сети и настройки кэширования файлов на сервере.