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

14.02.12

База данных - Чистка данных

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

Скачать файлы

Наименование Файл Версия Размер
ПартионноеУдалениеОбъектов.rar
.rar 32,97Kb
56
.rar 32,97Kb 56 Скачать
PacketBatches.rar
.rar 1,38Kb
15
.rar 1,38Kb 15 Скачать
SamplsDBF.rar
.rar 1,34Kb
12
.rar 1,34Kb 12 Скачать
SamplsSQL.rar
.rar 1,34Kb
12
.rar 1,34Kb 12 Скачать

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

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

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

  

Требования:

  1. Желательно наличие внешних компонент:
    1. Внешняя компонента 1CPP.dll (http://www.1cpp.ru/index.php/Download).
      Без 1CPP.dll будут не доступны прямые запросы к базе данных для выборки объектов для удаления.
       Соответственно останется одна возможность формирования списка объектов для удаления (Рис.5):
      - Выбор всех помеченные на удаление объектов функцией НайтиПомеченныеНаУдаление(...);
    2. Внешняя компонента 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' (//infostart.ru/public/100580/).
    Без нее будет недоступна возможность рекурсивного удаления объектов (вместе с подчиненными по ссылкам объектами) и
    Соответственно останется один способ удаления объектов - "Удалять процедурой УдалитьОбъекты(...)" (Рис.6), 
     имеющий более низкий "КПД", так как позволяет удалять только те объекты, на которые нет ссылок в базе.

  4. Желательно наличие подсистемы 'ViewValues' (//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.     - при работе пользователей (особенно в запущенной ситуации);

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

  3. Организация регламентных сервисов для регулярной очистки базы в автоматическом режиме.

Вариант реализации регламентного сервиса по очистке базы от помеченных объектов:

С помощью планировщика заданий 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 файлов поставки).  

См. также

Пометка на удаление не используемой номенклатуры

Чистка данных Оперативный учет 7.7 1С:Торговля и склад 7.7 Абонемент ($m)

Установка пометки на удаление справочника Номенклатура. Торговля 77. 9.2.

1 стартмани

21.11.2022    2361    3    Sevg    0    

2

Поиск и удаление дублей справочника 7.7

Чистка данных Платформа 1С v7.7 1С:Бухгалтерия 7.7 1С:Зарплата и кадры 7.7 1С:Торговля и склад 7.7 Россия Абонемент ($m)

Обработка для поиска и пометки на удаление дублирующихся элементов произвольного справочника.

1 стартмани

12.09.2022    2874    6    tetraren    0    

2

Учет с нуля на основе имеющейся файл-серверной базы данных 1С 7.7

Свертка базы Чистка данных Обмен между базами 1C Платформа 1С v7.7 1С:Комплексная 7.7 1С:Торговля и склад 7.7 Абонемент ($m)

Приводится порядок действий для создания новой информационной базы на основе имеющейся файл-серверной "Торговля и Склад" ред.9.2, для учёта с нуля. В новую базу выполняется перенос справочников и остатков номенклатуры. Журналы документов, данные регистров, долги контрагентов, партии очищаются.

1 стартмани

14.01.2022    6029    4    etmarket    3    

3

Комплект обработок 1С 7.7 для работы со справочниками и документами

Чистка данных Корректировка данных Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Архив различных обработок 1С 7.7 с открытым исходным кодом для работы с данными при свертке, выгрузке, исправлении, модификации информационной базы. Можно использовать любую обработку в качестве заготовки для добавления собственных функций.

1 стартмани

13.05.2021    7809    8    etmarket    0    

3

Удаление элементов справочника в 1С 7.7

Чистка данных Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Эта обработка позволяет удалить созданные системой элементы справочников. Например, когда элементы создаются при тестировании и исправлении базы с наименованиями, включающими строку "ФС". Обработка тестировалась на базе конфигурации Бухгалтерский учет для Казахстана, редакции 7.70.257.

10 стартмани

26.03.2021    8291    2    softmaker    0    

0

Поиск и исправление дублей штрихкодов для номенклатурных единиц измерения

Поиск данных Чистка данных Логистика, склад и ТМЦ Оперативный учет 7.7 1С:Торговля и склад 7.7 Управленческий учет Абонемент ($m)

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

1 стартмани

19.11.2020    7641    1    Kuzya_brаtsk    4    

8

Сжатие DBF-файлов для 1С:Предприятие 7.7

Чистка данных Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Когда удаляются документы и элементы справочников в 1С 7.7 через удаление помеченных на удаление объектов, запись из dbf файла не удаляется, она помечается как удаленная, но физически остается в файле. Если эти помеченные на удаление записи удалить физически, то размер файлов значительно уменьшится.

1 стартмани

18.10.2018    15681    45    evg520750    5    

1
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. yuraos 991 02.02.12 20:09 Сейчас в теме
Если меня спросят,
зачем я это делаю, для чего это надо и где тут логика?

Я отвечу так,
Логика бывет: математической, женской и прикладной
(буду настаивать именно на таком порядке перечисления).
И жизнь как то все больше следует последней.
;)
2. vladimir_makarov 105 03.02.12 07:47 Сейчас в теме
Ты просто используешь функцию "Удалить()", она работает жёстко и бесконтрольно. А о ссылках на "обречённый" элемент ты подумал? Минус не ставлю, сам разберись.
P.S.: Я подобной гадости ахапку написал, а здесь выкладывать стыдно. Хотя: я подобные бяки стараюсь делать с учётом подчинённости (для спрвочников) и оснований (для документов). При наличии ссылок на объект полагается сообщить о ссылках и спросить: КАЗНИТЬ НЕЛЬЗЯ ПОМИЛОВАТЬ, пусть пользователь имеет возможность поставить запятую! А то потом единственное средство - FoxPro или его аналоги.
3. yuraos 991 03.02.12 09:07 Сейчас в теме
(2) vladimir_makarov, читай внимательней!
1) В обработке удаление выполняется с контролем ссылочной целостности.
2) В одном из режимов используется не метод объекта Удалить(), например:
Объект.Удалить() 
а системная процедура УдалитьОбъекты(сзОбъекты,ПроверятьСсылки,тзСсылки) со значением параметра ПроверятьСсылки=1.
--------------------------------
Описание из синтакс-помошника:
УдалитьОбъекты(<?>,,);
Синтаксис:
УдалитьОбъекты(<Объекты>,<Проверять>,<Ссылки>)
Назначение:
Удаляет объекты, переданные в списке значений.
Параметры:
<Объекты> - конкретное значение объекта или значение типа ''СписокЗначений'', в котором данной процедуре передаются объекты, которые надо удалить.
<Проверять> - необязательный параметр. Число: 1 - перед удалением проверяется, нет ли ссылок на удаляемый объект. Если есть, то объект не удаляется, а ссылки помещаются в таблицу значений <Ссылки>. Любое другое число - проверку не выполнять. Значение по умолчанию: 0.
<Ссылки> - Необязательный параметр. Идентификатор объекта типа ''ТаблицаЗначений'', в который данная процедура помещает найденные ссылки на объекты. Таблица значений состоит из 3 колонок: 1. объект на который ссылаются; 2. объект, который содержит ссылку; 3. комментарий к ссылке.

3) В другом режиме используется обработка ObjectsCleaner, которая жестко проверяет возможность удаления по всему дереву подчиненных по ссылкам объектов.
4) Данная обработка предназначена для удаления БОЛЬШОГО количества мусора в базе, который однозначно требуется вычистить (например после обрезания базы). Если нужно пользователя спрашивать "КАЗНИТЬ или МИЛОВАТЬ", то на этот случай есть та же обработка ObjectsCleaner(не в автоматическом режиме).
----
ЗЫ
минус тебе тоже не ставлю.
;)
4. balgarin 09.03.12 21:42 Сейчас в теме
нормальная вещь, помогает когда оперативки мало
Оставьте свое сообщение