Использование двоеточий и запятых в ABAP

Вообще подход к двоеточиям и запятым в ABAP достаточно странный (если сравнивать с другими языками программирования). И я, как правило, использовал его или для определения данных DATA, или в операторах write.

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

Пример повтояющегося perform

Первый, второй и третий блоки выполняют одинаковое действие.

Трассировка транзакций и поиск провалов производительности

Если вдруг какая-то транзакция (отчёт) сильно притормаживает или даже виснет, то далеко не каждый администратор, консультант или продвинутый пользователь способен разобраться в этой проблеме.

С одной стороны администратор – это человек которому ничего не говорят транзакции и объекты бизнес-процессов, а с другой стороны консультанты и пользователи ничего не смыслят в базисе и программировании.

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

Самое главное – это выбрать достаточно точные шаги по многоразовому воспроизведению проблемы.

Один из основных – это динамический анализ (транзакция SE30).

(далее…)

Индикатор прогресса при обработке больших объёмов

Достаточно неприлично выглядит, если выполняется достаточно долгая обработка (от 10 секунд и больше) и при этом пользователю не показан ход процесса.

Пользователь начинает переживать, а не зависла ли программа, а также сколько времени ещё ждать. Иногда начинает бояться, что программа упадёт с ошибкой по таймауту.

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

Этот индикатор можно вызвать и самому – функциональный модуль SAPGUI_PROGRESS_INDICATOR, в котором нет ничего сложного – передаётся рассчитанный процент и текст.

Маленькая тонкость: если вызывать его слишком часто, то:

  • Обновляется некрасиво и неразборчиво
  • Увеличивается обмен информацией между клиентом и сервером

(далее…)

Определение расширений BAPI

Переодически забываю этот метод. Запишу себе в блокнотик, чтоб не забывать.

Транзакция: se80

Класс: CL_EXITHANDLER

Метод: GET_INSTANCE

Точка прерывания: на первой строке CALL METHOD cl_exithandler=>get_class_name_by_interface

Имя искомого BADI: в переменной exit_name

Ставится точка прерывания и запускается нужная транзакция. В переменной exit_name будут всплывать имена подключаемых BADI.

Забавное использование стратегии деривации – в качестве хранилища данных

Транзакция FMDERIVE может использоваться как хранилище данных настроек.

    В первую очередь для того, чтобы не плодить Z-таблицы. Причем можно использовать и в целях не связанных с модулем FM.

В качестве минусов, конечно, можно отметить:

  • Нецелевое использование функциональности
  • Сложность распределения прав

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

Примеры использования:

  • Соответствие МВЗ и счетов затрат
  • Список допустимых комбинаций Счет + МВЗ + Заказ
    Для этого заходим в транзакцию FMDERIVE и создаём там новую стратегию:

(далее…)

Разбор вложенных структур

Проблемка и решение

Есть одна достаточно полезная подпрограмма для чтения данных из Excel. Даёшь ей файл, параметры и внутреннюю таблицу. И получаешь заполненную внутреннюю таблицу.

Там в кишках слепок таблицы Excel перекладывается в целевую таблицу.

image

Дальше перекладываются значения в зависимости от типов колонок.

Проблемы начались после того, как я в целевой таблице стал использовать вложенные структуры.

image

Соответственно ASSIGN COMPONENT стал вести не на целевое поле, а на структуру со всеми вытекающими неприятными последствиями.

И вот сделал такую переборку внутренних вложенных структур:

image

Тип “u” это как раз вложенные структуры (плоские).

Ну решение простое, можно конечно ещё извернуться с рекурсией и типом “v” (это уже посложнее – deep structure). Но это пока не требуется.

Вот так и использование DESCRIBE FIELD помогает.

Между делом

Вообще использование вложенных структур сильно может помочь. Основные преимущества подхода:

  • Возможность сравнения подструктур
  • Возможность использование move-corresponding в подструктурах

В моём случае подструктуры – это блоки дебета и кредита бухгалтерской проводки.

Можно сильно сократить объём кода и его понятность в некоторых местах, например:

image

Может также использоваться для пар старых-новых значений, или для сравнения данных (источник-назначение).

Курт Воннегут — Колыбель для кошки

«Мне представляется отвратительной и комичной присущая нашей культуре особенность ждать от любого человека, что он всегда в состоянии разрешить все свои проблемы. Имеется в виду, что проблема всегда может быть решена, если ты приложишь еще чуть больше усилий, чуть больше борьбы. Это настолько не соответствует истине, что мне хочется рыдать или смеяться. Опять же в соответствии с культурной традицией американцы не имеют права плакать. Поэтому я не много плачу — но очень много смеюсь.»

Курт Воннегут

Действительно хорошая книга. Очень хорошая книга. Год 1963.

Юмор?

Воннегут не пишет добрые книги. Трагизм, сарказм, горькая ирония. Некоторые называют это юмором. Впрочем, да – сарказм является отдельной веткой юмора в общем понимании. Главное, чтобы вас это не путало.

Цитатность

Не каждую книгу можно растащить на цитаты. Но эта – одна из таких. Вот тематическая подборка:

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

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

Проводя свою внешнюю политику, американцы скорее должны исходить из реально существующей ненависти к ним, а не из несуществующей любви.

Некоторые цитаты заставляют копнуть. Например парафраз евангельской фразы

Не обращай внимания на Кесаря. Кесарь не имеет ни малейшего понятия о том, что на самом деле происходит вокруг.

приводит к раздумьям вокруг оригинала

Воздайте Кесарево Кесарю и Божье Богу

А речь шла о податях и динариях. И портретах Кесаря на динариях. Вот тебе, бабушка, и портрет Франклина.

О переводе

Сам текст, я так полагаю, был не сильно труден для перевода. Космополитичен и не поэтичен. Впрочем стихи там тоже есть (так называемые калипсо) – стихи бездарные, но и задуманы таковыми. Но меня зацепил один фрагмент.

Автор демонстрирует местное наречие Сан-Лоренцо на примере известного стиха:

Шалтай-Болтай сидел на стене,
Шалтай-Болтай свалился во сне,
И вся королевская конница,
И вся королевская рать
Не может Шалтая, не может Болтая собрать.

Саратая-Боротая сидера на сатене,
Саратая-Боротая сварирася во сене,
И кося короревская конниса,
И вся короревская рати
Не могозет Саратая, не могозет Боротая соборати.

Ну а в английском переводе это совсем другой известный стих – не известный русскому читателю.

Twinkle, twinkle, little star,
How I wonder what you are,
Shining in the sky so bright,
Like a tea tray in the night,
Twinkle, twinkle, little star,
How I wonder what you are.

Tsvent-kiul, tsvent-kiul, lett-pool store,
Ko jy tsvantoor bat voo yore.
Put-shinik on lo shee zo brath,
Kam oon teetron on lo nath,
Tsvent-kiul, tsvent-kiul, lett-poll store, 
Ko jy tsvantoor bat voo yore.

Если сравнивать – фонетика и географика сильно разнятся в этих интерпретациях. Выбор переводчиков, с которым можно поспорить, но сложно предложить замену.

Самый главный диссонанс в переводе – это фонетические отличия прямо переведённых неологизмов и данного стиха. Такой диссонанс в оригинале отсутствует. Лаборатория фантастики говорит о двух-трех переводах – у меня в наличии только один.

Вложенность

Здесь можно вспомнить и Стругацких и Булгакова.

Приём “Книга в книге” – не самый лёгкий писательский инструмент. Умение пользоваться таким инструментом переводит [любого?] писателя на другой уровень. Это не медаль, но разряд. Не победа, но мастер-класс.

И здесь в книге идёт речь о книгах. Здесь есть и книга, которую пишет главный герой, и стихи Боконона, и Путеводитель по Сан-Лоренцо…

Религия и неологизмы

В книге изложено вероучение Боконона и обильно используется причастная терминология: “карасс”, “вампитер” и другие.  Учение достаточно стройное для выстроения самой книги вокруг него. И имеет некоторый смысл и вне книги.

Это ещё и на Википедии имеется – добро пожаловать!

Многократность

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

Персонажи, Сюжет, Двигатель

О да! И это всё тут найдётся.

PS

В тудузник – посмотреть фильм Бойня номер пять. И может быть Завтрак чемпионов.

PPS

А вот и собственно ожидаемая экранизация – Колыбель для кошки. Повествование перенесено в далёкое будущее. Известны сценаристы и продюсеры. Получается, что есть только сценарий и намерения его снять. Ждём-с!

PPPS

Аудиокнига сделана в очень приличном качестве.

Трюки вокруг бэкапов – помесячные архивы

Есть много разного программного обеспечения, в результате работы которого в некоторой заданной папке плодятся логи и копии. Ну для примера это могут быть архивные письма почты или журналы прокси-сервера. То есть не основные данные, но могущие быть полезными когда-нибудь. Обычно их можно просто чистить, как Temp.

За пару лет работы в папках накапливаются тысячи файлов без всякой папочной структурированности. Вот и хочется их забэкапить помесячно и сложить в уромное местечко на хранение.

Сначала хотел подступиться только в связке TotalCommander + WinRAR. Однако помесячность так просто не даётся. Инструмент группового переименования даёт играться только переименованием файлов, но без изменения месторасположения. Архивирование отдельными файлами в WinRAR работает только на базе файловой иерархии. 

Вот и пригодился достаточно узконаправленный плагин Mover для TC, который и делает именно то, что необходимо.

image

Весь список файлов в такой настройке очень шустро раскладывается по подпапкам: 201004, 201005, 201006, 201007 и так далее. 

А затем уж к этим папкам применяем WinRAR с опцией “Каждый файл – в отдельный архив” – тогда каждая папка будет положена в отдельный архив 201004.rar, 201005.rar, 201006.rar, 201007.rar и так далее. 

Ну опции упаковки – это уже дело вкуса (пароль, сжатие, восстановление, непрерывность). 

Применяется ещё групповое переименование и вуаля.

Необходимость делать резервные копии основных данных никуда не девается – для этого есть и другие программы. Не красота спасёт мир, а резервная копия.

В ракурсе текущих исторических событий

Пробегая циничную книгу про доброзло, зацепился за три коротких афоризма:

1.

"Наш ближний  — это не наш сосед,  а сосед нашего соседа" -  так думает каждый народ.

2.

Безумие единиц  — исключение,  а безумие  целых групп, партий, народов, времен — правило.

3.

"Я это сделал", -  говорит моя  память. "Я  не  мог этого  сделать",  — говорит  моя  гордость  и  остается  непреклонной.  В  конце  концов  память уступает.

Самообман

На прошлой неделе посмотрел фильм “Остров проклятых”. Ничего особенно не удивило, ничего особенно не порадовало. Тем не менее фильм хорош.

Однако.

  • Недоволен названием. Не осилив перевод перевод названия (Shutter Island), переводчиками был подобран броский жёлтый вариант
  • Никогда не впечатлялся Ди Каприо, может даже я предвзято  к нему отношусь.
  • Харей Харизмой не вышел он для такой роли. Хотя старается.
  • Постановка сцен далеко не всегда радовала. Особенно в части флеш-бэков у меня возникло чувство диссонанса.

 

Фильм перекликнулся с недавно прочитанной книгой про жизнь на полной мощности:

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

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

Каждый из нас имеет свое собственное хорошо финансируемое министерство обороны.

И далее рассказывается про разные механизмы: Оцепенение, Интеллектуализация, Проецирование, Соматизация, Сублимация и так далее.