Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Свертка базы (число прочтений - 15340 )
zenik
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 109
Зарегистрирован: 09. Октября 2007
Свертка базы
06. Мая 2008 :: 06:38
Печать  
Помогите плз. боюсь что нить упустить, вот и прошу помощи. Проблема в следующем: имеется БД, достаточно серьезного объема. Дело конечно не в размере, но штатными средствами 1С ее уже не обрезать (слишком много времени требуется).  Пробовал уже много разных вариантов. Самый приемлемый выбрал следующий:
Создание нового документа в составе конфигурации - перенос остатков (идея подсмотренная) и при его проведении запись в регистры всех итогов (по регистрам и бухгалтерских) на позицию документа. т.е. один документ создает копию итогов по всем регистрам (такое я уже делал, достаточно быстро проходит), ну и создает проводки. Остается только одно - удалить данные до этого документа. Вот тут и начинается свистопляска. Опять же где то вычитал и наваял след. запрос:
Код
Выбрать все
UPDATE	_1SJOURN
SET
	CLOSED=4,
	ISMARK=1
WHERE
	IDDOCDEF NOT IN (15391,15145)
	AND DATE_TIME_IDDOC < '20071231Z 


Получилось достаточно быстро и главное результат, тот который я ожидал - документы помечены на удаление! Но! Как всегда, если бы не какое-нибудь "но". Первое что я обнаружил - количество помеченных на удаление объектов составляет почти 400 000. И штатными средствами 1С вываливается с сообщением о недостатке памяти, хотя ее (памяти) 8гб. (это все на сервере происходит). Но это пол беды, за 15 минут пишется обработка, которая с помощью НайтиПомеченныеНаУдаление() и УдалитьОбъекты() порциями начинает удалять помеченные на удаление с проверкой ссылочной целостности (что важно!).

Ах, да забыл указать, что после того, как я пометил на удаление документы, в конфигураторе сделал пересчет итогов. Попробовал парочку отчетов в удаленном периоде (один штатными средствами, другой прямыми запросами) - отчеты пустые, значит данных нет! Но не тут то было. Открываю Query Analyzer и запросом
Код
Выбрать все
SELECT top 1000 *
FROM RA4623 AS P
INNER JOIN _1SJourn AS J ON J.IDDOC=P.IDDOC
ORDER BY J.DATE_TIME_IDDOC 

получаю данные в удаленном периоде. Что не есть гут. Правда SELECT * FROM RG... Не дает цифр в удаленном периоде... Помимо движений в регистре остались так же и проводки в документах, причем они уже по отчетам видны....

Внимание! Вопрос: как бы покошернее удалить данные в сворачиваемом периоде? Я имею в виду движения по регистрам и проводки у документов. Почти каждый документ имеет как проводки, так и движения по регистрам (обычно не меньше 3-х регистров). Ни один документ не делает записи в периодику, так что на этом можно не заострять внимания.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Свертка базы
Ответ #1 - 06. Мая 2008 :: 07:04
Печать  
А если по-тупому: удалить все записи движений и итогов, а потом перепровести документы с начала периода?
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Свертка базы
Ответ #2 - 06. Мая 2008 :: 07:16
Печать  
На вот посмотри, писал давно, но базу этим реально обрезали
  

WrapSQL.rar ( 99 KB | Загрузки )
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Свертка базы
Ответ #3 - 06. Мая 2008 :: 07:21
Печать  
Тут документы для ввода остатков
  

MD.rar ( 12 KB | Загрузки )
Наверх
ICQ  
IP записан
 
zenik
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 109
Зарегистрирован: 09. Октября 2007
Re: Свертка базы
Ответ #4 - 06. Мая 2008 :: 07:30
Печать  
JohnyDeath писал(а) 06. Мая 2008 :: 07:04:
А если по-тупому: удалить все записи движений и итогов, а потом перепровести документы с начала периода?


Код
Выбрать все
SELECT COUNT(*)
FROM _1SJOURN
WHERE
	IDDOCDEF NOT IN (15391,15145)
	AND DATE_TIME_IDDOC > '20071231Z'
	AND ISMARK=0 



64922. Сколько времени займет проведение такого числа документов? Думается мне, что не одну даже неделю (как никак 4 месяца работы).

Моя же цель такая: сегодня перестали работать, за ночь я формирую документ остатков, помечаю на удаление документы, и удаляю движения по ним. Делаю пересчет итогов. На следующий день люди приходят на работу, открывают 2 базы (до и после свертки), сверяют. Если данные в свернутой базе не изменены - работают в новой, если нет, то продолжают работать в не свернутой. Но хочеться, что бы все было правильно и потом я планомерно буду удалять уже помеченные документы с контролем ссылок. Поэтому мне бы по минимуму применять штатные средства - так как это долго. Т.е. времени ночь, ну если говорить конкретнее то с 20:00 до 8:00 - 12 часов. (ну с утреце можно хапнуть пару тройку часов). Вообщем времени не так уж и много.
  
Наверх
 
IP записан
 
zenik
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 109
Зарегистрирован: 09. Октября 2007
Re: Свертка базы
Ответ #5 - 06. Мая 2008 :: 07:33
Печать  
Nick писал(а) 06. Мая 2008 :: 07:16:
На вот посмотри, писал давно, но базу этим реально обрезали

Спасибо. Ща гляну.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Свертка базы
Ответ #6 - 06. Мая 2008 :: 11:01
Печать  
Вот статья Касперка:

http://www.kb.mista.ru/article.php?id=250

Я немного подточил это дело под себя, но суть, думаю, понятна
Скрипт можно сгенерить прямо в 1С
Единственное- ТиИ (это долго на больших базах)
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
zenik
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 109
Зарегистрирован: 09. Октября 2007
Re: Свертка базы
Ответ #7 - 07. Мая 2008 :: 09:16
Печать  
Новую тему создавать не буду. Вот наваял запрос:
Код
Выбрать все
DELETE FROM RA422 WHERE EXISTS(
SELECT
	*
FROM RA422 AS R
INNER JOIN _1SJOURN AS J ON J.IDDOC=R.IDDOC
WHERE DATE_TIME_IDDOC <= '20071231Z') 



Конечно же хотел удалить движения до даты, но удалилось все... Подскажите, как правильно создать запрос.
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Свертка базы
Ответ #8 - 07. Мая 2008 :: 09:24
Печать  
Ну так ты сначала проверь какие записи твоим подзапросом выбираются, по моему у тебя там мало букв Z попробуй ZZZZZZZ
  
Наверх
ICQ  
IP записан
 
zenik
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 109
Зарегистрирован: 09. Октября 2007
Re: Свертка базы
Ответ #9 - 07. Мая 2008 :: 09:31
Печать  
Не, записи нормально выбирает. Одной Z хватало.... По крайней мере SELECT и в случае:
Код
Выбрать все
DELETE FROM _1SOPER
WHERE DATE_TIME_DOCID <= '20071231Z' 


А вот тут что то не так.... Причем сам селект внутри отрабатывает нормально.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Свертка базы
Ответ #10 - 07. Мая 2008 :: 09:35
Печать  
Удаляй сначала документы в журнале
А из регистров и проч - то чего нет в журнале
Чего мудрить?
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Свертка базы
Ответ #11 - 07. Мая 2008 :: 09:43
Печать  
zenik писал(а) 07. Мая 2008 :: 09:16:
Новую тему создавать не буду. Вот наваял запрос:
Код
Выбрать все
DELETE FROM RA422 WHERE EXISTS(
SELECT  
	*
FROM RA422 AS R
INNER JOIN _1SJOURN AS J ON J.IDDOC=R.IDDOC
WHERE DATE_TIME_IDDOC <= '20071231Z') 



Конечно же хотел удалить движения до даты, но удалилось все... Подскажите, как правильно создать запрос.


А конечно у тебя это условие всегда срабатывает
  
Наверх
ICQ  
IP записан
 
zenik
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 109
Зарегистрирован: 09. Октября 2007
Re: Свертка базы
Ответ #12 - 07. Мая 2008 :: 10:09
Печать  
Цитата:
Удаляй сначала документы в журнале
А из регистров и проч - то чего нет в журнале
Чего мудрить?


Так оно еще как бы есть в журнале... Вот наработки:
Пометка на удаление в журнале:
Код
Выбрать все
UPDATE	_1SJOURN
SET
	CLOSED	=4,
	ISMARK	=1,
	RF18501	=0,
	RF422	=0,
	RF170	=0,
	RF1609	=0,
	RF17104	=0,
	RF15770	=0,
	RF1113	=0,
	RF4623	=0,
	RF939	=0,
	RF4918	=0,
	RF15394	=0,
	RF15405	=0,
	RF15659	=0,
	RF912	=0,
	RF17806	=0,
	RF6070	=0,
	RF1148	=0,
	RF15440	=0,
	RF181	=0,
	RF15606	=0,
	RF15247	=0,
	RF15251	=0
WHERE
	IDDOCDEF NOT IN (15391,15145)
	AND DATE_TIME_IDDOC <= '20071231Z'
 



Чистка БИ:
Код
Выбрать все
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' 



Вот таким же макаром хочу снести записи из регистров... Только даты там сразу нет, вот и хочу привязаться к дате из журнала, а как это сделать недотумкаю Печаль
  
Наверх
 
IP записан
 
zenik
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 109
Зарегистрирован: 09. Октября 2007
Re: Свертка базы
Ответ #13 - 07. Мая 2008 :: 10:10
Печать  
Nick писал(а) 07. Мая 2008 :: 09:43:
А конечно у тебя это условие всегда срабатывает

Вот я что и спрашиваю, как правильно будет?
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Свертка базы
Ответ #14 - 07. Мая 2008 :: 10:16
Печать  
Я ж тебе выложил пример, там всё это есть
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать