Как уменьшить dbf файл
Авторизуясь в LiveJournal с помощью стороннего сервиса вы принимаете условия Пользовательского соглашения LiveJournal
Проблема усугублялась ещё и тем что в этой базе было более 300 тысяч единиц номенклатуры и несколько десятков тысяч документов за два с половиной года. В общем база данных приличного размера.
Так как у меня под рукой был настроеный сервер с MS SQL, то самым простым способом мне показалось "выгрузить данные", загрузить их в SQL, а уже там свернуть той самой стандартной wrap.ert. Более того, я уже так делал пару раз.
Но с SQL-базой не вышло. При загрузке номенклатуры, примерно на 270800-й позиции, выдавалась "ошибка загрузки данных" без объяснения подробностей. А разобраться, какой же там непечатный символ (или ещё что-нибудь) в 840-мегабайтном файле выгрузки не хочет "съесть" SQL, просто не реально.
Точно так же (по непонятным причинам), не сработал и метод с использованием kernel33.dll — файлы отказались расти больше двух гигабайт.
Пришлось решать задачу альтернативными методами.
Для начала нужно было сделать так чтобы 1С ничего не писала в файл с итогами при свёртке базы. Ведь данные об итогах добавляются при записи новых "операций вручную" с остатками. Пришлось доработать wrap.ert, заменив "операции" на непроведённые "бухгалтерские справки". Файл итогов перестал увеличиваться и все документы по вводу остатков сформировались.
Но это ещё не всё! Обработка свёртки начала удалять старые документы и тут внезапно появилась знакомая ошибка записи в 1SBKTTL.DBF. При удалении или распроведении документов в файл бухгалтерских итогов 1С всё равно что-то пишется. Оказалось для того чтобы этого не происходило, нужно "установить расчёт" (управление бухгалтерскими итогами) куда-нибудь назад, чтобы удаляемые документы были позже по дате проведения.
Помечать на удаление несколько десятков тысяч документов пришлось самописной обработкой. Ну а дальше уже всё легко: пометка на удаление всей номенклатуры, удаление помеченых объектов, снятие пометки удаления с оставшейся номенклатуры, проведение бухгалтерских справок с проводками ввода остатков, полный пересчёт итогов и упаковка таблиц базы данных.
На весь этот "путь к успеху", в моём случае, было потрачено несколько суток, но это в основном из-за большого количества номенклатуры и из-за метода "научного тыка".
Использование DBF/CDX-файлов построено таким образом, что при удалении объекта базы производится только пометка объекта как удаленного, физически же запись об этом объекте остается в базе. В принципе уменьшить размер базы можно производить в конфигураторе через выгрузку-загрузку данных, но выполнение данной процедуры может требовать значительных временных затрат. В тоже время встроенный язык программ "1С: Предприятия 7.7" содержит методы для работы с DBF файлами.
Обработка удаляет удаленные записи из файла DBF, Это позволяет Сжать базу, физически убрав удаленные записи.
Запускать обработку следует не из той базы которую сжимают, а из любой другой базы 1С 7.7
Перед использованием обработки сделать Архивную копию базы.
После выполнения обработки базу надо проиндексировать.
Внешняя обработка для 1С:Предприятие 7.7 для сжатия DBF-файлов:Специальные предложения
Если не хотите стандартными средствами 1С сжимать, попробуйте программу DBFNavigator. В ней есть опция сжатия DBF для очистки удаленных записей. Если количество удаленных записей сопоставимо с количеством живых записей - это значит что надо не ZAP делать, а наводить порядок в учете. Этой обработкой пользуюсь уже лет 20.
Эксперементировать с другими программами для того чтобы сжать файл 1С не было желания.
Эта обработка как раз и наводит порядок в базе после удаления ненужных элементов справочников или документов.
Просмотры 10652
Загрузки 24
Рейтинг 1
Создание 18.10.18 17:57
Обновление 18.10.18 17:57
№ Публикации 926047
Конфигурация Конфигурации 1cv7
Операционная система Windows
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)
Код открыт Да
См. также
Универсальное удаление документов, проводок, остатков, движения. Удалятор V2011.1 Free. (bat файл) Промо
Бухгалтера постоянно просят создать им новую базу, но со справочниками и константами, которые у них уже есть… Мои действия раньше были такими: создаю пустую папку, копирую туда нужные файлы (*.ert,*.dll,*.spl и т.п.) . Через конфигуратор загружаю файл 1Cv7.md. Запускаю базу монопольно – индексирую… С помощью обработок синхронизирую с заполненной базой и загружаю справочники и константы. И всё. Полдня рабочего времени «УБИЛ». В итоге написал данный bat-файл. Который удаляет документы, проводки, остатки и движения в любой DBF базе 1С 7.7.
1 стартмани
20.09.2011 81141 190 1v7 54
Удаление элементов справочника в 1С 7.7
Эта обработка позволяет удалить созданные системой элементы справочников. Например, когда элементы создаются при тестировании и исправлении базы с наименованиями, включающими строку "ФС". Обработка тестировалась на базе конфигурации Бухгалтерский учет для Казахстана, редакции 7.70.257.
1 стартмани
26.03.2021 2802 2 softmaker 0
Поиск и исправление дублей штрихкодов для номенклатурных единиц измерения
Простая и удобная обработка предназначена для поиска и исправления задублированных (повторяющихся) номенклатурных штрихкодов справочника Единицы. Также она даёт возможность посмотреть номенклатурные остатки. Полезна в случаях, когда номенклатура сопоставляется по штрихкоду с другими внешними источниками, а именно с модулем "Обмент ГИСМТ".
1 стартмани
19.11.2020 3242 1 Kuzya_brаtsk 4
Удаление нулевых значений в промежуточных итогах регистров (файловая версия)
Обработка удаляет промежуточные нулевые итоги регистров. Для файловой версии!
1 стартмани
09.01.2019 7363 13 DanDy 2
Обработка "Партионное удаление объектов" для 1С:Предприятие-7.7 Промо
Обработка выполняет в цикле удаление объектов частями (партиями), установленного размера. Предназначена для тех случаев, когда число удаляемых объектов велико (десятки-сотни тысяч) и их затруднительно удалить за раз имеющимся средствами. Обработка также удобна для организации регламентных сервисов очистки базы от мусора по расписанию. Имеется возможность запустить обработку на исполнение в указанном интервале времени и закрыть сеанс 1С по истечению времени завершения.
1 стартмани
30.01.2012 31169 86 yuraos 5
Удаление документов в 1Cv7 в не монопольном режиме
Простая обработка удаляет помеченные на удаление документы в не монопольном режиме, без отключения других пользователей.
1 стартмани
19.05.2017 14020 11 BorisBelov 13
Удаление операций и проводок у помеченных на удаление документов прямыми запросами
Обработка предназначена для быстрого удаления операций и проводок у помеченных на удаление документов прямыми запросами в базах данных SQL на компоненте "Бухгалтерский учет". Будет полезна при свертке больших баз, когда для удаления стандартной операцией "Удаление помеченных объектов" не хватает оперативной памяти
1 стартмани
06.12.2016 14151 6 Belomor 0
Обработка для удаления из базы сотрудника, и всех его следов
Данная обработка находит все документы и подчиненные справочники, в которых задействован выбранный сотрудник, и позволяет удалить. Особенностью является то, что если искомый сотрудник находится в табличной части документа, то удаляется только его строка, после чего документ пересохраняется и при необходимости перепроводится.
1 стартмани
21.03.2016 11247 5 sergei198821 1
Обработка ObjectsCleaner ("Поиск ссылок и удаление объектов") для 1С:Предприятие-7.7 Промо
Обработка совмещает в себе возможности двух системных обработок: “Поиск ссылок на объекты” и “Удаление помеченных объектов”. Имеет улучшенные инструменты для редактирования списка объектов для поиска ссылок: выбор в поле выбора из формы списка, подбор в обработках “Консоль1CQA” и “ПодборUChoice”. Результат поиска ОТОБРАЖАЕТСЯ В ДИАЛОГЕ В ВИДЕ ДЕРЕВА ОБЪЕКТОВ, подчинённых друг другу по ссылкам. Обработка позволяет из контекстного меню при клике мышью выполнять с объектом различные действия. Есть различные режимы контроля возможности удаления объекта в зависимости от его статуса (помечен на удаление или нет, проведён или нет). Имеется «пакетный» режим исполнения: поиск ссылок + контроль + удаление. Для других модулей предоставляется сервис автоматического выполнения (без открытия окна, с передачей списка объектов через параметр формы).
ну или всякие алгоритмы по архивации глянь. Хаффмана того же.
Не могу найти информацию, как программно сжать БД .DBF. Помогите, плиз
О чем идет речь - о выполнении операции очистки таблицы от удаленных записей? Для этого используется DbiPackTable.
Если же надо просто упаковать - то, например для рара можно так:
HANDLE newstdout,read_stdout;
SECURITY_ATTRIBUTES sa;
SECURITY_DESCRIPTOR sd;
STARTUPINFO si;
PROCESS_INFORMATION pi;
InitializeSecurityDescriptor(&sd,SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd, true, NULL, false);
sa.lpSecurityDescriptor = &sd;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = true;
if (!CreatePipe(&read_stdout,&newstdout,&sa,0))
ShowMessage("Error Create PIPE");
TDateTime dt;
GetStartupInfo(&si);
si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
si.hStdOutput = newstdout;
si.hStdError = newstdout; //подменяем дескрипторы для
dt= Now();
String str = dt.FormatString(("DDMMYYYYHHMMSS"));
String tt = "rar32.exe m -y -ep1 "+str + ".ras" + " *.dbf";
si.cb = sizeof(si);
si.dwFlags =STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
ZeroMemory( &pi, sizeof(pi) );
CreateProcess(NULL, tt.c_str() , NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si,&pi );
WaitForSingleObject(pi.hThread,10000);
упакует все файлы с расширением дбф в текущей директории в файл с расширением .ras и текущим временем в качестве имени при условии конечно что rar32.exe находится в путях поиска. Если нет - тогда надо указать полный путь.
[QUOTE=kot_;256964]О чем идет речь - о выполнении операции очистки таблицы от удаленных записей? Для этого используется DbiPackTable.
Я сделал примерно так:
Table1->Close();
Table1->Exclusive=true;
Table1->Open();
Table1->Close();
Table1->Exclusive = false;
Table1->Open();
но ничего не получилось. Ошибку не выдал, но и база не сжалась.
Можно поподробнее пожалуйста. Я использую компонент ADOQuery.
[QUOTE=kot_;256964]О чем идет речь - о выполнении операции очистки таблицы от удаленных записей? Для этого используется DbiPackTable.
Я сделал примерно так:
Table1->Close();
Table1->Exclusive=true;
Table1->Open();
Table1->Close();
Table1->Exclusive = false;
Table1->Open();
но ничего не получилось. Ошибку не выдал, но и база не сжалась.
Можно поподробнее пожалуйста. Я использую компонент ADOQuery.
Ничего не получилось - это как?
Приведите ваш код. С тем компонентом который вы используете.
Ничего не получилось - это как?
Приведите ваш код. С тем компонентом который вы используете.
я нашел вышепреведенный код в инете, попробовал его воспроизвести как был с table(но мне надо с ADOQuery). При нажатии на кнопку прога сработала, но удаленные записи так и остались в базе.
я нашел вышепреведенный код в инете, попробовал его воспроизвести как был с table(но мне надо с ADOQuery). При нажатии на кнопку прога сработала, но удаленные записи так и остались в базе.
Вы не задавались вопросом - причем здесь ADOQuery к TDBDataSet свойства которого собственно и используются в приведеном вами коде? Или операция копи-пасте уже освоена, но клавиша Ф1 попрежнему недоступна?
Я думаю что если бы вы не передирали бездумно код из тырнета то он бы у вас выглядел бы вот так:
выходом из этой ситуации может быть использование функций BDE API не только для сжатия таблицы но и для открытия ее, или использование компонентов TBDE. вместо TADO. [QUOTE=alexmalyaev;257129]
Вы не задавались вопросом - причем здесь ADOQuery к TDBDataSet свойства которого собственно и используются в приведеном вами коде? .
Я имел в виду: Попробовал воспроизвести код как был, с Table.
Прописав ошибки:
DBIResult result;
result = DbiPackTable(Form1->Table1->DBHandle,Form1->Table1->Handle, NULL,NULL,true);
switch(result) case DBIERR_INVALIDHNDL: ShowMessage("The specified database handle or cursor handle is invalid or NULL");
break;
case DBIERR_INVALIDPARAM: ShowMessage("The specified table name or the pointer to the table name is NULL");
break;
case DBIERR_NOSUCHTABLE: ShowMessage("Table name does not exist");
break;
case DBIERR_UNKNOWNTBLTYPE: ShowMessage("Table type is unknown.");
break;
case DBIERR_NEEDEXCLACCESS: ShowMessage("The table is not open in exclusive mode.");
break;
default:
ShowMessage("неизвестная ошибка");
>
return false;
>
return true;
получил - "неизвестная ошибка". Подскажи, пожалуйста, в чем еще может быть ошибка.
Редактор DBF - достаточно мощный вьюер и редактор файлов DBF формата, который предоставляет возможность выполнять множество операций с базами данных. Программа позволяет просматривать и редактировать dbf-файлы в форматах dBase III, dBase IV, FoxPro, Visual FoxPro и Clipper. Позволяет экспортировать и имортировать данные в различных форматах. Поддерживаются MEMO-поля и индексы в форматах cdx и ntx, а также перекодировка в dos и win - формат.
- Возможность открывать любой DBF - файл.
- Перекодировка OEM - ANSI и ANSI - OEM.
- Поиск и замена.
- Фильтрация.
- Просмотр и изменение структуры.
- Индексирование по имеющимся индексным файлам и создание нового индесного файла в форматах Clipper, FoxPro, DBase.
- Печать.
- Конвертирование базы в различные форматы.
- Создание DBF - файлов.
- Упаковка таблицы.
- Возможность отмены удаления записи.
- Сохранение таблицы или ее части в файле.
- Список открываемых файлов.
- Мини-проводник для dbf-файлов и для индексных файлов.
- Суммирование по полю.
- Просмотр и редактирование MEMO и графических BLOB - полей.
- Копирование и вставка всех полей записи
- Экспорт/импорт
- Сохранение, изменение и печать BLOB-полей
- Поверка корректности структуры файла.
- Сортировка по одному или нескольким полям.
- Автоопределение кодировки.
Редактор DBF - достаточно мощный вьюер и редактор файлов DBF формата, который предоставляет возможность выполнять множество операций с базами данных.
DBF View - Бесплатная, компактная и удобная програма для работы с DBF файлами (dBase, Clipper, FoxBase, FoxPro.
DBFShow - небольшая программа для просмотра и редактирования файлов DBF (dBase III, dBase IV, FoxPro, VFP).
Sdbf - быстрый и портативный dbf-редактор с поддержкой SQL-запросов к множеству таблиц и.
DBF data import for ORACLE - профессиональный инструмент, который может использоваться для импорта.
Text to dbf util - программа для преобразования текста с разделителями в таблицу баз данных.
Отзывы о программе Редактор DBF
Елена про Редактор DBF 1.75.1 [02-11-2020]
Я вообще не могу разобраться, как это программа работает.
| 1 | Ответить
Антон про Редактор DBF 1.75.1 [01-02-2019]
Отличная программа. WinDbfView зависал надолго и вообще зависал в работе с файлами около 2 ГБ. Это программа справилась в считанные минуты.
2 | 3 | Ответить
Владимир про Редактор DBF 1.75.1 [01-02-2018]
Программа шлак, попытка открыть dbf в win кодировке, "вырубает" софтинку. Странное понимание у автора понятия "редактор DBF". Снес.
2 | 3 | Ответить
Александр про Редактор DBF 1.75.1 [14-12-2017]
Подскажите по работе в редакторе. Я заполнил строку и как перейти на другую
7 | 22 | Ответить
Читайте также: