Рано или поздно многие специалисты сталкиваются с ситуацией, когда база данных устаревшей платформы 1С 7.7 разрастается до критических размеров (например, 30 ГБ и более). Стандартное удаление старых периодов средствами самой платформы занимает слишком много времени, требуя длительной остановки работы всех пользователей и магазинов. Разберем по шагам, как эффективно произвести обрезку (свертку) базы 1С:ТиС на SQL, используя прямые запросы и оптимизированные алгоритмы, чтобы минимизировать простой предприятия.
Проанализируем ситуацию: классический метод подразумевает выгрузку справочников в пустую базу и загрузку остатков. Однако этот процесс требует монопольного доступа на целый день. В течение этого времени справочники (номенклатура, контрагенты) могут меняться. Возникает потребность подготовить базу заранее, а остатки загрузить быстро и желательно в нерабочее время.
Рассмотрим более современный подход для SQL-версий: формирование документов ввода остатков штатными средствами с последующим "жестким" удалением исторических данных напрямую в СУБД. В сообществе для генерации документов ввода остатков традиционно используется доработанная типовая обработка WRAP.ert. Она позволяет корректно свернуть остатки, после чего мы переходим к физической очистке таблиц.
Если база содержит сотни тысяч документов, удалять их за один раз тяжело. Рассмотрим подробнее методику поэтапной подрезки, например, по одному месяцу (что занимает около 30 минут для ~180 тысяч документов):
1scrdoc по нашему списку удаленных объектов.Разберем специфику работы с SQL. Удаление документов через объектную модель 1С работает крайне медленно. Намного эффективнее использовать прямые запросы к SQL Server (например, через SQL Server Management Studio).
Механика процесса выглядит следующим образом:
##IDDOC), куда помещаются идентификаторы всех документов до даты обрезки из таблицы журнала _1SJOURN.DH...), табличных частей (DT...), движений регистров (RA...).DELETE FROM ... WITH (TABLOCK) в SQL-скриптах существенно ускоряет процесс очистки, так как блокирует таблицу целиком, снижая накладные расходы на блокировку отдельных строк.Посмотрим на пример работы с регистрами. Если остатки уже зафиксированы новыми документами ввода остатков, можно физически очистить SQL-таблицы движений регистров (RA...) за прошлые периоды.
Таблицы итогов регистров (RG...) после прямых манипуляций править вручную слишком рискованно. Выясним причину: структура итогов сложна. Быстрый вариант решения — полностью очистить файлы итогов (удалить данные таблиц RG), после чего запустить базу монопольно.
В Конфигураторе необходимо сдвинуть Точку Актуальности (ТА) в самое начало, а затем вернуть ТА в конец без перепроведения документов. Платформа 1С сама заново сформирует правильные таблицы итогов на основе актуальных документов ввода остатков и проведенных документов после даты обрезки.
Критически важный момент — таблица периодических реквизитов _1SCONST. В ней одной большой "кучей" хранятся изменения цен, статусов контрагентов, длинные строки и прочая история.
При свертке нельзя просто грохнуть эту таблицу! Обязательно нужно использовать SQL-скрипт или специальную обработку, которая проанализирует исторические значения до даты обрезки и удалит лишнее, строго сохранив ближайшее значение (срез последних) на дату начала нового учетного периода. Иначе после обрезки у номенклатуры пропадут цены, а у контрагентов — параметры договоров.
После любых прямых манипуляций с базой через SQL (Drop таблиц, Delete запросы), проведение полного "Тестирования и исправления" информационной базы в Конфигураторе критически обязательно.
Проанализируем, зачем это нужно:
Несмотря на техническую возможность обрезки, для 1С 7.7 база размером 30 ГБ считается экстремально большой из-за устаревшей архитектуры работы платформы. В современной практике вместо сложных и рискованных процедур по "обрезке" с остановкой работы, такие базы консервируют для просмотра истории.
Сам учет целесообразно переносить в современные конфигурации на платформе 1С:Предприятие 8.х (например, "1С:Управление торговлей"), которая спроектирована для работы с большими объемами данных и без проблем "переваривает" базы в десятки и сотни гигабайт без существенных потерь производительности и необходимости ежегодных "хирургических" вмешательств.