【読了】SAP ABAPプログラミング入門



はじめに&あとがき

ABAP言語はCOBOL言語に似ている(一応はオブジェクト指向言語なのでクラスが使える)
教材が高額であまり普及していない

S/4 HANAではなくSAP ECCをベースに解説してある
これから移行プロジェクトが走り出すタイムラインなので、ECC(移行元)の知識も必要だから

「SAP ECC(ERP Central Component)」とは、2004年より前は「SAP R/3」と呼ばれていたプロダクトのこと
ECC 6.0の後継プロダクトが、S/4 HANA

ECC(旧R/3)はあくまでもコアプロダクトであり、以下のような他プロダクトとの組み合わせ導入を推奨する戦略になったため、改称された
・APO(Advanced Planning and Optimization):SCM用プロダクト(サプライチェーン管理)、サプライチェーン全体における需要計画の最適化
・CRM(Customer Relationship Management):CRM用プロダクト(顧客関係管理)
・SEM(Strategic Enterprise Management):CPM用プロダクト(コーポレートパフォーマンス、企業業績管理)
・BW(Business Warehouse):データウェアハウス&BIを提供するプロダクト

【Part1 基礎知識を学ぼう】

Chapter1 Add-onとABAPの知識

1-1 Add-onの必要性

パッケージ導入プロジェクトにおいて、要件定義で特定したギャップを埋める方式
①パッケージ標準機能に合わせて業務プロセスを変更する
②パッケージ標準機能の使い方を工夫する(パラメータ設定=カスタマイズの範囲でやれるとこまでやる)
③現行の業務プロセスを維持するためにアドオンで独自拡張する

※新規プログラムを開発する「アドオン」ではなく、SAP標準プログラム自体に修正を加えることを「モディフィケーション」と呼ぶ
モディフィケーションは運用性を著しく下げるため原則的に行わない

以下の理由により、実際には多くの企業でアドオンが必要になっている
・標準機能では実現できないこだわり処理がある場合
・SAPを部分的に使う(他の業務システムを使い続ける)場合:他システムとのインタフェイス部分(マスタデータ連携、トランザクションデータ連携)でアドオン(バッチ処理など)が必要になる
・ローカルルールに対応する場合
・データ移行(マスタデータや残高データ)が複雑になる場合

1-2 Add-onの分類

・インタフェイス機能:トランザクションデータやマスタデータをSAPと外部システム間で連携する

・レポート機能:特定の帳票を出力する

・照会画面・更新画面の機能:標準機能で提供される画面が使いにくい場合。アドオンテーブルを作成し、外部からデータを取り込んで、照会する画面を作ることも可能。

・一括インポート機能:Excelなどで作成した会計伝票を一括でインポートしたり、複数マスタを関連付けて一括でインポートしたりする

・ITAC機能:「チェックと代入」機能を使って、入力時バリデーション処理を実装したり、特定の値を自動代入したりする

・データ移行ツール機能:旧システムからSAPへのデータ移行作業に使う
 ・残高データ:BS、PL、得意先売掛金、仕入先買掛金、など
 ・品目サイト倉庫別在庫の数量と金額
 ・マスタ:品目、勘定科目、得意先、仕入先、銀行口座、など

1-3 Add-onのメリット・デメリット

アドオンモンスターが生じる
・開発コストがかかるだけではなく、運用コストもかかるようになる(バージョンアップ時の回帰テストなど)

1-4 ABAP

開発環境
・SAP上の開発トランザクション:コーディング支援機能がある

ABAPプログラムの種類
・選択画面(レポート):画面入力に基づきデータを検索/更新するプログラム
 ・オンライン型
 ・バッチ型
・Dynpro(ダイアログ):UIイベント駆動型の画面遷移を実現するプログラム
 ・PBO:画面表示前の処理
 ・PAI:UIイベント駆動で実行される処理
・部品化:汎用モジュール、インクルード、など

ABAPプログラムのアーキテクチャ
・プレゼンテーション層:SAP GUI、Fioriで実現
・アプリケーション層
・データベース層:プログラムもデータベースサーバのリポジトリ領域に配置されており、アプリケーションサーバから必要に応じて読み込まれる

1-5 S/4 HANA

・HANAデータベース:インメモリ
・Fiori:SAPUI5(SAP UI Development Toolkit for HTML5)を使って開発、Webアプリ開発に近くなった
・コードプッシュダウン開発方式:従来はアプリケーションサーバで実行していた処理を、データベースサーバで実行できるようになった(SQLで記載する)
 ・CDS View
 ・AMDP
 ・OpenSQL


【Part2 操作とテーブル】

Chapter2 ABAPワークベンチ

ABAPの開発環境
各種開発ツール群がまとめられている

2-1 パッケージ

パッケージ
・移送の単位となる。
 ・ただし「$TMP」パッケージ(ローカル環境でテストするたのオブジェクトをまとめておくパッケージ)は移送できない
・以下のオブジェクトをまとめたもの
 ・アドオンプログラム
 ・アドオンテーブル
 ・その他のオブジェクト

T-code: SE21(パッケージビルダ)
・パッケージを新規登録し、オブジェクトを割り当てる
 ・オブジェクトの割当先パッケージは、「オブジェクトディレクトリエントリ」で変更可能
・パッケージID:YまたはZから始まる文字列

2-2 移送依頼

※移送についての詳細は16-1

ランドスケープ
SAP社は、SAPシステムを、「3ランドスケープ構成」(開発機インスタンス/検証機インスタンス/本番機インスタンスの)で運用することを推奨している
開発機インスタンス(テスト環境):ABAPプログラム開発、パラメータ設定、単体テストなどを行う
検証機インスタンス(ステージング環境):可能な限り本番環境と同じデータを用意してテスト(結合テスト~UAT)を行う
本番機インスタンス:エンドユーザが実業務で使う

移送依頼
・移送とは、特定環境に対して行った変更を、別の環境にも適用する仕組み(変更管理・リリース管理をシステム的に実装した機能)
・移送依頼番号を持つ
・親子関係があるため、子の移送依頼からしかリリースできない
・移送依頼のタイプ
 ・カスタマイジング依頼:クライアント依存の変更(特定のクライアントに対してのみ行うパラメータ設定など)を移送する場合に選択
 ・ワークベンチ依頼:クライアント非依存の変更(アドオン開発したプログラムなど)を移送する場合に選択

T-code: SE09(移送オーガナイザ)
・移送依頼を新規登録する


2-3 ABAPエディタ

T-code: SE38(ABAPエディタ)
・ABAPプログラムを新規登録する

ABAPプログラムの属性
・タイプ:7種
 ・実行可能プログラム
 ・モジュールプログラム
 ・汎用グループ
 ・クラスプール
 ・インタフェイスプール
 ・サブルーチンプール
 ・インクルードプログラム
・ステータス:3種
 ・テストプログラム
 ・システムプログラム
 ・本番稼働プログラム

ABAPプログラムの作成方法
①プログラムID(YまたはZから始まる文字列)を登録する
②プログラムの属性(タイプ、ステータスなど)を登録する
③プログラムに対するコメント(作成目的、機能概要など)を登録する
④ソースコードを記述する
・タイプが「実行可能プログラム」である場合、REPORT命令は必須
⑤構文チェックする
⑥有効化する
⑦「直接処理」で実行してみる


2-4 ABAPディクショナリ

T-code: SE11(ABAPディクショナリ)
・アドオンテーブル等を新規登録する
 ・テーブルの構成要素であるデータ型(データエレメント、構造、テーブルデータ型)とドメインも新規登録できる
・ABAPディクショナリで登録/管理するもの
 ・データ型
 ・ドメイン
 ・テーブル
 ・ビュー
 ・検索ヘルプ
 ・ロックオブジェクト

アドオンテーブルの作成方法
①テーブルID(YまたはZから始まる文字列)を登録する
②出荷クラス(移送用設定)や更新許可を登録する
③テーブルに項目名とデータエレメントを登録する
④「技術設定」でデータクラスやサイズカテゴリを設定する
⑤チェックする
⑥有効化する


2-5 データブラウザ

T-code: SE16(データブラウザ)
・アドオンテーブルに対して、レコードの新規作成や変更を行う

T-code: SE16N(一般テーブル照会)
・一画面で複数レコードを追加できるので、データブラウザよりも使いやすい


Chapter3 ABAPディクショナリ

SAPにおけるデータベースやテーブルのようなもの


3-1 データオブジェクトとデータ型

データオブジェクト:データを格納する箱
・単一項目:セル
・構造:レコード
・テーブル:表

データ型:格納可能なデータの種類
・ABAPデータ型(事前定義型):どのプログラムでも使用可能、標準で用意されている
・ディクショナリデータ型:どのプログラムでも使用可能、自分で定義する
・ローカルデータ型:ABAPプログラム内だけで定義できるもの

ABAPデータ型
・数値データ型:I(整数)、F(浮動小数点数)、P(パック数値)
・文字データ型:C(文字列)、N(数値のみの文字列)、D(日付)、T(時刻)
・16進データ型:X

ディクショナリデータ型
・CLNT:クライアント番号
・CHAR:文字列
・NUMC:数字のみの文字列
・DATS:日付
・TIMS:時刻
・DEC:金額または数量、CURRまたはQUANを使用できない場合に使う
・CURR:通貨コード(CUKY)を参照する金額
・CUKY:通貨コード
・QUAN:単位コード(UNIT)を参照する数量
・UNIT:単位コード

ABAPデータ型とディクショナリデータの関係性

ABAP ディクショナリのデータ型とは、ユーザから見たデータ、つまりユーザインタフェースに表示されるデータ書式のことです。このデータ書式は、使用するデータベースシステムにより異なります。テーブルが ABAP ディクショナリで定義されると、ABAP ディクショナリで定義されたデータ型が、データベースシステムのデータ型にコピーされます。

ABAP ディクショナリオブジェクト ( データエレメント、構造、テーブルデータ型、テーブル、ビュー) が ABAP プログラムで使用される場合、オブジェクト項目のディクショナリデータ型は対応する ABAP データ型に変換されます

基本的な考え方
・テーブルには複数のフィールドがある
・各フィールドに対して、項目名とデータエレメントを定義する
・データエレメントごとにドメイン(データ型や桁数の情報)が割り当てられている

3-2 ドメイン

ドメイン
・データ型や桁数の組み合わせを定義するもの
・項目の値を自由入力ではなく特定の値(例:01_製造業、02_情報通信業、など)に限定したい場合、ドメイン値を使う

3-3 データエレメント

データエレメント
・参照するドメインを選択する
・検索ヘルプなどを付けることも可能

構造
・事前定義されている構造は拡張できる(拡張構造、APPEND構造)

インクルード

テーブルデータ型
・行データ型
・アクセスタイプ:標準テーブル、ソートテーブル、ハッシュテーブル、索引テーブル、など
・キー

3-4 テーブル

キー項目と初期値を登録する

ビュー:複数テーブルを結合して必要なフィールド項目のみを表示させるために使う
・データベースビュー
・射影ビュー
・更新ビュー
・ヘルプビュー

テーブル更新ジェネレータ

索引
・一次索引:テーブル登録時に自動生成されるもの、キー項目のみで構成される
二次索引:SE11(ABAPディクショナリ)上で登録するもの、キー項目以外の項目を使ってデータ抽出するために使う

外部キー&チェックテーブル
・指定したチェックテーブル上に存在しないデータが挿入されるのを防ぐ

3-5 検索ヘルプ

入力画面で、特定の項目に入力可能な値を一覧で閲覧できる機能

3-6 ロックオブジェクト

更新処理に対して排他制御をかけるための機能
プログラム実行時、最初にテーブルをロックし、他の処理で更新されないようにする(プログラムが実行終了したら、ロックは解除する)

SM12(ロックエントリ処理)



【Part3 プログラミングについて学ぼう】

・画面(選択画面)の作成方法
・バリアント
・OpenSQL

Chapter4 ABAPプログラミング(基本)

4-1 REPORT命令

タイプ「実行可能プログラム」には必須の命令

4-2 イベント処理

ABAPはイベント駆動言語

イベントキーワード
・イベントごとに付けられたID

4-3 選択画面

ABAPでは、ソースコードとは別に、プログラムの実行者が任意の値を入力できる選択画面(入力項目)がある
・単一項目
・ラジオボタン
・チェックボックス
など

4-4 バリアント

画面上の入力項目に対して、特定の値をあらかじめセットしてある状態で表示する機能

4-5 トランザクションコード割り当て

トランザクションコードを新規登録し、自作のABAPプログラムに割り当てること

4-6 宣言命令

プログラム内でのみ使えるデータ型/変数/構造を宣言すること

・TYPES宣言:データ型を作る
・DATA宣言:変数を作る
・CONSTANTS宣言:定数を作る

4-7 内部テーブル

データベースのテーブルから取得した情報をプログラム内で一時的に持っておくために使う

内部テーブルの4種類
①標準テーブル
②ソートテーブル
③ハッシュテーブル
④レンジテーブル

4-8_9 OpenSQL

ECCの場合、データベースとして使える製品は様々(使えるNativeSQLの種類も様々)なので、製品差を吸収したOpenSQLが記述できるようになっている

・SELECT
・INSERT
・UPDATE
・DELETE
・MODIFY:パフォーマンスが悪い命令であるため、INSERTまたはUPDATEを直接使うべき

4-10 デバッグ機能


Chapter5 基本的な命令文

5-1 出力命令

画面に出力する

WRITE命令
・現在では非推奨、しかし古いプログラム中には残っている

5-2 メッセージ

ステータスバーに出力する

MESSAGE命令

SE91(メッセージクラスの設定)

5-3 代入

変数への代入

構造への代入

内部テーブルへの代入

CLEAR命令

5-4 条件分岐

IF分

CASE文

5-5 計算式

COMPUTE命令

5-6_7 バイト列と文字列の処理

ABAPデータ型
・バイト列:x、xstring
・文字列:c、d、n、t、string

CONCATENATE命令:連結

SPLIT命令:分割

SHIFT命令:文字列シフト

FIND命令:検索

REPLACE命令:置換

CONENSE命令:空白トリミング

TRANSLATE命令:大文字小文字変換

OVERLAY命令:文字列を上書き

オフセット

長さの取得

5-8 繰り返し処理

DOループ命令

WHILEループ命令

強制終了命令
・CHECK命令
・CONTINUE命令
・EXIT命令

5-9 日付と時刻の計算

日付計算と時刻計算には、基本的にはSAP標準の汎用モジュールを使う
ただし、一部の計算は汎用モジュールを使わなくとも可能

書式の変換(変換ルーチン)
・日付の例:
 ・外部書式(画面表示の書式):YYYY/MM/DD
 ・内部書式(プログラムやデータベースの書式):YYYYMMDD ※ABAPデータ型における「D(日付)」も8桁になっている


Chapter6 モジュール化(部品化)

プログラムの「可読性」「保守性」「拡張性」を高めるための機能
ABAPでは、以下の機能を使ってモジュール化を行う
・サブルーチン
・汎用モジュール
・クラス
・INCLUDEプログラム

6-1 サブルーチン

6-2 INCLUDEプログラム

単体では実行できず、他プログラムにINCLUDEされないと使えないプログラム

6-3 汎用モジュール

外部システムからも呼び出し可能

・SAP標準で用意されているものもある
・アドオンで自作することも可能

汎用グループ
・汎用モジュールのグループ化に使える機能

SE37(汎用モジュールビルダ)

SAP標準汎用モジュール
・カレンダ関連
 ・会計年度取得:GET_CURRENT_YEAR
・ファイル関連
 ・ファイルのアップロード:GUI_UPLOAD
・数値
・書式変換
・ポップアップ
・ジョブ関連
・バッチインプット関連
・テキスト関連
 ・テキスト読込:READ_TEXT

6-4 クラス

クラスと汎用グループの使い分け

継承

6-5 論理データベース

現在では非推奨、しかし古いプログラム中には残っている

以下をまとめて部品化したもの
・選択画面
・SELECT命令
・権限チェック

Chapter7 一覧出力処理

レポートプログラムの一覧出力に関する処理
各命令に対して様々なオプション句がある

7-1 出力命令

WRITE命令

通貨コード
・SAPの金額は、すべて小数点以下2桁で管理されている
・通貨コードごとに小数点以下の桁数が定義されているため、通貨コードと組み合わせることによって、通貨に応じた金額が表示される
  ・日本円の場合、画面で「1,000円」と入力すると、テーブルには「10.00」で格納される
  ・WRITE命令のCURRENCYオプションで通貨コードを指定しないと「10.00」が画面表示されてしまう(指定すると「1,000」で表示される)

7-2 改ページ処理

NEW-PAGE命令

7-3 帳票タイトルの出力

7-4 ボタン表示と制御

メニューバーやファンクションキーの設定

7-5 ALV(旧:リストビューア)

一覧表示のための標準機能が提供されている

Chapter8 ABAPプログラミング(応用)

8-1 動的検索

検索条件(SELECT文のFROM句/WHERE句)として、画面(選択画面)からのユーザ入力値を使える

8-2 動的処理

フィールドシンボル機能

8-3 権限オブジェクトの使用

AUTHORUTY-CHECK命令

8-4 排他制御

ロックモード:3種
・E:排他ロック
・S:共有ロック
・X:排他ロック(累積なし)

同一セッションに対するロックか、別セッションに対するロックかで動きが異なる

8-5 他機能呼び出し

CALL TRANSACTION命令:呼び出し元から、呼び出された側に処理を移す

LEAVE PROGRAM命令:呼び出された側から、呼び出し元へ処理を戻す

Chapter9 ファイル操作

9-1 ローカルファイル

CL_GUI_FRONTEND_SERVICESクラス

9-2 サーバファイル

SAPがインストールされているサーバに格納されているファイルの読み書き

OPEN DATASET命令
READ DATASET命令
TRANSFER命令
CLOSE DATASET命令

Chapter10 バッチインプットとBAPI

SAPで大量データを一括で処理したい場合、以下の方法がある
①BAPI(汎用モジュール):SAP標準機能、まずはこちらが使えないか検討する(SAP標準機能であるため動作が保証されている)
②バッチインプット:、VBAのマクロ記録のようなもの、自動化にはそれなりの前準備時間がかかる

10-1 バッチインプットを使用する際の大まかな流れ

まず、SHDB(バッチインプットレコーダ)を使って、処理手順を記録する
次に、記録した処理手順を元に、バッチインプット用のプログラムを作成する

10-2 バッチインプットレコーダー

10-3 バッチインプット用プログラムの作成

10-4 BAPI(バピ)

BAPIエクスプローラで使えるBAPIを探す
更新系処理を行う場合、別途コミット用BAPIを実行する必要あり

BAPIの例
・FI(財務会計)
 ・会計伝票登録:BAPI_ACC_DOCUMENT_POST
・SD(販売管理)
 ・受注伝票登録
 ・出荷伝票登録
 ・請求伝票登録
・MM(在庫購買管理)
 ・購買依頼登録
 ・発注伝票登録
 ・在庫移動登録
 ・請求照合登録
・マスタ
 ・品目マスタ登録変更
 ・ロットマスタ登録変更
 ・原価センタマスタ登録変更
 ・利益センタマスタ登録変更
 ・換算レートマスタ登録
 ・換算レートマスタ取得
 ・銀行マスタ登録
 ・資産マスタ登録
 ・ユーザマスタ登録
・その他
 ・コミット:BAPI_TRANSACTION_COMMIT
 ・ロールバック:BAPI_TRANSACTION_ROLLBACK

10-5 バッチインプットとBAPIのメリット/デメリット

バッチインプット
・パフォーマンスが遅い
・SAPのバージョン変更に伴って自分で修正する必要あり

BAPI
・提供されているBAPIでは実現できない処理もある


Chapter11 ジョブ

ジョブ
・プログラム名、起動時間、実行時の設定をあらかじめ指定することにより、画面表示を行わずに処理を実行すること
・通常、ジョブスケジューラ(ジョブ管理システム)により制御を行う

11-1 ジョブの構成と使用トランザクションコード

ジョブの登録方法
・トランザクションコードを使う
・プログラム上でスケジュールする

ジョブのステータス:6種
①計画済:登録のみ
②リリース済:登録済みだが、開始条件が満たされていない状態
③待機中:開示条件は満たされているが、実行領域がないため待機している状態
④実行中
⑤終了
⑥中止:実行されたが、エラー発生により異常終了した状態

ジョブログ

SM36(ジョブの登録)

SM37(ジョブ実行結果の確認)

SP01(スプールの確認)
・ジョブで帳票が出力される場合、このトランザクションコードで確認できる

11-2 スケジュール起動

トランザクションコード(SM36)を使ってジョブ実行する場合

①ジョブ名を登録
②ジョブクラス(実行の優先順位)を登録
③開始条件の登録
・即時実行
・日時指定実行
④起動プログラムの設定
・ABAPプログラム名
・選択画面上のバリアント(選択画面がある場合)
・言語

11-3 プログラム起動

ABAPプログラムから呼び出してジョブ実行する場合

11-4 メモリ領域の使用

メモリ領域の種類
・SAPメモリ:SAP GUIの全てのセッションがアクセス可能なメモリ領域
・ABAPメモリ:同一セッション内でのみアクセス可能なメモリ領域

  Column 人との適度な距離感を保ち、多面的な付き合いをしたい


Chapter12 ダイアログプログラム(Dynpro)

12-1 Dynproの構成

Dynproとは以下をまとめたもの
・画面
・制御ロジック
・モジュールプール:制御ロジックから呼び出される、INCLUDEプログラムの集まり

制御ロジックの記述
PROCESS BEFORE OUTPUT
PBOモジュール

PROCESS AFTER INPUT
PAIモジュール

モジュールプールの記述
①TOPインクルード
②PBOインクルード
③PAIインクルード
④FORMインクルード

Dynproの種類
・標準Dynpro
・従属Dynpro:タブストリップを使う
・ダイアログボックスDynpro

12-2_4 標準Dynpro

SE80(オブジェクトナビゲータ)
①プログラム名を登録
②属性を登録
③画面の作成
・レイアウトの作成
・ディクショナリ項目(SE11で登録)の配置
④GUIステータスを登録

12-5 従属Dynpro

メイン画面(標準Dynpro)に従属画面領域を設定し、従属画面領域に対して、タブ画面(従属Dynpro)を割り当てる

12-6 ダイアログボックスDynpro

ポップアップさせることが可能

12-7 テーブルコントロール

Dynproでテーブルを出力する

12-8 Dynpro各種命令文

MODULE命令
FIELD命令

12-9 一覧出力

Dynpro画面処理からレポート一覧処理に切り替える方法

12-10 トランザクションコード割り当て

Dynproプログラムを実行するためには、まずトランザクションコードの割当が必要

 

Chapter13 S/4HANAにおける開発

13-1 従来のABAP開発は今後も続くか

13-2 コードプッシュダウン手法

従来はAPサーバ上で実行していた処理を、DBサーバ上で実行するように変える考え方

コードプッシュダウンのアプローチ
ボトムアップアプローチ:初期に主流だった
 ・DBサーバ(HANA)上で、ビューやストアドプロシージャを作成し、APサーバ(External ViewやStored Procedure Proxy)からアクセスできるようにする
 ・ABAP開発者はAPサーバだけでなく、DBサーバにもログインが必要
 ・移送管理が複雑になる、DBサーバで作成したオブジェクト(ビューやストアドプロシージャ)は、ABAPオブジェクトは別に移送管理しなければならない
トップダウンアプローチ:現在の主流はこちら
 ・まずAPサーバ上でCDSViewやAMDPを作成することで、その後、対応するビューやストアドプロシージャをDBサーバ上に作成する
 ・ABAP開発者はAPサーバのみにログインすればよく、移送管理も簡単

実現方法
・OpenSQL:もっとも簡単だが再利用しにくい
・CDSView:FioriアプリはCDSViewを前提として作られているので使いやすい
・AMDP:CDSViewでは実現できない処理ができる

OpenSQL
・集計、計算と文字列操作、分岐処理を、ABAPプログラムではなく、OpenSQL(DBサーバ上で実行される)で実装する

CDSView
・APサーバでCDSViewを作成すると、対応するSQLViewがDBサーバ上に自動生成される
・CDSViewを使うためには、統合開発環境EclipseにADT(ABAP Development Tool)をインストールする必要あり(SAP内のトランザクションコードからは実行できない)
・アノテーション機能

AMDP(ABAP Managed Database Procedure)
・APサーバからDBサーバ上に直接ストアドプロシージャを作成する方法
・AMDPを使うためには、統合開発環境EclipseにADT(ABAP Development Tool)をインストールする必要あり(SAP内のトランザクションコードからは実行できない)

13-3 Fiori

・Fiori Launchpad:アプリや機能を起動する元画面、Fioriアプリ以外(BOなど)も実行可能
・事前定義アプリ:Fioriで作成された標準機能
・カスタムFioriアプリ:SAPUI5(SAP UI Development Toolkit for HTML5)で作成された機能

カスタムFioriアプリの特徴
・レスポンシブデザイン
・画面とビジネスロジックの分離:画面はWeb技術(エンジニアが調達しやすい)、ビジネスロジックABAPで実装する
・開発環境とライブラリ:SAP WebIDE(SAP HANA Cloud Platfomの機能のひとつ)

Fioriアプリの構成
Fiori Launchpad(FLP)
↓↑
SAPUI5アプリ
↓↑ODtata:RESTfulなWebAPIプロトコル(Microsoft主導で策定)
アプリケーションロジック(ABAP、CDSView)
↓↑
データベース


Chapter14 拡張開発

SAP標準機能の中にユーザ独自ロジックを入れるための機能
・Exit:古い
・BAdI(ビジネスアドイン):Exitの後継機能

14-1 Exit

SPRO(SAP標準動作のカスタマイズ)

ユーザExit
カスタマExit

14-2 BAdI

14-3 SAPクエリ

・標準機能には一覧を表示できないものがあるが、SAPクエリを使うと一覧表示できる
・SAPクエリを直接トランザクションコードに割り当てることはできない

SQ03(ユーザグループ)
・ロールのようなもの(部門や職責を示す)、複数のユーザIDが紐づく
・SAPクエリの実行権限は、ユーザIDではなくユーザグループに割り当てる

SQ02(インフォセット)
・テーブル間の結合設定
・表示したいフィールド
・インフォセットの閲覧権限は、ユーザIDではなくユーザグループに割り当てる

SQ01(クエリ)
・フィールドの並び順(SQ1など)

14-4 SAPスクリプト

SE71(SAPスクリプトフォーム)

14-5 SmartForms

SAPスクリプトの後継としてリリースされた帳票ツール
グラフィカルに設計できる

SMARTFORMS(スマートフォームズ)


14-6 トランザクションバリアント

トランザクションバリアントをトランザクションコードに割り当てることによって、トランザクションコード毎に画面表示を制御できる


【Part4 ツール】

Chapter15 サポート機能

15-1 プログラム分析ツール

SCI(コードインスペクタ)
・チェックバリアント:命名規則を登録できる
・インスペクション:インスペクション対象のプログラムIDと、実行するチェックバリアントを指定して、実行する

15-2 パフォーマンス分析ツール

SE30(ABAP実行時間分析)
・パフォーマンス低下の原因を調査できる

パフォーマンス向上のための観点
ABAPに起因するもの
・不要なLOOPがある
・LOOP内で不要なデータを処理している
・LOOP内でSQLを実行している(SQLはIOに時間がかかる)
SQLに起因するもの
・結合キーが誤っている
・不要なフィールドをSELECTしている

15-3 実行エラー

ショートダンプ(ABAPプログラム実行時に強制終了)が発生した場合、ST22(ABAP実行エラー)を使って、ショートダンプ履歴を照会し、原因を特定する

15-4 権限エラー

権限エラーが発生した場合、SU53(権限データ照会)を使って、権限エラー履歴(トランザクションコード、権限オブジェクト、権限値など)を紹介し、原因を特定する

15-5 テストツール(eCATT)

SECATT(eCATT、拡張コンピュータ支援テストツール)
・ファイルからテストデータを取り込み、データ入力を自動化し、テストデータを登録する
・テストスクリプトを登録する

15-6_8 データ移行ツール(LSMW)

LSMW(Legacy System Migration Workbench)
・ECC以外のシステム(レガシーシステム)から、ECCへのデータ転送を行う
・マスタや伝票を一括登録することが可能
・一括登録には以下の方法が使える
 ・バッチインプット
 ・ダイレクトインプット
 ・BAPI
 ・IDoc

15-9 バージョン管理

ABAPプログラムやアドオンテーブルはバージョン管理される
変更内容を確認したり、変更前のバージョンを復元したりできる

15-10 ヘルプの見方

15-11 拡張構文チェック

SLIN(ABAPプログラム拡張構文チェック)
・使用していない変数やサブルーチン
・使用されている非推奨命令

15-12 プログラム比較

ABAP分割画面エディタ(SE39)
異なるインスタンス間(開発機と検証機)でも差分比較が可能

Chapter16 移送

16-1 移送依頼のリリース

移送依頼リリース時の注意点
・移送順序を間違えない、順番通りにリリースしないと変になる
・移送依頼のステータスは台帳管理する
 ・移送依頼パッケージにはどんなオブジェクトが割り当たっていたか
 ・どの環境に移送したか
 ・いつ移送したか

16-2 クライアント間移送

クライアント間移送(例:開発機インスタンス上で、カスタマイズ用クライアントに対する変更を、開発用クライアントにも適用したい)を行う場合、移送依頼リリースは不要
・例:クライアント依存のカスタマイズ(特定クライアントに対してのみ行ったパラメータ設定など)を、他のクライアントに対しても適用したい
・SCC1(移送依頼によるコピー)を使って、移送依頼を探し、対象のクライアントに適用する

【SAP】クライアントコピーについて徹底解説!


16-3 インスタンス間移送

インスタンス間移送(例:開発機→検証機)を行う場合、あらかじめ移送依頼をリリースしておく必要がある
・SE09(移送オーガナイザ)を使う
※移送依頼についての詳細は2-2

【Part5 演習】

Chapter17 演習問題

17-1 ファイルを使用したテーブルアップロード/ダウンロード

17-2 消費税計算レポート

17-3 IF(インターフェース)ファイルからの会計伝票登録

  Column 袖振り合うも「たしょう」の縁

  Column 「ポジティブ心理学」が教えてくれる成功と幸福についての因果関係


Appendix 巻末資料

A-1 演習問題の解答

A-2 会計モジュールでよく使用するテーブル

A-3 ロジスティクスモジュールでよく使用するテーブル

A-4 人事管理モジュールでよく使用するテーブル

A-5 ABAPディクショナリ/ユーザ関連テーブル

A-6 用語集

OLE(Object Linking and Embedding)

NetWeaver AS(Application Server)
ABAPによるアドオンプログラムの開発基盤

RFC(Remote Function Call)
ExcelVBAなどのSAP外部から汎用モジュールを呼び出すこと
汎用モジュールが「リモート可能モジュール」になっている必要あり

ページコード
文字コードを表す4桁の数値
例:Shift-JIS:8000

構造「SYST」
システム変数の一覧を格納している

コラム


SAP ECCからS/4HANAへの移行方法

許容できる移行期間、トランザクションデータのデータ量、設定するパラメータ(カスタマイズ)の量、開発するアドオンの量、などを考慮して選択する

・Greenfield:従来のECCシステムは残したままにする。新S/4にはマスタデータのみを移行して、過去のトランザクションデータなどは従来システム上で照会する
・Brownfield:従来のECCシステムは廃止する。新S/4にはマスタデータだけではなくトランザクションデータやパラメータも全て移行する



補足

SAPシステムの階層構造

SAPシステム>インスタンス(SID)>クライアント(クライアント番号)
・SAPシステム:OSにインストールする単位
・インスタンス:一般的にいうところのアプリケーションサーバ
・クライアント:
 ・地理的単位で分割
 ・ビジネスルール単位で分割

SAP ランドスケープとは、複数の SAP システムのグループのことで、通常は開発、品質、テスト、実動が含まれます。
1 つの SAP システムは 1 つ以上の SAP インスタンス で構成されます。SAP インスタンスとは、同時に開始/停止するプロセスをまとめたものです。 これらの SAP インスタンスがグループ化されて、特定の領域または事業単位の定義された用途のために指定された 1 つの SAP システムを形成します。 さらに、ランドスケープの中では、それらのインスタンスが、開発システム、テスト・システム、または実動 SAP システムとしてグループ化されます。各システムには、1 つ以上のトラック (「プロジェクト」、「業務」など) があります。 このランドスケープの設計は、ビジネスごとに異なり、ビジネス要件によって変わります。

https://cloud.ibm.com/docs/sap?topic=sap-planning-your-system-landscape&locale=ja

紹介記事


BSEGがSAPの最新バージョンである『S/4HANA』になったらACDOCAというテーブルに置き換わることになります。
正確には置き換わるというより、CO関連のデータも含めて全ての取引データがACDOCAに集約されて保存されることになります。また、BSEGなど従来のテーブルについても残っていますし会計伝票明細データが保存されていきます。ただ、会計伝票明細の全てがそこに登録されるわけではなくなり、一部BSEGに登録されないデータもあるため、今まで会計伝票明細を取得するという時にBSEGを使っていたのと同じように使用すると想定通りにデータが取得できないケースが出てきてしまいバグに繋がる可能性があるので要注意です。
ですので、S/4HANA後は会計伝票明細を取得するならACDOCAテーブルから取得するのが良いでしょう。従来のECCなどからS/4HANAにバージョンアップする際には、ここを考慮しておく必要があり、バージョンアップ対応としてBSEGを使っているアドオンは修正しないといけない可能性があります。
BSEGに限らず、このようにS/4 HANAに変わるとテーブル構成も変わる箇所があるので注意しましょう。ちなみに入出庫関連はMATDOCというテーブルがあるので、ご参考まで。

BSEGにあるのにACDOCAにない項目結構あってめんどい
データ参照や設計するのに、結局BSEGみないといけない

【Fiori】と呼ばれる新たなインターフェースで伝票を入力すると、BSEGには値が入らず、ACDOCAにのみ値が格納される項目が出てきました。

この記事が気に入ったらサポートをしてみませんか?