Как правильно разделить информационную базу 1С:Бухгалтерия 3.0 по годам

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

Работа с информационными базами, которые ведутся на протяжении многих лет, рано или поздно приводит к проблеме существенного снижения производительности. Когда объем данных в 1С:Бухгалтерия 3.0 (БП 3.0) становится критическим, пользователи начинают задумываться о разделении базы на части — например, на архивную (старые периоды) и рабочую (актуальные данные). Однако простое удаление документов за определенный период — это путь, полный технических ловушек.

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

Почему ручное удаление документов — это плохая идея

Разберем ситуацию, описанную в теме: автор хочет разделить базу по 2015 году. В первой части он планирует оставить данные до 2015 года, удалив все последующие. Казалось бы, в документах 2014 года не может быть ссылок на документы 2016-го. Но в 1С:Бухгалтерия 3.0 это не совсем так.

Проанализируем структуру ссылок. В конфигурации БП 3.0 реализована сложная система взаимосвязей. Рассмотрим типичный пример: документ РеализацияТоваровУслуг от декабря 2015 года может содержать ссылку на СчетНаОплатуПокупателю, выставленный в январе 2016 года (если отгрузка фиксировалась задним числом или бизнес-процесс предполагает такую последовательность). Также существуют корректировки поступлений или реализации, которые могут ссылаться на документы-основания из очень старых периодов.

Если мы попытаемся удалить документы без контроля ссылочной целостности, мы получим в базе так называемые «битые ссылки». В полях документов вместо названий объектов появится надпись <Объект не найден> (84:bf9100155d05070111e5a3d7d7455584). Это приведет к следующим последствиям:

  1. Ошибки при закрытии месяца: Алгоритмы 1С будут пытаться прочитать данные по битым ссылкам и выдавать критические ошибки.
  2. Некорректная отчетность: Книга покупок, книга продаж и оборотно-сальдовая ведомость могут «поехать», так как аналитика по документам расчетов будет утеряна.
  3. Проблемы с обновлением: При обновлении конфигурации платформа выполняет реструктуризацию таблиц. Наличие битых ссылок может привести к аварийному завершению процесса.

Метод 1: Использование штатного механизма свертки

Наиболее правильный и безопасный способ разделить базу — это использование стандартной обработки «Свертка информационной базы». Рассмотрим этот процесс по шагам.

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

Порядок действий:

  1. Обязательно создаем полную резервную копию базы.
  2. Заходим в раздел Администрирование — Обслуживание — Свертка информационной базы.
  3. Указываем дату свертки.
  4. Выполняем формирование остатков. На этом этапе программа создаст документы, которые зафиксируют сальдо на начало нового периода.
  5. Проверяем оборотно-сальдовую ведомость до и после свертки. Они должны совпадать до копейки.
  6. Только после подтверждения корректности остатков запускаем процесс удаления старых документов.

Этот метод позволяет получить «чистую» рабочую базу, сохранив при этом всю необходимую аналитику для продолжения учета.

Метод 2: Оптимизация без разделения (Очистка мусора)

Часто база тормозит не из-за количества накладных, а из-за раздутых служебных таблиц, о которых пользователь даже не подозревает. Выясним причину разрастания, прежде чем «резать» живой учет.

Версионирование объектов. Проанализируем регистр сведений ВерсииОбъектов. Если в базе включено версионирование, 1С сохраняет каждую копию документа при каждом его перепроведении. В крупных базах этот регистр может занимать до 70% всего объема файла 1Cv8.1CD. Рекомендуется очистить старые версии через: Администрирование — Общие настройки — История изменений.

Присоединенные файлы. Сканы договоров и актов, хранящиеся прямо в базе, раздувают ее размер. Рассмотрим возможность переноса файлов в тома на диске. Это делается в меню Администрирование — Настройки работы с файлами. После выноса файлов размер самой базы SQL или файловой базы значительно уменьшится, что ускорит резервное копирование и обслуживание.

Метод 3: Программный анализ перекрестных ссылок

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


// Пример поиска ссылок на документ перед удалением
МассивСсылок = Новый Массив;
МассивСсылок.Добавить(СсылкаНаНужныйДокумент);

ТаблицаСсылок = НайтиПоСсылкам(МассивСсылок);

Для Каждого СтрокаСсылок Из ТаблицаСсылок Цикл
    Сообщить("Документ " + СсылкаНаНужныйДокумент + " используется в: " + СтрокаСсылок.Данные);
КонецЦикла;

Используя объект НайтиПоСсылкам, мы можем проанализировать, какие документы «будущего» (после 2015 года) ссылаются на документы «прошлого». Если таких ссылок много, безопасное разделение простым удалением невозможно.

Метод 4: Оптимизация на уровне СУБД (для клиент-серверных баз)

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

Резюме и рекомендации

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

Мы рекомендуем придерживаться следующей стратегии:

  1. Сначала попробуйте оптимизировать текущую базу: очистите историю версий, вынесите файлы в тома и проведите обслуживание SQL (индексы и статистика).
  2. Если это не помогло, используйте штатный механизм Свертки информационной базы. Это создаст корректные входящие остатки и позволит «отрезать» старые года без потери качества учета.
  3. Для архивных целей оставьте полную копию базы «как есть», не удаляя из нее новые данные. Просто переименуйте ее в «Архив_до_2015» и закройте в ней периоды для редактирования. Это гораздо дешевле и надежнее, чем тратить время на вычистку «хвостов» в архиве.

Помните, что в 1С:Бухгалтерия 3.0 данные тесно переплетены, и попытка «грубого» вмешательства в структуру таблиц всегда требует последующего глубокого тестирования и исправления ошибок с помощью встроенной утилиты Тестирование и исправление.

← На главную