Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум программистов _ 1C и всё что с ней связано _ Уменьшение размера базы

Автор: Allexei 2:05:2008, 04:59

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

Автор: Zab 2:05:2008, 05:25

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

Автор: Allexei 3:05:2008, 03:44

Сделал как ты сказал, свернул базу по прошлый месяц, в конфигураторе поставил галочку.Результат минус 5 метров.Маловато.... Может подскажешь еще какиенибудь способы?

Автор: BVS 4:05:2008, 14:41

ТС насколько помню использует в работе Оперативные итоги, а свертка влияет на бухгалтерские. Попробуй использовать для обрезания своей базы какой нибудь специализированной обработкой для ТС.

Автор: AMaDeus 5:05:2008, 05:14

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

Автор: LSH 5:05:2008, 14:38

Цитата(AMaDeus @ 5:05:2008 - 07:14) *
Можно удалить лишние/старые внешние отчеты, например, в бух-ии регламентированная отчетность прилично места занимает; обрезать файлик 1cv7.mlg .

Это как в анекдоте... про еврея и козу. "А теперь продай козу и жить станет легче..."
Из-за внешних отчетов и прочего стороннего файла в базе - работа не замедляется. Файл mlg тормозит, но ооочень мало. Так, что удалением всякого мусора из папки с базой скорости не добавишь.

Тут надо написать грамотную свертку заточенную именно под вашу конфигурацию, обрезать базу, а уж потом делать упаковку dbf-ок, чистить ЖР и прочие косметические вещи.

Автор: BVS 5:05:2008, 15:23

Цитата(AMaDeus @ 5:05:2008 - 08:14) *
Можно удалить лишние/старые внешние отчеты

Ага представляю скоко можно писать чтоб аж 3 гига занять

Цитата(LSH @ 5:05:2008 - 17:38) *
в бух-ии регламентированная отчетность прилично места занимает

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

Цитата(LSH @ 5:05:2008 - 17:38) *
Из-за внешних отчетов и прочего стороннего файла в базе - работа не замедляется

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

Автор: Allexei 6:05:2008, 06:09

Хм... Все эт конечно сдорова....но написать обработку которая бы грамотно все урезала мне наврядли по силам.Уж очень много в 1с взаимосвязаных обектов.Я вот что мыслю, может проше создать новую базу и в нее выгрузить данные?

Автор: LSH 6:05:2008, 07:00

Allexei

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

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

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

Автор: Zab 7:05:2008, 06:42

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

Автор: skazan 7:05:2008, 07:37

Попробуй: В конфигураторе - "Выгрузить данные", "Загрузить данные"
У меня при такой операции база Торговли уменьшилась с 2 гиг до 1,2. Загружает, правда долго, я оставлял на ночь.

Автор: LSH 7:05:2008, 07:38

Цитата(Zab @ 7:05:2008 - 08:42) *
Allexei, че-то подумалось... может у тебя в каталоге архивов море каких-нить или еще чего, к данным основным отношения не имеющее? А ты мучаешь бедную базу. Основной объем должны занимать *.dbf и *.cdx файлики. Всякие архивы, экзешники, экселевское файло, *.mxl, *.xml могут случайно быть забытыми и неплохо весить... попробуй убрать из базы всякие гадости подозрительные.


Человек же написал "тормоза дикие"... happy.gif

Автор: kaa 8:05:2008, 06:27

Если такой размер баз я б задумался о переходе на SQL

Цитата(Allexei @ 6:05:2008 - 16:09) *
Хм... Все эт конечно сдорова....но написать обработку которая бы грамотно все урезала мне наврядли по силам.Уж очень много в 1с взаимосвязаных обектов.Я вот что мыслю, может проше создать новую базу и в нее выгрузить данные?

Если не по силам и денег жаль то вено, заведи новую базу введи остаточки и сфё

Автор: vbs 8:05:2008, 10:41

Выгрузку в бухгалтерии можно сделать так :
// формируем таблицу значений
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) и другой программой аналогично загружаем в пустую копию базы
Кстати, сам напишешь все эти примочки - приобретешь неоценимый опыт

Русская версия Invision Power Board (http://www.nulled.ws)
© Invision Power Services (http://www.nulled.ws)