Я никого не призываю и не рекомендую так делать, но если время дорого, а свернуть базу хочется, то без этих запросов никак. Обработки по свертке даже с SQL запросами были опробованы и оставлены только для автоматического создания остатков и свертки регистров. Документы они все удаляют крайне долго, даже те, в которых нет контроля целостности ссылок.
У меня камнем преткновения были документы Заказ покупателя, которые имели 4 табличных части и вели свою историю аж с 2005 года. Накопилось там документов порядка полутора миллионов, казалось бы, не так уж много, но удаление их занимало адское количество времени и не давало провести свертку до утра, в связи с чем родился такой маленький sql.
В принципе это применимо к любым документам, но лучше сначала на котятах потренироваться. Пока таблицы вашей sql базы не станут вам родными и вы не сможете по памяти набивать названия таблиц основных регистров и документов.
/****** Набор запросов для очистки документов заказы покупателей по дате ******/
---Как реально быстро почистить документы от даты.... А то обработки на Инфостарте тормозят дружно, даже где написано SQL
--Не забудьте свернуть регистры по документам. Например обработкой свертка и ввод начальных остатков.
--Имена таблиц в SQL можно получить любой обработкой их полно, например SQL БАЗОМЕР (заодно посмотрите, с чего начать)
--После удаления больших таблиц документов и закрытия регистров, даже штатная свертка отрабатывает на ура и быстро.
--Только на тестовой базе сначала, и BACKUP BACKUP BACKUP!!!!!
-- _IDRRef Документа наименьший можно получить запросом
SELECT TOP 1 FROM [sql_new1].[dbo].[_Document134]
WHERE _Date_Time < '2016-01-01 00:00:00.000'
ORDER BY _IDRRef
-- По дате первый IDRRef брать НЕЛЬЗЯ! Надо именно по значению. Иначе можете удалить нужные табличные части заказов.
-- Чистим табличные части:
DELETE
FROM [sql_new1].[dbo].[_Document134_VT2446]
WHERE _Document134_IDRRef < 0x8267002590D8EFB911E5891E7F179918
DELETE
FROM [sql_new1].[dbo].[_Document134_VT2468]
WHERE _Document134_IDRRef < 0x8267002590D8EFB911E5891E7F179918
DELETE
FROM [sql_new1].[dbo].[_Document134_VT2476]
WHERE _Document134_IDRRef < 0x8267002590D8EFB911E5891E7F179918
DELETE
FROM [sql_new1].[dbo].[_Document134_VT2489]
WHERE _Document134_IDRRef < 0x8267002590D8EFB911E5891E7F179918
-- И сам документ
DELETE
FROM [sql_new1].[dbo].[_Document134]
WHERE _IDRRef < 0x8267002590D8EFB911E5891E7F179918
-- если много, удаляем кусками, чтобы юзеры даже не почуяли...
DECLARE @RowsDeleted INTEGER
DECLARE @RowsTo INTEGER
SET @RowsDeleted = 1
SET @RowsTo= 1
WHILE (@RowsDeleted > 0 and @RowsTo < 16000000)
BEGIN
DELETE TOP (50000) FROM _Document134 WHERE _Date_Time < '2016-01-01 00:00:00.000'
SET @RowsDeleted = @@ROWCOUNT
SET @Rowsto = (@Rowsto+@RowsDeleted)
-- WAITFOR DELAY '00:00:001' --чтоб можно было работать без блокировки таблицы, можно удалить
END