1C — SQL. Быстрое удаление документов.

Опубликовано Опубликовано в рубрике 1C Программирование, MS SQL Server, Разное

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

КАК МАКСИМАЛЬНО БЫСТРО ВЫПОЛНИТЬ СВЕРТКУ БАЗЫ 1С?

Если Ваша база работает на SQL сервере, тогда решение этой задачи можно выполнить, используя его возможности. Что для этого нужно предпринять?

Немного теории

В каталоге информационной базы находится файл 1Cv77.DDS, в котором хранятся данные о структуре конфигурации. Из этого файла становится понятно, что шапки документов и их табличные части хранятся в таблицах, которые начинаются на DT и DH. Следовательно, нам нужно получить список таблиц базы данных, в которых хранятся данные по документам.

Установим пометку удаления на документах:

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

UPDATE _1sjourn 
SET ismark = 1, closed=4 
WHERE (Date_Time_IDDOC < 'ДатаУдаленияДокументов')

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

Открываем Enterprise Manager SQL Server 2000. Открываем список таблиц информационной базы. Выделяем все, которые начинаются на DH и DT и делаем экспорт списка.

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

К настоящему этапу у нас все документы помечены на удаление, список таблиц базы данных имеются. Следовательно, не что не мешает нам удалить не нужные нам документы. Делается все это очень просто. При помощи такого кода:

Delete From d From DH111(ИЛИDT111) d 
INNER JOIN _1SJourn j on d.iddoc = j.iddoc and j.ismark = 1 
WHERE j.Date_Time_IDDoc < 'ДатаУдаленияДокументов'

Заключительные шаги.

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

DELETE FROM _1scrdoc 
WHERE Child_Date_Time_IDDoc <= 'ДатаУдаленияДокументов'
DELETE FROM _1SJourn 
Where ( (Date_Time_IDDOC < 'ДатаУдаленияДокументов') 
AND (ISmark = 1))

В результате выполнения этих шагов мы сможем очистить базу данных от не нужных документов в считанные минуты. Тем самым свертка базы данных 1С осуществляется во многие разы быстрее штатных механизмов.