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

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

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

Что такое этап пометки документов на удаление и почему он так важен?

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

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

Важно отметить, что не все документы помечаются на удаление. Например, документы по учету основных средств (ОС) или налога на добавленную стоимость (НДС), как правило, остаются нетронутыми. Также могут не помечаться на удаление документы с ручными корректировками проводок, даже если они относятся к свертываемому периоду, поскольку их удаление может нарушить целостность учета.

Можно ли прервать процесс пометки на удаление? Разбираем сценарии

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

Сценарий 1: Контролируемый режим в современных конфигурациях (например, УТ 11, КА 2, ERP)

В современных конфигурациях 1С разработчики предусмотрели так называемый "контролируемый режим" свертки. Рассмотрим подробнее его особенности:

  1. Поэтапное выполнение: В этом режиме свертка разбивается на четкие, логические этапы. После завершения каждого этапа система сохраняет промежуточные результаты.
  2. Возможность остановки и продолжения: Если свертка выполняется в контролируемом режиме, у нас есть возможность остановить процесс после завершения одного из этапов и продолжить его позже с того же места. Это наиболее безопасный способ управления длительной операцией.
  3. Информационные сообщения: В случае прерывания в контролируемом режиме система может подсказать, возможно ли продолжить процесс или необходимо восстанавливать базу из резервной копии.

Таким образом, если вы используете современную конфигурацию и свертка происходит в контролируемом режиме, вероятность успешного возобновления процесса выше.

Сценарий 2: Автоматический режим или старые конфигурации

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

  1. Высокий риск повреждения данных: Принудительное прерывание может оставить базу в некорректном состоянии, с частично помеченными документами и нарушенной ссылочной целостностью.
  2. Последствия прерывания: В случае некорректного прерывания, скорее всего, потребуется восстановление информационной базы из резервной копии. Это самый надежный способ вернуться к работоспособному состоянию.
  3. Необходимость собственного кода или ручной пометки: Если восстановление из копии по каким-то причинам нежелательно или невозможно, вам, возможно, придется написать собственный код для продолжения пометки оставшихся документов или выполнить эту операцию вручную. Продолжить прерванный процесс "как есть" в автоматическом режиме обычно не представляется возможным.

Что делать, если процесс все-таки был прерван? Пошаговое руководство

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

Шаг 1: Анализируем ситуацию

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

Шаг 2: Вариант 1 – Восстановление из резервной копии (самый безопасный)

Мы настоятельно рекомендуем этот вариант, если вы не уверены в возможности корректного продолжения или если свертка выполнялась в автоматическом режиме. Перед началом любой свертки вы ОБЯЗАТЕЛЬНО должны создать полную резервную копию информационной базы. Это золотое правило, которое позволяет избежать катастрофических последствий.

  1. Восстановите базу: Используйте вашу резервную копию, сделанную до начала свертки.
  2. Проанализируйте причину прерывания: Постарайтесь понять, почему процесс прервался (нехватка ресурсов, сбой сервера, ошибки в данных) и устраните эту причину.
  3. Повторите свертку: Запустите процесс свертки заново, по возможности в контролируемом режиме и с учетом выявленных проблем.

Шаг 3: Вариант 2 – Попытка ручного продолжения или написание кода

Этот вариант более сложный и требует глубокого понимания структуры базы данных и навыков программирования на 1С. Он актуален, если восстановление из копии невозможно или слишком трудоемко.

  1. Использование групповой обработки объектов: Мы можем попытаться вручную пометить оставшиеся документы на удаление. Для этого используем стандартный механизм ГрупповаяОбработкаОбъектов, доступный в режиме "Предприятие" (обычно через "Все функции" или "Администрирование").
    • В этой обработке мы выбираем необходимые виды документов (например, Документ.РеализацияТоваровУслуг, Документ.ПоступлениеТоваровУслуг и т.д.).
    • Устанавливаем отборы по дате, организации или другим параметрам, чтобы выбрать только те документы, которые должны были быть свернуты.
    • Находим поле "Пометка удаления" и устанавливаем его в значение "Да".
    • Запускаем обработку. Этот процесс также может быть длительным.
  2. Написание собственного кода: Для более точного и автоматизированного продолжения пометки можно написать скрипт на встроенном языке 1С. Мы покажем пример концептуального кода, который можно адаптировать под ваши нужды.

    Например, если нам нужно пометить документы "РеализацияТоваровУслуг" за определенный период:

    
    // Пример кода для выборочной пометки документов на удаление
    // Этот код следует использовать с осторожностью и после резервного копирования!
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ДокументСсылка
    |ИЗ
    |    Документ.РеализацияТоваровУслуг КАК ДокументРеализацияТоваровУслуг
    |ГДЕ
    |    ДокументРеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    |    И ДокументРеализацияТоваровУслуг.ПометкаУдаления = ЛОЖЬ";
    
    Запрос.УстановитьПараметр("ДатаНачала", '20100101'); // Пример даты начала свертки
    Запрос.УстановитьПараметр("ДатаОкончания", '20151231'); // Пример даты окончания свертки
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    Сообщить("Начинаем пометку документов...");
    Пока Выборка.Следующий() Цикл
        Попытка
            ДокументОбъект = Выборка.ДокументСсылка.ПолучитьОбъект();
            Если ДокументОбъект <> Неопределено Тогда
                Если Не ДокументОбъект.ПометкаУдаления Тогда
                    ДокументОбъект.УстановитьПометкуУдаления(Истина);
                    // ДокументОбъект.Записать(); // Запись не требуется, УстановитьПометкуУдаления сама записывает
                КонецЕсли;
            КонецЕсли;
        Исключение Как Искл
            Сообщить("Ошибка при пометке документа " + Выборка.ДокументСсылка + ": " + Искл.Описание);
        КонецПопытки;
    КонецЦикла;
    Сообщить("Пометка документов завершена.");
    

    В этом примере мы используем объект Запрос для выборки документов и метод УстановитьПометкуУдаления(Истина) для установки пометки. Помните, что такой код требует тщательной проверки и тестирования на копии базы.

Важные рекомендации и дополнительная информация по свертке

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

  1. Обязательное резервное копирование: Перед началом любой свертки, а тем более перед этапом пометки на удаление, крайне важно создать полную резервную копию информационной базы. Лучше всего сделать отдельную копию базы, чтобы сохранить всю историю данных до свертки. Это позволит нам восстановить данные в случае сбоя или если потребуется доступ к старым данным.
  2. Тестирование на копии: Всегда выполняйте свертку сначала на копии рабочей базы. Это позволит выявить потенциальные проблемы без риска для основной системы.
  3. Выбор даты свертки: Дата свертки должна соответствовать окончанию периода сдачи регламентированной отчетности (например, конец квартала или года), и все операции по закрытию этого периода должны быть полностью завершены.
  4. Режим работы пользователей: Желательно, чтобы во время свертки базой не пользовались другие сотрудники. Свертка должна выполняться пользователем с правами администратора, в идеале в монопольном режиме.
  5. Поэтапная свертка для больших баз: Для очень больших баз данных рекомендуется выполнять свертку небольшими периодами (например, по одному году). Это облегчает управление процессом и снижает риск ошибок.
  6. Удаление помеченных объектов: После того как документы помечены на удаление, необходимо запустить отдельный процесс "Удаление помеченных объектов". Это также может быть длительной операцией.
  7. Проблемы с удалением: Если после пометки на удаление некоторые документы не удаляются (из-за ссылок на них), может потребоваться ручное снятие этих ссылок или разработка специальной обработки программистом.
  8. Обслуживание СУБД после свертки: После удаления помеченных объектов для фактического уменьшения размера файловой базы необходимо выполнить "Тестирование и исправление" в режиме конфигуратора. Для серверных баз (SQL Server, PostgreSQL и т.д.) потребуется выполнить сжатие (shrink) базы данных средствами СУБД.
  9. Проверка остатков: После завершения свертки обязательно сверьте оборотно-сальдовые ведомости до и после свертки, чтобы убедиться в корректности данных и отсутствии искажений.
  10. Ограничения свертки: Следует учитывать, что свертка удаляет всю историю взаимоотношений с партнерами, что может повлиять на механизмы расчета скидок и мониторинг целевых показателей за свернутый период.

Мы надеемся, что это подробное руководство поможет вам успешно справиться с процессом свертки базы 1С и избежать проблем при пометке документов на удаление.

← К списку