При работе в конфигурациях на платформе 1С:Предприятие 7.7 (таких как «Производство + Услуги + Бухгалтерия», «Торговля и Склад» или «Комплексная конфигурация») пользователи иногда сталкиваются с аномальным поведением отчетов по складскому учету и партиям. В отчете на определенную дату внезапно формируется отрицательное конечное сальдо при отсутствии расходных движений, либо остатки «плавают» в зависимости от выбранного периода отчета. Разберем причины возникновения таких ошибок и последовательность действий для корректного восстановления данных.
Проанализируем внутреннее устройство регистров 1С 7.7 для понимания природы ошибки. Механизм оперативного учета хранит информацию в двух основных структурах СУБД:
RA): содержат детальные записи каждого проведенного документа с приходом и расходом ресурсов.RG): хранят предрассчитанные остатки на начало каждого календарного месяца и на момент Точки Актуальности (ТА).Рассинхронизация между физическими движениями и рассчитанными итогами чаще всего возникает по следующим причинам:
RA, а обновление итогов в таблице RG не успевает зафиксироваться.Если штатное тестирование и исправление в Конфигураторе длится слишком долго или зависает, наиболее эффективный способ пересчитать таблицы итогов оперативного контура — управляемый сдвиг точки актуальности в режиме 1С:Предприятие.
Разберем по шагам порядок действий:
Операции -> Управление оперативными итогами, выбираем дату в прошлом и нажимаем кнопку Установить.Управление оперативными итогами задаем текущую дату и нажимаем кнопку Установить.При таком последовательном сдвиге платформа принудительно очистит и заново пересчитает агрегированные остатки в таблицах RG по фактическим записям движений из таблиц RA за выбранный диапазон времени.
Если база данных имеет большой размер (десятки гигабайт), полное «Тестирование и исправление» может выполняться часами или сутками, создавая впечатление зависшего процесса. Чтобы минимизировать время простоя, запустим процедуру точечно:
Администрирование -> Тестирование и исправление ИБ.Выполнить и дожидаемся завершения процесса.Выполнение операции только с одной этой опцией исключает тяжелые проверки ссылочной целостности и переиндексацию всех таблиц, концентрируясь исключительно на таблицах итогов.
Для детальной диагностики или локального пересчета движений конкретного регистра можно использовать встроенный язык 1С 7.7. Рассмотрим пример программного получения остатка с помощью объекта Регистр:
РегПартии = СоздатьОбъект("Регистр.ПартииНаличие");
РегПартии.ВременныйРасчет(1);
РассчитатьРегистрыНа(ВыбДата);
РегПартии.УстановитьЗначениеФильтра("Номенклатура", ВыбТовар, 1);
РегПартии.ВыгрузитьИтоги(ТаблОстатков, 1, 1);
Метод ВременныйРасчет(1) в связке с процедурой РассчитатьРегистрыНа выполняет прямой расчет среза данных по таблицам движений на указанный момент времени без необходимости полной блокировки базы данных.
Если информационная база работает под управлением MS SQL Server и операции пересчета длятся неадекватно долго, выполним обязательные процедуры оптимизации на уровне СУБД:
DBCC CHECKDB в среде SQL Server Management Studio для исключения физических повреждений страниц данных.EXEC sp_updatestats._1SJOURN), движений (RA*) и итогов (RG*).Simple, чтобы предотвратить неконтролируемый рост файла журнала транзакций (.ldf).