Универсальная свертка БД


Универсальная свертка для 8.1 и 8.2. Свертка только регистров накопления (регистры бухгалтерии не поддерживаются).

Данная обработка была написана год назад и немного модифицирована раза два. Задачей ставилось свернуть 3-х летнюю историю в сильномодифицированной конфигурации "Управление торговлей".

Проблема состояла в том, что из-за больших доработок обработка "Свертка для УТ" не могла обработать данные корректно. Первое с чего пришлось начать - это понять структуру БД, в которой прийдётся проводить свертку. Отсюда выстроилась структура обработки.

Т.к. задача свертки сводится к удалению документов и истории, сохраненной в регистрах, то просто пометить все на удаление и ввести остатки будет не совсем корректно. Например, будут помечены на удаление документы "Поступление товаров", которые хранятся в измерениях регистров.

Необходимо проверить наличие связей объектов, которые мы хотим удалить, с историей позднее даты свертки. Отсюда необходимо выделить  набор правил:

1. Нельзя очищать подчиненные регистры сведений;

2. Нельзя очищать регистры сведений, в которых данный документ является измерением/реквизитом;

3. Нельзя очищать регистры накопления, в которых данный документ является измерением/реквизитом;

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

Так же в качестве подзадачи выступала возможность сворачивать часть БД. Например, мне необходимо свернуть данные об основных средствах, не трогая товары, и наоборот.

 

Доступный функционал:

  • Флажок "Просто сворачивать" отключает "интеллектуальную" пометку на удаление документов, т.е. перед пометкой на удаление не происходит поиска ссылок на документ;
  • Флажок "Показывать список удаляемых документов", если поставить, то после анализа будет выведен полный список документов подлежащих пометке на удаление;
  • Поле "Количество записей в одном документе ввода остатков", по умолчанию 5000, можете изменять как удобно, однако не рекомендую больше 30 тысяч;
  • Список "Сворачиваемые документы" указывает на те виды документов, которые можно свернуть;
  • Список "Не сворачиваемые документы" указывает те виды документов, которые при текущих настройках свернуть нельзя (подчиненные регистры сведений);
  • Список "Не важные подчиненные регистры сведений", это те регистры, которые буду чистится вместе с документами, прямо влияет на список сворачиваемых документов;
  • Список "Очищаемые не подчиненные регистры сведений", позволяет повысить коэффициент удаляемых докумнетов тем, что будут чиститься те регистры сведений, где подлежащий документы выступает в качестве измерения;
  • Меню "Снимок регистров" позволяет анализировать результаты свертки:
  • "Полный" - сохранить полный снимок всех остатковых регистров накопления в mxl файл;
  • "Сделать внутренний" - сохранить снимок остатков во внутреннем формате (быстрее);
  • "Сравнить с внутренним" - сравнивает текущее состояние остатковых регистров накопления с ранее сделанным снимком и показывает отклонения.
  • кнопка "Обновить списки видов документов" - при изменении списка "Не важные подчиненные регистры сведений" необходимо её нажать;
  • кнопка "Анализ" - проанализировать документы, которые подлежат удалению;
  • кнопка "Удалить документы" - используется ТОЛЬКО для отладки и тестов, не задумываясь помечает на удаление все документы до указанной даты;
  • кнопка "Выполнить" - выполняет свертку, в зависимости от указанного режима флажка "Просто сворачивать".

 

Дополнительные сведения

  •  
    • Довольно точно оценивает оставщееся время обработки;
    • показывает проценты сворачиваемости БД;
    • обрабтка выполняет без транзакций, т.е. либо все прошло успешно, либо загружаем бекап;
    • для корректной работы обработки требуется наличие документа "УниверсальныйДокумент", который зарегестрирован на все остатковые регистры накопления, и функция "ЗначениеНеЗаполнено" из типовой УТ (думаю она в любой типовой конфигурации есть).

 

Рекомендации по порядку проведения свертки БД

  1.  
    1. Сделать копию и первый раз пробовать все на копии;
    2. выполнить полное ТИИ;
    3. создать документ "УниверсальныйДокумент" и зарегестрировать его на все регистры накоплений, либо исправить название документа в программном коде в строках 784 и 753;
    4. сделать внутренний снимок остатков (при помощи кнопки "Сделать внутренний");
    5. найти "тяжелые" обработчики отмены проведения и удаления документов, разработать механизм отключения этого кода, на время свертки (например, при свертке документов "Заявка покупателя" в УТ позволило сократить время свертки с 23 часов до 8);
    6. определиться со структурой БД, т.е. понять что можно чистить, а что нет;
    7. заполнить списки "Не важные подчиненные регистры сведений" и "Очищаемые не подчиненные регистры сведений", заполнить список "Сворачиваемые документы";
    8. выполнить анализ;
    9. сделать копию (на случай неудачной обработки свертки);
    10. нажать кнопку "Выполнить";
    11. после успешного завершения (при выполнении обработки не возникло исключительных ситуаций), сделать сравнение с внутренним снимком;
    12. запуск удаления помеченных на удаления объектов;
    13. ТИИ.

P.S. как же глючит работа со списками при оформлении публикации... Как сделать междустрочный интервал побольше?

Файлы обработки:

-