Как выполнить групповое удаление документов за период в 1С:ЗУП 3.1?

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

При работе в программе 1С:Зарплата и управление персоналом 3.1 часто возникает необходимость очистить информационную базу от устаревших данных. Например, когда требуется удалить или пометить на удаление документы за позапрошлый год. В отличие от версии 8.2, интерфейс и инструменты управляемых форм в 8.3 могут показаться неочевидными. Рассмотрим подробнее, как решить эту задачу с помощью стандартных средств и программных методов.

Метод 1: Использование обработки «Групповое изменение реквизитов»

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

Перейдем в раздел Администрирование — Обслуживание — Корректировка данных — Групповое изменение реквизитов. Если этот пункт не отображается, его можно найти через меню «Все функции» (или «Функции для технического специалиста») в разделе «Обработки».

Шаг 1. Выбор типов документов

В поле «Выбирать элементы» нажмите на гиперссылку. Откроется список всех объектов базы. Пользователи часто жалуются на необходимость расставлять сотни галочек вручную. Проанализируем ситуацию: чтобы выбрать все документы сразу, выделите любую строку в списке, нажмите Ctrl+A для выделения всех объектов, а затем нажмите клавишу «Пробел». Это автоматически проставит флажки для всех типов документов.

Шаг 2. Настройка отбора по периоду

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

Шаг 3. Работа со служебными реквизитами

Если вы выбрали разные типы документов (например, «Приемы на работу» и «Начисления зарплаты»), система может сообщить, что общих реквизитов нет. Чтобы увидеть возможность удаления, нажмем кнопку «Дополнительные параметры». В открывшемся окне установим флажок «Показывать служебные реквизиты». После этого в списке доступных для изменения полей появится реквизит Пометка удаления. Установим для него значение «Да».

Метод 2: Программный способ (для разработчиков)

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

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


КонецПериодаУдаления = '20211231235959'; // Дата, до которой удаляем документы

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

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

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

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

Метод 3: Профессиональный подход — «Свертка информационной базы»

Если ваша цель — не просто удалить лишнее, а физически уменьшить размер базы и ускорить ее работу, разберем по шагам механизм свертки. Это штатный помощник, доступный в разделе Администрирование — Обслуживание — Свертка информационной базы.

  1. Создание копии. Перед началом свертки программа предложит создать резервную копию. Никогда не пренебрегайте этим шагом.
  2. Настройка периода. Вы указываете дату, на которую будут сформированы остатки. Все документы до этой даты будут помечены на удаление автоматически.
  3. Формирование остатков. Программа создаст специальные документы (например, Перенос данных), которые зафиксируют состояние учета на дату свертки.
  4. Удаление старых данных. После проверки правильности формирования остатков можно запустить процедуру окончательного удаления помеченных документов.

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

Окончательное удаление объектов

Помните, что пометка на удаление — это только первый этап. Чтобы данные физически исчезли из базы, необходимо выполнить процедуру Удаление помеченных объектов в разделе «Обслуживание». Рассмотрим подробнее:

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

← На главную