Как в 1С:Управление торговлей 10.3 оставить данные только за первые годы работы, удалив последующие периоды?

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

В практике работы с 1С часто возникает задача «свертки» базы, когда удаляются старые данные, а остатки переносятся на начало актуального периода. Однако иногда возникает обратная задача: необходимо сделать «архивную» базу за определенный период (например, оставить только 2015–2017 годы), а все данные, введенные позже, полностью удалить. Типовой механизм «Свертка информационной базы» для этого не предназначен, так как его логика работает в противоположную сторону.

В данной статье мы подробно разберем, как грамотно провести «обрезку» базы сверху, сохранив целостность данных за первые годы работы и минимизировав объем занимаемого места.

Почему штатная свертка не подходит?

Прежде всего, проанализируем ситуацию: штатная обработка СверткаИнформационнойБазы создает документы «Ввод остатков» на дату свертки и удаляет документы до этой даты. В нашем же случае нам нужно сохранить документы начала периода и избавиться от документов будущего. Если попытаться использовать штатный механизм, мы получим базу с остатками на конец 2017 года, но без документов за 2015-2016 годы, что противоречит нашей цели.

Способ 1: Использование универсальной групповой обработки

Это самый простой и безопасный способ для пользователей и администраторов. Разберем его по шагам:

  1. Создание резервной копии. Любые массовые манипуляции с данными должны начинаться с создания бэкапа. Это аксиома.
  2. Отмена проведения документов. Откроем обработку «Групповая обработка справочников и документов». Настроим отбор: тип объекта — «Документы», установим фильтр по дате (больше 31.12.2017). После того как список заполнится, выберем действие «Изменить: Проведение документов» и нажмем «Снять проведение». Это очистит все движения по регистрам накопления и бухгалтерии.
  3. Пометка на удаление. Тем же инструментом установим пометку на удаление для всех документов за выбранный период.
  4. Непосредственное удаление. Воспользуемся стандартным механизмом «Удаление помеченных объектов». Обратите внимание, что если документов очень много, процедуру лучше выполнять частями, чтобы избежать переполнения лога транзакций.

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

Способ 2: Метод выгрузки и загрузки данных через XML

Если документов за нужный нам период (2015–2017) относительно немного по сравнению с общим объемом базы, этот метод будет наиболее предпочтительным. Рассмотрим ситуацию: база за 8 лет весит 50 Гб, а данные за первые 2 года занимают всего 2 Гб. Проще перенести нужное в чистую базу, чем удалять лишнее.

Алгоритм действий:

  1. Создадим пустую информационную базу с той же конфигурацией (УТ 10.3).
  2. В исходной базе воспользуемся обработкой ВыгрузкаЗагрузкаДанныхXML (доступна на диске ИТС).
  3. В настройках выберем все необходимые типы документов и справочников.
  4. Установим период выгрузки: с даты начала учета по 31.12.2017.
  5. Выполним выгрузку в файл и последующую загрузку в новую базу.

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

Способ 3: Прямое удаление через SQL (для опытных специалистов)

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

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


-- Пример для удаления данных из таблицы документа, где _Date_Time — поле даты
DELETE FROM _Document150 WHERE _Date_Time > '2017-12-31 23:59:59'

Выясним причину, по которой этот метод опасен: после такого удаления в базе останутся записи в регистрах сведений и накопления, если вы не очистите их по аналогичному принципу. Кроме того, нарушится ссылочная целостность. Поэтому после использования SQL-методов обязательно нужно запустить «Тестирование и исправление» в режиме Конфигуратора со всеми включенными галочками (особенно «Очищать ссылки» и «Удалять объекты»).

Работа с регистрами сведений

Удаление документов автоматически очищает регистры накопления (после снятия проведения), но не затрагивает регистры сведений, такие как «Цены номенклатуры», «Курсы валют» или «Контактная информация». Если эти данные за 2018–2024 годы не нужны, их придется удалять отдельно.

Для этого мы можем использовать небольшую программную обработку, которая очистит записи по периоду:


Набор = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
Набор.Отбор.Период.Установить(ДатаНачалаУдаления, ДатаКонцаУдаления, Истина);
Набор.Записать();

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

Завершающие регламентные операции

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

  1. Тестирование и исправление: Выберем пункты «Реиндексация таблиц», «Пересчет итогов» и «Сжатие таблиц». Для файловой базы это физически уменьшит файл .1CD.
  2. Сжатие SQL базы: Если база серверная, после удаления данных необходимо выполнить команду Shrink Database в SQL Management Studio, чтобы вернуть свободное место операционной системе.
  3. Восстановление последовательностей: В УТ 10.3 крайне важен партионный учет. Перейдем в меню «Операции» — «Проведение документов» — «Восстановление последовательностей» и убедимся, что граница последовательности установлена на конец 2017 года. Это гарантирует корректность остатков и себестоимости в нашей «обрезанной» базе.

Таким образом, мы рассмотрели комплексный подход к обрезке базы 1С «сверху». Выбор метода зависит от объема ваших данных и навыков: от безопасной групповой обработки до радикального вмешательства через SQL-запросы.

← На главную