Можно ли прерывать процесс пометки удаления документов при свертке базы 1С:Управление торговлей?

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

Свертка информационной базы — это сложная и ответственная процедура, направленная на сокращение объема данных и повышение производительности системы. В типовых конфигурациях, таких как 1С:Управление торговлей, этот процесс реализован через специальный помощник. Одним из самых длительных этапов является "Пометка удаления документов и удаление движений регистров". Часто системные администраторы и программисты сталкиваются с ситуацией, когда процесс затягивается на десятки часов, и возникает закономерный вопрос: можно ли его прервать и как это скажется на данных?

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

Разберем механику этапа пометки удаления

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

  1. Очистка движений: Документы, попадающие в период свертки, должны "обнулить" свое влияние на регистры накопления и сведений, так как их данные уже учтены в созданных документах ввода остатков.
  2. Установка пометки удаления: Сами документы помечаются на удаление, чтобы в дальнейшем их можно было физически удалить из базы данных.

Важно понимать, что в современных версиях 1С:Управление торговлей (начиная с 11.x) этот процесс не выполняется одной гигантской транзакцией. Если бы система пыталась пометить миллион документов в одной транзакции, файл лога транзакций SQL Server (.ldf) мгновенно бы переполнился, а база данных зависла. Процесс идет порциями — по типам документов или по определенному количеству объектов. Именно это дает нам возможность относительно безопасно прерывать выполнение.

Можно ли прервать процесс и как это сделать правильно

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

Выясним, какие последствия нас ждут:

Проанализируем варианты продолжения свертки

Если процесс был прерван, у нас есть несколько путей возобновления работы. Рассмотрим каждый из них.

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

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

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

Если штатный помощник ведет себя нестабильно после прерывания, мы можем завершить процесс самостоятельно. Для этого воспользуемся стандартной обработкой "Групповое изменение реквизитов". Выберем необходимые типы документов за период свертки и установим реквизит ПометкаУдаления в значение Истина. Это позволит нам гибко управлять процессом, выбирая документы по частям (например, сначала только "Заказы клиентов", затем "Реализации").

Как ускорить процесс: практические рекомендации

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

  1. Управление итогами: Это самый важный момент. Перед массовым удалением движений необходимо отключить использование итогов по всем регистрам. Это делается в режиме "1С:Предприятие" через Все функцииСтандартныеУправление итогами. При отключенных итогах система не тратит ресурсы на пересчет итоговых таблиц при каждом изменении документа.
  2. Модель восстановления SQL: Если вы используете клиент-серверный вариант, обязательно переведите базу данных в режим Simple (Простая модель восстановления). Это предотвратит бесконечный рост лога транзакций.
  3. Полнотекстовый поиск: Отключите регламентные задания полнотекстового поиска. Постоянное индексирование изменяемых объектов создает колоссальную нагрузку на диски.
  4. Подписки на события: Проанализируем наличие расширений или кастомных подписок на событие ПередЗаписью или ПриЗаписи. Часто там прописаны проверки, которые замедляют запись объектов в десятки раз. На время свертки их стоит временно деактивировать.

Программный способ управления пометкой удаления

Если вам требуется написать собственный скрипт для доработки процесса после прерывания, рассмотрим пример эффективного кода для массовой пометки удаления с отключением проверок. Используем объект ДокументОбъект и метод УстановитьПометкуУдаления.


// Пример программной пометки удаления порциями
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ ССЫЛКА 
    |ИЗ Документ.РеализацияТоваровУслуг 
    |ГДЕ Дата < &ДатаСвертки И ПометкаУдаления = ЛОЖЬ";
Запрос.УстановитьПараметр("ДатаСвертки", ДатаСвертки);
Результат = Запрос.Выполнить().Выбрать();

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

Использование свойства ОбменДанными.Загрузка = Истина является критически важным. Это позволяет обойти встроенные в конфигурацию прикладные проверки, которые на этапе свертки уже не имеют значения, так как данные за прошлые периоды признаются корректными по умолчанию.

Выясним причину возможных сложностей

Почему же даже после успешной пометки удаления база не уменьшается в размере? Помните, что пометка удаления — это лишь установка флажка в таблице. Основная работа впереди: выполнение обработки "Удаление помеченных объектов". Именно там происходит проверка ссылочной целостности, и именно этот этап может стать "бутылочным горлышком". Поэтому, если вы прервали свертку на этапе пометки, это лишь малая часть пути. Рекомендуем всегда иметь актуальную резервную копию перед любыми действиями со сверткой, так как процесс затрагивает глобальные структуры данных информационной базы.

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

← На главную