Данная обработка была написана год назад и немного модифицирована раза два. Задачей ставилось свернуть 3-х летнюю историю в сильномодифицированной конфигурации "Управление торговлей".
Проблема состояла в том, что из-за больших доработок обработка "Свертка для УТ" не могла обработать данные корректно. Первое с чего пришлось начать - это понять структуру БД, в которой прийдётся проводить свертку. Отсюда выстроилась структура обработки.
Т.к. задача свертки сводится к удалению документов и истории, сохраненной в регистрах, то просто пометить все на удаление и ввести остатки будет не совсем корректно. Например, будут помечены на удаление документы "Поступление товаров", которые хранятся в измерениях регистров.
Необходимо проверить наличие связей объектов, которые мы хотим удалить, с историей позднее даты свертки. Отсюда необходимо выделить набор правил:
1. Нельзя очищать подчиненные регистры сведений;
2. Нельзя очищать регистры сведений, в которых данный документ является измерением/реквизитом;
3. Нельзя очищать регистры накопления, в которых данный документ является измерением/реквизитом;
4. Оборотные регистры накопления можно чистить полностью, т.к. с точки зрения поставленной задачи они нам не нужны.
Так же в качестве подзадачи выступала возможность сворачивать часть БД. Например, мне необходимо свернуть данные об основных средствах, не трогая товары, и наоборот.
Доступный функционал:
- Флажок "Просто сворачивать" отключает "интеллектуальную" пометку на удаление документов, т.е. перед пометкой на удаление не происходит поиска ссылок на документ;
- Флажок "Показывать список удаляемых документов", если поставить, то после анализа будет выведен полный список документов подлежащих пометке на удаление;
- Поле "Количество записей в одном документе ввода остатков", по умолчанию 5000, можете изменять как удобно, однако не рекомендую больше 30 тысяч;
- Список "Сворачиваемые документы" указывает на те виды документов, которые можно свернуть;
- Список "Не сворачиваемые документы" указывает те виды документов, которые при текущих настройках свернуть нельзя (подчиненные регистры сведений);
- Список "Не важные подчиненные регистры сведений", это те регистры, которые буду чистится вместе с документами, прямо влияет на список сворачиваемых документов;
- Список "Очищаемые не подчиненные регистры сведений", позволяет повысить коэффициент удаляемых докумнетов тем, что будут чиститься те регистры сведений, где подлежащий документы выступает в качестве измерения;
- Меню "Снимок регистров" позволяет анализировать результаты свертки:
- "Полный" - сохранить полный снимок всех остатковых регистров накопления в mxl файл;
- "Сделать внутренний" - сохранить снимок остатков во внутреннем формате (быстрее);
- "Сравнить с внутренним" - сравнивает текущее состояние остатковых регистров накопления с ранее сделанным снимком и показывает отклонения.
- кнопка "Обновить списки видов документов" - при изменении списка "Не важные подчиненные регистры сведений" необходимо её нажать;
- кнопка "Анализ" - проанализировать документы, которые подлежат удалению;
- кнопка "Удалить документы" - используется ТОЛЬКО для отладки и тестов, не задумываясь помечает на удаление все документы до указанной даты;
- кнопка "Выполнить" - выполняет свертку, в зависимости от указанного режима флажка "Просто сворачивать".
Дополнительные сведения
- Довольно точно оценивает оставщееся время обработки;
- показывает проценты сворачиваемости БД;
- обрабтка выполняет без транзакций, т.е. либо все прошло успешно, либо загружаем бекап;
- для корректной работы обработки требуется наличие документа "УниверсальныйДокумент", который зарегестрирован на все остатковые регистры накопления, и функция "ЗначениеНеЗаполнено" из типовой УТ (думаю она в любой типовой конфигурации есть).
Рекомендации по порядку проведения свертки БД
-
- Сделать копию и первый раз пробовать все на копии;
- выполнить полное ТИИ;
- создать документ "УниверсальныйДокумент" и зарегестрировать его на все регистры накоплений, либо исправить название документа в программном коде в строках 784 и 753;
- сделать внутренний снимок остатков (при помощи кнопки "Сделать внутренний");
- найти "тяжелые" обработчики отмены проведения и удаления документов, разработать механизм отключения этого кода, на время свертки (например, при свертке документов "Заявка покупателя" в УТ позволило сократить время свертки с 23 часов до 8);
- определиться со структурой БД, т.е. понять что можно чистить, а что нет;
- заполнить списки "Не важные подчиненные регистры сведений" и "Очищаемые не подчиненные регистры сведений", заполнить список "Сворачиваемые документы";
- выполнить анализ;
- сделать копию (на случай неудачной обработки свертки);
- нажать кнопку "Выполнить";
- после успешного завершения (при выполнении обработки не возникло исключительных ситуаций), сделать сравнение с внутренним снимком;
- запуск удаления помеченных на удаления объектов;
- ТИИ.
P.S. как же глючит работа со списками при оформлении публикации... Как сделать междустрочный интервал побольше?