Как уменьшить dbf файл

Обновлено: 07.07.2024

Авторизуясь в 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-файлов:

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

Зачем этой нужно, если галка "Упаковка таблиц информационной базы" в "Тестировании и исправлении ИБ" дает точно такой же результат? Эта обработка сжимает файлы выборочно. Это позволяет быстро сжать самые большие файлы. Зачем такое нужно?
Если не хотите стандартными средствами 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.
Если же надо просто упаковать - то, например для рара можно так:

char buf[1024];
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.


Ничего не получилось - это как?
Приведите ваш код. С тем компонентом который вы используете.

[QUOTE=alexmalyaev;257005]
Ничего не получилось - это как?
Приведите ваш код. С тем компонентом который вы используете.

я нашел вышепреведенный код в инете, попробовал его воспроизвести как был с 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 скриншот № 1

Редактор 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 | Ответить

Читайте также: