Обработка "Партионное удаление объектов" для 1С:Предприятие-7.7

Технологический анализ ведения учета по зарплате
30.01.2012 18:23 [14.02.2012 21:36] yuraos 7 [+] [−] Перейти к комментариям (4)

Конфигурации: 1С: Предприятие 7.7, 1С:Бюджет муниципального образования 7.7, 1С:Бухгалтерия 7.7, 1С:Зарплата и кадры 7.7, 1С:Комплексная 7.7, 1С:Торговля и склад 7.7, 1С:Производство+Услуги+Бухгалтерия, 1С:Бухгалтерия для бюджетных учреждений 7.7
Внешний отчет, обработка для 1С: Бухгалтерский учет 7.7; 1С: Оперативный учет 7.7; 1С: Расчет 7.7

Обработка "Партионное удаление объектов" для 1С:Предприятие-7.7

Обработка выполняет в цикле удаление объектов частями (партиями), установленного размера. Предназначена для тех случаев, когда число удаляемых объектов велико (десятки-сотни тысяч) и их затруднительно удалить за раз имеющимся средствами. Обработка также удобна для организации регламентных сервисов очиски базы от мусора по расписанию. Имеется возможность запустить обработку на исполнение в указанном интервале времени и закрыть сеанс 1С по истечению времени завершения.

или посмотреть и скачать все файлы (4)


Курочка по зернышку клюет ...
... а цыплят по осени считает. 
народная каламбурность.

 

Данная обработка сделана на основе обработки !РасчисткаКонтрагентов.ert, описанной в статье
"Обработка ObjectsCleaner ("Поиск ссылок и удаление объектов") для 1С:Предприятие-77."
в примере использования в “автоматическом” режиме.

ВНИМАНИЕ!!! Предлагаемая обработка является потенциально опасной. 
ИСПОЛЬЗОВАТЬ ЕЁ СЛЕДУЕТ С ОСТОРОЖНОСТЬЮ!
Всю ответственность за возможную потерю данных несёт пользователь запустивший обработку. 

 
 

Требования:

1) Желательно наличие внешних компонент:
а) Внешняя компонента 1CPP.dll (http://www.1cpp.ru/index.php/Download).
Без 1CPP.dll будут не доступны прямые запросы к базе данных для выборки объектов для удаления.
 Соответственно останется одна возможность формирования списка объектов для удаления (Рис.5):
- Выбор всех помеченные на удаление объектов функцией НайтиПомеченныеНаУдаление(...);

б) Внешняя компонента FormEx.dll (http://www.dorex.pro/?download), или ее ядро в составе 1CPP.dll.
- В обработке для выборов из меню используется объект 'Сервис'. Если объект 'Сервис' создать не удается
используются "запасной" вариант выбора из меню через 'СписокЗначений'.
- Также используется объект "РасширениеФормы" для запуска обработчиков ожидания, выполняющих следующие функции:
1) возврат назад фокуса ввода в поле ввода времени, если там введено не правильное значение;
2) обновление (раз в 60 секунд) надписи с временем выполнения текущего цикла при выполнении обработки.
3) обновление (раз в 60 секунд) надписи с текущим временем при выполнении обработки.
Без FormEx.dll функции 1) и 2) не работают. Функция 3) работает не по таймеру, а при завершении очередного цикла обработки.

Если обработка используется как внешняя, специально загружать ВК не требуется. Достаточно разместить файлы библиотек
в одном каталоге с обработкой. При необходимости она загрузит их при открытии формы.

2) Для красоты в интерфейсе обработки также желательно иметь в конфигурации КОП 'Общие.Форма.Привязка' -
- класс определенный пользователем, управляющий привязками в диалоге формы обработки
(Автор: Дмитрий Ощепков mailto:dmitro-75@mail.ru).
  Если экземпляр класса не удается создать, в форме обработки не работают привязки элементов диалога.
Для работы класса обязательно требуется ВК FormEx.dll !!!

3) Желательно наличие последней версии обработки 'ObjectsCleaner' (http://infostart.ru/public/100580/).
Без нее будет недоступна возможность рекурсивного удаления объектов (вместе с подчиненными по ссылкам объектами) и
Соответсвенно останется однин способ удаления объектов - "Удалять процедурой УдалитьОбъекты(...)" (Рис.6), 
 имеющий более низкий "КПД", так как позволяет удалять только те объекты, на которые нет ссылок в базе.

4) Желательно наличие подсистемы 'ViewValues' (http://infostart.ru/public/97707/)
 для удобного просмотра списка объектов для удаления и списка неудаляемых объектов (Рис.9 и Рис.13).
Без этой подсистемы просмотр осуществляется методом :ВыбратьСтроку(...) объекта 'СписокЗначений';

 

Описание файлов поставки :

1) ПартионноеУдалениеОбъектов.rar - предлагаемая вниманию читателя обработка;

2) SamplsDBF.rar –архив с примерами настроек очистки объектов для базы в формате DBF, содержит файлы:

    - \..\SamplsDBF\dbf_настройки_очистки_документов.prm    - настройка очистки помеченных на удаление документов, определенных видов (универсальная);
    - \..\SamplsDBF\dbf_настройки_очистки_контрагентов.prm  - настройка очистки помеченных на удаление контрагентов (для ТиС-7.7);
3) SamplsSQL.rar –архив с примерами настроек очистки объектов для базы в формате SQL, содержит файлы:
    - \..\SamplsSQL\sql_настройки_очистки_документов.prm    - настройка очистки помеченных на удаление документов, определенных видов (универсальная);
    - \..\SamplsSQL\sql_настройки_очистки_контрагентов.prm  - настройка очистки помеченных на удаление контрагентов (для ТиС-7.7);
 
4) SamplsSQL.rar –архив с примерами настроек очистки объектов для базы в формате SQL, содержит файлы:
текстовый файл !Глобальник.txt с примером программного кода 1С, обеспечивающий при начале работы исполнение кода из внешних файлов.

5) PacketBatches.rar – примеры пакетных файлов для запуска 1С для тестирования базы в конфигураторе и
                                       для автоматического запуска предлагаемой обработки при начале работы системы, содержит файлы: 
    - \..\PacketBatches\1C77clear_objects.bat    - запуск 1С:Предприятие-7.7 с передачей на исполнение при начале работы имени файла со скриптом на встроенном языке 1С;
    - \..\PacketBatches\ScriptOnStart.prm            - пример скрипта для расчистки справочника "Контрагенты" (для ТиС-7.7), с использованием предлагаемой обработки;
    - \..\PacketBatches\!Глобальник.txt               - пример реализации выполнения скрипта на языке 1С  из внешнего файла  при начале работы системы; 
    - \..\PacketBatches\TestIB.bat                        - запуск 1С:Конфигуратора-7.7 в пакетном режиме для выполнения тестирования базы;  
    - \..\PacketBatches\TestIB.prm                       - настройки запуска конфигуратора в пакетном режиме;   

 

Возможности:


1) Обработка осуществляет удаление объектов из списка порциями, установленного размера (в штуках) . 

Удаление осуществляется с контролем ссылочной целостности.

2) Имеется две возможность ограничения продолжительности циклов обработки объектов:
- по времени (может использоваться в регламентных сервисах);
- по числу циклов (может использоваться для подбора оптимального размера порции удаления);
после прерывания обработки, есть возможность продолжения обработки текущего списка объектов без его перезаполнения (Рис.10). 

3) Список объектов для удаления может быть сформирован двумя способами:
- Выборкой всех помеченных на удаление объектов в базе функцией НайтиПомеченныеНаУдаление(...) (Рис.3 и Рис.4);

 - Прямым запросом, при их доступности (Рис.1 и Рис.2):
 Для этого требуется задать текст запроса на языке SQL. Если в тексте запроса используются параметры, 
то еще задать текст модуля для инициализации параметров на встроенном языке 1С
(объект для выполнения запроса доступен через переменную под именем 'Запрос',
фрагмент кода в конце обязательно должен возвращать число > 0 - признак успешного завершения);

НАПРИМЕР:
Текст запроса (для базы формата SQL):
/*-------------------------------------------*/
SELECT
Жур.DATE_TIME_IDDOC
, Жур.IDDOC as [Объект$Документ]
, Жур.IDDOCDEF as Объект_вид
FROM _1SJOURN AS Жур (NOLOCK)
WHERE (1=1)
AND (Жур.ISMARK=1)
AND (Жур.DATE_TIME_IDDOC<=:ВыбДата~)
AND (Жур.$ОбщийРеквизит.Фирма=:ВыбФирма)
AND (Жур.IDDOCDEF IN (
$ВидДокумента.Реализация
, $ВидДокумента.РеализацияРозница
, $ВидДокумента.СчетФактураВыданный
, $ВидДокумента.ПКО
, $ВидДокумента.РКО
))
ORDER BY Жур.DATE_TIME_IDDOC

Текст для инициализации параметров запроса:
//---------------------------------------------
СпрФирмы=СоздатьОбъект("Справочник.Фирмы");
СпрФирмы.НайтиПоКоду("00001",2);
Запрос.УстановитьТекстовыйПараметр("ВыбФирма",СпрФирмы.ТекущийЭлемент());
Запрос.УстановитьТекстовыйПараметр("ВыбДата",'31.12.2011');
Возврат 1;

4) В обработке есть два способа удаления объектов:
- "Удалять процедурой УдалитьОбъекты(...)" (Рис.2, Рис.4 и Рис.12);
Удаляются только те объекты, на которые в базе нет ссылок. Рекурсивное удаление подчиненных объектов не поддерживается.

- Удалять объекты обработкой 'ObjectsCleaner', если последняя имеется в наличии (Рис.1, Рис.3 и Рис.11).
Объекты удаляются рекурсивно (включая подчиненные по ссылкам объекты), если не превышены установленные ограничения
для дерева подчиненности на число уровней и количество ссылок на один объект и все объекты удовлетворяют установленному
флагами "Удалять непроведенные" и "Удалять не помеченные ?" режиму контроля возможности удаления.
По умолчанию можно удалять только помеченные на удаление объекты.

5) Ссылки объекты, которые не удалось удалить из-за контроля ссылочной целосности, помещаются в список "неудаляемых" объектов, для исключения их повторной обработки.
При добалении значений в этот список, он одновременно сохраняется во внешнем файле и считывается оттуда при открытии.
Таким образом обеспечивается использование одного общего списка "неудаляемых" объектов в нескольких сеансах обработки.

6) По ходу выполнения обработка выводит в диалоге статистику выполнения удаления объектов (Рис.11 и Рис.12), 
а также пишет флаги логов (Рис.8):
- CleanObj1_Common.log (общая информация);
- CleanObj2_Delete.log (информация об удаленных объектах);
- CleanObj3_NotDel.log (информация о неудаленных объектах);
- CleanObj4_Blockd.log (информация о заблокированных объектах);

7) Обработка может быть открыта для исполнения в автоматическом режиме с передачей необходимых параметров
через параметр формы в двух вариантах:
- без показа диалога обработки (параметр ВыполнятьПриОткрытии>0);
- с показом диалога и его закрытием по завершении (параметр ВыполнятьПриОткрытии<0);
Последний вариант доступен при наличии ВК FormEx.dll, так как используется событие ПослеОткрытия(), обеспечиваемое этой ВК.

 В диалоге обработки имеется кнопка (Рис.7), при нажатии на которую в текстовом документе формируется
фрагмент кода на встроенном языке 1С, открывающий обработку для автоматического выполнения
с выбранными на текущий момент в диалоге параметрами.

8) Поскольку параметры обработки могут быть довольно сложными
(могут содержать текст запроса и текст модуля для инициализации его параметров)
 в диалоге предусмотрены кнопки, для сохранения параметров во внешний файл и загрузки параметров из внешнего файла.
 

Назначение:

1) Расчистка базы данных от мусора, появлющего в двух случаях:

    - при работе пользователей (особенно в запущенной ситуации);

    - после "обрезания" базы данных при массовом удалении документов в обрезаемом периоде;

2) Организация регламентных сервисов для регулярной очистки базы в автоматическом режиме.
 Вариант реализации регламентного сервиса по очистке базы от помеченных объектов:
С помощью планировщика заданий Windows по расписанию запускать 1С с особой строкой запуска.
Смотрите пример из файла \..\PacketBatches\1C77clear_objects.bat (расчистка справочника "Контрагенты" для конфигурации ТиС-7.7).
В строке запуска наряду со стандартными параметрами указывался ещё один дополнительный - /S.
Через него в 1С передаётся имя файла со скриптом на языке 1С для исполнения при начале работы системы.

Код скрипта можно сформировать в обработке кнопкой "Сгенерить скрипт" (Рис.7).
Пример кода в файле \..\PacketBatches\ScriptOnStart.prm.

В сеансе 1С при начале работы значение этого параметра можно считать с помощью объектов:
     - "Сервис" (поставляется ВК FormEx.dll):       КоманднаяСтрока1С = Сервис.КоманднаяСтрока();
     - "Информатор" (поставляется ВК 1CPP.dll): КоманднаяСтрока1С = Информатор.КоманднаяСтрока();
Если существует файл с переданным через параметр /S именем,
то код скрипта из него можно считать объектом "Текст" и выполнить с помощью объекта “ВыполняемыйМодуль” (поставляется ВК 1CPP.dll).
Пример реализации этого механизма смотрите в файле \..\PacketBatches.rar \! Глобальник.txt.

До и после масштабных чисткок данных для копии базы в конфигураторе следует
выполнить тестирование в пакетном режиме с записью лога
(командный файл TestIB.bat и файл с параметрами TestIB.prm из архива PacketBatches.rar файлов поставки). 
 

1) Вид диалога: режим формирования списка объектов "Выборка запросом", режим удаления "Обработкой 'ObjectsCleaner'"

1) Вид диалога: режим формирования списка объектов "Выборка запросом", режим удаления "Обработкой 'ObjectsCleaner'"

2) Вид диалога: режим формирования списка объектов "Выборка запросом", режим удаления "Процедурой УдалитьОбъекты(...)"

2) Вид диалога: режим формирования списка объектов "Выборка запросом", режим удаления "Процедурой УдалитьОбъекты(...)"

3) Вид диалога: режим формирования списка объектов "Все помеченные на удаление", режим удаления "Обработкой 'ObjectsCleaner'"

3) Вид диалога: режим формирования списка объектов "Все помеченные на удаление", режим удаления "Обработкой 'ObjectsCleaner'"

4) Вид диалога: режим формирования списка объектов "Все помеченные на удаление", режим удаления "Процедурой УдалитьОбъекты(...)"

4) Вид диалога: режим формирования списка объектов "Все помеченные на удаление", режим удаления "Процедурой УдалитьОбъекты(...)"

5) Вид диалога: недоступны прямые запросы (ВК 1CPP.dll), обработка 'ObjectsCleaner' - доступна.

5) Вид диалога: недоступны прямые запросы (ВК 1CPP.dll), обработка 'ObjectsCleaner' - доступна.

6) Вид диалога: недоступны и прямые запросы и обработка 'ObjectsCleaner'

6) Вид диалога: недоступны и прямые запросы и обработка 'ObjectsCleaner'

7) Сервис: генерация текста скрипта, вызывающего обработку для выполнения в автоматическом режиме

7) Сервис: генерация текста скрипта, вызывающего обработку для выполнения в автоматическом режиме

8) Сервис просмотра файлов логов обработки

8) Сервис просмотра файлов логов обработки

9) Сервис просмотра и предварительного формирования списка объектов для удаления

9) Сервис просмотра и предварительного формирования списка объектов для удаления

10) Повторный запуск обработки после прерывания по времени выполнения или по количеству циклов

10) Повторный запуск обработки после прерывания по времени выполнения или по количеству циклов

11) Вид диалога: выполнение удаления объектов обработкой 'ObjectsCleaner', вывод статистики

11) Вид диалога: выполнение удаления объектов обработкой 'ObjectsCleaner', вывод статистики

12) Вид диалога: выполнение удаления объектов процедурой УдалитьОбъекты(...), вывод статистики

12) Вид диалога: выполнение удаления объектов процедурой УдалитьОбъекты(...), вывод статистики

13) Просмотр списка объектов для удаления или списка "неудаляемых" объектов средствами подсистемы 'ViewValues'

13) Просмотр списка объектов для удаления или списка "неудаляемых" объектов средствами подсистемы 'ViewValues'

Публикация ссылается на:

Оценка сообщества

7

Поставьте плюс, если вы рекомендуете данную публикацию к прочтению и использованию.
Плюс добавляет публикацию в Мои рекомендации.

[+] Рекомендую   [−] Не тратить время
Если рейтинг упадет до -5, то публикация автоматически скроется.