Как правильно очистить базу 1С:Управление торговлей 10.3 от документов и уменьшить её размер

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

При ведении учета в 1С:Управление торговлей 10.3 рано или поздно наступает момент, когда база становится перегруженной документами прошлых периодов. Возникает задача: «зачистить» базу от всех движений, сохранив при этом справочную информацию (номенклатуру, контрагентов, настройки), чтобы начать учет «с чистого листа». Рассмотрим подробно, как выполнить эту процедуру эффективно и избежать типичных ошибок, с которыми столкнулись пользователи на форуме.

Метод 1: Программное удаление документов через метаданные

Самый быстрый на первый взгляд способ — это перебор всех типов документов в метаданных и их непосредственное удаление. Мы проанализируем, как это реализовать программно. Однако стоит помнить, что метод Удалить() уничтожает объект сразу, без проверки ссылочной целостности.

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


Для Каждого МетаДокумент Из Метаданные.Документы Цикл
    ИмяДокумента = МетаДокумент.Имя;
    Выборка = Документы[ИмяДокумента].Выбрать();
    Пока Выборка.Следующий() Цикл
        Попытка
            ОбъектДокумента = Выборка.ПолучитьОбъект();
            ОбъектДокумента.Удалить();
        Исключение
            Сообщить("Ошибка удаления документа: " + Выборка.Ссылка);
        КонецПопытки;
    КонецЦикла;
КонецЦикла;

Важное замечание: При таком подходе удаляются только сами документы и записи в регистрах, где этот документ является Регистратором. Но в базе остается огромное количество «мусора» в независимых регистрах сведений.

Метод 2: Очистка независимых регистров сведений

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

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


Для Каждого МЗРегистр Из Метаданные.РегистрыСведений Цикл
    Если МЗРегистр.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда
        Набор = РегистрыСведений[МЗРегистр.Имя].СоздатьНаборЗаписей();
        Набор.Записать(); // Запись пустого набора удаляет все данные
    КонецЕсли;
КонецЦикла;

Метод 3: Использование «Свертки базы»

Рассмотрим штатный инструмент, предусмотренный разработчиками 1С. В конфигурации УТ 10.3 существует обработка СверткаИнформационнойБазы. В отличие от «грубого» удаления, она позволяет:

  1. Указать дату, на которую мы хотим получить остатки.
  2. Сформировать документы ВводОстатков по всем регистрам (склады, взаиморасчеты, денежные средства).
  3. Корректно пометить на удаление старые документы.

Если ваша задача — не просто очистить базу, а начать учет заново, сохранив текущие остатки товаров и долгов, этот метод является единственно верным.

Метод 4: Перенос справочников в новую чистую базу

Как справедливо заметили участники обсуждения, часто проще не удалять лишнее, а перенести нужное. Это гарантирует отсутствие «битых» ссылок и скрытого мусора. Разберем пошагово этот процесс:

  1. Создаем новую информационную базу из того же cf файла (конфигурации) текущей базы.
  2. Используем универсальную обработку ВыгрузкаЗагрузкаДанныхXML.
  3. В исходной базе выбираем только необходимые справочники (Номенклатура, Контрагенты, Склады, ДоговорыКонтрагентов).
  4. При выгрузке можно установить фильтр, например, «Не переносить помеченные на удаление объекты».
  5. Загружаем полученный файл в новую базу.

Этот способ позволяет избавиться от 100 000 лишних позиций номенклатуры, которые накопились за 10 лет и более не используются.

Метод 5: Физическое сжатие базы и работа с журналами

Часто после удаления данных размер файла 1Cv8.1CD на диске не уменьшается. Проанализируем причины. Платформа 1С не возвращает место операционной системе автоматически. Чтобы «поджать» базу, выполним следующие действия:

1. Тестирование и исправление (ТиС). Нам необходимо запустить в Конфигураторе режим Администрирование — Тестирование и исправление. Обязательно выбираем пункты Реиндексация таблиц и Сжатие таблиц. Это пересоберет внутренние индексы и физически удалит пустые страницы из файла базы данных.

2. Очистка журнала регистрации. На форуме пользователь обнаружил, что основное место занимал лог-файл. Журнал регистрации хранится отдельно (файл 1Cv8.lgf или в папке 1Cv8Log). Если за годы работы он разросся до десятков гигабайт, его нужно сократить:

3. Утилита compact.exe. Для файловых баз в комплекте поставки 1С (в папке bin) идет утилита для сжатия таблиц. Она работает более агрессивно, чем штатное сжатие в ТиС, и позволяет максимально уменьшить размер файла .1CD.

Рекомендации по очистке справочников от дублей

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

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

← На главную