Работа с информационными базами, которые ведутся на протяжении многих лет, рано или поздно приводит к проблеме существенного снижения производительности. Когда объем данных в 1С:Бухгалтерия 3.0 (БП 3.0) становится критическим, пользователи начинают задумываться о разделении базы на части — например, на архивную (старые периоды) и рабочую (актуальные данные). Однако простое удаление документов за определенный период — это путь, полный технических ловушек.
В этой статье мы подробно разберем, почему нельзя просто «пометить и удалить» лишнее, проанализируем риски нарушения ссылочной целостности и рассмотрим наиболее безопасные и эффективные методики разделения базы и оптимизации ее работы.
Разберем ситуацию, описанную в теме: автор хочет разделить базу по 2015 году. В первой части он планирует оставить данные до 2015 года, удалив все последующие. Казалось бы, в документах 2014 года не может быть ссылок на документы 2016-го. Но в 1С:Бухгалтерия 3.0 это не совсем так.
Проанализируем структуру ссылок. В конфигурации БП 3.0 реализована сложная система взаимосвязей. Рассмотрим типичный пример: документ РеализацияТоваровУслуг от декабря 2015 года может содержать ссылку на СчетНаОплатуПокупателю, выставленный в январе 2016 года (если отгрузка фиксировалась задним числом или бизнес-процесс предполагает такую последовательность). Также существуют корректировки поступлений или реализации, которые могут ссылаться на документы-основания из очень старых периодов.
Если мы попытаемся удалить документы без контроля ссылочной целостности, мы получим в базе так называемые «битые ссылки». В полях документов вместо названий объектов появится надпись <Объект не найден> (84:bf9100155d05070111e5a3d7d7455584). Это приведет к следующим последствиям:
Наиболее правильный и безопасный способ разделить базу — это использование стандартной обработки «Свертка информационной базы». Рассмотрим этот процесс по шагам.
Проанализируем алгоритм работы свертки. Она не просто удаляет документы, а создает специальные документы ВводОстатков на выбранную дату (например, на 31.12.2014). После того как остатки сформированы по всем регистрам (бухгалтерским и накопления), старые документы помечаются на удаление.
Порядок действий:
Этот метод позволяет получить «чистую» рабочую базу, сохранив при этом всю необходимую аналитику для продолжения учета.
Часто база тормозит не из-за количества накладных, а из-за раздутых служебных таблиц, о которых пользователь даже не подозревает. Выясним причину разрастания, прежде чем «резать» живой учет.
Версионирование объектов. Проанализируем регистр сведений ВерсииОбъектов. Если в базе включено версионирование, 1С сохраняет каждую копию документа при каждом его перепроведении. В крупных базах этот регистр может занимать до 70% всего объема файла 1Cv8.1CD.
Рекомендуется очистить старые версии через: Администрирование — Общие настройки — История изменений.
Присоединенные файлы. Сканы договоров и актов, хранящиеся прямо в базе, раздувают ее размер. Рассмотрим возможность переноса файлов в тома на диске. Это делается в меню Администрирование — Настройки работы с файлами. После выноса файлов размер самой базы SQL или файловой базы значительно уменьшится, что ускорит резервное копирование и обслуживание.
Если вы все же решили удалять данные выборочно, необходимо написать обработку, которая проверит связи. Посмотрим на пример кода, который помогает найти все объекты, ссылающиеся на конкретный документ перед его удалением:
// Пример поиска ссылок на документ перед удалением
МассивСсылок = Новый Массив;
МассивСсылок.Добавить(СсылкаНаНужныйДокумент);
ТаблицаСсылок = НайтиПоСсылкам(МассивСсылок);
Для Каждого СтрокаСсылок Из ТаблицаСсылок Цикл
Сообщить("Документ " + СсылкаНаНужныйДокумент + " используется в: " + СтрокаСсылок.Данные);
КонецЦикла;
Используя объект НайтиПоСсылкам, мы можем проанализировать, какие документы «будущего» (после 2015 года) ссылаются на документы «прошлого». Если таких ссылок много, безопасное разделение простым удалением невозможно.
Если ваша база работает на MS SQL Server или PostgreSQL, тормоза могут быть связаны с фрагментацией индексов. Рассмотрим регламентные операции, которые нужно выполнить перед тем, как принимать решение о разделении базы:
Подводя итог, можно сказать следующее: простое удаление документов из одной части разделенной базы — это рискованная операция, которая с высокой вероятностью приведет к повреждению логической целостности данных.
Мы рекомендуем придерживаться следующей стратегии:
Помните, что в 1С:Бухгалтерия 3.0 данные тесно переплетены, и попытка «грубого» вмешательства в структуру таблиц всегда требует последующего глубокого тестирования и исправления ошибок с помощью встроенной утилиты Тестирование и исправление.