Skip navigation.
Home

Программистский нежданчик

Для оперативного ведения финансовых дел я написал в свое время систему, которая делала достаточно простые вещи, а именно: брала данные, полученные в результате экспорта банковских проводок из банка и импортировала их в мою систему. Все достаточно просто, но примерно раз в несколько месяцев моя система начинает орать и биться в падучей:

- Не распознана валюта платежа!
- Не найден ни дебит, ни кредит!
- Количество полей не соответствует маске!
- Сдвоенные платежи!
- Не сходится баланс платежей!
- Не распознаю плательщика!

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

Что мы там видим? Поделюсь самым вкусным:

Если название плательщика содержит умляут, то он при экспорте конвертируется погромистами в конструкцию типа ";abc". Надо ли говорить, что разделителем полей файла экспорта тоже служит ";"? Это был первый фикс.

Если вы платите два платежа в один день одному и тому же получателю, то система экспорта сливает их в один. Вместо:

"ООО Рога и копыта";за аренду;100
"ООО Рога и копыта";за электроэнергию;10

В файле экспорта вы видите:

"ООО Рога и копыта";за аренду, за электроэнергию;110

Это был второй фикс (отлови запятую в формулировке платежа, распили сумму на n сумм).

До некоторого времени банк экспортировал проводки, указывая в качестве валюты ее трехбуквенное сокращение, "eur", например. Теперь нас в жопу клюнул креативный зуд, и поэтому вместо трехбуквенного сокращения мы указываем код валюты, "978". Это был третий фикс.

И вишенка на тортик:

Построчное чтение файлов реагирует на комбинацию 0D 0A как на конец строки в текстовом файле, созданном под виндой и на 0A как на тот же самый конец строки, созданный под Unix. До четверга строки заканчивались на 0A и "увидел Господь, что было это хорошо". В четверг мне прилетает (CSV файл, кто понимает), где для удобства теперь настоящий конец строки сделан как 0D 0A, а перенос строки для удобства, мать его, чтения - как 0A. Импорт срочно меняется так, чтобы все 0A, перед которыми нет 0D, заменить на пробелы, переписать файл и уже потом его импортировать. Это был четвертый фикс.

Ах да, совсем забыл: изначально все это экспортировалось в xml, потом для удобства пользователей экспорт в xml был зарублен, и сделан экспорт в pdf и экспорт в csv. Это был нулевой фикс.

Я желаю счастья и долгой жизни славной команде разработчиков этого самого банка. Надеюсь что там, куда мы все в конечном итоге попадем, они будут писать парсинг файлов выгрузки. Каждый день новый.

Из рабочего:

система клиента тащит выгрузку из SAP модуля. В каком именно формате модуль откружает данные, мы не знаем. Что именно надо послать модулю, чтобы он отгрузил данные мы знаем, но очень смутно: это нигде не описано толком. Сам модуль стоит в сторонней организации, на другом конце континента, где никто не знает слов "SAP", "модуль", "выгрузка" и где никто не собирается пускать нас к компьютеру, на котором это установлено. Как решается задача? Кто сказал:"найти специалиста по выгрузке из модуля"? Щас: нет такого. В природе нет, он уволился оттуда хрен знает когда, и никто не знает, что он писал. Рассказываю:

Пишется робот, который комбинирует все возможные значения полей в запросе к SAP-модулю и отправляет неимоверное количество запросов. В ответ он получает по большей части матюги, но иногда прилетает что-то осмысленное. Запросы, на которые приходили осмысленные ответы, складываются отдельно, рядом с ними складываются сами осмысленные ответы, после этого рождается эмпирическое Знание: "если в поле XXX вставить вот такую херню, а при этом в поля YYY и ZZZ вставить вот такую херню, то придет то, что хотелось бы". Для неспециалистов: вы берете абзац из литературного произведения, комбинируете в нем слова всеми возможными способами и отсылаете получателю. Если вам в ответ прилетает что-то отличное от "пошел на хрен, я не понимаю, что ты хочешь", то вот такой вариант абзаца принимается вами как пригодный к использованию.

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

1. За избретение

1. За избретение "формата" CSV - его автор вообще по определению должен давно гореть в аду. Всякий, кто принимает решение использовать этот "формат" для обмена данными с другими - должен быть порот публично, до смерти, абы другим неповадно было.
За все годы с появления этого "формата" я не видел ни единого примера его правильной реализации. Ни разу. Ибо реально он нигде никогда формально не был документирован и соотв-но каждый кодер его поимает по-своему. Более того, с момента появления понятия МС офис и эксель, еще с ДОСовских времен, я с выходом каждой новой версии МС офиса всегда провожу один и тот же эксперимент. Беру небольшую старую эксельскую табличку, открываю ее в экселе, делаю экспорт в CSV. Потом в том же экселе говорю ему импортировать этот, тобой, сука!, только что созданный файл CSV. Результат импорта еще ни разу не превратился в такой же файл. Скорее бы этот "формат" уже закопали.

2. Ваш метод реверсинжиниринга САПомодуля вполне себе классический. Нас такому в институте учили, правда в приложении к электронной схеме, для того, чтобы распознавать, что в "черном ящике" (типа триггер, или шифратор, итп.) за минимальное количество итераций. Лабораторки такие делали.

Понимаешь,

Понимаешь, первый вариант импорта был все-таки из xml-файла. Это потом от лютой нужды я перешел на противоестественные игрища с csv

:-) Да я понял,

:-) Да я понял, что ты не от любови редкостной к данному "формату". :-) Удалять гланды через ж - это не твое амплуа, по своей воле ты бы так не стал делать. :)

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.