В практике администраторов и программистов 1С 7.7 нередко возникают ситуации, когда после агрессивной «подрезки» базы или прямого удаления документов через манипуляции с DBF-файлами, промежуточные итоги по регистрам начинают отображать некорректные данные или вовсе обнуляются. Стандартные процедуры, такие как «Тестирование и исправление» или «Выгрузка/Загрузка данных», не всегда помогают восстановить расчетные периоды, особенно если была нарушена логическая связь между таблицами движений и итогов. В этой статье мы подробно разберем, как восстановить работоспособность системы и правильно пересчитать итоги.
Для начала проанализируем ситуацию и выясним причину сбоя. В 1С 7.7 оперативные итоги хранятся в двух типах файлов:
Когда мы удаляем документы напрямую из DBF, записи в 1SJOURN (журнал документов) исчезают, но записи в RA* могут остаться «сиротами», либо, наоборот, при удалении движений таблицы RG* перестают соответствовать реальности. 1С 7.7 не всегда инициирует полный пересчет всей истории при обычном тестировании, если точка актуальности (ТА) и рассчитанный период итогов не были смещены соответствующим образом.
Рассмотрим наиболее радикальный, но эффективный метод, который заставляет систему полностью перестроить таблицы итогов на основе имеющихся движений. Этот способ подходит, если вы уверены, что таблицы движений (RA*) содержат актуальную информацию.
Разберем алгоритм действий по шагам:
RG* (например, RG123.dbf и RG123.cdx). Внимание: файлы RA* удалять нельзя!Поскольку файлы RG* отсутствуют, система будет вынуждена создать их заново, последовательно сканируя таблицу RA* и накапливая остатки на конец каждого месяца. Это гарантирует чистоту промежуточных итогов.
Если объем базы небольшой или нужно быстро исправить ситуацию без удаления файлов, проанализируем штатный интерфейс управления итогами. Рассмотрим, как это сделать правильно:
Этот метод часто критикуют за медлительность, однако он является самым «безопасным» с точки зрения штатной логики системы. Если документов много, лучше автоматизировать этот процесс.
Выясним, как ускорить процесс открытия периодов с помощью встроенного языка. Вместо того чтобы вручную кликать в интерфейсе, мы можем написать простую обработку, которая передвинет границу рассчитанных итогов программно. Посмотрим на пример кода:
// Пример программной установки периода итогов
Процедура ПересчитатьИтоги()
// Устанавливаем период, по который должны быть рассчитаны итоги
// Например, на конец текущего месяца
ДатаКонца = РабочаяДата();
УстановитьПериодРассчитанныхИтогов(КонМесяца(ДатаКонца));
Предупреждение("Пересчет завершен!");
КонецПроцедуры
Использование метода УстановитьПериодРассчитанныхИтогов() заставляет систему выполнить те же действия, что и в интерфейсе «Управление оперативными итогами», но в автоматическом режиме.
Проанализируем ситуацию, описанную в сообщениях форума: почему после создания документов ввода остатков итоги становятся нулевыми? Это происходит из-за нарушения последовательности действий. Рассмотрим правильный алгоритм свертки:
RA.RA есть движения только от документов остатков.Если вы уже удалили документы напрямую, воспользуйтесь Способом 1 для восстановления итогов.
Посмотрим на ситуацию со стороны пользователей 1С 7.7 на MS SQL Server. Пересчет итогов в SQL-версии может занимать значительное время из-за механизмов транзакций. Профессионалы часто используют прямой SQL-запрос для очистки таблицы _1SREGS (аналог RG) перед запуском штатного пересчета в Конфигураторе:
-- Внимание: выполнять только опытным администраторам после бэкапа!
TRUNCATE TABLE _1SREGS; -- Очистка таблицы итогов для ускорения пересчета
После такой очистки штатный пересчет в Конфигураторе пройдет быстрее, так как системе не придется сравнивать старые записи с новыми — она просто запишет их «с нуля».
Важный совет: При работе с регистрами в 1С 7.7 всегда следите за Точкой Актуальности. Если ТА «улетела» в прошлое (например, на дату подрезки), то любые документы, созданные будущим числом, не будут учитываться в оперативных остатках до тех пор, пока ТА не будет перенесена вперед.