2023-08-14:
現在は、このロジックは使っていません。
更に洗練されたロジックを開発しています。
・損益計算書(PL)に加えて貸借対照表(BS)も一括取得します。
→もちろんBSは、(累計)残高値を出力します。
・月次に加えて、四半期、半期、通期も同時に取得します。
・縦持ち、横持ちの両方に対応しています。
・ACDOCAのタイムスタンプ値に連動して、差分出力にも対応しています。
・Pure View Base(藁)のロジックとなっています。
→つまり、「SAC」「Tableau」等ピボット感覚で出力可能です。
※不定期ですがBeeXでセミナーを行っています。(最近は順番が回ってこなくて出来ていません汗)
→ご興味のある方はBeeXまで、「SAPデータ活用」で、ご連絡お願い致します。
→過去、AWS、MSと共同セミナーを行った時の動画があったと思います。(どこだっけ..)
参考リンク
株式会社BeeX | 基幹システムのクラウド移行をお手伝いします
セミナー・イベント|基幹システムのクラウド移行・構築・導入支援のBeeX
ABAP CDS View vs HANA Information View(HANA View):メモリ使用量比較|基幹システムのクラウド移行・構築・導入支援のBeeX
直近はこれでした。
DXに必須となるデータドリブン経営に向けたSAPデータ活用ウェビナー|基幹システムのクラウド移行・構築・導入支援のBeeX
最初に、
今回のソースコードは、ちょっと動かす程度ならば構いませんが、このソースコードをベースにプロジェクトで使う場合は、必ずご連絡(コメントにメールアドレスを書いてね)お願いします。
※無断使用を発見した場合は怒ります(爆)。知的所有権の類を放棄したわけではありません。
久しぶりに、ABAPネタを書きます。ヘッドホンの改造ばっかりだったものね。
さて、ABAP 7.52から、WITH句が新たにサポートされました。そのため、SELECT文の入れ子が比較的簡単に出来るようになったと感じています。
いよいよ、New Open SQL 改め ABAP SQLで、Code Pushdown時代の幕開けです。
思い起こせば...
HANA Infomation View時代は、上記の入れ子構造をカジュアルに実装できていました。
ABAP CDS Viewの時代(自身のプロジェクトアサインの都合でサンプル程度しか実装していませんが)は、ViewがViewを呼ぶため、憶測ではありますが作るViewはシンプルですがたくさん作る必要があるように感じます。
そして、ABAP Reportプログラム内のNew Open SQL改め、ABAP SQLですねぇ~。個人的には大本命と思っています。なにしろ、開発者の母集団が大きいから。
WITH句を使うことで、SORT命令、DELETE DUPLICATE~命令、FOR ALL ENTRIES IN句の組み合わせを、ほぼ撲滅できます(多分)。これについては、別途記事を書きます。
今までのABAP SQLのベーシックな動きを説明するのも良いのですが、少し色気ついて「えっ」って思って頂けるようなサンプルを遊びで作ってみました。
ただし、今ソースをベースに実プロジェクトで使う場合は無償で構いませんが必ず一報下さい。(誰も興味ないかな(爆))パフォーマンスデータが欲しいので測定をお願いすることになると思います。
※無断使用を発見した場合は怒ります(爆)。知的所有権の類を放棄したわけではありません。
簡単に、プログラムの説明を。
以下のテーブルより、期・勘定ごとに、金額を取得します。
・ACDOCA-当年度実績
・ACDOCA-前年度実績
・ACDOCP-当年度予算(年間計画)
・ACDOCP-当年度見込
縦軸:勘定
横軸:期別の金額
当年度実績については、選択画面の会計期間以下は、ACDOCA-当年度実績、会計期間を超える場合は、背景色を変えてACDOCP-見込の金額を表示します。
ACDOCPの数値を表示しているセルは、色を変えるようにしました。
※急いで作ったのでソースコードがあらびきです。ALV周りとか...通貨参照してないし...予算用勘定とか出来るけれど変換してないし...。
※テストは行っていません。Code Pushdownの雰囲気を感じてね(笑)。
会計とかよく知らないので、出てくる数字は多分ぐちゃぐちゃです。売上総利益とか計算してないし。
ABAP RESTful Programming Modelやってみたいなぁ~。
ABAP CDSやってみたいなぁ~。
お仕事ください(切実に...)
私が動かした環境(いわゆる開発機)では、ACDOCAの2年分データ(250万レコード)で、データ取得、0.1秒でした。実行ボタン押下~ALV表示までで、1秒を切っていました。
しかしながら、このロジックを、Webi等のレポーティングツールに移植するのはおそらく無理です。理由としてはパラメータクエリになってしまっているから。
そこで...実は(いやらしくも小出しにしています(笑))レポーティングツール移植可能なPure View Base(いま用語を作りました)のロジックも、以前HANA Infomation Viewで作ったことがあります。
こちらはACDOCAの2年分データ3000万レコードで0.3秒程度でした。
※Pure View Baseとは、
SELECT * FROM [Pure View Base] WHERE ~;で動くもの。
もうさ~マートは作らなくていいよ。
ABAP 7.4バージョン(ACDOCAのみ)別途書こうかな。(多少LOOP回っちゃいます)
ABAP 7.31バージョン(BKPF、BSEGのみ)は、気が向いたら書きます。(これは大分ぐるぐるLOOP回っちゃいます)
ABAP 7.52以降で動きます。
(2019-11-21:多少修正しました)
*&---------------------------------------------------------------------* *& Report Y_CODE_PUSHDOWN *&---------------------------------------------------------------------* *& ACDOCA、ACDOCPから予実前年度対比月次損益計算書みたいな *&---------------------------------------------------------------------* REPORT Y_CODE_PUSHDOWN. *&---------------------------------------------------------------------* * 選択画面 *&---------------------------------------------------------------------* PARAMETERS: P_RLDNR TYPE ACDOCA-RLDNR, "総勘定元帳の元帳 P_RBUKRS TYPE ACDOCA-RBUKRS, "会社コード P_GJAHR TYPE ACDOCA-GJAHR, "会計年度 P_POPER TYPE ACDOCA-POPER, "会計期間 P_CATEB TYPE ACDOCP-CATEGORY, "カテゴリ予算 P_CATEF TYPE ACDOCP-CATEGORY. "カテゴリ見通 START-OF-SELECTION. PERFORM START_OF_SELECTION. "主処理 *&---------------------------------------------------------------------* * 主処理 *&---------------------------------------------------------------------* FORM START_OF_SELECTION. *&---------------------------------------------------------------------* DATA: LDF_SUBRC TYPE SY-SUBRC. PERFORM GET_LIST "一覧を取得する USING P_RLDNR "総勘定元帳の元帳 P_RBUKRS "会社コード P_GJAHR "会計年度 P_POPER "会計期間 P_CATEB "カテゴリ予算 P_CATEF "カテゴリ見通 CHANGING LDF_SUBRC. ENDFORM. *&---------------------------------------------------------------------* * 一覧を取得する *&---------------------------------------------------------------------* FORM GET_LIST USING PIF_RLDNR TYPE ACDOCA-RLDNR PIF_RBUKRS TYPE ACDOCA-RBUKRS PIF_GJAHR TYPE ACDOCA-GJAHR PIF_POPER TYPE ACDOCA-POPER PIF_CATEB TYPE ACDOCP-CATEGORY PIF_CATEF TYPE ACDOCP-CATEGORY CHANGING POF_SUBRC TYPE SY-SUBRC. *&---------------------------------------------------------------------* SELECT COUNT( * ) FROM ACDOCA INTO @DATA(LDF_ACDOCA_COUNT). "全ACDOCA件数 SELECT COUNT( * ) FROM ACDOCP INTO @DATA(LDF_ACDOCP_COUNT). "全ACDOCP件数 "当年度実績:実績 SELECT COUNT( * ) FROM ACDOCA "Universal Journal Entry Line Items INNER JOIN SKA1 "G/L 勘定マスタ (勘定コード表) ON SKA1~KTOPL = ACDOCA~KTOPL "勘定コード表 AND SKA1~SAKNR = ACDOCA~RACCT "G/L 勘定コード AND SKA1~XBILK = @ABAP_FALSE "フラグ: 貸借対照表勘定 WHERE ACDOCA~RLDNR = @PIF_RLDNR "総勘定元帳の元帳 AND ACDOCA~RBUKRS = @PIF_RBUKRS "会社コード AND ACDOCA~RYEAR = @PIF_GJAHR "会計年度 AND ACDOCA~POPER <= @PIF_POPER "会計期間 AND ACDOCA~BSTAT = @SPACE "伝票ステータス INTO @DATA(LDF_ACDOCA_AC0). "当年度実績:実績ACDOCA件数 "当年度実績:見通 SELECT COUNT( * ) FROM ACDOCP "Universal Journal Entry Line Items INNER JOIN SKA1 "G/L 勘定マスタ (勘定コード表) ON SKA1~KTOPL = ACDOCP~KTOPL "勘定コード表 AND SKA1~SAKNR = ACDOCP~RACCT "G/L 勘定コード AND SKA1~XBILK = @ABAP_FALSE "フラグ: 貸借対照表勘定 WHERE ACDOCP~RLDNR = @PIF_RLDNR "総勘定元帳の元帳 AND ACDOCP~RBUKRS = @PIF_RBUKRS "会社コード AND ACDOCP~RYEAR = @PIF_GJAHR "会計年度 AND ACDOCP~POPER > @PIF_POPER "会計期間 INTO @DATA(LDF_ACDOCP_AC0). "当年度実績:見通ACDOCP件数 "当年度予算 SELECT COUNT( * ) FROM ACDOCP "Universal Journal Entry Line Items INNER JOIN SKA1 "G/L 勘定マスタ (勘定コード表) ON SKA1~KTOPL = ACDOCP~KTOPL "勘定コード表 AND SKA1~SAKNR = ACDOCP~RACCT "G/L 勘定コード AND SKA1~XBILK = @ABAP_FALSE "フラグ: 貸借対照表勘定 WHERE ACDOCP~RLDNR = @PIF_RLDNR "総勘定元帳の元帳 AND ACDOCP~RBUKRS = @PIF_RBUKRS "会社コード AND ACDOCP~RYEAR = @PIF_GJAHR "会計年度 INTO @DATA(LDF_ACDOCP_PC0). "当年度予算ACDOCP件数 "前年度実績 SELECT COUNT( * ) FROM ACDOCA "Universal Journal Entry Line Items INNER JOIN SKA1 "G/L 勘定マスタ (勘定コード表) ON SKA1~KTOPL = ACDOCA~KTOPL "勘定コード表 AND SKA1~SAKNR = ACDOCA~RACCT "G/L 勘定コード AND SKA1~XBILK = @ABAP_FALSE "フラグ: 貸借対照表勘定 WHERE ACDOCA~RLDNR = @PIF_RLDNR "総勘定元帳の元帳 AND ACDOCA~RBUKRS = @PIF_RBUKRS "会社コード AND ACDOCA~RYEAR = @( PIF_GJAHR - 1 ) "会計年度 AND ACDOCA~BSTAT = @SPACE "伝票ステータス INTO @DATA(LDF_ACDOCA_AP1). "前年度実績ACDOCA件数 DATA LDF_TIMESTAMP_START TYPE TIMESTAMPL. "タイムスタンプデータ取得開始 GET TIME STAMP FIELD LDF_TIMESTAMP_START. "タイムスタンプデータ取得開始 CONSTANTS LCF_ZERO TYPE FINS_VHCUR12 VALUE 0. WITH +ACDOCA AS ( "当年度実績:実績 SELECT ACDOCA~RLDNR, "総勘定元帳の元帳 ACDOCA~RBUKRS, "会社コード ACDOCA~KTOPL, "勘定コード表 ACDOCA~RACCT, "勘定コード ACDOCA~RHCUR, "会社コード通貨 SUM( CASE ACDOCA~POPER WHEN '001' THEN ACDOCA~HSL ELSE 0 END ) AS HSL001AC0, "当年度001期実績 @LCF_ZERO AS HSL001PC0, "当年度001期予算 @LCF_ZERO AS HSL001AP1, "前年度001期実績 SUM( CASE ACDOCA~POPER WHEN '002' THEN ACDOCA~HSL ELSE 0 END ) AS HSL002AC0, "当年度002期実績 @LCF_ZERO AS HSL002PC0, "当年度002期予算 @LCF_ZERO AS HSL002AP1, "前年度002期実績 SUM( CASE ACDOCA~POPER WHEN '003' THEN ACDOCA~HSL ELSE 0 END ) AS HSL003AC0, "当年度003期実績 @LCF_ZERO AS HSL003PC0, "当年度003期予算 @LCF_ZERO AS HSL003AP1, "前年度003期実績 SUM( CASE ACDOCA~POPER WHEN '004' THEN ACDOCA~HSL ELSE 0 END ) AS HSL004AC0, "当年度004期実績 @LCF_ZERO AS HSL004PC0, "当年度004期予算 @LCF_ZERO AS HSL004AP1, "前年度004期実績 SUM( CASE ACDOCA~POPER WHEN '005' THEN ACDOCA~HSL ELSE 0 END ) AS HSL005AC0, "当年度005期実績 @LCF_ZERO AS HSL005PC0, "当年度005期予算 @LCF_ZERO AS HSL005AP1, "前年度005期実績 SUM( CASE ACDOCA~POPER WHEN '006' THEN ACDOCA~HSL ELSE 0 END ) AS HSL006AC0, "当年度006期実績 @LCF_ZERO AS HSL006PC0, "当年度006期予算 @LCF_ZERO AS HSL006AP1, "前年度006期実績 SUM( CASE ACDOCA~POPER WHEN '007' THEN ACDOCA~HSL ELSE 0 END ) AS HSL007AC0, "当年度007期実績 @LCF_ZERO AS HSL007PC0, "当年度007期予算 @LCF_ZERO AS HSL007AP1, "前年度007期実績 SUM( CASE ACDOCA~POPER WHEN '008' THEN ACDOCA~HSL ELSE 0 END ) AS HSL008AC0, "当年度008期実績 @LCF_ZERO AS HSL008PC0, "当年度008期予算 @LCF_ZERO AS HSL008AP1, "前年度008期実績 SUM( CASE ACDOCA~POPER WHEN '009' THEN ACDOCA~HSL ELSE 0 END ) AS HSL009AC0, "当年度009期実績 @LCF_ZERO AS HSL009PC0, "当年度009期予算 @LCF_ZERO AS HSL009AP1, "前年度009期実績 SUM( CASE ACDOCA~POPER WHEN '010' THEN ACDOCA~HSL ELSE 0 END ) AS HSL010AC0, "当年度010期実績 @LCF_ZERO AS HSL010PC0, "当年度010期予算 @LCF_ZERO AS HSL010AP1, "前年度010期実績 SUM( CASE ACDOCA~POPER WHEN '011' THEN ACDOCA~HSL ELSE 0 END ) AS HSL011AC0, "当年度011期実績 @LCF_ZERO AS HSL011PC0, "当年度011期予算 @LCF_ZERO AS HSL011AP1, "前年度011期実績 SUM( CASE ACDOCA~POPER WHEN '012' THEN ACDOCA~HSL ELSE 0 END ) AS HSL012AC0, "当年度012期実績 @LCF_ZERO AS HSL012PC0, "当年度012期予算 @LCF_ZERO AS HSL012AP1 "前年度012期実績 FROM ACDOCA "Universal Journal Entry Line Items INNER JOIN SKA1 "G/L 勘定マスタ (勘定コード表) ON SKA1~KTOPL = ACDOCA~KTOPL "勘定コード表 AND SKA1~SAKNR = ACDOCA~RACCT "G/L 勘定コード AND SKA1~XBILK = @ABAP_FALSE "フラグ: 貸借対照表勘定 WHERE ACDOCA~RLDNR = @PIF_RLDNR "総勘定元帳の元帳 AND ACDOCA~RBUKRS = @PIF_RBUKRS "会社コード AND ACDOCA~RYEAR = @PIF_GJAHR "会計年度 AND ACDOCA~POPER <= @PIF_POPER "会計期間 AND ACDOCA~BSTAT = @SPACE "伝票ステータス GROUP BY ACDOCA~RLDNR, "総勘定元帳の元帳 ACDOCA~RBUKRS, "会社コード ACDOCA~KTOPL, "勘定コード表 ACDOCA~RACCT, "勘定コード ACDOCA~RHCUR "会社コード通貨 UNION ALL "当年度実績:見通 SELECT ACDOCP~RLDNR, "総勘定元帳の元帳 ACDOCP~RBUKRS, "会社コード ACDOCP~KTOPL, "勘定コード表 ACDOCP~RACCT, "勘定コード ACDOCP~RHCUR, "会社コード通貨 SUM( CASE ACDOCP~POPER WHEN '001' THEN ACDOCP~HSL ELSE 0 END ) AS HSL001AC0, "当年度001期実績 @LCF_ZERO AS HSL001PC0, "当年度001期予算 @LCF_ZERO AS HSL001AP1, "前年度001期実績 SUM( CASE ACDOCP~POPER WHEN '002' THEN ACDOCP~HSL ELSE 0 END ) AS HSL002AC0, "当年度002期実績 @LCF_ZERO AS HSL002PC0, "当年度002期予算 @LCF_ZERO AS HSL002AP1, "前年度002期実績 SUM( CASE ACDOCP~POPER WHEN '003' THEN ACDOCP~HSL ELSE 0 END ) AS HSL003AC0, "当年度003期実績 @LCF_ZERO AS HSL003PC0, "当年度003期予算 @LCF_ZERO AS HSL003AP1, "前年度003期実績 SUM( CASE ACDOCP~POPER WHEN '004' THEN ACDOCP~HSL ELSE 0 END ) AS HSL004AC0, "当年度004期実績 @LCF_ZERO AS HSL004PC0, "当年度004期予算 @LCF_ZERO AS HSL004AP1, "前年度004期実績 SUM( CASE ACDOCP~POPER WHEN '005' THEN ACDOCP~HSL ELSE 0 END ) AS HSL005AC0, "当年度005期実績 @LCF_ZERO AS HSL005PC0, "当年度005期予算 @LCF_ZERO AS HSL005AP1, "前年度005期実績 SUM( CASE ACDOCP~POPER WHEN '006' THEN ACDOCP~HSL ELSE 0 END ) AS HSL006AC0, "当年度006期実績 @LCF_ZERO AS HSL006PC0, "当年度006期予算 @LCF_ZERO AS HSL006AP1, "前年度006期実績 SUM( CASE ACDOCP~POPER WHEN '007' THEN ACDOCP~HSL ELSE 0 END ) AS HSL007AC0, "当年度007期実績 @LCF_ZERO AS HSL007PC0, "当年度007期予算 @LCF_ZERO AS HSL007AP1, "前年度007期実績 SUM( CASE ACDOCP~POPER WHEN '008' THEN ACDOCP~HSL ELSE 0 END ) AS HSL008AC0, "当年度008期実績 @LCF_ZERO AS HSL008PC0, "当年度008期予算 @LCF_ZERO AS HSL008AP1, "前年度008期実績 SUM( CASE ACDOCP~POPER WHEN '009' THEN ACDOCP~HSL ELSE 0 END ) AS HSL009AC0, "当年度009期実績 @LCF_ZERO AS HSL009PC0, "当年度009期予算 @LCF_ZERO AS HSL009AP1, "前年度009期実績 SUM( CASE ACDOCP~POPER WHEN '010' THEN ACDOCP~HSL ELSE 0 END ) AS HSL010AC0, "当年度010期実績 @LCF_ZERO AS HSL010PC0, "当年度010期予算 @LCF_ZERO AS HSL010AP1, "前年度010期実績 SUM( CASE ACDOCP~POPER WHEN '011' THEN ACDOCP~HSL ELSE 0 END ) AS HSL011AC0, "当年度011期実績 @LCF_ZERO AS HSL011PC0, "当年度011期予算 @LCF_ZERO AS HSL011AP1, "前年度011期実績 SUM( CASE ACDOCP~POPER WHEN '012' THEN ACDOCP~HSL ELSE 0 END ) AS HSL012AC0, "当年度012期実績 @LCF_ZERO AS HSL012PC0, "当年度012期予算 @LCF_ZERO AS HSL012AP1 "前年度012期実績 FROM ACDOCP "Universal Journal Entry Line Items INNER JOIN SKA1 "G/L 勘定マスタ (勘定コード表) ON SKA1~KTOPL = ACDOCP~KTOPL "勘定コード表 AND SKA1~SAKNR = ACDOCP~RACCT "G/L 勘定コード AND SKA1~XBILK = @ABAP_FALSE "フラグ: 貸借対照表勘定 WHERE ACDOCP~RLDNR = @PIF_RLDNR "総勘定元帳の元帳 AND ACDOCP~RBUKRS = @PIF_RBUKRS "会社コード AND ACDOCP~RYEAR = @PIF_GJAHR "会計年度 AND ACDOCP~POPER > @PIF_POPER "会計期間 GROUP BY ACDOCP~RLDNR, "総勘定元帳の元帳 ACDOCP~RBUKRS, "会社コード ACDOCP~KTOPL, "勘定コード表 ACDOCP~RACCT, "勘定コード ACDOCP~RHCUR "会社コード通貨 UNION ALL "当年度予算 SELECT ACDOCP~RLDNR, "総勘定元帳の元帳 ACDOCP~RBUKRS, "会社コード ACDOCP~KTOPL, "勘定コード表 ACDOCP~RACCT, "勘定コード ACDOCP~RHCUR, "会社コード通貨 @LCF_ZERO AS HSL001AC0, "当年度001期実績 SUM( CASE ACDOCP~POPER WHEN '001' THEN ACDOCP~HSL ELSE 0 END ) AS HSL001PC0, "当年度001期予算 @LCF_ZERO AS HSL001AP1, "前年度001期実績 @LCF_ZERO AS HSL002AC0, "当年度002期実績 SUM( CASE ACDOCP~POPER WHEN '002' THEN ACDOCP~HSL ELSE 0 END ) AS HSL002PC0, "当年度002期予算 @LCF_ZERO AS HSL002AP1, "前年度002期実績 @LCF_ZERO AS HSL003AC0, "当年度003期実績 SUM( CASE ACDOCP~POPER WHEN '003' THEN ACDOCP~HSL ELSE 0 END ) AS HSL003PC0, "当年度003期予算 @LCF_ZERO AS HSL003AP1, "前年度003期実績 @LCF_ZERO AS HSL004AC0, "当年度004期実績 SUM( CASE ACDOCP~POPER WHEN '004' THEN ACDOCP~HSL ELSE 0 END ) AS HSL004PC0, "当年度004期予算 @LCF_ZERO AS HSL004AP1, "前年度004期実績 @LCF_ZERO AS HSL005AC0, "当年度005期実績 SUM( CASE ACDOCP~POPER WHEN '005' THEN ACDOCP~HSL ELSE 0 END ) AS HSL005PC0, "当年度005期予算 @LCF_ZERO AS HSL005AP1, "前年度005期実績 @LCF_ZERO AS HSL006AC0, "当年度006期実績 SUM( CASE ACDOCP~POPER WHEN '006' THEN ACDOCP~HSL ELSE 0 END ) AS HSL006PC0, "当年度006期予算 @LCF_ZERO AS HSL006AP1, "前年度006期実績 @LCF_ZERO AS HSL007AC0, "当年度007期実績 SUM( CASE ACDOCP~POPER WHEN '007' THEN ACDOCP~HSL ELSE 0 END ) AS HSL007PC0, "当年度007期予算 @LCF_ZERO AS HSL007AP1, "前年度007期実績 @LCF_ZERO AS HSL008AC0, "当年度008期実績 SUM( CASE ACDOCP~POPER WHEN '008' THEN ACDOCP~HSL ELSE 0 END ) AS HSL008PC0, "当年度008期予算 @LCF_ZERO AS HSL008AP1, "前年度008期実績 @LCF_ZERO AS HSL009AC0, "当年度009期実績 SUM( CASE ACDOCP~POPER WHEN '009' THEN ACDOCP~HSL ELSE 0 END ) AS HSL009PC0, "当年度009期予算 @LCF_ZERO AS HSL009AP1, "前年度009期実績 @LCF_ZERO AS HSL010AC0, "当年度010期実績 SUM( CASE ACDOCP~POPER WHEN '010' THEN ACDOCP~HSL ELSE 0 END ) AS HSL010PC0, "当年度010期予算 @LCF_ZERO AS HSL010AP1, "前年度010期実績 @LCF_ZERO AS HSL011AC0, "当年度011期実績 SUM( CASE ACDOCP~POPER WHEN '011' THEN ACDOCP~HSL ELSE 0 END ) AS HSL011PC0, "当年度011期予算 @LCF_ZERO AS HSL011AP1, "前年度011期実績 @LCF_ZERO AS HSL012AC0, "当年度012期実績 SUM( CASE ACDOCP~POPER WHEN '012' THEN ACDOCP~HSL ELSE 0 END ) AS HSL012PC0, "当年度012期予算 @LCF_ZERO AS HSL012AP1 "前年度012期実績 FROM ACDOCP "Universal Journal Entry Line Items INNER JOIN SKA1 "G/L 勘定マスタ (勘定コード表) ON SKA1~KTOPL = ACDOCP~KTOPL "勘定コード表 AND SKA1~SAKNR = ACDOCP~RACCT "G/L 勘定コード AND SKA1~XBILK = @ABAP_FALSE "フラグ: 貸借対照表勘定 WHERE ACDOCP~RLDNR = @PIF_RLDNR "総勘定元帳の元帳 AND ACDOCP~RBUKRS = @PIF_RBUKRS "会社コード AND ACDOCP~RYEAR = @PIF_GJAHR "会計年度 GROUP BY ACDOCP~RLDNR, "総勘定元帳の元帳 ACDOCP~RBUKRS, "会社コード ACDOCP~KTOPL, "勘定コード表 ACDOCP~RACCT, "勘定コード ACDOCP~RHCUR "会社コード通貨 UNION ALL "前年度実績 SELECT "前年度実績 ACDOCA~RLDNR, "総勘定元帳の元帳 ACDOCA~RBUKRS, "会社コード ACDOCA~KTOPL, "勘定コード表 ACDOCA~RACCT, "勘定コード ACDOCA~RHCUR, "会社コード通貨 @LCF_ZERO AS HSL001AC0, "当年度001期実績 @LCF_ZERO AS HSL001PC0, "当年度001期予算 SUM( CASE ACDOCA~POPER WHEN '001' THEN ACDOCA~HSL ELSE 0 END ) AS HSL001AP1, "前年度001期実績 @LCF_ZERO AS HSL002AC0, "当年度002期実績 @LCF_ZERO AS HSL002PC0, "当年度002期予算 SUM( CASE ACDOCA~POPER WHEN '002' THEN ACDOCA~HSL ELSE 0 END ) AS HSL002AP1, "前年度002期実績 @LCF_ZERO AS HSL003AC0, "当年度003期実績 @LCF_ZERO AS HSL003PC0, "当年度003期予算 SUM( CASE ACDOCA~POPER WHEN '003' THEN ACDOCA~HSL ELSE 0 END ) AS HSL003AP1, "前年度003期実績 @LCF_ZERO AS HSL004AC0, "当年度004期実績 @LCF_ZERO AS HSL004PC0, "当年度004期予算 SUM( CASE ACDOCA~POPER WHEN '004' THEN ACDOCA~HSL ELSE 0 END ) AS HSL004AP1, "前年度004期実績 @LCF_ZERO AS HSL005AC0, "当年度005期実績 @LCF_ZERO AS HSL005PC0, "当年度005期予算 SUM( CASE ACDOCA~POPER WHEN '005' THEN ACDOCA~HSL ELSE 0 END ) AS HSL005AP1, "前年度005期実績 @LCF_ZERO AS HSL006AC0, "当年度006期実績 @LCF_ZERO AS HSL006PC0, "当年度006期予算 SUM( CASE ACDOCA~POPER WHEN '006' THEN ACDOCA~HSL ELSE 0 END ) AS HSL006AP1, "前年度006期実績 @LCF_ZERO AS HSL007AC0, "当年度007期実績 @LCF_ZERO AS HSL007PC0, "当年度007期予算 SUM( CASE ACDOCA~POPER WHEN '007' THEN ACDOCA~HSL ELSE 0 END ) AS HSL007AP1, "前年度007期実績 @LCF_ZERO AS HSL008AC0, "当年度008期実績 @LCF_ZERO AS HSL008PC0, "当年度008期予算 SUM( CASE ACDOCA~POPER WHEN '008' THEN ACDOCA~HSL ELSE 0 END ) AS HSL008AP1, "前年度008期実績 @LCF_ZERO AS HSL009AC0, "当年度009期実績 @LCF_ZERO AS HSL009PC0, "当年度009期予算 SUM( CASE ACDOCA~POPER WHEN '009' THEN ACDOCA~HSL ELSE 0 END ) AS HSL009AP1, "前年度009期実績 @LCF_ZERO AS HSL010AC0, "当年度010期実績 @LCF_ZERO AS HSL010PC0, "当年度010期予算 SUM( CASE ACDOCA~POPER WHEN '010' THEN ACDOCA~HSL ELSE 0 END ) AS HSL010AP1, "前年度010期実績 @LCF_ZERO AS HSL011AC0, "当年度011期実績 @LCF_ZERO AS HSL011PC0, "当年度011期予算 SUM( CASE ACDOCA~POPER WHEN '011' THEN ACDOCA~HSL ELSE 0 END ) AS HSL011AP1, "前年度011期実績 @LCF_ZERO AS HSL012AC0, "当年度012期実績 @LCF_ZERO AS HSL012PC0, "当年度012期予算 SUM( CASE ACDOCA~POPER WHEN '012' THEN ACDOCA~HSL ELSE 0 END ) AS HSL012AP1 "前年度012期実績 FROM ACDOCA "Universal Journal Entry Line Items INNER JOIN SKA1 "G/L 勘定マスタ (勘定コード表) ON SKA1~KTOPL = ACDOCA~KTOPL "勘定コード表 AND SKA1~SAKNR = ACDOCA~RACCT "G/L 勘定コード AND SKA1~XBILK = @ABAP_FALSE "フラグ: 貸借対照表勘定 WHERE ACDOCA~RLDNR = @PIF_RLDNR "総勘定元帳の元帳 AND ACDOCA~RBUKRS = @PIF_RBUKRS "会社コード AND ACDOCA~RYEAR = @( PIF_GJAHR - 1 ) "会計年度 AND ACDOCA~BSTAT = @SPACE "伝票ステータス GROUP BY ACDOCA~RLDNR, "総勘定元帳の元帳 ACDOCA~RBUKRS, "会社コード ACDOCA~KTOPL, "勘定コード表 ACDOCA~RACCT, "勘定コード ACDOCA~RHCUR "会社コード通貨 ) SELECT +ACDOCA~RLDNR , "総勘定元帳の元帳 +ACDOCA~RBUKRS, "会社コード @PIF_GJAHR AS GJAHR, "会計年度 +ACDOCA~RACCT, "勘定コード SKAT~TXT20, "G/L 勘定コードテキスト(短) +ACDOCA~RHCUR, "会社コード通貨 SUM( +ACDOCA~HSL001AC0 ) AS HSL001AC0, "当年度001期実績 SUM( +ACDOCA~HSL001PC0 ) AS HSL001PC0, "当年度001期予算 SUM( +ACDOCA~HSL001AP1 ) AS HSL001AP1, "前年度001期実績 SUM( +ACDOCA~HSL002AC0 ) AS HSL002AC0, "当年度002期実績 SUM( +ACDOCA~HSL002PC0 ) AS HSL002PC0, "当年度002期予算 SUM( +ACDOCA~HSL002AP1 ) AS HSL002AP1, "前年度002期実績 SUM( +ACDOCA~HSL003AC0 ) AS HSL003AC0, "当年度003期実績 SUM( +ACDOCA~HSL003PC0 ) AS HSL003PC0, "当年度003期予算 SUM( +ACDOCA~HSL003AP1 ) AS HSL003AP1, "前年度003期実績 SUM( +ACDOCA~HSL004AC0 ) AS HSL004AC0, "当年度004期実績 SUM( +ACDOCA~HSL004PC0 ) AS HSL004PC0, "当年度004期予算 SUM( +ACDOCA~HSL004AP1 ) AS HSL004AP1, "前年度004期実績 SUM( +ACDOCA~HSL005AC0 ) AS HSL005AC0, "当年度005期実績 SUM( +ACDOCA~HSL005PC0 ) AS HSL005PC0, "当年度005期予算 SUM( +ACDOCA~HSL005AP1 ) AS HSL005AP1, "前年度005期実績 SUM( +ACDOCA~HSL006AC0 ) AS HSL006AC0, "当年度006期実績 SUM( +ACDOCA~HSL006PC0 ) AS HSL006PC0, "当年度006期予算 SUM( +ACDOCA~HSL006AP1 ) AS HSL006AP1, "前年度006期実績 SUM( +ACDOCA~HSL007AC0 ) AS HSL007AC0, "当年度007期実績 SUM( +ACDOCA~HSL007PC0 ) AS HSL007PC0, "当年度007期予算 SUM( +ACDOCA~HSL007AP1 ) AS HSL007AP1, "前年度007期実績 SUM( +ACDOCA~HSL008AC0 ) AS HSL008AC0, "当年度008期実績 SUM( +ACDOCA~HSL008PC0 ) AS HSL008PC0, "当年度008期予算 SUM( +ACDOCA~HSL008AP1 ) AS HSL008AP1, "前年度008期実績 SUM( +ACDOCA~HSL009AC0 ) AS HSL009AC0, "当年度009期実績 SUM( +ACDOCA~HSL009PC0 ) AS HSL009PC0, "当年度009期予算 SUM( +ACDOCA~HSL009AP1 ) AS HSL009AP1, "前年度009期実績 SUM( +ACDOCA~HSL010AC0 ) AS HSL010AC0, "当年度010期実績 SUM( +ACDOCA~HSL010PC0 ) AS HSL010PC0, "当年度010期予算 SUM( +ACDOCA~HSL010AP1 ) AS HSL010AP1, "前年度010期実績 SUM( +ACDOCA~HSL011AC0 ) AS HSL011AC0, "当年度011期実績 SUM( +ACDOCA~HSL011PC0 ) AS HSL011PC0, "当年度011期予算 SUM( +ACDOCA~HSL011AP1 ) AS HSL011AP1, "前年度011期実績 SUM( +ACDOCA~HSL012AC0 ) AS HSL012AC0, "当年度012期実績 SUM( +ACDOCA~HSL012PC0 ) AS HSL012PC0, "当年度012期予算 SUM( +ACDOCA~HSL012AP1 ) AS HSL012AP1 "前年度012期実績 FROM +ACDOCA "Universal Journal Entry Line Items LEFT OUTER JOIN SKAT "勘定コードマスタレコード (勘定コード表: テキスト) ON SKAT~SPRAS = @SY-LANGU "言語キー AND SKAT~KTOPL = +ACDOCA~KTOPL "勘定コード表 AND SKAT~SAKNR = +ACDOCA~RACCT "G/L 勘定コード GROUP BY +ACDOCA~RLDNR, "総勘定元帳の元帳 +ACDOCA~RBUKRS, "会社コード +ACDOCA~RACCT, "勘定コード SKAT~TXT20, "G/L 勘定コードテキスト(短) +ACDOCA~RHCUR "会社コード通貨 INTO TABLE @DATA(LDT_DATA). DATA LDF_TIMESTAMP_END TYPE TIMESTAMPL. "タイムスタンプデータ取得終了 GET TIME STAMP FIELD LDF_TIMESTAMP_END. "タイムスタンプデータ取得終了 *----------------------------------------------------------------------- TRY. CL_SALV_TABLE=>FACTORY( IMPORTING R_SALV_TABLE = DATA(LDO_ALV) CHANGING T_TABLE = LDT_DATA ). CATCH CX_SALV_MSG INTO DATA(LDX_SALV_MSG). POF_SUBRC = 8. RETURN. ENDTRY. DATA(LDO_FUNCTIONS) = LDO_ALV->GET_FUNCTIONS( ). LDO_FUNCTIONS->SET_ALL( ). DATA(LDO_SELECTIONS) = LDO_ALV->GET_SELECTIONS( ). LDO_SELECTIONS->SET_SELECTION_MODE( EXPORTING VALUE = IF_SALV_C_SELECTION_MODE=>MULTIPLE ). "ヘッダ表示 DATA(LDO_HEADER) = NEW CL_SALV_FORM_LAYOUT_GRID( ). DATA(LDO_H_LABEL) = LDO_HEADER->CREATE_LABEL( ROW = 1 COLUMN = 1 ). LDO_H_LABEL->SET_TEXT( 'パフォーマンスデータ' ). DATA(LDO_H_FLOW) = LDO_HEADER->CREATE_FLOW( ROW = 2 COLUMN = 1 ). LDO_H_FLOW->CREATE_TEXT( TEXT = '全ACDOCA件数' ). LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 2 COLUMN = 2 ). LDO_H_FLOW->CREATE_TEXT( TEXT = LDF_ACDOCA_COUNT ). LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 3 COLUMN = 1 ). LDO_H_FLOW->CREATE_TEXT( TEXT = '当年度実績:実績ACDOCA件数' ). LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 3 COLUMN = 2 ). LDO_H_FLOW->CREATE_TEXT( TEXT = LDF_ACDOCA_AC0 ). LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 4 COLUMN = 1 ). LDO_H_FLOW->CREATE_TEXT( TEXT = '前年度実績ACDOCA件数' ). LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 4 COLUMN = 2 ). LDO_H_FLOW->CREATE_TEXT( TEXT = LDF_ACDOCA_AP1 ). LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 5 COLUMN = 1 ). LDO_H_FLOW->CREATE_TEXT( TEXT = '全ACDOCP件数' ). LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 5 COLUMN = 2 ). LDO_H_FLOW->CREATE_TEXT( TEXT = LDF_ACDOCP_COUNT ). LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 6 COLUMN = 1 ). LDO_H_FLOW->CREATE_TEXT( TEXT = '当年度実績:見通ACDOCP件数' ). LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 6 COLUMN = 2 ). LDO_H_FLOW->CREATE_TEXT( TEXT = LDF_ACDOCP_AC0 ). LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 7 COLUMN = 1 ). LDO_H_FLOW->CREATE_TEXT( TEXT = '当年度予算ACDOCP件数' ). LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 7 COLUMN = 2 ). LDO_H_FLOW->CREATE_TEXT( TEXT = LDF_ACDOCP_PC0 ). LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 8 COLUMN = 1 ). LDO_H_FLOW->CREATE_TEXT( TEXT = 'タイムスタンプ(UTC)データ取得開始' ). LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 8 COLUMN = 2 ). DATA LDF_UTC_START TYPE CHAR30. WRITE LDF_TIMESTAMP_START TIME ZONE 'UTC' TO LDF_UTC_START. LDO_H_FLOW->CREATE_TEXT( TEXT = LDF_UTC_START ). LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 9 COLUMN = 1 ). LDO_H_FLOW->CREATE_TEXT( TEXT = 'タイムスタンプ(UTC)データ取得終了' ). LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 9 COLUMN = 2 ). DATA LDF_UTC_END TYPE CHAR30. WRITE LDF_TIMESTAMP_END TIME ZONE 'UTC' TO LDF_UTC_END. LDO_H_FLOW->CREATE_TEXT( TEXT = LDF_UTC_END ). LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 10 COLUMN = 1 ). LDO_H_FLOW->CREATE_TEXT( TEXT = '出力件数' ). LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 10 COLUMN = 2 ). LDO_H_FLOW->CREATE_TEXT( TEXT = LINES( LDT_DATA ) ). LDO_ALV->SET_TOP_OF_LIST( LDO_HEADER ). LDO_ALV->SET_TOP_OF_LIST_PRINT( LDO_HEADER ). "項目テキスト LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL001AC0' )->SET_LONG_TEXT( '当年度001期実績' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL001PC0' )->SET_LONG_TEXT( '当年度001期予算' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL001AP1' )->SET_LONG_TEXT( '前年度001期実績' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL002AC0' )->SET_LONG_TEXT( '当年度002期実績' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL002PC0' )->SET_LONG_TEXT( '当年度002期予算' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL002AP1' )->SET_LONG_TEXT( '前年度002期実績' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL003AC0' )->SET_LONG_TEXT( '当年度003期実績' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL003PC0' )->SET_LONG_TEXT( '当年度003期予算' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL003AP1' )->SET_LONG_TEXT( '前年度003期実績' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL004AC0' )->SET_LONG_TEXT( '当年度004期実績' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL004PC0' )->SET_LONG_TEXT( '当年度004期予算' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL004AP1' )->SET_LONG_TEXT( '前年度004期実績' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL005AC0' )->SET_LONG_TEXT( '当年度005期実績' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL005PC0' )->SET_LONG_TEXT( '当年度005期予算' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL005AP1' )->SET_LONG_TEXT( '前年度005期実績' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL006AC0' )->SET_LONG_TEXT( '当年度006期実績' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL006PC0' )->SET_LONG_TEXT( '当年度006期予算' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL006AP1' )->SET_LONG_TEXT( '前年度006期実績' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL007AC0' )->SET_LONG_TEXT( '当年度007期実績' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL007PC0' )->SET_LONG_TEXT( '当年度007期予算' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL007AP1' )->SET_LONG_TEXT( '前年度007期実績' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL008AC0' )->SET_LONG_TEXT( '当年度008期実績' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL008PC0' )->SET_LONG_TEXT( '当年度008期予算' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL008AP1' )->SET_LONG_TEXT( '前年度008期実績' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL009AC0' )->SET_LONG_TEXT( '当年度009期実績' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL009PC0' )->SET_LONG_TEXT( '当年度009期予算' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL009AP1' )->SET_LONG_TEXT( '前年度009期実績' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL010AC0' )->SET_LONG_TEXT( '当年度010期実績' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL010PC0' )->SET_LONG_TEXT( '当年度010期予算' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL010AP1' )->SET_LONG_TEXT( '前年度010期実績' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL011AC0' )->SET_LONG_TEXT( '当年度011期実績' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL011PC0' )->SET_LONG_TEXT( '当年度011期予算' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL011AP1' )->SET_LONG_TEXT( '前年度011期実績' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL012AC0' )->SET_LONG_TEXT( '当年度012期実績' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL012PC0' )->SET_LONG_TEXT( '当年度012期予算' ). LDO_ALV->GET_COLUMNS( )->GET_COLUMN( 'HSL012AP1' )->SET_LONG_TEXT( '前年度012期実績' ). "ACDOCPのデータセルの背景色を変える "特に、当年度実績の項目で、見通の値を表示しているセルの、背景色を変える DATA LDF_POPER TYPE ACDOCA-POPER. DATA LDF_LVC_FNAME TYPE LVC_FNAME. DATA LO_COL_TAB TYPE REF TO CL_SALV_COLUMN_TABLE. INCLUDE <COLOR>. DATA LS_COLOR TYPE LVC_S_COLO. LS_COLOR-COL = COL_TOTAL. DO ( '012' - PIF_POPER ) TIMES. LDF_POPER = '013' - SY-INDEX. CONCATENATE 'HSL' LDF_POPER 'AC0' INTO LDF_LVC_FNAME. LO_COL_TAB ?= LDO_ALV->GET_COLUMNS( )->GET_COLUMN( LDF_LVC_FNAME ). LO_COL_TAB->SET_COLOR( LS_COLOR ). ENDDO. DO '012' TIMES. LDF_POPER = SY-INDEX. CONCATENATE 'HSL' LDF_POPER 'PC0' INTO LDF_LVC_FNAME. LO_COL_TAB ?= LDO_ALV->GET_COLUMNS( )->GET_COLUMN( LDF_LVC_FNAME ). LO_COL_TAB->SET_COLOR( LS_COLOR ). ENDDO. LDO_ALV->DISPLAY( ). POF_SUBRC = 0. ENDFORM.
検索キーワード
ABAP
ABAP 7.52
SQL
Open SQL
New Open SQL
Classic Open SQL
ABAP SQL
SAP HANA
Code to Data
Code Pushdown
ACDOCA
ACDOCP
SAP S/4HANA
BPC optimized for S/4HANA
予実対比表
月別
損益計算書
以上