Каталог решений - Обрезание (свертка) ТиС

Обрезание (свертка) ТиС

Обрезание (свертка) ТиС

В наличии

В данной статье я опишу универсальную технологию обрезания (сверки) БД.

Категория:

Описание

Вы наверно частенько встречались с ситуацией что, в конце концов, база вырастает до таких объемов, что уже не выносимо с ней работать, а если она ещё и DBF то и очень опасно.

И когда я пришел недавно на новую работу, где всё работает на ТиС, то я столкнулся с тем что пока обрезать базу. Раньше если честно я с ТиС не имел дела, и для меня была в новинку данная операция.

Вначале я стал искать в интернете готовые решения, даже попробовал стандартную обрезку 1с «СверткаБазы» которая у меня работала 2 дня и в конце концов у меня кончилось терпение и её убил.

Потом я решил понять что же  надо по сути мне сделать, и я понял что все очень просто. Вся идея сводилась к тому, что просто нужно на дату обреза просто «сфотографировать» остатки по всем регистрам остатка и всё.

И всё оказалось не так уж и сложно, хотя в интернете до сих пор нету грамотных решений по данному вопросу, а если и есть то только за деньги 🙂

Кстати это ещё не всё. После чего нужно удалить все доки. Если у вас SQL то здесь вам повезло. Делаем так, в QA выполняю данный запрос, и удаляю все документы до указанной даты буквально за 20 минут (а из не мало с учётом того что в день 300 доков, а удалять надо полтора года)

USE MyTestBase

Go

CREATE TABLE ##ID



(IDDOC char(9) primary key clustered)

Go

INSERT INTO ##ID



SELECT DISTINCT IDDOC

FROM _1SJOURN

WHERE (DATE_TIME_IDDOC < '20060530')

Go

BEGIN TRANSACTION

DECLARE Mycur cursor for

SELECT sysobjects.name,syscolumns.name

FROM syscolumns INNER JOIN

sysobjects ON syscolumns.id = sysobjects.id

WHERE (syscolumns.name = N'iddoc') OR

(syscolumns.name = N'docid')

OPEN MyCur

DECLARE @TableName varchar(20)

DECLARE @ColName varchar(20)

FETCH NEXT FROM MyCur INTO @TableName, @ColName

WHILE @@FETCH_STATUS = 0

BEGIN

EXEC ('Delete from '+@TableName+' with (tablock) where '+@ColName+' IN (Select IDDOC FROM ##ID)')



FETCH NEXT FROM MyCur INTO @TableName, @ColName

END

CLOSE MyCur

DEALLOCATE MyCur

COMMIT TRANSACTION

DROP TABLE ##ID

Но после этого я столкнулся с тем что движения остаются по удалённым документам.
В связи с этим я применил ещё один запрос именно по регистру ПартииПаличия

use НазваниеБазы 

DELETE FROM RA328

WHERE IDDOC NOT IN (SELECT IDDOC FROM _1sjourn (nolock))

после чего я в конфигураторе я сделал Тестирование и исправление ИБ
В нём я поставил все галочки и в настройках выбрал «Очищать ссылки» и «Удалять данные объекты»
Вот и вест процесс обрезки 🙂
У меня он занял со всеми исправлениями часов 6.

has been added to your cart:
Оформление заказа