Довелось переделывать 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 файлам, и в выбранном файле.
На этом пожалуй все. Надеюсь этот маленький инструмент поможет Вам в нелегком деле перевода старого ПО на новую, актуальную платформу, как он помогает это делать мне.
Ставлю «плюсик».
Плюсы : задача актуальна, реализация простая.
Минусы: реализация простая…, чересчур. Вот некоторые замечания «с ходу»:
— полностью отсутствует какой-либо контроль файлов,
— нет выбора типа кодировки,
— неплохо бы реализовать просмотр файлов с «длинным» именем,
— при смене значения поля количества записей надо бы перезаполнить таблицу содержимого текущего файла (кстати,
выводится на одну строку больше),
— не помешало бы разрешить вывод всех строк таблицы (а не 9999999),
— коль скоро можно задать очень большое число выводимых строк, нужна обработка прерывания пользователя,
— отчет стал бы существенно удобнее, если оптимизировать ширины колонок.
(1) БоНН, благодарю за интерес к данной разработке и столь подробный ответ. Видимо данная тема Вам близка, раз заинтересовались. Поясню причины, по которым обработка крайне проста — я крайне не часто занимаюсь подобного рода реверсингом с большим количеством файлов, соответственно писал что называется на коленке, «для себя». Сюда же выложил только потому, что здесь подобных проектов я найти не смог.
В том же, что касается Ваших предложений, хотелось бы уточнить, что имеется ввиду под:
>>- полностью отсутствует какой-либо контроль файлов,
По поводу прочих пожеланий — постараюсь реализовать в ближайшее время.
(1) Как и обещал — реализовал пожелания:
— нет выбора типа кодировки,+ выполнено
— неплохо бы реализовать просмотр файлов с «длинным» именем,+ выполнено, при включении галочки в настройках — длинноименный файл копируется во временный каталог и считывается.
— при смене значения поля количества записей надо бы перезаполнить таблицу содержимого текущего файла (кстати,
выводится на одну строку больше),
+ выполнено, при выходе из окошек настроек, текущий файл перечитывается.
— не помешало бы разрешить вывод всех строк таблицы (а не 9999999),+ выполнено, если количество строк «0», то файл считывается весь.
— коль скоро можно задать очень большое число выводимых строк, нужна обработка прерывания пользователя,+ ? процедура ОбработкаПрерыванияПользователя() в цикле есть, но на моей машине платформа ее успешно игнорирует, с чем это связано — затрудняюсь сказать
— отчет стал бы существенно удобнее, если оптимизировать ширины колонок.+ выполнено — при загрузке файала, обработка смотрит на тип и длину поля, и подгоняет размер поля в выводимой таблице, что в 80% приводит к увеличению удобности просмотра. К сожалению не всегда, т.к. бывают большие строковые поля, но не содержащие ни одного значения, или всеж содержимое не влазит в выбранный размер поля целиком. Но в целом — отображение улучшилось.
Неплохо, самому такую пришлось писать т.к. ничего не нашел.
http://infostart.ru/public/86898/
Кстати для красоты для визуально типизации данных советовал бы аналогично своей сделать
Там все понятно по коду
И еще, не пользовался вашей но было бы неплохо како-то фильтр для показа только помеченных позиций (ну и их кол-во ес-но)
Спасибо. Давно искал.
Очень пригодился. Спасибо!
Прикольно, а на счет ADO наверное стоит подумать.
По этому поводу могу посоветоатьсвои скромные наработки .
Файлы DBF считывается в консоли подсистемы без проблем с использованием
стандартного узла «dBaseOleDB» из плана обмена «Обмен данными COM».
Насчет мемо-полей не проверял, как говорится повода не подвернулось.
Насчет имен файлов заметил одно ограничение — там не должно быть знаков препинания
(возможно еще каких-либо символов).
Соединение ADO при этом создается, но при попытке прочитать из файла валятся ошибки, так как
имя файла используется в качестве имени таблицы и провайдер данных считает такое имя не допустимым.
Простая и наглядная обработка..
В структуре обработки добавлены таблицы значений и реквизиты.
В форме обработки 239 строк. Модуль обработки кода не содержит.
Очень удобно для встраивания в свои разработки обмена с DBF-файлами.
Спасибо !