Как удалить строки из dbf файла
Например, создадим файл, идентичный по структуре исходному.
//При этом применяется метод ОписаниеПоля, который возвращает характеристики поля с указанным номером
//синтаксис: ОписаниеПоля(,,,,)
Для работы с файлом DBF неизвестной структуры часто применяются следующие методы:
ПолучитьЗначениеПоля();
УстановитьЗначениеПоля(,);
Работа с удаленными записями
Файлы DBF устроены таким образом, что удаление записи не приводит к физическому удалению записи из файла. Запись просто помечается на удаление и пропускается при переборе. Таким образом размер файла остается прежним. Чтобы физически удалить все помеченные на удаление записи нужно применить метод Сжать. Средства встроенного языка позволяют работать с такими записями, перебирать их и даже отменять пометку на удаление.
Можно удалить все записи в файле одним движением. При этом они физически удаляются и не могут быть восстановлены.
Стоит еще отметить про метод Очистить(), что он очищает все поля текущей записи. Атрибуты, соответствующие полям типа "строковый" приобретают значение «пустая строка», числовой — 0, логический — 0, дата — «пустая дата».
Работа с индексами
Для организации упорядочивания содержимого файла БД и поиска в ней по значению одного или нескольких полей применяется механизм индексов. Его применение можно сравнить с сортировкой картотеки по определенному признаку (совокупности признаков). Однако, в отличие от картотеки, файл БД может иметь сразу несколько индексов, и, соответственно, являться упорядоченным одновременно по нескольким признакам. Индексы хранятся в индексном файле. Индексный файл может содержать информацию более чем об одном индексе. Рекомендуется для одного файла DBF иметь один индексный файл, в котором хранятся все индексы для этого файла.
Каждый индекс имеет наименование, признак уникальности, выражение индекса и фильтр. Наименование индекса используется для идентификации индекса. Выражение индекса и фильтр представляют собой написанные на специальном языке выражения, вычисление значения которых для каждой записи позволяет определить ее место при упорядочивании и необходимость помещения ее в упорядоченный список (индекс может содержать упоминание не обо всех записях таблицы, а только об удовлетворяющих выражению фильтра). Уникальный индекс (имеющий установленным признак уникальности) позволяет иметь в индексе ссылки на записи только с различным значением индексного выражения.
Основное правило: индекс нужен, чтобы быстро искать нужную запись.
Нужно быстро найти Комаров. В неупорядоченном исходном файле искать его можно только последовательным перебором всех записей, что будет очень долго при большом числе записей. В индексе найти Комарова можно очень быстро, поскольку индекс отсортирован по полю Фамилия. При этом мы узнаем физический номер записи в файле DBF и производим прямое позиционирование на нужную запись.
После создания структуры базы данных можно добавить индексы следующим образом:
//Синтаксис: ДобавитьИндекс(, , , , )
После сбоя рекомендуется заново переформировать все индексы
В 1С существует специальный язык для задания выражений и фильтра индекса. Подробнее о нем, смотрите в документации на встроенный язык.
Отбор по значению поля
Часто возникают вопросы по фильтрации файла БД по значению
определенного поля.
Предположим , что в предыдущем примере сотрудники работают в разных
подразделениях «Офис» и «Филиал» ,
и нужно вывести всех сотрудников работающих в офисе.
Нетрудно увидеть, что в языке нет явных способов получить записи
по фильтру, но имея индекс тем не менее, данную операцию
можно эффективно (без перебора всех записей) осуществить.
1. Создадим файл индекса, если он ранее не был создан
2. Откроем Файл базы с индексом
3.Прейдем на первую запись
4. И так как все записи упорядочены по индексу - достаточно пройтись
по записям, пока не встретится запись с другим значением поля "Otdel" :
Задача любой информационной системы, вне зависимости от её назначение – сбор, накопление и структурированное хранение информации. Накопление больших массивов информации с возможностью её обмена между другими подобными системами невозможно без стандартизированного подхода. Именно с для решения этой задачи и был разработан формат файла DBF.
Что такое dbf файл
Надёжное и стандартизированное хранение информации, главная задача файла формата DBF (от англ. сокрщ. Data Base File), который в свою очередь является составной частью системы управления базами данных (например, dBASЕ-подобные системы – JBASE, FoxPro и Clipper). Особенностью данного, хоть немного устаревшего, типа базы данных является использование в структуре двумерной таблицы, что делает редактирование подобных файлов довольно простой задачей. О наиболее простых способах редактирования, а также как удалить строку в dbf файле мы рассмотрим ниже.
Как удалить строку в dbf файле
Прежде чем преступить к любым операциям с файлами СУБД имеющим расширение .DBF, необходимо выполнить следующие подготовительные действия:
Завершить работу СУБД с сохранением всех произведённых в ней операций. Обратить особое внимание, чтобы исполняемый модуль системы не находился в фоновом режиме – это позволит избежать как повреждение базы данных, так и исключить её влияние на дальнейшие процедуры.
Создать резервную копию файла базы данных (.DBF файл). Это позволит мгновенно восстановить работоспособность и получить полный доступ ко всем данным в случае каких-либо допущенных ошибок или непредвиденных сбоев.
Благодаря простой структуре файла, процедура удаления строк в dbf файле достаточно проста, а программное обеспечение, позволяющее выполнить эту процедуру, возможно уже присутствует на вашем компьютере.
Как удалить строку из dbf файла с помощью DBF Commander Free
Для решения задачи, необходимо воспользоваться сторонними специализированными утилитами. Одной из таких программ, доступной в бесплатной версией, является DBF Commander Free. При инсталляции приложения, установщик настроит необходимые ассоциации .DBF файлов.
И так для того чтобы удалить строку из файла dbf нужно открыть этот файл в программе DBF Commander Free. Далее находим строку которую нужно удалить. Кликаем на ней правой кнопкой и выбираем удалить запись.
После этого строга будет подсвечиваться красным цветом. Но это еще не означает что она удалена. Этими действиями вы только пометили её на удаление. И если вы закроете файл то строка не удалиться.
Для того чтобы её удалить нужно выбрать пункт Правка и в нем кликнуть на Паковать таблицу. В разных программах этот пункт называется по разному. Например в программе DBF viewer 2000 этот пункт называется Сжать.
Другие сторонние утилиты (WinDBFview, Database Workshop, DBF SEE и т.п.) предоставляют аналогичный функционал, а процедура редактирования аналогична описываемым выше.
В заключение необходимо отметить несколько особенностей, которые необходимо иметь в виду при работе с данным форматом файла: удаляемые данные до сохранения базы данных (паковка таблицы) фактически не удаляются, а лишь помечаются на удаление; необходимо проверять используемую в файле кодировку используемого текста.
Общее
DBFShow
17 Replies to “FAQ. Вопросы и ответы”
Большой респект автору.
Напиши, пожалуйста, какие команды консоли можно использовать для использования в батниках. Особенно интересуют импорт/экспорт. Спасибо!
Спасибо!! По импорту ничего нет, а по экспорту всё что есть ниже
В данный момент реализованы следующие параметры коммандной строки:
Формат использования: DBFShow.exe имяфайла.dbf /ПАРАМЕТР:xxx,xxx,…,xxx
DBFShow.exe ИмяФайла.dbf /ZAP — Обнуляет файл
DBFShow.exe ИмяФайла.dbf /PACK — Упаковывает файл (удаляя физически все записи помеченные на удаление)
DBFShow.exe ИмяФайла.dbf /SPLIT:ИмяКолонки — Разбивает файл по записям содержащимся в этой колонке (создает новые файлы по кол-ву уникальных значение в этой колонке)
DBFShow.exe ИмяФайла.dbf /APPEND:ИмяФайла.dbf,ИмяФайла.dbf. ИмяФайла.dbf — Объединяет содержимое файлов
DBFShow.exe ИмяФайла.dbf /MODIFY:ИмяКол,…,ИмяКол ТИПОПЕРАЦИИ — Применяет тип операции к перечисленным колонкам. Перед ТИПОПЕРАЦИИ обязателен ПРОБЕЛ
ТИПОПЕРАЦИИ:TRIM, LOWER, UPPER, TRIMSTART, TRIMEND,RIGHTALIGN,REVERSE
dbfshow.exe insertfile.dbf /INSERT C:\Test\*.dbf — В этом примере содержимое insertfile.dbf добавится ко всем файлам формата dbf в папке c:\Test;
/EXPORT -format xls — экспорт в Excel.
На данный момент format только один это xls. Можно не задавать этот параметр по умолчанию будет экспорт в Эксель.
Допустимые ключи:
-NOHEADER — не включать заголовок
-DEL — эксопртировать удаленные записи
-NAME ИмяФайла.xls — задать имя файла (можно и без расширения). По умолчанию экспорт в туже папку, что и dbf.
Пример: dbfshow.exe file.dbf /export -name exfile -format xls -DEL
Доброго времени.
Спасибо за программу и что поддерживаете) Очень полезная вещь)
Можно подробнее про синтаксис /MODYFI — чуть непонятно.
при объединении нескольких dbf файлов с одинаковой структурой убрает в Фамилии последнию букву «а» Например Абрамова становится Абрамов, а Николаевна Николаевн. Почему?
Добрый день, Виталий!
В DBFShow 0.106 версии некорректно происходит слияние dbf-файлов: при импорте в открытый файл добавляется только первая строка загружаемого файла. Если выбрать для импорта несколько файлов, загружается опять-таки первая строка первого файла.
В версии 0.91 с теми же самыми файлами импорт происходит корректно.
На работе, практически, ежедневно объединяю файлы, указанной проблемы не могу повторить. Может Вы вышлите мне Ваши объединяемые файлы, можно даже пустые. Нужно больше информации.
Добрый день.
В DBFShow 0.103 версии при выполнении слияния dbf-файлов из командной строки:
1) выдается ошибка,
2) добавляется только первая строка первого файла.
Спасибо.
Эту проблему решили в версии 0.108, на данный момент актуальная версия 0.110.0.1. Обновитесь пожалуйста.
Добрый день! Спасибо за программу!!
Можно ли добавить возможность замены символов с учетом регистра, галочка есть только вот не активная почему-то.
Отличная прога ещё бы могла работать с индексами
Добрый день. Можно добавить экспорт в CSV формат из командной строки?
Еще можно добавить разбивку фала на несколько по кол-ву строк. сейчас используем свою программку для этого, но удобнее когда все в одном. да и может кому то тоже пригодиться
Прекрасная прога, спасибо вам! Но, к сожалению, регулярно портит значения в текстовых полях, которые содержат числа. Например «06948» превращается в » 6948″. Ладно бы всегда меняло «0» на пробел, это можно было бы легко заменить обратно, но может менять и «1», и не на пробел, зато всегда первый символ… А ещё (хотя кажется, что это та же беда) дата «09.02.2012» может превратиться в «09.02.0012».
Я выгружаю DBF из ERP-системы. Он в формате FP, но такая же картина была и с dBASE 3. Причём конвертация FP dBASE 3 происходит без проблем. Открыл, посмотрел – всё ОК. Начинаю удалять лишние поля, и в какой-то момент происходит такая ситуация. Версию использую 0.119.
А вот это уже интересно, использую её в работе повседневно, но не сталкивался с таким, надо повторить Ваши действия, чтобы воссоздать проблему. Может скинете образец файла и опишите последовательность действий?
можно в телеге @gerzdev
Доброе утро! Спасибо за программу! Возможно ли при работе со структурой файла: -Перемещать поля вверх/вниз, -Создавать поле не только большими буквами, -при выборе типа поля нажимать буквы (C,N,L…) а не только выбор. Дякую.
Сегодня рассмотрим работу с одним из самых популярных форматов для обмена данными с 1С.
Этот формат обмена данными с 1С представляет собой подобие таблицы Excel и используется для хранения данных в различных СУБД. Также есть его модификации, всех их называют xBase.
В 1С для работы с таким форматом предусмотрен объект xBase. С его помощью можно создавать, читать и редактировать файлы dbf в 1С.
Важно чтобы имя файла соответствовало критериям 1С. Его длина не может превышать восемь символов.
Теперь разберем, как работать с xBase.
1. Создание файла dbf в 1С
Обращаю внимание, что запись нужно производить после каждой введенной строки.
Файл можно открыть специализированным приложением типа DBFView или с помощью MS Excel.
2. Редактирование и чтение dbf
После выполнения кода в 1С суммы в файле изменятся на отрицательные:
3. Поиск и удаление строк в файле dbf 1С
Видим, что работать с файлами формата dbf достаточно просто. И работать с xBase можно как на сервере, так и на клиенте – это очень удобно.
Специалист компании ООО «Кодерлайн»
Вас могут заинтересовать следующие статьи:
94 [PROP_CODE] => TAGS2 [TITLE] => Вас могут заинтересовать следующие семинары: ) --> 95 [PROP_CODE] => TAGS [TITLE] => Вас могут заинтересовать следующие вебинары: ) -->
Вас могут заинтересовать следующие вебинары:
Программирование в 1С [1] => 1С:Бухгалтерия [2] => 1С:Управление производственным предприятием [3] => 1С: Розница [4] => 1С: CRM [5] => 1С: Управление торговлей [6] => Бюджетирование [7] => СКД [8] => 1С: Конвертация данных [9] => Администрирование 1С [10] => Конвертация данных [11] => Лицензии 1С [12] => Оптимизация [13] => 1С: Документооборот [14] => 1С: ERP [15] => Транспортная логистика [16] => Техническое задание [17] => Продажи [18] => Ценообразование [19] => Планирование [20] => MS SQL Server [21] => Полезные обработки [22] => МСФО [23] => Отчеты в 1С [24] => XML [25] => Внедрение ERP [26] => Перенос данных [27] => Торговое оборудование [28] => РСБУ [29] => 1С:Управление корпоративными финансами [30] => 1С: Колледж [31] => 1С: Аренда и управление недвижимостью [32] => Финансовый учет ) -->
В 1С 8.3 для операций с DBF есть стандартный объект XBase, позволяющий работать непосредственно из встроенного языка . Формат хранения файлов баз данных DBF (dBase III) , используемый в качестве одного из стандартных способов хранения информации в системах управления базами данных. Имеет двумерный массив (таблица) и часто используется программами 1С с самых ранних версий. В 1С 8.3 DBF может использоваться программистами для обмена со сторонними приложениями и базами данных. Данный формат устарел из из-за своих ограничений:
✔ Чтение записей файла в формате *.DBF
&НаКлиенте
Процедура ЧтениеЗаписейФайлаВФорматеDBF ( ПутьКФайлуDBF )
ТаблицаDBF = Новый XBase ;
ТаблицаDBF . ОткрытьФайл ( ПутьКФайлуDBF ,,Истина); // путь к базе, путь к индексу - необязателен, только чтение
Сообщить ( "Таблица DBF имеет кодировку: " + ТаблицаDBF . Кодировка );
Сообщить ( "В таблице " + ТаблицаDBF . КоличествоЗаписей () + " записей." );
ТаблицаDBF . Первая (); // перешли к первой записи
Пока Не ТаблицаDBF . ВКонце () Цикл //не последняя запись
Если Не ТаблицаDBF . ЗаписьУдалена () Тогда //нет пометки на удаление
Сообщить ( ТаблицаDBF . Kod + " " + ТаблицаDBF . Country + " " + Строка ( ТаблицаDBF . Population ) + " " + ТаблицаDBF . Continent );
КонецЕсли;
ТаблицаDBF . Следующая (); // переходим к следующей записи
КонецЦикла;
ТаблицаDBF . ЗакрытьФайл ();
&НаКлиенте
Процедура ПоискНужнойЗаписиВФайлеВФорматеDBF ( ПутьКФайлуDBF )
// Файлы dbf могут быть очень большими и содержать тысячи записей.
// В этом случае полный перебор всех записей,
// чтобы найти одну - плохая идея - поиск будет долгим.
ТаблицаDBF = Новый XBase ;
ТаблицаDBF . ОткрытьФайл ( ПутьКФайлуDBF ,,); // путь к базе, путь к индексу, открываем на запись (Ложь)
// Но для того, чтобы искать по ключу - нужен индексный файл, включающий нужные нам поля. Если бы этот файл уже был у нас,
// то мы бы передали его при открытии файла вышле, но у нас его нет, а потому - займёмся его созданием.
// создадим индекс только по полю Population
ТаблицаDBF . Индексы . Добавить ( "INDEX_Population" , "Population" , ); // имя индекса, выражение индекса, уникальность создаваемого индекса (Истина)
КаталогDBFФайлов = "D:\World" ;
СоздатьКаталог ( КаталогDBFФайлов );
ПутьКФайлуИндекса = КаталогDBFФайлов + "\kldr.cdx" ; //имя файла не более 8 символов (включая расширение)
ТаблицаDBF . СоздатьИндексныйФайл ( ПутьКФайлуИндекса );
// Заново открываем таблицу, уже на чтение и с индексным файлом, который мы только что создали.
ТаблицаDBF = Новый XBase ;
ТаблицаDBF . ОткрытьФайл ( ПутьКФайлуDBF , ПутьКФайлуИндекса ,Истина); // путь к базе, путь к индексу, только чтение
// Найдём среди записей ту, у которой поле Population равно 10.
// В таблице всего один индекс INDEX_Population.
ТаблицаDBF . ТекущийИндекс = ТаблицаDBF . Индексы . Получить ( 0 );
ТаблицаDBF . Ключ . Population = "10" ;
ЗаписьНайдена = ТаблицаDBF . НайтиПоКлючу ( " Запись найдена" );
Сообщить ( ТаблицаDBF . Kod + " " + ТаблицаDBF . Country + " " + Строка ( ТаблицаDBF . Population ) + " " + ТаблицаDBF . Continent );
Иначе
Сообщить ( "Запись не найдена" );
КонецЕсли;
Читайте также: