Два способа выгрузить файл

Без предисловий, сразу код в начальной итерации:

А теперь можно его покритиковать. (далее…)

Как варить компот

Иногда так получается, что в одном глобальном расширении внутри одного большого куска ABAP-кода скапливается много маленьких кусочков, делающие совершенно разные вещи для совершенно разных людей/модулей/пакетов.

Вот для примера типичный код из события OpenFI BTE 1120 (замещения перед сохранением бухгалтерской проводки):
User-exit source sample
Вот такой компот, бывает что и на тысячи строк тянется эта простыня.

Почему так получается? Это скорее следствие скупости, лени, спешки плюс недостаток фантазии.

Работать – работает, больших проблем не доставляет. Открыл – всё видно. Можно даже копипастить подходы, использовать общие переменные.

Особая проблема с таким подходом возникает только в ситуации конкурентных правок. Но если такие ситуации всплывают раз в год, то проще перебороть и запинать, чем вылечить проблему в корне.

Хорошая идея – категорический запрет на решение разных задач в рамках  одного ABAP фрагмента (инклюда, функции, метода). Совсем уж общего решения предложить нельзя, так как есть нюансы, да и многое дело вкуса.

Приступим к первой итерации.

(далее…)

Трансформации, простые и не очень

Вполне бытовая задача при разработке ERP-системы — настройка оповещений посредством электронной почты.

Соответственно сразу возникает несколько идей, куда ложить текст шаблона:

  • непосредственно в тексте программы, хардкод никто не отменял
  • в хранилищах  OAOR/SMW0 — по обстоятельстам
  • в текстах SO10, если они довольно простые и/или ведутся прямо в продуктивной системе

… хотя можно встретить и более экзотические варианты.

Задача может стать чуть более изощренной, если потребуется в письмо добавить красоты в виде HTML. В первом приближении HTML — это простой текст со специальной разметкой в виде тегов. Поэтому можно не отказываться от старых вариантов и мириться с неудобствами в виде редактирования plain-text и отсутствия проверок.

Однако задача может стать еще сложнее, если появляется динамичный контент в виде таблиц. И тут появляется развилка:

  • дополнительно нагружать текстовый шаблон особой разметкой и реализовать её обработку на ABAP, что не технологично
  • искать альтернативные технологии

И как вы уже поняли из заголовка статьи — далее речь пойдёт о втором варианте в подробностях. (далее…)

Всё под контролем – очередь транспортных запросов

Есть у меня один повод для переживаний – это запросы, которые не доехали до продакшена.

Они всё время норовят где-то затеряться и забыться.

Я-то сделал, отдал в тест. А дальше дело ответственного консультанта, мяч уже на его стороне. 

Дано:

  • Проект поддержки системы ERP
  • Обычный ландшафт DEV-QAS-PRD
  • Сторонняя система управления задачами
  • Куча мелких задач на доработку

При этом стоит в обязательном порядке связывать создаваемый запрос с задачей/инцидентом.

Раз-два и вот прототип маленькой помогалки готов:

Обзор транспортных запросов

Номер запроса, дата, владелец, описание, привязка к задаче и куча зеленых галочек.

Всё понятно – один сложный запрос ещё варится, два запроса уехали в прод, четвёртый на тесте.

Как же я люблю когда много зеленых галочек. Успокаивает. Что ещё нужно?

А некоторые солидные господа используют для этого Solution Manager ChaRM. Но, мне почему-то кажется, что там не будет такой кучи зеленых галочек. Это фатальный недостаток.

Важные слова не важны

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

Даже если так писать и можно, то этого делать всё-таки не следует:

  • Усложняет восприятие, хотя есть и подсветка кода и uppercase/lowercase
  • Name-conventions
  • Ограничения при работе с БД
  • Это не смешно

Зато есть служебная таблица TRESE, в которой перечисляются разные наименования полей, которые нельзя создавать из-за ограниченний в разных БД.

Хитрые банкиры vs хитрый PayPal

Вот понадобилось мне вчера оплатить покупку в интернете на сумму 17,98 EUR.

У меня есть PayPal и привязанная мультивалютная карта с основной валютой KZT. По-умолчанию PayPal предлагает доверить ему сконвертировать сумму счета в привычные мне единицы измерения.

Посчитанная сумма равна 6571,41 KZT. Выходит его курс конвертации равен 365,48.  Курс местного нацбанка при этом на тот же день составляет: 350,89. Это значит, что дополнительные расходы на конвертацию составляют примерно 4,16%. Многовато.

Недоумённо приподнял левую бровь и положился на курс конвертации банка. Посмотрел на баланс карты после совершения операции оплаты: 53904,52 — 47609,35; заблокирована сумма 6295,17 KZT. Обратным расчетом курс выходит равен 350,12. Это даже ниже, чему нацбанка!

Чудеса?! Очевидно, хитрый банк потом своё возьмёт, причём таким образом, что по выписке итоговая сумма видна напрямую не будет. Если верить сайту самого банка, курс конвертации для карт пляшет в районе отметки 355,00.

Так что в действительности накладные расходы составят 1-2%. Надо зайти попозже и убедиться, когда заблокированная сумма будет списана в действительности.

PS. Доступна сумма 47468,71; следовательно, в реальности списано 6435,81 местных денег; обратный курс равен 357,94. Похожий курс случился примерно через неделю после совершения операции, видимо тогда и была реально списана сумма. Курс покупки банка в розницу, нацбанка и продажи на этот момент составляли соответственно 349,80 — 352,14 — 353,80. Итоговая разница 2,01%.

Интересно почему именно хитрые банкиры карт-курс делают таким широким? Это больше от перестраховки или от жадности?

PPS. На сайте друго банка, кажись несколько более дружелюбного, обнаружил крупную надпись прямым текстом:

Полезно знать, что Visa и MasterCard устроены так, что итоговая сумма в рублях обычно списывается через 5‑7 дней после совершения операции.

Например, если сегодня купить что‑то на $100 или снять их в банкомате, то кажется, что это будет 5880 руб., но на самом деле деньги спишутся по курсу, который будет только через 5‑7 дней. Если курс будет 59,21 руб., то спишется 5921 руб., а если 57,27 руб., то 5727 руб.

PPPS. Небезызвестный Илон Маск является сооснователем PayPal.