Удаление сотен тысяч документов за несколько часов из УТ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С. Инструкция для пользователя

Инструкции пользователю Платформа 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    2651    22    accounting_cons    1    

14

Пользовательские настройки отчетов 1С. Часть 1. Простые и расширенные настройки

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

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

18.09.2023    6677    accounting_cons    5    

29

Оплата счетов в 1С:Бухгалтерии: выставлено и оплачено

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

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

16.05.2023    5909    accounting_cons    4    

13

Дополнительные расходы при приобретении товаров в 1С:Управление торговлей 11.5

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

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

27.02.2023    9539    TINa78    5    

24

Использование типовых возможностей 1С и их расширение. Часть 2

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

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

03.11.2022    3897    ixijixi    7    

18

Использование типовых возможностей 1С и их расширение. Часть 1

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

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

29.10.2022    7668    ixijixi    7    

58

Описываем ошибки правильно. Правило трех вопросов

Инструкции пользователю Конфигурации 1cv8 Бесплатно (free)

Коллеги, вне зависимости от того, кем Вы работаете, если Вы хоть как-то косвенно связаны с 1С - данная статья для Вас! Все мы либо сообщаем кому-то об ошибках, либо по другую сторону баррикад - исправляем ошибки. В статье расскажу, как максимально просто и эффективно общаться друг с другом на тему ошибок.

18.08.2022    5925    biimmap    20    

36
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Fox-trot 156 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 2027 08.11.14 11:49 Сейчас в теме
(1) согласен, но времени бы на подготовку-написание ушло бы больше
9. jan27 732 11.11.14 08:36 Сейчас в теме
(1) удаление происходит медленнее, чем truncate. Если удаляемых документов больше чем нужно оставить, проще сделать копию таблицы, очистить её truncate, а затем скопировать нужные строки из первоначальной таблицы
ojiojiowka; +1 Ответить
10. aximo 2027 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 3119 10.11.14 20:34 Сейчас в теме
ну вообщем-то надо чистить и журналы?
документы могут также преспокойненько упоминаться в реквизитах справочников.. (не знаю как в типовых, а вообщем - не запрещено).
.
универсальную вещь будет написать сложно.
8. aximo 2027 10.11.14 21:14 Сейчас в теме
(7) журнал чистятся в распроведении документов. бог миловал - в моем случае в реквизитах справочников документы не упоминаются. И это подтвердило ТИИ - битых ссылок не обнаружено

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

элементарно решается через план обмена - через создание подчиненного узла , состав которого можно полностью контролировать
12. wowkai 4 14.11.14 23:52 Сейчас в теме
Интересный метод. я бы еще "тестирование и исправление" запустил.
13. bforce 481 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. Светлый ум 406 21.01.21 15:33 Сейчас в теме
Оставьте свое сообщение