Так есть некоторые наработки, надо посмотреть одобрить/отругать, вообщем оценить то что есть, может так и не правильно. Перебрал подряд все таблицы _1S*, пришел к следующему выводу:
_1SACCSEL - Отборы по проводкам. (да)
_1SBKTTL - Остатки по кварталам. (да)
_1SBKTTLC - Итоги оборотов. (да)
_1SENTRY - Все проводки операций. (да)
_1SOPER - Операции, которые формируют проводки. (да)
_1SSBSEL - Отбор проводок по субконто (да)
_1SJOURN - Журнал документов (да)
Остальные таблицы править без надобности (кроме 1sconst, но до нее я еще не добрался). Скрипт правки 1sjourn я уже приводил, он остался без изменений. Смысл его прост: устанавливаем признак непроведености, пометку на удаление, и все RF* (принадлежность к регистрам) выставляем в 0.
Далее, чистим регистры. К каждому регистру применен вот такой не хитрый скрипт:
TRUNCATE TABLE RG18501
DELETE FROM RA18501 WHERE IDDOC IN (SELECT IDDOC FROM _1SJOURN WHERE DATE_TIME_IDDOC <= '20071231Z')
Удаляем таблицу итогов (RG*) и записи до нашей даты Х (RA*)
И БИ. Сносим вот таким скриптом:
DELETE FROM _1SOPER
WHERE DATE_TIME_DOCID <= '20071231Z'
DELETE FROM _1SENTRY
WHERE DATE_TIME_DOCID <= '20071231Z'
DELETE FROM _1SACCSEL
WHERE DATE_TIME_DOCID <= '20071231Z'
DELETE FROM _1SSBSEL
WHERE DATE_TIME_DOCID <= '20071231Z'
DELETE FROM _1SBKTTLC
WHERE DATE <= '20071231'
DELETE FROM _1SBKTTL
WHERE DATE <= '20071231'
Только вот по поводу _1SBKTTLC и _1SBKTTL терзают меня смутные сомнения. Если это таблицы итогов, может к ним применить TRUNCATE TABLE? Все равно потом пересчет итогов делать.
Вот что получилось. Вроде неплохо. Но вопрос по константам остается открытым. Nick, свертка констант в твоей обработке присутствует, но поскольку делает ее сама 1С - делает долго. Процесс переноса констант у меня занял около 2-х часов. Это для меня нереально долго. У меня самый долгий скрипт:
TRUNCATE TABLE RG4623
DELETE FROM RA4623 WHERE IDDOC IN (SELECT IDDOC FROM _1SJOURN WHERE DATE_TIME_IDDOC <= '20071231Z')
выполнялся 40 минут, но он и удалил 10,5 млн. записей. А констант всего навсего:
SELECT Count(*) FROM _1SCONST AS k
INNER JOIN _1sJourn AS j ON j.IDDOC=k.DOCID
WHERE lTrim(rTrim(DOCID))<>'0'
- 11966
Так что пока думаю над периодическими...