Обработка предназначена для непосредственного удаления старых документов из информационной базы, в обход механизма контроля ссылочной целостности. Предполагается, что обработку будет использовать квалифицированный 1С программист, который понимает, что делает. Обработка должна работать с любой конфигурацией на управляемых формах. Работала с 1С: Бухгалтерия предприятия 3.0 версии 3.0.161.22, на платформе 8.3.24.1691.
Непосредственное удаление большого количества старых документов в обход стандартного механизма, через удаление помеченных объектов – это варварство (отсюда и изображение для анонса публикации), но иногда такие задачи неизбежны. Например, у программиста физически нет времени на удаление помеченных объектов или, с чем я столкнулся при обрезке Бухгалтерии 8.3 – значительно количество документов с ручной корректировкой, которые и пометить на удаление нельзя.
Обычно такие задачи возникают при обрезке файловых информационных баз объема близким к предельному. Это неприятные проекты, с большой трудоемкостью и высокими рисками. Если программист работает с малым и средним бизнесом, то такие проекты регулярно появляются.
Прототип этой обработки я сделал для обрезки Бухгалтерии 3.0. После того, как отработала стандартная процедура свертки и все что смогла, пометила на удаление, я запустил свою обработку. По мне так удалить старые документы – это куда проще переноса нужных данных в базу-пустышку при помощи обработки ВыгрузкаЗагрузкаДанныхXML83.
Сценарий работы пользователя.
Важно: Перед началом работы необходимо сделать резервную копию и запускать обработку на копии базы.
Обработка открывается пользователем с полными правами из меню Файл – Открыть.
Пользователь заполняет реквизит Дата свертки и использует кнопку Заполнить таблицу документов. Будет заполнена табличная часть Документы на удаление. Табличная часть содержит три колонки: Имя документа – то имя документа, что видит 1С программист в Конфигураторе, заполняется из метаданных конфигурации. флаг Удалить – если снять эту отметку, то эти документы удалятся не будут. Третья колонка – Дата свертки документа – при заполнении табличной части берется из реквизита Дата свертки. Может потребоваться для каких-то документов изменить дату свертки, пользователь может отредактировать эту дату.
Дата свертки документа – это дата, начиная с которой в базе будут оставлены документы, т.е. – если установлено 01.01.2020 00:00:00, то последними удаленными документами будут документы с датой 31.12.2019 23:59:59. При обрезке Бухгалтерии остатки на дату свертки формируются документами ОперацияБух, за одну секунду, до даты свертки – поэтому там необходимо отредактировать Дату свертки документа - 31.12.2019 23:59:59 и документы ввода остатков останутся.
Далее пользователь запускает удаление документов, используя кнопку Удаляем документы. По завершению работы пользователю будут выданы сообщения о том какие и сколько документов было удалено из информационной базы.
Не забываем, после удаления документов запустить в конфигураторе Тестирование и исправление информационной базы в режиме Тестирование и исправление с параметрами – Очищать ссылки и удалять объекты.
Описание алгоритма удаления документов.
В цикле проходятся строки табличной части, и если в строке установлен флаг Удалить, то запросом получаем по имени ссылки на все документы, дата которых меньше Даты свертки документа и выгружаем эти ссылки в таблицу значений. Далее запускается цикл по строкам полученной на прошлом шаге таблицы значений со ссылками документов. В этом цикле организуем непосредственное удаление документов в транзакции, пакетами по 300 шт. При удалении документа-объекта указываем режим ОбменДанными.Загрузка = Истина, для того, чтобы отключить обработчик события ПередУдалением. Это существенно увеличивает скорость работы.
Код обработки открытый.
Проверено на следующих конфигурациях и релизах:
- Бухгалтерия предприятия, редакция 3.0, релизы 3.0.161.22