Как правильно обрезать (свернуть) объемную базу 1С 7.7 Торговля и Склад на SQL?

Программист 1С v7.7 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Рано или поздно многие специалисты сталкиваются с ситуацией, когда база данных устаревшей платформы 1С 7.7 разрастается до критических размеров (например, 30 ГБ и более). Стандартное удаление старых периодов средствами самой платформы занимает слишком много времени, требуя длительной остановки работы всех пользователей и магазинов. Разберем по шагам, как эффективно произвести обрезку (свертку) базы 1С:ТиС на SQL, используя прямые запросы и оптимизированные алгоритмы, чтобы минимизировать простой предприятия.

Основы подхода к обрезке базы данных

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

Рассмотрим более современный подход для SQL-версий: формирование документов ввода остатков штатными средствами с последующим "жестким" удалением исторических данных напрямую в СУБД. В сообществе для генерации документов ввода остатков традиционно используется доработанная типовая обработка WRAP.ert. Она позволяет корректно свернуть остатки, после чего мы переходим к физической очистке таблиц.

Пошаговый алгоритм поэтапной обрезки (без длительной остановки)

Если база содержит сотни тысяч документов, удалять их за один раз тяжело. Рассмотрим подробнее методику поэтапной подрезки, например, по одному месяцу (что занимает около 30 минут для ~180 тысяч документов):

  1. Создаем документ ввода остатков датой начала нового периода.
  2. Генерируем его движения, напрямую повторяющие остаток на начало периода. При этом итоги пока не пересчитываем.
  3. Удаляем движения по регистрам до начала периода и старые итоги.
  4. Формируем временную таблицу документов, подлежащих удалению (все документы до начала периода обрезки).
  5. Проверяем документы ввода остатков: если какие-то документы участвуют в формировании текущих остатков или партий, исключаем их из таблицы "подлежащих удалению".
  6. Обрабатываем периодические реквизиты: делаем срез последних значений на дату обрезки, а документы, устанавливающие эти значения, также исключаем из удаления.
  7. Осуществляем физическое удаление самих документов (шапки, табличные части, записи в журнале) в соответствии со сформированной таблицей.
  8. Очищаем таблицу взаимосвязей документов 1scrdoc по нашему списку удаленных объектов.

Ускорение удаления через прямые SQL-запросы

Разберем специфику работы с SQL. Удаление документов через объектную модель 1С работает крайне медленно. Намного эффективнее использовать прямые запросы к SQL Server (например, через SQL Server Management Studio).

Механика процесса выглядит следующим образом:

  1. Создается временная SQL-таблица (например, ##IDDOC), куда помещаются идентификаторы всех документов до даты обрезки из таблицы журнала _1SJOURN.
  2. С помощью курсора запускается цикл удаления записей по этому списку ID из всех связанных таблиц: шапок документов (начинаются на DH...), табличных частей (DT...), движений регистров (RA...).
  3. Использование конструкции DELETE FROM ... WITH (TABLOCK) в SQL-скриптах существенно ускоряет процесс очистки, так как блокирует таблицу целиком, снижая накладные расходы на блокировку отдельных строк.

Жесткая зачистка регистров (Таблицы RG и RA)

Посмотрим на пример работы с регистрами. Если остатки уже зафиксированы новыми документами ввода остатков, можно физически очистить SQL-таблицы движений регистров (RA...) за прошлые периоды.

Таблицы итогов регистров (RG...) после прямых манипуляций править вручную слишком рискованно. Выясним причину: структура итогов сложна. Быстрый вариант решения — полностью очистить файлы итогов (удалить данные таблиц RG), после чего запустить базу монопольно.

В Конфигураторе необходимо сдвинуть Точку Актуальности (ТА) в самое начало, а затем вернуть ТА в конец без перепроведения документов. Платформа 1С сама заново сформирует правильные таблицы итогов на основе актуальных документов ввода остатков и проведенных документов после даты обрезки.

Работа с историей и периодическими реквизитами

Критически важный момент — таблица периодических реквизитов _1SCONST. В ней одной большой "кучей" хранятся изменения цен, статусов контрагентов, длинные строки и прочая история.

При свертке нельзя просто грохнуть эту таблицу! Обязательно нужно использовать SQL-скрипт или специальную обработку, которая проанализирует исторические значения до даты обрезки и удалит лишнее, строго сохранив ближайшее значение (срез последних) на дату начала нового учетного периода. Иначе после обрезки у номенклатуры пропадут цены, а у контрагентов — параметры договоров.

Завершающий этап: Тестирование и исправление (ТиИ)

После любых прямых манипуляций с базой через SQL (Drop таблиц, Delete запросы), проведение полного "Тестирования и исправления" информационной базы в Конфигураторе критически обязательно.

Проанализируем, зачем это нужно:

  1. ТиИ быстро и эффективно работает с удалением битых ссылок, которые неизбежно остаются после прямого вмешательства в таблицы СУБД.
  2. Происходит перестроение внутренних индексов 1С.
  3. Очищаются "мусорные" записи и пересчитываются системные счетчики.

Глобальная альтернатива

Несмотря на техническую возможность обрезки, для 1С 7.7 база размером 30 ГБ считается экстремально большой из-за устаревшей архитектуры работы платформы. В современной практике вместо сложных и рискованных процедур по "обрезке" с остановкой работы, такие базы консервируют для просмотра истории.

Сам учет целесообразно переносить в современные конфигурации на платформе 1С:Предприятие 8.х (например, "1С:Управление торговлей"), которая спроектирована для работы с большими объемами данных и без проблем "переваривает" базы в десятки и сотни гигабайт без существенных потерь производительности и необходимости ежегодных "хирургических" вмешательств.

← На главную