Удаление сотен тысяч документов за несколько часов из УТ11

08.11.14

Задачи пользователя - Инструкции пользователю

Делюсь своим опытом по удалению относительно большого количества документов (> 300 тыс) из управленческой базы УТ 11 за 7 часов.

Цель: разработать алгоритм массового удаления больших количеств документов из УТ 11 без потери ссылочности базы.

 

Мои действия (операции на серверной базе):

1. Я написал программу, которая позволяет определить количество "задействованных" типов документов в текущей базе, их соответствие таблицам sql.

программу можно посмотреть (скачать)  //infostart.ru/public/310610/

запустив программу, я вижу, что в базе более 300 тыс документов, их соответствие таблицам sql, а также таблицы регистров, по которым делают движения задействованные документы базы.

 

2. Делаю такой ход: удаляю все регистры накопления у типов документов, количество которых больше 30000 шт.

В моем случае это документы - ПеремещениеТоваров, ЗаказКлиента, Реализация, ПКО.

 

Для физического удаления регистров, я воспользовался sql запросом из базы 1с, он может быть, например, таким:

 

    СтрПодключения = "Provider=SQLOLEDB.1;Password=" + Пароль + ";Persist Security Info=True;Context connection=true;User ID="
    + Пользователь + ";Initial Catalog=" + База + ";Data Source=" + Сервер;
	
    Connection = Новый COMОбъект("ADODB.Connection");
    Connection.ConnectionString =  СтрПодключения;
    Connection.CommandTimeout = 600;
	
    Попытка
        Connection.Open();
		Сообщить("Подключено!");
    Исключение
      	Connection = Неопределено;
		Сообщить(ОписаниеОшибки());
		Возврат;
 	КонецПопытки;
	
	Запрос = Новый COMОбъект("ADODB.Recordset");
	Запрос.Activeconnection = Connection;
	
	Для Каждого Стр1 ИЗ Объект.ТаблицаСоответствия Цикл
	
		ТекстЗапроса = "DELETE FROM dbo._"+Стр1.ИмяВТаблицеБД;
		
		Попытка
			Запрос.Open(ТекстЗапроса);
		Исключение
			Сообщить(ОписаниеОшибки());
			Возврат;
		КонецПопытки;
	
	КонецЦикла;
	
	Connection = Неопределено;	
	Сообщить("Выполнено!");	

 

Время выполнения запросов по удалению регистров накопления по моим выбранным документам составило примерно 7 - 10 минут. 


Захожу в "Движения документов" - вижу, что движений нет. Сработало все чисто.

 

3. Теперь, нужно "доочистить" все документы от оставшихся движений, пометив их на удаление (отмена проведения). Для этого, я написал вот эту программу

//infostart.ru/public/310737/

Запускаю, обработку. Распроведение всех документов составила приблизительно 2 часа.

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

 

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

 

Для Каждого ТекДанные Из Объект.ДокументыБазы Цикл
		
		Запрос = Новый Запрос;
		Запрос.Текст = "ВЫБРАТЬ
		               |	Данные.Ссылка КАК Ссылка
		               |ИЗ
		               |	Документ." + ТекДанные.ДокументПолноеИмя + " КАК Данные";
			 					
		Выборка = Запрос.Выполнить().Выбрать();
					
		Пока Выборка.Следующий() Цикл
			
			ДокВыб = Выборка.Ссылка.ПолучитьОбъект();
			ДокВыб.Удалить();
						
		КонецЦикла;
						
	КонецЦикла;

Все физическое удаление (по счетчику секунд) - у меня составило приблизительно 5 часов.

После завершения удаления - делаю проверку базы ТИИ - битых ссылок не обнаружил. Все документы удалены.

очистка базы sql запросы удаление документов

См. также

Инструкции пользователю Бизнес-аналитик Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 Россия Управленческий учет Платные (руб)

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

8400 руб.

05.08.2022    7954    3    0    

47

Инструментарий разработчика Инструкции пользователю Бесплатно (free)

Макропад — это программируемая мини-клавиатура, позволяющая назначить на его кнопки выполнение каких-то действий: от управления громкостью медиа проигрывателя и до ввода макросов для автоматизации каких-то действий, например, для ввода с клавиатуры шаблонов кода 1С. Все участники конференции INFOSTART TECH EVENT 2024 получили в комплекте участника такое устройство. В этой статье - необходимые файлы и инструкции по настройке.

10.10.2024    4792    kuntashov    55    

14

Инструкции пользователю Бизнес-аналитик Бухгалтер Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Абонемент ($m)

Практические советы пользователям по настройке отчетов на СКД. Такие отчеты - как встроенные, так и внешние - используются в современных типовых конфигурациях: УТ 11, КА 2, БП 3.0, ЗУП 3.1 и других.

2 стартмани

11.03.2024    4768    50    accounting_cons    1    

17

Инструкции пользователю СКД Бухгалтер Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

Простые приемы работы с отчетами на СКД. Что нужно знать пользователю про настройку отчетов, чтобы использовать их на полную катушку, – продолжение.

16.10.2023    14023    accounting_cons    9    

13

Взаиморасчеты Инструкции пользователю Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Бесплатно (free)

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

16.05.2023    12191    accounting_cons    4    

14
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Fox-trot 163 08.11.14 10:52 Сейчас в теме
По четвертому пункту. Раз уж выбрал технологию ADO, то имхо и нужно было выжимать из нее по максимуму. Документы мона удалять по уже установленному реквизиту _Marked = 1, а для подчиненных таблиц = табличных частей использовать что-то типа
DELETE FR OM _Document218_VT4768 WHERE (_Document218_IDRRef IN (SEL ECT _IDRRef FR OM _Document218 WH ERE (_Marked = 1)))

Получилось бы на порядок быстрее. Я гарантирую это =)
2. aximo 2100 08.11.14 11:49 Сейчас в теме
(1) согласен, но времени бы на подготовку-написание ушло бы больше
9. jan27 733 11.11.14 08:36 Сейчас в теме
(1) удаление происходит медленнее, чем truncate. Если удаляемых документов больше чем нужно оставить, проще сделать копию таблицы, очистить её truncate, а затем скопировать нужные строки из первоначальной таблицы
ojiojiowka; +1 Ответить
10. aximo 2100 11.11.14 09:31 Сейчас в теме
(9) jan27, да кто против - делай. вопрос времени. процесс удаления регистров через delete 10 минут... выигрыш на фоне остального процесса - 7 часов - сомнителен.
3. Иной 08.11.14 23:18 Сейчас в теме
А может стоило бы посмотреть в сторону планов обмена или конвертации данных?
Решение достаточно рискованное, в плане целостносности. И вопрос остатков не раскрыт...
4. SemenovaMarinaV 09.11.14 15:38 Сейчас в теме
5. necropunk 9 10.11.14 15:51 Сейчас в теме
Но не очень понял код удаления из регистров - целиком регистры грохали или как? Не вижу отбора по документу, и, что такое Объект.ТаблицаСоответствия? На форме что-то? Вообще, наверное, давно пора написать нормальную обработку, которая по запросу будет брать список документов, получать имена регистров куда они пишут данные, чистить с отбором по ссылке, а потом и сами документы грохать.
6. SemenovaMarinaV 10.11.14 17:53 Сейчас в теме
Согласна, хотелось бы универсальную обработку
7. CheBurator 2712 10.11.14 20:34 Сейчас в теме
ну вообщем-то надо чистить и журналы?
документы могут также преспокойненько упоминаться в реквизитах справочников.. (не знаю как в типовых, а вообщем - не запрещено).
.
универсальную вещь будет написать сложно.
8. aximo 2100 10.11.14 21:14 Сейчас в теме
(7) журнал чистятся в распроведении документов. бог миловал - в моем случае в реквизитах справочников документы не упоминаются. И это подтвердило ТИИ - битых ссылок не обнаружено

какая должна быть универсальная обработка? на все надо время просто, которого как всегда нет.
11. dunaev.anton 13.11.14 01:01 Сейчас в теме
в чем смысл всей затеи ? оставить только справочники и т.д. все кроме документов и их движений ?

элементарно решается через план обмена - через создание подчиненного узла , состав которого можно полностью контролировать
12. wowkai 4 14.11.14 23:52 Сейчас в теме
Интересный метод. я бы еще "тестирование и исправление" запустил.
13. bforce 482 29.11.14 22:35 Сейчас в теме
(0), рекомендую посмотреть в сторону инструкции TRUNCATE вместо DELETE. Заметите существенную разницу при очистке больших таблиц.

Непонятно, зачем нужен пункт 3. У вас документы куда-то пишут в независимые регистры? Зачем их распроводить, вы ведь и так все движения уже "убили"?

Документы с табличными частями в пункте 4 тоже надо было удалять средсвами SQL, иначе нет смысла смотреть вообще в его сторону.
Я могу вам набросать маленький скрипт, который выплит разом все записи документов, их табличных частей и регистров. А так получается очень сомнительный симбиоз.

А, вообще, зачем все это? Не проще загрузить из dt чистую базу и перенести настройки учетной политики, константы и что-то нибудь еще нужное в чистую базу?

(7), чистить еще много чего придется, например, последовательности, таблицы регистрации изменений, регистры заточенный под обмены данными, предметы взаимодействий, да мало ли чего еще там написано.
ojiojiowka; alexscamp; jan27; +3 Ответить
14. alexscamp 28.12.14 19:34 Сейчас в теме
"без потери ссылочности базы"... не знаю что такое ссылочность базы, наверное все-таки опечатка, но даже так этот пункт не выполнен и он критичен - контроля ссылочной целостности тут нет, пожалуйста, не вводите людей в заблуждение, вдруг кто-то не прочтет комментариев и будет использовать у себя. То, что на вашей конкретной базе ТиИ не показало битых ссылок - частность (т.е. - повезло).
"удаляю все регистры накопления", "Для физического удаления регистров" - пока не разглядишь "delete from", совершенно не понятно, что имелось ввиду. Кажется, что вы их в конфигураторе решили удалить, или прямо "физически" из БД, типа "drop table"... тоже можно конечно считать что опечатка или придирка к формулировке, но вводит в заблуждение второй раз.
Ну и самое главное конечно - truncate а не delete, и не раскрыта тема остатков, про которые уже выше упомянули. Идеи неплохи и правильны, но с кучей оговорок, которых тут нет.
15. Светлый ум 415 21.01.21 15:33 Сейчас в теме
Оставьте свое сообщение