Возникла у меня на днях задача организовать прямой доступ к выпискам Сбербанка РФ, уже загруженным в клиент банк. Казалось бы ничего сложного, ADO, нужный OLE DB провайдер и вперед. Однако неисповедимы пути монополиста. Все данные лежат в таинственном «.ddf» формате, про который известно лишь то, что это разработка самого сбербанка, жутко секретная, шифрующая данные на лету итд итп. На просторах интернетов однако удалось найти упоминание утилиты «convert.exe» которая умудряется данные эти извлекать, помещать в «dbase» или текст. В свободном доступе утилиты почему то не оказалось, специалисты банка предоставить её так же отказались, казалось бы почему? Это же мои данные! У меня и ключи все есть, дайте их прочитать. В мире не без добрых людей, я таки получил этот «программный продукт».
Утилита оказалась под ДОС. Она не умела работать с длинными именами файлов с пробелами, она не умела создавать «dbase» файл, а требовала, чтоб ей предоставили пустой с подготовленной структурой, соответствующий формату файла шаблона, который тоже необходимо было подготовить предварительно ручками.
Для её удобоваримого использования была придумана следующая схема:
- В планировщике по расписанию работает скрипт, который генерит «dbase» файл из «.ddf» файла
- Целевой софт (в моем случае это была БП 2.0) открывает этот «dbase» файл и обрабатывает как его душе угодно
Второй пункт интереса не представляет, поэтому расскажу о подводных камнях по первому пункту.
- Данная утилита не будет работать на x64 операционной системе. Там больше нет виртуальной дос машины.
- Данная утилита не воспринимает файлы шаблона с «неправильным» расширением.
- Данная утилита не сможет работать с длинными именами файлов с пробелами, никаких Documents and settings
Скрипт реализован на Powershell. В заголовке файла Convert.ps1 необходимо указать пути до ваших данных.
Идея следующая:
- Networkdir -это папка, где лежат: файл данных, шаблон конвертации ddf-dbf, пустой dbf файл.
- Tempdir -это папка, где будут находиться временные файлы, создаваемые для работы утилиты конвертации.Не разрешены длинные имена, пробелы, сетевые пути.
- vibor.ddf — файл данных клиента сбербанка, содержащий информацию о выписках
- sbrf.obd — файл шаблона конвертации. В нем описывается откуда, куда и какие поля необходимо грузить
- emptybank.dbf — пустой файл формата dbase III c заранее подготовленной под правила конвертации структурой
Так как скрипт работает параллельно целевой информационной системе, и генерирует случайные имена файлов каждый раз при запуске, прибираться за собой во временном каталоге — его работа. При старте он удаляет все «dbf» файлы, кроме шаблона. После этого генерируются имена временных файлов, в которые будут помещены локальные копии необходимых файлов (ДОС программа не сможет работать по сети и с длинными именами). После генерации имен файлов необходимо отредактировать шаблон выгрузки, так как в нем указывается файл источник и файл приемник. Тут возникает неожиданная проблема: хотя файлы уже созданы — утилита их не видит. Помогла вставка задержки. ДОС программы вызываются асинхронно, скрипт не ждет, пока выполнится программа. Поэтому приходится ставить ещё одну задержку после вызова программы. После создания «dbf» файла он копируется в общую папку для целевой программы. После исполнения скрипта программа подчищает за собой все временные файлы из папки временных файлов.
Отдельное спасибо Bill Stewart за его утилиту по замене строки в файлах.
Плюс за пытливость ума
Спасибо, жизнь заставит, ещё не так вертеться придётся.
Как обычно, отсутствие удобного всем регламента взаимодействия подразделений. В 1С выписки загружает бухгалтерия, когда ей удобно, совсем не в то же время, когда производится загрузка данных из банка. А отделу продаж информация об оплатах нужна как можно скорее. Чтобы не громоздить дополнительное рабочее место итд был реализован прямой доступ.
Вам бы найти «динозавра» (в хорошем смысле), который еще помнит DOS и программирование под него, чтобы «расковырять» эту программку (хотя бы с целью алгоритмизации). А на основании этих полученных данных уже не проблемой было бы переписать под Win32 и даже х64. Хотя, как я подозреваю, должны быть подобные вещи (функционал convert.exe) и под Win, раз уж 1С функционирует с Клиент-банком и эти данные грузит и т.д.
вот тут .
Кстати без проблем нашел и файл convert.exe, и кое-какую документацию
P.S. Оказывается все есть и для Win — только теперь это делается через их компоненту ConvIn1C.dll, которая поставляется вместе с КБ
(5) mdie,
По поводу первой ссылки, знакомился с документацией оттуда. В упор не вижу там самого файла конверт. Если не затруднит, ткните меня носом пожалуйста. Про ConvIn1C.dll — идея интересная надо покопать, как он работает, ком-ом или динамической линковкой
Покопался немного, ConvIn1C.dll возможно и будет выполнять функции конвертации, но задача ещё веселее, чем с convert.exe. Нужно раскопать её интерфейс, написать бинарник, который подгружает эту библиотеку, по сути — наваять софтину, которая будет конвертить под win32. Ещё б было на это время на работе помимо основных обязанностей 1сника 🙂