Уменьшение размера базы

Allexei

Well-known member
02.05.2008
322
1
#1
Всем привет.Подскажите плиз как решить такую проблему.Есть 2 конфы Торговля- Склад и Бухгалтерия, работа с ними ведется уже года 4, обе базы стали огромного размера!ТС 3 гига, Б- гиг, ну и соотвественно тормоза из- за этого дикие!Как можно уменьшить их размеры?Пробовал сделать свертку, размер ни на метр не уменьшился.
 

Zab

Well-known member
07.08.2006
583
0
#2
Если база лежит в dbf, то после свертки надо еще убрать из файлов удаленные строки. (dbf на самом деле не удаляет записи непосредственно, а отмечает их как удаленные.) Это можно сделать в режиме тестирование и исправление, в конфигураторе. Установи птичку "упаковка таблиц информационной базы"
 

Allexei

Well-known member
02.05.2008
322
1
#3
Сделал как ты сказал, свернул базу по прошлый месяц, в конфигураторе поставил галочку.Результат минус 5 метров.Маловато.... Может подскажешь еще какиенибудь способы?
 
B
#4
ТС насколько помню использует в работе Оперативные итоги, а свертка влияет на бухгалтерские. Попробуй использовать для обрезания своей базы какой нибудь специализированной обработкой для ТС.
 
A

AMaDeus

#5
Можно удалить лишние/старые внешние отчеты, например, в бух-ии регламентированная отчетность прилично места занимает; обрезать файлик 1cv7.mlg .
Ну и последнее и самое сложное - обработку каку-нить набацай убирающую из базы все старые неактуальные данные.
 
L
#6
Можно удалить лишние/старые внешние отчеты, например, в бух-ии регламентированная отчетность прилично места занимает; обрезать файлик 1cv7.mlg .
Это как в анекдоте... про еврея и козу. "А теперь продай козу и жить станет легче..."
Из-за внешних отчетов и прочего стороннего файла в базе - работа не замедляется. Файл mlg тормозит, но ооочень мало. Так, что удалением всякого мусора из папки с базой скорости не добавишь.

Тут надо написать грамотную свертку заточенную именно под вашу конфигурацию, обрезать базу, а уж потом делать упаковку dbf-ок, чистить ЖР и прочие косметические вещи.
 
B
#7
Можно удалить лишние/старые внешние отчеты
Ага представляю скоко можно писать чтоб аж 3 гига занять

в бух-ии регламентированная отчетность прилично места занимает
Да, это приличное место для 3 гигов будет каплей в море

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

Allexei

Well-known member
02.05.2008
322
1
#8
Хм... Все эт конечно сдорова....но написать обработку которая бы грамотно все урезала мне наврядли по силам.Уж очень много в 1с взаимосвязаных обектов.Я вот что мыслю, может проше создать новую базу и в нее выгрузить данные?
 
L
#9
Allexei

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

Если сможете сделать такой перенос, который перетащит справочники и документы в новую базу, а затем, проанализирует данные с начала работы по дату свертки и остатки перенесет в новый документ - тогда вперед.
Но это ИМХО из пушки по воробьям. Проще написать свертку.

А вообще - советую обратиться к специалистам, если уж боитесь, что не хватит квалификации на реализацию того или иного механизма.
 

Zab

Well-known member
07.08.2006
583
0
#10
Allexei, че-то подумалось... может у тебя в каталоге архивов море каких-нить или еще чего, к данным основным отношения не имеющее? А ты мучаешь бедную базу. Основной объем должны занимать *.dbf и *.cdx файлики. Всякие архивы, экзешники, экселевское файло, *.mxl, *.xml могут случайно быть забытыми и неплохо весить... попробуй убрать из базы всякие гадости подозрительные.
 
S

skazan

#11
Попробуй: В конфигураторе - "Выгрузить данные", "Загрузить данные"
У меня при такой операции база Торговли уменьшилась с 2 гиг до 1,2. Загружает, правда долго, я оставлял на ночь.
 
L
#12
Allexei, че-то подумалось... может у тебя в каталоге архивов море каких-нить или еще чего, к данным основным отношения не имеющее? А ты мучаешь бедную базу. Основной объем должны занимать *.dbf и *.cdx файлики. Всякие архивы, экзешники, экселевское файло, *.mxl, *.xml могут случайно быть забытыми и неплохо весить... попробуй убрать из базы всякие гадости подозрительные.
Человек же написал "тормоза дикие"... :D
 
K
#13
Если такой размер баз я б задумался о переходе на SQL
Хм... Все эт конечно сдорова....но написать обработку которая бы грамотно все урезала мне наврядли по силам.Уж очень много в 1с взаимосвязаных обектов.Я вот что мыслю, может проше создать новую базу и в нее выгрузить данные?
Если не по силам и денег жаль то вено, заведи новую базу введи остаточки и сфё
 

vbs

Well-known member
18.02.2007
1 708
1
#14
Выгрузку в бухгалтерии можно сделать так :
// формируем таблицу значений
DocT = CreateObject("ValueTable");
DocT.NewColumn("Account","String",12,,"Счет",24);
DocT.NewColumn("SumR","Number",15,2,"Д*цензура*",14);
DocT.NewColumn("SumP","Number",15,2,"Кредит",14);
DocT.NewColumn("KD","Number",12,2,"Кол Д*цензура*",14);
DocT.NewColumn("KK","Number",12,2,"Кол Кредит",14);
DocT.NewColumn("SK1","String",45,,"Вид",24);
DocT.NewColumn("SK2","String",45,,"Вид",24);
DocT.NewColumn("SK3","String",45,,"Вид",24);
DocT.NewColumn("Code","String",12,,"Код",12);
DocT.NewColumn("Code2","String",12,,"Код",12);
DocT.NewColumn("Code3","String",12,,"Код",12);

BTotal = CreateObject("AccountTotals");
BTotal.UseSubconto(Account.SubcontoKind(1),,1,0);
BTotal.UseSubconto(Account.SubcontoKind(2),,1,0);
BTotal.UseSubconto(Account.SubcontoKind(3),,1,0);

if BTotal.DoQuery(Date2,Date2,Account) = 1 then
BTotal.SelectSubconto();
While BTotal.GetSubconto() = 1 do
// в созданную таблицу выгружаем итоги
// чтобы не перегружать пост - пример для 1-го субконто
DocT.NewLine();
DocT.SK1 = TrimAll(String(Account.SubcontoKind().SubcontoType()));

if BTotal.Account.Активный = 1 then
if BTotal.СКД() < 0 then
DocT.SumP = - BTotal.СКД();
endif;
endif;
if BTotal.Account.Активный = 2 then
if BTotal.СКК() < 0 then
DocT.SumR = - BTotal.СКК();
endif;
endif;
if Find(DocT.SK1,"Справочник") > 0 then
DocT.Code = BTotal.Субконто().Code;

endif;
if Find(DocT.SK1,"Перечисление") > 0 then
DocT.Code = BTotal.Субконто().Number();

endif;
DocT.Account = TrimAll(String(BTotal.Account));
if BTotal.СКК() > 0 then
DocT.SumP = BTotal.СКК();
DocT.KK = BTotal.СКК(3)
endif;

if BTotal.СКД() > 0 then
DocT.SumR = BTotal.СКД();
DocT.KD = BTotal.СКД(3)
endif;
enddo;
//отдельно надо обрабатывать ситуацию
// if (Account.SubcontoCount() = 0) OR (Account.TurnoversOnly() = 1) then
//но это уже детали
// далее таблицу сохраняем во внешнем файле (я предпочитаю DBF) и другой программой аналогично загружаем в пустую копию базы
Кстати, сам напишешь все эти примочки - приобретешь неоценимый опыт