ABAPの基礎知識 更新系画面その1

コンサルタントに必要なABAP基礎知識ということで、いわゆる更新系画面について語ろうと思う。
その1回目である。


まず、世間的には、R/3のプログラムは2獣類ある、ということになっている。
レポートプログラムと、Dynproプログラムである。
R/3の画面で言うと、会計伝票の登録画面なんていうのはDynproで書かれており、
品目マスタの一覧なんてのは、レポートプログラムで書かれている。
で、この事実と単純に名前からくる連想で、レポートプログラムは帳票系、Dynproプログラムは更新系だと
思っておけばいいよ、なんて軽く説明する輩が、実はけっこういるのである。


ここが問題である。
この説明を鵜呑みにしたアホどもが、わけのわからん画面を量産するのである。
「こんなのレイアウト変えたら、レポートプログラムでできますよ」
「うーん、けどもうユーザ承認もらっちゃったから、作って。仕事でしょ」
「じゃあ俺がもう一回ユーザ承認もらってくるわ!おまえこそ仕事せいボケ!!」
(実際に某所であった会話。けど、同じような経験を持つ人は多いらしい)
まあ、上記のようなトラブルを防ぐためにも(?)Dynproはそもそも使ってはいけないのだ。


なぜDynproプログラムがいけないのか?
それは、単純。これを作ろうと思うと大変なのである。


ABAPの仕組みは、ざっくり書くと以下のような仕組みになっている。
画面を表示させる前に、画面に表示させる値を全部セットし、表示非表示入力不可などのステータスを
各項目に設定していく。そうして、初めて画面が表示される。
なにかのボタンが押されるか、Enterをユーザが叩く。
すると、なんのボタンを押したのか、という情報(OK-Code)が、ある変数に格納される。
その変数の中身を調べて、その内容にあわせた処理がされる。
これが一連の動作である。


ということは、Dynpro画面を作る、ということは、
・画面のレイアウトを作成し、ボタンを作成する。
・そのボタンに対するOK-Codeを割り当てる。
・画面を表示するまでの処理を記述する
・ボタンがおされてからの処理をそれぞれ記述する
というステップを踏まねばならない。
特に、ボタンがおされてからの処理、というのが曲者で、普通に戻るボタンを押したり、
印刷ボタンを押したり、レイアウトによってはスクロールさせたときの処理を記述したり、
ということが必要になってしまうのである。


それに対して、レポートプログラムは単純である。
基本的に、
・選択条件がなにかを指定する
・DBの検索ロジックを記述する
・表示ロジックを記述する
これだけで出来上がってしまう。
戻るボタンを押したときの処理、印刷ボタンを押したときの処理、バリアントを保存する処理、
一覧を表示したあとのスクロール処理などなど、普通にやるようなことは自動生成してくれる。
なんとも簡単なのである。
で、「・DB検索ロジックを記述する」部分で、ついでにDBの更新もできてしまうのだ。
ということで、「レポートプログラム」といいながら、更新はできるのである。


まずは、Dynproプログラムは作らない!!という強い意思を持ち、代替案でなんとかしてしまうことが、
工数削減の第一歩である。


実際、私は、Dynproを使ったプログラムは、ここ3年ほど封印している。
おかげで、私のとなりにいる開発者Tは、Dynproプログラムが書けない体になってしまった。
うーむ、彼のためにも、Dynpro不要論を世に広める必要があろう。


ということで、次回以降は、その具体的な代替案について書いていこうと思う。