Идея расширения появилась при необходимости массового удаления объектов в разных базах. Особенно, когда приходилось удалять более 100 тысяч ссылок и типовой механизм не справлялся.
Расширение универсальное и может использоваться в любых конфигурациях.
Массовое удаление объектов может быть при:
- очистке базы от старых данных;
- свертка базы;
- регулярная чистка ненужных объектов.
В типовых конфигурациях от 1С уже есть механизмы, позволяющие очищать устаревшие данные.
К таким механизмам можно отнести:
- Удаление помеченных на удаление объектов;
- Очистка истории данных;
- Очистка старых вложенных файлов, с гибкой настройкой.
Но что делать, если для удаления нужных объектов 1С не предусмотрело механизмов. Либо если встроенный механизм не справляется с задачей? Например, удаление помеченных объектов уже перегружена и не может удалить все помеченные объекты за ночь.
Либо, помеченных объектов так много, что задание даже не успевает за ночь проверить весь список, не говоря уже про само удаление.
И тут на выручку приходит новый регистр, который добавляется расширением из статьи.
Его основное предназначение - это зафиксировать список объектов, которые надо удалить.
Далее, удаление объектов может быть запущено руками или регламентным заданием по расписанию.
Настройки удаления очень гибкие, максимально заточенные на ускорение работы:
1) объекты могут помещаться в регистр как помеченные на удаление, так и не помеченные.
При интерактивном добавлении пометка удаления обязательно. При программном добавлении нет.
2) объекты могут удаляться как с проверкой ссылочной целостности, так и без проверки.
Определяется флагом "Удалять без проверки" в настройках удаления каждого объекта.
3) в регистре можно задавать порядок удаления объектов. Это нужно, чтобы сначала удалить второстепенные объекты, а потом основные. Либо, чтобы провести срочное удаление отдельных объектов, поместив их в начало очереди.
Если объекты удалить не получается, то в поле "Результат" пишется "Невозможно удалить". При повторном запуске удаления, такие строчки будут пропускаться.
В дальнейшем, можно убрать из регистра ошибочные строки, помеченные как невозможно удалить. Либо посмотреть ссылки, из-за которых не удалось удалить. Более подробно в разделе "Работа над ошибками".
Плюсы использования регистра:
- Список удаляемых объектов можно заполнять как интерактивно, так и программно.
- Для удаления объектов не обязательно их помечать на удаление, что для массовых удалений может сэкономить много времени.
- При запуске удаления проверка и удаление каждого объекта выполняется 1 раз. Если удалось удалить, то он удаляется. Если не удалось удалить, то помечается как ошибочный.
- Возможно удаление без проверок ссылочной целостности. Ответственность за такое удаление полностью на сотруднике, который добавляет записи в регистр. Перед удалением без контроля ссылочной целостности, настоятельно рекомендуется делать архивы баз и проверять сначала на копии.
- Возможность удаления объектов в нерабочее время с помощью автоматического регламентного задания.
- Удаление каждого объекта выполняется отдельно. Программе не надо сначала долго формировать список удаляемых объектов, потом проверять все ссылки.
Интерактивное добавление отдельных объектов для удаления
После добавления расширения в конфигурацию, в карточке каждого справочника и документа появляется гиперссылка для перехода в регистр Удаляемые объекты (Расширение). При нажатии на нее открывается список, где есть кнопка Создать. При ее нажатии отрывается форма, где уже указан текущий элемент.
Обратите внимание, что элемент должен быть помечен на удаление. Без этого программа не добавит элемент в регистр, а выдаст предупреждение. Это сделано, чтобы исключить случайное удаление элементов.
Рис.1 Интерактивное добавление объекта в регистр
Программное добавление отдельных объектов для удаления
Выполняется через обращение к методам регистра
РегистрыСведений.ЬЬ_УдаляемыеОбъекты.ДобавитьЗаписьВРегистр(пСсылка, БезПроверки, УдалятьБезПроверкиСсылочнойЦелостности, пПорядок, пДатаУдаления)
где
пСсылка (обязательный) - ссылка на удаляемый объект;
БезПроверки - определяет необходимость проверять пометку на удаление добавляемых объектов. Истина - не надо проверять пометку на удаление, Ложь - надо. Значение по умолчанию: Ложь;
УдалятьБезПроверкиСсылочнойЦелостности - определяет необходимость удалять объекты без проверки ссылок из других объектов. Истина - удаление выполняется без проверки ссылочной целостности, Ложь - с проверкой. Значение по умолчанию: Ложь;
пПорядок - число, определяющее порядок удаления объектов. Удаление выполняется от меньшего числа к большему. Значение по умолчанию: 50;
пДатаУдаления - дата удаления. Значение по умолчанию: пустая дата;
Добавление в регистр может выполняться:
1) с помощью обработки результатов запроса с помощью специальных консолей;
2) написанными вручную обработками, если алгоритм отбора объектов сложный и одним запросом нельзя получить список объектов для удаления;
3) используя типовую обработку "Групповое изменение реквизитов" в режиме "Выполнить произвольный механизм". В ней можно интерактивно настроить отбор нужных объектов, а потом с помощью указанной выше строки кода, добавить ссылки в регистр для удаления.
Рис. 2 Пример добавления с помощью обработки "Групповое изменение реквизитов"

Запуск удаления объектов вручную
В меню есть для запуска 2 кнопки:
1) Удалить выбранные объекты - запускает удаление выделенных объектов. Это может быть удаление как 1 строки. Так и выделение группы объектов с помощью кнопок Ctrl или Shift.
2) Удалить все - запускает удаление всех объектов из регистра, кроме строк с комментариями
Запуск удаления объектов с помощью расписания
Для настройки расписания необходимо перейти в меню Администрирование - Обслуживание - Регламентные операции - Регламентные и фоновые задания. Далее, найти регламентное задание "Удаление помеченных объектов (Расширение)" и задать для него расписание. Лучше, если во время работы задания в базе никто не будут работать пользователи, чтобы задание не мешало пользователям работать.
Работа над ошибками
В регистре есть отдельное меню для ошибочных строк, которые помечены комментариями "Невозможно удалить"
1) Повторно удалить ошибочные - при старте удаления будут отобраны строки с заполненной колонкой "Результат". И будет сделана еще одна попытка их удалить.
2) Очистить комментарий (для робота) - колонка "Результаты" будет очищена. И регламентное задание сможет повторить попытку удаления ошибочных строк вместо с остальными строкам.
3) Показать ссылки на объект - помогает найти ссылки, которые не позволяют удалить текущий объект. Регистр имеет ограничения - он не позволяет удалять циклические ссылки. В этом случае надо либо удалять без проверки объекты. Либо использовать штатный механизм удаления.
4) Очистить не удаляемые - убирает из регистра ошибочные строки с заполненной колонкой "Результат".
Проверено на следующих конфигурациях и релизах:
- Бухгалтерия предприятия, редакция 3.0, релизы 3.0.185.24
- Управление торговлей, редакция 11, релизы 11.5.24.68
Вступайте в нашу телеграмм-группу Инфостарт



