Как штатно пересчитать все промежуточные итоги по регистрам в 1С 7.7

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

В практике администраторов и программистов 1С 7.7 нередко возникают ситуации, когда после агрессивной «подрезки» базы или прямого удаления документов через манипуляции с DBF-файлами, промежуточные итоги по регистрам начинают отображать некорректные данные или вовсе обнуляются. Стандартные процедуры, такие как «Тестирование и исправление» или «Выгрузка/Загрузка данных», не всегда помогают восстановить расчетные периоды, особенно если была нарушена логическая связь между таблицами движений и итогов. В этой статье мы подробно разберем, как восстановить работоспособность системы и правильно пересчитать итоги.

Причина возникновения проблемы

Для начала проанализируем ситуацию и выясним причину сбоя. В 1С 7.7 оперативные итоги хранятся в двух типах файлов:

  1. RA*.dbf — таблицы движений регистров. Здесь записывается каждое изменение (приход/расход), инициированное документом.
  2. RG*.dbf — таблицы итогов. Здесь хранятся остатки и обороты, рассчитанные на конец каждого месяца (периода итогов).

Когда мы удаляем документы напрямую из DBF, записи в 1SJOURN (журнал документов) исчезают, но записи в RA* могут остаться «сиротами», либо, наоборот, при удалении движений таблицы RG* перестают соответствовать реальности. 1С 7.7 не всегда инициирует полный пересчет всей истории при обычном тестировании, если точка актуальности (ТА) и рассчитанный период итогов не были смещены соответствующим образом.

Способ 1. «Жесткий сброс» итогов через удаление файлов

Рассмотрим наиболее радикальный, но эффективный метод, который заставляет систему полностью перестроить таблицы итогов на основе имеющихся движений. Этот способ подходит, если вы уверены, что таблицы движений (RA*) содержат актуальную информацию.

Разберем алгоритм действий по шагам:

  1. Сделайте полную резервную копию базы данных.
  2. Завершите работу всех пользователей.
  3. В каталоге базы данных найдите и удалите все файлы, начинающиеся на RG* (например, RG123.dbf и RG123.cdx). Внимание: файлы RA* удалять нельзя!
  4. Запустите «Конфигуратор».
  5. Перейдите в меню «Администрирование» — «Тестирование и исправление ИБ».
  6. Установите флажок только на пункте «Пересчет итогов» и нажмите «Выполнить».

Поскольку файлы RG* отсутствуют, система будет вынуждена создать их заново, последовательно сканируя таблицу RA* и накапливая остатки на конец каждого месяца. Это гарантирует чистоту промежуточных итогов.

Способ 2. Управление оперативными итогами (ручной метод)

Если объем базы небольшой или нужно быстро исправить ситуацию без удаления файлов, проанализируем штатный интерфейс управления итогами. Рассмотрим, как это сделать правильно:

  1. Запустите 1С в режиме «Предприятие».
  2. Перейдите в меню «Операции» — «Управление оперативными итогами».
  3. Обратите внимание на поле «Рассчитаны по...». Если там стоит старая дата, система не будет выдавать остатки на текущие даты.
  4. Для принудительного пересчета можно попробовать последовательно открывать каждый месяц. Выбирайте следующий месяц и нажимайте «Установить».

Этот метод часто критикуют за медлительность, однако он является самым «безопасным» с точки зрения штатной логики системы. Если документов много, лучше автоматизировать этот процесс.

Способ 3. Программный пересчет периодов

Выясним, как ускорить процесс открытия периодов с помощью встроенного языка. Вместо того чтобы вручную кликать в интерфейсе, мы можем написать простую обработку, которая передвинет границу рассчитанных итогов программно. Посмотрим на пример кода:


// Пример программной установки периода итогов
Процедура ПересчитатьИтоги()
    // Устанавливаем период, по который должны быть рассчитаны итоги
    // Например, на конец текущего месяца
    ДатаКонца = РабочаяДата();
    УстановитьПериодРассчитанныхИтогов(КонМесяца(ДатаКонца));
    Предупреждение("Пересчет завершен!");
КонецПроцедуры

Использование метода УстановитьПериодРассчитанныхИтогов() заставляет систему выполнить те же действия, что и в интерфейсе «Управление оперативными итогами», но в автоматическом режиме.

Способ 4. Правильная методика свертки базы

Проанализируем ситуацию, описанную в сообщениях форума: почему после создания документов ввода остатков итоги становятся нулевыми? Это происходит из-за нарушения последовательности действий. Рассмотрим правильный алгоритм свертки:

  1. Создание документов остатков: Сначала создаем специальные документы (например, «Ввод остатков»), которые фиксируют данные на дату свертки.
  2. Пометка на удаление старых документов: Вместо прямого удаления из DBF, пометим старые документы на удаление штатно. Это корректно обнулит их движения в RA.
  3. Проведение документов остатков: Проводим новые документы. Теперь в таблице RA есть движения только от документов остатков.
  4. Перенос Точки Актуальности: Устанавливаем ТА на дату последнего документа остатков.
  5. Штатное удаление: Только теперь удаляем помеченные объекты.

Если вы уже удалили документы напрямую, воспользуйтесь Способом 1 для восстановления итогов.

Особенности для SQL-версии

Посмотрим на ситуацию со стороны пользователей 1С 7.7 на MS SQL Server. Пересчет итогов в SQL-версии может занимать значительное время из-за механизмов транзакций. Профессионалы часто используют прямой SQL-запрос для очистки таблицы _1SREGS (аналог RG) перед запуском штатного пересчета в Конфигураторе:


-- Внимание: выполнять только опытным администраторам после бэкапа!
TRUNCATE TABLE _1SREGS; -- Очистка таблицы итогов для ускорения пересчета

После такой очистки штатный пересчет в Конфигураторе пройдет быстрее, так как системе не придется сравнивать старые записи с новыми — она просто запишет их «с нуля».

Важный совет: При работе с регистрами в 1С 7.7 всегда следите за Точкой Актуальности. Если ТА «улетела» в прошлое (например, на дату подрезки), то любые документы, созданные будущим числом, не будут учитываться в оперативных остатках до тех пор, пока ТА не будет перенесена вперед.

← На главную