Простенький DBF Viewer для 8.1


Простейший отчет для просмотра DBF. Ориентирован на работу с большим количеством DBF файлов расположенных в одном каталоге.

Довелось переделывать FoxPro программу в 1С конфигурацию. Разумеется никаких исходняков нет, да и если бы были — в ЛИСЕ я не силен. Соответственно пришлось разбирать структуру справочников вручуню. Для упрощения этой работы, был сделан этот инструмент.

Выбираем каталог в котором валяются наши DBFки. В левом верхнем списке — указаны имена DBF файлов и их размер. Устанавливая курсор на любой из них, в правом верхнем списке указывается список полей и их тип. В нижний список считываются записи из выбранного файла. Записи считываются не все, а в заданном количестве, чтобы избежать длительного ожидания при считывании больших файлов.

Просмотрщик умеет выбирать кодировку (ANSI, OEM); можно указать количество записей для считывания(для того, чтобы быстро глянуть в содержимое файла, без его полной загрузки); отображает удаленные записи; подгоняет размер колонок отображаемой DBFки под тип полей, что во многих случаях приводит более удобному и наглядному просмотру; запоминает выбранные настройки с помощью СохранитьЗначение/ВосстановитьЗначение.

К сожалению объект для работы с DBF в 1С не работает с файлами длинна имени которых превышает 8 символов. Если включить соответствующую галочку в настройках — для просмотра, такие файлы копируются во временный каталог с приемлемым именем, после чего считываются, что позволяет обойти ограничение, но ценой ожидания копирования файла.

Досадно, но 1Сный xBase не понимает memo полей в DBF, поэтому такие поля остаются пустыми при отображении.

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

Что еще не реализовано, но имело бы смысл сделать:

+ забить на использовании 1Сной xbase с ее загадочными ограничениями и косяками и перейти на ADO (но тогда уж можно писать не на 1С а на каком нибудь С++) это полностью избавит от косяков с ОбработкойПрерыванияПользователя(), костылями с именем файла длинее 8 символов, ограничениями на memo поля, более широкий выбор работы с кодировками, возможностью писать запросы и т.д. но тогда это уже будет не «Простенький просмотрщик» 😉

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

+ Сделать более удобную навигацию по каталогам с отображением подкаталогов и возможностью переместится вверх или в другой каталог «аля norton commander», т.к. порой проект живет в нескольких папках с кучей DBFок.

+ Сделать не хитрый поиск по DBF файлам, и в выбранном файле.

На этом пожалуй все. Надеюсь этот маленький инструмент поможет Вам в нелегком деле перевода старого ПО на новую, актуальную платформу, как он помогает это делать мне.

9 Comments

  1. БоНН

    Ставлю «плюсик».

    Плюсы : задача актуальна, реализация простая.

    Минусы: реализация простая…, чересчур. Вот некоторые замечания «с ходу»:

    — полностью отсутствует какой-либо контроль файлов,

    — нет выбора типа кодировки,

    — неплохо бы реализовать просмотр файлов с «длинным» именем,

    — при смене значения поля количества записей надо бы перезаполнить таблицу содержимого текущего файла (кстати,

    выводится на одну строку больше),

    — не помешало бы разрешить вывод всех строк таблицы (а не 9999999),

    — коль скоро можно задать очень большое число выводимых строк, нужна обработка прерывания пользователя,

    — отчет стал бы существенно удобнее, если оптимизировать ширины колонок.

    Reply
  2. lazy

    (1) БоНН, благодарю за интерес к данной разработке и столь подробный ответ. Видимо данная тема Вам близка, раз заинтересовались. Поясню причины, по которым обработка крайне проста — я крайне не часто занимаюсь подобного рода реверсингом с большим количеством файлов, соответственно писал что называется на коленке, «для себя». Сюда же выложил только потому, что здесь подобных проектов я найти не смог.

    В том же, что касается Ваших предложений, хотелось бы уточнить, что имеется ввиду под:

    >>- полностью отсутствует какой-либо контроль файлов,

    По поводу прочих пожеланий — постараюсь реализовать в ближайшее время.

    Reply
  3. lazy

    (1) Как и обещал — реализовал пожелания:

    — нет выбора типа кодировки,

    + выполнено

    — неплохо бы реализовать просмотр файлов с «длинным» именем,

    + выполнено, при включении галочки в настройках — длинноименный файл копируется во временный каталог и считывается.

    — при смене значения поля количества записей надо бы перезаполнить таблицу содержимого текущего файла (кстати,

    выводится на одну строку больше),


    + выполнено, при выходе из окошек настроек, текущий файл перечитывается.

    — не помешало бы разрешить вывод всех строк таблицы (а не 9999999),

    + выполнено, если количество строк «0», то файл считывается весь.

    — коль скоро можно задать очень большое число выводимых строк, нужна обработка прерывания пользователя,

    + ? процедура ОбработкаПрерыванияПользователя() в цикле есть, но на моей машине платформа ее успешно игнорирует, с чем это связано — затрудняюсь сказать

    — отчет стал бы существенно удобнее, если оптимизировать ширины колонок.

    + выполнено — при загрузке файала, обработка смотрит на тип и длину поля, и подгоняет размер поля в выводимой таблице, что в 80% приводит к увеличению удобности просмотра. К сожалению не всегда, т.к. бывают большие строковые поля, но не содержащие ни одного значения, или всеж содержимое не влазит в выбранный размер поля целиком. Но в целом — отображение улучшилось.

    Reply
  4. CaSH_2004

    Неплохо, самому такую пришлось писать т.к. ничего не нашел.

    Кстати для красоты для визуально типизации данных советовал бы аналогично своей сделать http://infostart.ru/public/86898/

    Там все понятно по коду

    Reply
  5. CaSH_2004

    И еще, не пользовался вашей но было бы неплохо како-то фильтр для показа только помеченных позиций (ну и их кол-во ес-но)

    Reply
  6. Murik_1984

    Спасибо. Давно искал.

    Reply
  7. 0pex

    Очень пригодился. Спасибо!

    Reply
  8. yuraos

    Прикольно, а на счет ADO наверное стоит подумать.

    По этому поводу могу посоветоать свои скромные наработки.

    Файлы DBF считывается в консоли подсистемы без проблем с использованием

    стандартного узла «dBaseOleDB» из плана обмена «Обмен данными COM».

    Насчет мемо-полей не проверял, как говорится повода не подвернулось.

    Насчет имен файлов заметил одно ограничение — там не должно быть знаков препинания

    (возможно еще каких-либо символов).

    Соединение ADO при этом создается, но при попытке прочитать из файла валятся ошибки, так как

    имя файла используется в качестве имени таблицы и провайдер данных считает такое имя не допустимым.

    Reply
  9. Designer1C

    Простая и наглядная обработка..

    В структуре обработки добавлены таблицы значений и реквизиты.

    В форме обработки 239 строк. Модуль обработки кода не содержит.

    Очень удобно для встраивания в свои разработки обмена с DBF-файлами.

    Спасибо !

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *