Есть на Амазоне одна книжка по ABAP, книжка как книжка, и стоит даже дешевле чем на родном SAP Press.

ABAP Cookbook

Но примечательно в книге совсем не это, а её место в списке бестселлеров.

Внимание! Готовы?

(more…)

Работа в отчётах с параметром SELECT-OPTIONS проста.

Сначала определяем:

select-options: s_anln1 for anla-anln1.

Потом используем:

select * from anla into table gt_report where anln1 in s_anln1.

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

select * from dbchema.anla where anln1 = ‘1’ or anln1 = ‘2’ or anln1 = ‘3’;

И если бы забьём очень много значений в поле выбора, то длина получающегося в результате SQL запроса будет расти линейно. Именно где-то тут я встретился с узким местом, в котором меня стукнули по носу динамической ошибкой DBIF_RSQL_INVALID_RSQL. Интересно, а почему не SAPSQL_STMNT_TOO_LARGE?

В моём случае это примерно 9980 значений типа ANLN1. Это эмпирическое число видимо будет разниться от системе к системе, от используемого типа данных и прочих условий. И как его гарантированно предсказать в общем случае?

Есть в недавней игре Saints Row: Gat Out of Hell одно достижение: десять раз стукнуться головой о потолок.

 

Achievement unlocked

 

Как быть?

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

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

  • входите на проект с существующим большим историческим слоем разработок
  • принимаете большой объём разработок от подрядчика/субподрядчика
  • просто решаетесь на ежегодную генералку или ревизию

 

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

(more…)

Так оказалось, что в транзакции переключения открытых периодов OB52 не предполагается разделение полномочий по БЕ (или вариантам периодов проводки). Но что делать, если у нас очень много БЕ и мы не готовы возложить такую ответственность на кого-либо.

OB52 - определение периодов проводки

Как добиться?

(more…)

«Расскажи теперь о двух надзирателях, которых нашли спящими».

«Какие они надзиратели, — фыркнул старик, — ключари просто. Корона выплачивает жалованье двадцати ключарям, милорд, но при мне здесь никогда не было больше дюжины. Надзирателей полагается иметь шестерых, по два на каждый ярус, а у нас только трое».

«Считая тебя?»

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

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

* * *

Вася

Автор: Алан Купер.

Честно и недорого купил электронное издание 2009 года.

Книга хорошая. Стоит того, чтобы прочесть. Особенно инженерам.

В ней много спорных вещей. В ней много вещей “мы за всё хорошее”. Она несколько отстала, но ещё не устарела. Оригинальное первое издание было написано в 1999, второе издание вышло в 2004. Между прочим, SAP он пару раз упоминает, и не скажу что с положительной стороны.

(more…)

Есть у пользователей транзакцией ABNA, а транзакция ABNAN их кое-чем не устраивает. Любое серийное использование подобных транзакций рано или поздно обрастает вариантами. И вот порешили сделать два варианта транзакции. И тут возникли затруднения.

(more…)