伝票のデータは各自のトランザクションテーブルに格納されます。伝票が一度作成された後に再び変更することによって、トランザクションテーブルにレコードが挿入、変更、削除されると、その変更が共通の変更履歴テーブルに記録されます。それを利用すれば伝票の変更履歴を確認することができます。
様々な伝票
SapERPではさまざまな伝票が存在しています。以下の表でそれらを抜粋して、各自のトランザクションテーブルを説明します。
伝票 | ヘッダテーブル | 明細テーブル | その他 |
---|---|---|---|
入出庫 | MKPF | MSEG | - |
購買依頼 | EBAN | - | |
購買発注 | EKKO | EKPO | - |
請求書照合 | RBKP | RSEG | - |
受注 | VBAK | VBAP | - |
出荷 | LIKP | LIPS | - |
請求 | VBRK | VBRP | - |
会計 | BKPF | BSEG | - |
変更履歴テーブル
変更履歴テーブルはCDHDR(変更文書ヘッダ)とCDPOS(変更文書明細)に分けられます。
変更文書ヘッダ
変更文書ヘッダ(CDHDR)の項目を以下の表で抜粋します。
No. | PK | 技術名称 | 名称 | 説明 |
---|---|---|---|---|
1 | ○ | OBJECTCLAS | オブジェクトクラス | 変更されたオブジェクトの分類 |
2 | ○ | OBJECTID | 対象値 | 変更されたオブジェクトを識別できる値、例えば会計伝票の場合は、クライアント番号+会計伝票番号+会計年度で連結された文字列になる |
3 | ○ | CHANGENR | 文書番号 | 変更処理をユニックにする番号 |
4 | USERNAME | 変更者 | - | |
5 | UDATE | 変更日付 | - | |
6 | UTIME | 変更時刻 | - | |
7 | CHANGE_IND | 変更ID | U(更新)/I(挿入)/D(削除) |
変更文書明細
変更文書明細(CDPOS)の項目を以下の表で抜粋します。
No. | PK | 技術名称 | 名称 | 説明 |
---|---|---|---|---|
1 | ○ | OBJECTCLAS | オブジェクトクラス | 変更されたオブジェクトの分類 |
2 | ○ | OBJECTID | 対象値 | 変更されたオブジェクトを識別できる値、例えば会計伝票の場合は、クライアント番号+会計伝票番号+会計年度で連結された文字列になる |
3 | ○ | CHANGENR | 文書番号 | 変更処理をユニックにする番号 |
4 | ○ | TABNAME | テーブル名 | 変更されたテーブルの名称 |
5 | ○ | TABKEY | テーブルキー | 変更されたテーブルレコードのキー項目値 |
6 | ○ | FNAME | 項目目 | 変更されたテーブル項目名、挿入や削除の場合は固定値KEYになる |
7 | ○ | CHNGIND | 変更ID | U(更新)/I(挿入)/D(削除) |
8 | VALUE_NEW | 新値 | - | |
9 | VALUE_NEW | 旧値 | - |
オブジェクトクラス
テーブル(CDHDR・CDPOS)におけるオブジェクトクラスは、以下のようなものがあります。 随時更新していきます。
カテゴリ | 値 | 対象オブジェクト |
---|---|---|
共通 | FACTORYCAL | 稼働日カレンダ |
HOLIDAYCAL | 祝日カレンダ | |
HOLIDAY | 祝日変更 | |
KLASSE | 分類クラス | |
FEATURE | 分類特性 | |
ロジ一般 | MATERIAL | 品目マスタ |
CHARGE | 品目ロット | |
COND_A | 価格条件マスタ | |
販売管理 | DEBI | 得意先マスタ |
KLIM | 得意先与信管理 | |
EMBK | ライセンスマスタ | |
VERKBELEG | 受注伝票 | |
LIEFERUNG | 出荷伝票 | |
FAKTBELEG | 請求伝票 | |
VBEX | 受注伝票ライセンス | |
在庫/購買管理 | KRED | 仕入先マスタ |
INFOSATZ | 購買情報 | |
ORDERBUCH | 供給元一覧 | |
BANF | 購買依頼 | |
EINKBELEG | 購買発注 | |
REVISION | 購買管理のバージョン | |
生産計画/管理 | EQUI | 設備マスタ |
STUE | BOM | |
STUE_V | BOM | |
財務会計 | SACH | 勘定コードマスタ |
ANLA | 資産マスタ | |
BANK | 銀行マスタ | |
IBAN | 国際銀行預金口座番号 | |
BELEG | 会計伝票 | |
管理会計 | KSTAR | 原価要素マスタ |
KOSTL | 原価センタマスタ | |
LSTARP | 活動タイプ | |
RKAUFTRAGP | 内部指図 | |
CMDT_PCP | 利益センタマスタ | |
PRCTRP | 利益センタマスタ | |
SETSP | 管理会計マスタグループ |
このトピックでは、テキストを操作するプログラムインタフェースを取り上げて説明します。
SAP標準からは、STXDという汎用グループでテキストを操作するための汎用モジュールを多数用意しております。 以下にてよく利用される一部を抜粋してそれぞれ説明します。
READ_TEXT
テキストを読みだすには、汎用モジュールREAD_TEXTを使用します。 サンプル:
DATA TL_LINES TYPE STANDARD TABLE OF TLINE.CALL FUNCTION 'READ_TEXT'
EXPORTING
ID = 'F12' "テキストID,F12:依頼課名称,F13:依頼者...
LANGUAGE = 'J' "言語
NAME = '450000001300010' "テキスト名:10桁(伝票番号)+5桁(明細番号)
OBJECT = 'EKPO' "購買発注明細
TABLES
LINES = TL_LINES "読み込まれたテキスト行
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8.
SAVE_TEXT
テキストを書き込みするには、汎用モジュールSAVE_TEXTを使用します。
DELETE_TEXT
テキストを削除するには、汎用モジュールDELETE_TEXTを使用します。
外部リンク
このトピックでは、業務共通としてSAPが提供したテキスト処理のコンセプトや仕組みを取り上げて説明します。
概要
SAPでは、購買や販売、会計といった伝票を起票したり、品目や仕入先、得意先といったマスタオブジェクトを登録する際に、補足的なテキスト情報を入力する場合がよくあります。フォーマットフリーで業務ロジックに関わりがないテキスト情報を処理するために、SAPが共通的な仕組みを提供しております。 纏めておくと、仕組みのコンセプトは以下になります。
- テキスト情報は各業務固有のテーブルではなく、共通のテーブルに纏めて格納されます
- 業務オブジェクトを内部に一意的なIDを識別し、テキストとリンクさせます
- 専用のAPIでテキストの読み書きを行います
テキストの識別
テキストはテキストオブジェクト、テキストID、テキスト名前によって管理されます。
テキストオブジェクト
キストはそれ自体では完結せず、他の業務アプリケーションオブジェクトにリンクしています。たとえば、ある品目について詳細に説明したテキストもあれば、受注の特別契約に関するテキストもあります。
テキストオブジェクトは、そのアプリケーションオブジェクトのタイプを示すものとなります。
例:
テキストオブジェクト | アプリケーションオブジェクト |
---|---|
EINA | 購買情報(一般データ) |
EKNE | 購買情報(購買組織) |
EKKO | 購買伝票(ヘッダ) |
EKPO | 購買伝票(明細) |
LFA1 | 仕入先(一般) |
LFB1 | 仕入先(会社コード) |
LFM1 | 仕入先(購買組織) |
業務テーブルの名前をそのままテキストオブジェクトとして利用されるのはほとんどです。
使用可能なテキストオブジェクトとそれぞれの属性は、テーブルTTXOB で定義されていますので、そのテーブルから調査することができます。
テキスト名
テキスト名は、テキストがリンクするアプリケーションオブジェクトを特定します。 テキスト名のフォーマットは、テキストオブジェクトに依存します。
例:
テキストオブジェクト | テキスト名 |
---|---|
EINA | 10桁(購買情報伝票番号) |
EKNE | 10桁(購買情報伝票番号)+4桁(購買組織)+1桁(固定:'0')[+4桁(プラント)] |
EKKO | 10桁(購買伝票番号) |
EKPO | 10桁(購買伝票番号)+5桁(明細番号) |
テキストID
通常、1 つのアプリケーションオブジェクトに 1 つのテキストでは不十分です。アプリケーションオブジェクトの個々の特性をすべて記述するには、複数のテキストが必要です。たとえば、購買発注明細の情報を保存するために、複数のテキストが必要になる場合もあります。
例:
テキストオブジェクト | テキストID | 内容 |
---|---|---|
EKPO | F11 | 依頼課コード |
EKPO | F12 | 依頼課名称 |
EKPO | F13 | 依頼者 |
EKPO | F14 | 依頼連絡先 |
EKPO | L05 | 購買情報注記 |
1つのオブジェクトに対する複数のテキストを区別するには、別の分類属性が 1 つ必要です。 SAPscript は、この属性テキストID を呼び出します。このテキストID を使用して同一のテキストオブジェクトを説明する様々なテキストを識別します。 テキストID とその属性は、テーブル TTXID で定義する必要があります。
ツール
このトピックは条件に関するテーブルをまとめて説明します。
概要
テーブル関連図
テーブル一覧
カテゴリ | 技術名称 | 名称 | テキストtテーブル | 説明 |
---|---|---|---|---|
条件テーブル | T681 | 条件:構成 | T681T | 条件テーブルのマスタテーブルです |
T681A | 条件: アプリケーション | T681B | - | |
T681E | 条件: 簡易入力項目 | - | - | |
T681S | 条件: 簡易入力タイプ | T681T | - | |
T681V | 条件: 用法 | T681W | - | |
T681Z | 条件: アプリケーション/用法に依存するデータ | - | ||
検索順序 | T682 | 条件: 検索順序 | T682T | - |
T682I | 条件: 検索順序 (生成書式) | - | ||
T682Z | 条件: 検索順序 (項目) | - | ||
決定表 | T683 | 決定表 | T683U | - |
T683S | 決定表: データ | T683T | - | |
T684 | 条件除外グループ | T684T | - | |
条件タイプ | T685 | 条件: タイプ | T685T | - |
条件レコード | KONH | 条件 (ヘッダ) | - | - |
KONP | 条件 (明細) | - | - | |
KONM | 条件 (一次元の数量スケール) | - | - | |
KONW | 条件 (一次元の金額スケール) | - | - |
詳細
T681テーブル
条件: 構成
項目一覧
PK | 技術名称 | 名称 | 説明 |
---|---|---|---|
○ | KVEWE | 用途 | - |
○ | KOTABNR | 条件テーブル | 条件テーブルの番号 |
KAPPL | AP | - | |
KOTAB | 条件テーブル | 条件テーブルのテーブル名 | |
SETYP | 簡易入力タイプ | - | |
KSDAT | 有効期間 | - | |
GESTA | 生成ステータス | - | |
SYSID | SAP システム ID | - | |
… | … | … | … |
概要
通貨換算係数
各通貨の金額(外部データ書式)はその通貨の換算係数を除算した値(内部データ書式)が実際に金額項目に格納されます。
国 | 通貨 | 小数点以下桁数 | 換算係数 |
---|---|---|---|
日本 | JPY | 0 | 100 |
中国 | RMB | 2 | 1 |
アメリカ | USD | 2 | 1 |
韓国 | KRW | 0 | 100 |
チュニジア・ディナール | TND | 3 | 0.1 |
中国人民元やアメリカドルは小数点以下2桁を持っているため、換算係数を1として、通貨金額はそのまま内部に格納されます。 日本円や韓国ウォンは小数がないため、換算係数を100として、通貨金額は100で割った数値が内部に格納されます。例えば2円は内部に0.02で格納されます。
為替レート換算係数
通貨コード
ISOコード | JPY | USD | KRW | CNY |
---|---|---|---|---|
小数点以下桁数 | 0 | 2 | 0 | 2 |
- 関連テーブル
通貨コードの定義 TCURC
通貨コードの小数点以下桁数 TCURX
換算レート
通貨間換算の時には換算レートを使用します。
- カスタマイジング
IMGパス: SAP NetWeaver→一般設定→通貨→入力:換算レート
トランザクションコード: F-62
換算レートタイプ
換算レートタイプとは、通貨換算を司る最上位の要素です。 例えば、ある日付時点でのUSD/JPYレートを複数の観点で保持/計算したい場合など使用します。
伝票の転記や決済を行う際には、換算レートタイプ M の換算レートを使います。 この換算レートタイプに必ずエントリを作成しなくてはなりません。 すべての国において、換算レートが必要です。換算レートを指定しなければ、購買発注を行う際、システムは換算レートタイプ “M” の換算レートを使います。 使用する換算レートタイプを、伝票タイプごとに財務会計のカスタマイジングで指定することができます。
なお、販売管理の世界では伝票や得意先の販売ビューに保持することが可能だが、在庫・購買管理や財務会計の世界では、指定しない = Mが使用される暗黙の仕様があります。
利用先
SapERPシステムでは以下のように分野毎に異なる通貨を定義してそれぞれ金額を持つことができます。
- 国内通貨
- 取引通貨
- 管理領域通貨
- 価格設定通貨
- 仕入先通貨
国内通貨
国内通貨は会社コード通貨、帳簿通貨とも呼びます。総勘定元帳上での通貨であり、最初に定義しておきます。
- テーブル項目
T001(会社コード)-WAERS(通貨コード) - カスタマイジング
IMGパス: 企業構造→定義→財務会計→編集/コピー/削除/チェック: 会社コード→編集: 会社コードデータ
トランザクションコード: OBY6
取引通貨
取引通貨は取引で用いた通貨です。円建て、ドル建て取引など、1つ1つの取引の都度でかわるものであり、取引伝票のヘッダ情報に格納されます
カテゴリ | 伝票 | 項目 |
---|---|---|
購買 | EKKO購買伝票ヘッダ | WAERS通貨コード |
RBKP伝票ヘッダ: 請求書受領 | WAERS通貨コード | |
販売 | VBAK販売伝票: ヘッダデータ | WAERK伝票通貨 |
LIKP販売管理伝票: 出荷ヘッダデータ | WAERK伝票通貨 | |
VBRK購請求書: ヘッダデータ | WAERK伝票通貨 |
管理領域通貨
管理領域通貨とは、グループ通貨というイメージでしょうか。これも最初に定義しておきます。 例えば、親会社が日本にあるドイツの子会社がドル建てで取引をしたとします。 取引通貨はUSD、会社コード通貨はEUR、管理領域通貨はJPY となり、それぞれの通貨での金額情報を保持します。つまり、取引の都度でEUR建ての総勘定元帳とJPY建ての総勘定元帳が作られています。ちなみに換算レートは、取引日とレートテーブルから自動的にひっぱることもできますし、伝票登録の都度指定することができます。 また、取引日や取引日レート情報を保持していますので、外貨預金や外貨建債権債務等の期末評価はボタンひとつで自動仕訳が生成されます。 レートタイプも、期中平均レート、期末日レート、予算管理用レートなど自由に設定できます。
価格設定通貨
仕入価格計算と販売価格計算は、価格設定通貨で行われます。
仕入先通貨
仕入先ごとに購買発注通貨 ( 仕入先通貨) を登録できます。この通貨は購買発注の時に初期提案されます。
- テーブル項目
LFM1(仕入先マスタ購買組織データ)-WAERS(購買発注通貨)
勘定通貨
勘定コードは、会社毎に金額を管理するための通貨が定義されます。これによってグローバル企業はすべての子会社が同じ勘定コード表を利用可能になります。
- テーブル項目
SKB1(勘定コードマスタ (会社コード))-WAERS(勘定通貨)
勘定通貨は国内通貨でも外貨通貨でも定義することができます。国内通貨で定義された場合はG/L 勘定に任意の通貨で転記できます、一方、外貨通貨で定義された場合は、その外貨通貨でのみ転記可能です。
このトピックは通貨に関するパラメータテーブルそれに使用先の業務テーブル項目をまとめて説明します。
概要
テーブル一覧
No. | 技術名称 | 名称 | テキストtテーブル | 説明 |
---|---|---|---|---|
1 | TCURC | 通貨コード | TCURT | 通貨コード定義 |
2 | TCURX | 通貨小数点桁数 | - | 通貨毎の小数点以下桁数を定義 |
3 | T001R | 通貨小数点桁数 | - | 会社別に通貨の丸め単位を定義 |
4 | TCURV | 換算レートタイプ | TCURW | 換算レートタイプ定義 |
5 | TCURR | 換算レート | - | 換算レートタイプ別に通貨換算時の換算レートを定義 有効期間で指定可能 |
6 | TCURF | 換算係数 | - | 換算レートタイプ別に通貨換算時の換算係数を定義 有効期間で指定可能 |
7 | TCURWKRTS | 換算係数 | - | 換算レート更新: 換算レートのワークリストへの割当 有効期間で指定可能 |
詳細
TCURCテーブル
通貨コード
項目一覧
No. | PK | 技術名称 | 名称 | 説明 |
---|---|---|---|---|
1 | ○ | WAERS | 通貨 | - |
2 | ISOCD | ISOコード | - |
カスタマイジング
- IMGパス:SAP NetWeaver→一般設定→通貨→チェック:通貨コード
- TrCD:SM30<V_TCURC>(テーブル更新ビュー)
TCURXテーブル
通貨の小数点以下桁数
項目一覧
No. | PK | 技術名称 | 名称 | 説明 |
---|---|---|---|---|
1 | ○ | CURRKEY | 通貨コード | - |
2 | CURRDEC | 小数点以下 | - |
カスタマイジング
- IMGパス:SAP NetWeaver→一般設定→通貨→設定:通貨の小数点以下桁数
- TrCD:OY04、SM30<V_TCURC>(テーブル更新ビュー)
T001Rテーブル
通貨の小数点以下桁数
項目一覧
No. | PK | 技術名称 | 名称 | 説明 |
---|---|---|---|---|
1 | ○ | BUKRS | 会社コード | - |
2 | ○ | CURRKEY | 通貨コード | - |
3 | REINH | 丸め単位 | - |
カスタマイジング
- IMGパス:SAP NetWeaver→一般設定→通貨→設定:通貨の丸めルール
- TrCD:OB90、SM30<V_T001R>(テーブル更新ビュー)
TCURVテーブル
通貨換算の換算レートタイプ
項目一覧
No. | PK | 技術名称 | 名称 | 説明 |
---|---|---|---|---|
1 | ○ | KRRST | 換算レートタイプ | - |
2 | XINVR | 逆算 | - | |
3 | BWAER | 参照通貨 | - | |
4 | GKUZU | 電信売買買値 | - | |
5 | BKUZU | 電信売買売値 | - | |
6 | XFIXD | 固定換算レート | - |
カスタマイジング
- IMGパス:SAP NetWeaver→一般設定→通貨→チェック:換算レートタイプ
- TrCD:SM30<V_TCURV>(テーブル更新ビュー)
TCURRテーブル
換算レート
項目一覧
No. | PK | 技術名称 | 名称 | 説明 |
---|---|---|---|---|
1 | ○ | KURST | 換算レートタイプ | - |
2 | ○ | FCURR | 換算前通貨 | - |
3 | ○ | TCURR | 換算後通貨 | - |
4 | ○ | GDATU | 有効開始日 | - |
5 | UKURS | 換算レート | - |
カスタマイジング
- IMGパス:SAP NetWeaver→一般設定→通貨→入力:換算レート
- TrCD:F-62、SM30<V_TCURR>(テーブル更新ビュー)
TCURFテーブル
換算係数
項目一覧
No. | PK | 技術名称 | 名称 | 説明 |
---|---|---|---|---|
1 | ○ | KURST | 換算レートタイプ | - |
2 | ○ | FCURR | 換算前通貨 | - |
3 | ○ | TCURR | 換算後通貨 | - |
4 | ○ | GDATU | 有効開始日 | - |
5 | FFACT | 係数(換算前) | - | |
6 | TFACT | 係数(換算後) | - | |
7 | ABWCT | 代替換算レート | - |
カスタマイジング
- IMGパス:SAP NetWeaver→一般設定→通貨→定義:外貨換算の比率
- TrCD:SM30<V_TCURF>(テーブル更新ビュー)
通貨の主な使用先
SapERP業務モジュールにて、通貨を保持するテーブル項目は主に以下のようなものがあります。
領域 | テーブル | 項目 | 説明 |
---|---|---|---|
全体共通 | T001 (会社コード) | WAERS | 国内通貨 |
財務会計 | BKPF (会計伝票ヘッダ) | WAERS | 伝票通貨 |
HWAER | 国内通貨 | ||
管理会計 | COBK CO伝票ヘッダ | KWAER | 管理領域通貨 |
購買管理 | EBAN (購買依頼) | WAERS | 伝票通貨 |
EKKO 購買発注ヘッダ | WAERS | 伝票通貨 | |
EKBE 購買履歴 | WAERS | 伝票通貨 | |
RBKP 請求書照合ヘッダ | WAERS | 伝票通貨 | |
販売管理 | VBAK (販売伝票ヘッダ) | WAERK | 伝票通貨 |
LIKP (出荷伝票ヘッダ) | WAERK | 伝票通貨 | |
VBRK (請求書ヘッダ) | WAERK | 伝票通貨 | |
KNKA (得意先マスタ与信データ) | WAERS | 与信通貨 | |
KONA (契約) | WAERS | 契約通貨 | |
KONV (契約) | KWAEH | 条件通貨 | |
人事管理 | PA0008 (基本給情報) | WAERS | 給料通貨 |
SapERPがモデリングしている企業構造の組織階層を図で表現すると、下記のようになります。
階層図には各組織要素の上位要素と下位要素が示されます。
クライアント
SapERPシステムはクライアント によって論理的に分けられます。 各クライアントには、独自のデータ環境があり、すなわち、クライアントごとに独自のマスタおよびトランザクションデータ、ユーザマスタレコード、勘定コード表、カスタマイジングパラメータがあります。
クライアント(標準テーブル:T000)とは、SapERP企業構造の中で明記される最も高い組織単位です。ホールディングス、グループの親会社など、組織のトップを示すため、通常は1つしか設定しません。また、クライアントを利用して、開発、検証及び本番の各環境を分けたり、物理的に1台のサーバ上で、複数お客様のSAPシステムがあるように稼働させたりすることができます。
販売組織
販売組織
販売組織(標準テーブル:TVKO)は、販売に対して法的な責任を担う組織単位です。固有の価格条件・価格設定を行うことが可能です。 販売組織は他の組織単位との割り当て関係がそれぞれ下記のようになります。
- 販売組織及び会社コード: 各販売組織には1 つの会社コードが割り当てられます。
- 販売組織及び購買組織:購買管理では、 1 つの購買組織が複数の販売組織の役割を果たすことができます。 販売組織には、 1 つの購買組織のみを割り当てることができます。
流通チャンネル
流通チャンネル(標準テーブル:TVTV)は、製品又はサービスが得意先に届く経路(卸売り・小売り・直接販売など)です。固有の条件・価格設定を行うことができます。
製品部門
製品部門(標準テーブル:TSPA)は、製品又はサービスの販売や収益(販売管理)に責任を持つ組織単位です。固有の条件・価格設定を行うことができます。 製品またはサービスは製品部門1つに対してのみ割り当てられます。
販売エリア
販売エリア(標準テーブル:TVTA)は、販売組織、流通チャネル、製品部門の組み合わせとして定義されます。品目など販売に関わるすべてのデータは販売エリア毎に定義することができます
営業所
営業所(標準テーブル:TVBUR)は、地理的にエリア内での特定製品の販売又はサービスに責任を持つ物理的営業活動の場所(支店・販売オフィスなど)です。 一つの営業所は複数の販売エリアに割り当てることができます。
営業グループ
営業グループ(標準テーブル:TVKGR)は、一定の製品の販売又はサービスに責任を持つ営業員グループです。 営業所の所員は販売グループに分割することができます。
営業員
営業員(標準テーブル:TVKGR)は、一定の製品の販売又はサービスに責任を持つ個人です。
購買組織
購買組織
購買組織(標準テーブル:T024E)は、資材とサービスを調達し、仕入先と購買条件について交渉する組織単位です。価格設定に対し、独自の購買情報や条件を登録できます。 集中購買か分散購買によって、購買組織の定義単位をそれぞれ企業グループ、会社又はプラントにすることができます。 購買組織は他の組織単位との割り当て関係がそれぞれ下記のようになります。
- 購買組織および会社コード:各購買組織は、1 つまたは複数の会社コードを割り当てることができます。
- 購買組織およびプラント:各購買組織は1 つまたは複数のプラントに割り当てることができます。各プラントに対し、 1 つの購買組織を標準購買組織プラントとして指定します。
- 購買組織および販売組織:1 つの購買組織は、複数の販売組織に対する購買を担当することがあります。ただし、 1 つの販売組織には 1 つの購買組織しか割り当てられません。
購買グループ
購買グループ(標準テーブル:T024)は、特定の品目について、購買行為に責任と権限を有する個人或いはグループです。
在庫組織
プラント
在庫評価(数量と金額)、管理を行う組織単位です。通常は工場あるいは倉庫に定義されます。 プラント(標準テーブル:T001W)は、MRP実行、及び在庫引き当て処理の単位になります。 プラントは他の組織単位との割り当て関係がそれぞれ下記のようになります。
- プラントおよび会社コード:
1つの会社コードには複数のプラントを割り当てることができます。 1 つのプラントに 1 つの会社コードのみを割り当てます。 - プラントおよび事業領域:
プラントと部門の組合せを使用して、関連する事業領域を割り当てます。 - プラントおよび出荷ポイント:
複数の出荷ポイントを 1 つのプラントに割り当て、反対に 1 つのプラントを複数の出荷ポイントに割り当てることができます。 - プラントおよび購買組織:
各購買組織は1 つまたは複数のプラントに割り当てることができます。各プラントに対し、 1 つの購買組織を標準購買組織プラントとして指定します。
保管場所
保管場所はプラント内の品目の存在する場所を示します。在庫を数量基準のみで管理する単位であり、実地棚卸しが実行されるレベルです。
出荷組織
出荷ポイント
出荷ポイント(標準テーブル:TVST)は出荷処理される場所です。通常出荷の種類により定義されます。 出荷は常にただ一つの出荷ポイントから開始されます。 出荷ポイントは他の組織単位との割り当て関係がそれぞれ下記のようになります。
- 出荷ポイント及びプラント:複数の出荷ポイントを 1 つのプラントに割り当て、反対に 1 つのプラントを複数の出荷ポイントに割り当てることができます。
積載ポイント
積載ポイント(標準テーブル:TVLA)は、積載を行う場所を示す組織単位です。出荷ポイントは積載ポイントに細分化することができます。
財務会計組織
会社コード
基本となる法的に独立した会計単位です。貸借対象表及び損益計算書などの財務諸表を作成する単位です。会社コードには一つの勘定コード表を割り当てる必要があります。 会社コードは他の組織単位との割り当て関係がそれぞれ下記のようになります。
- 会社コードおよびプラント:
1つの会社コードには複数のプラントを割り当てることができます。 1 つのプラントに 1 つの会社コードのみを割り当てます。 - 会社コードおよび購買組織:
各購買組織は、1 つまたは複数の会社コードを割り当てることができます。 - 会社コードおよび販売組織:
各販売組織は、1 つのみの会社コードを割り当てることができます。 - 会社コードおよび管理領域:
会社コードを 1 つの管理領域のみに割り当てることができます。この領域では、その会社コードに対して原価計算が実行されます。 - 会社コードおよび原価センタ:
複数の原価センタを 1 つの会社コードに割り当てることができます。 1 つの原価センタは 1 つの会社コードのみに割り当てます。 - 会社コードおよび利益センタ:
企業連結のため、利益センタが転記された会社コードに割り当てられます。 1 つの会社コードには複数の利益センタを持つことができます。 - 会社コードおよび事業領域:]] これは論理的なリンクのみとなり、企業構造のカスタマイジングには直接割り当てられません。 1 つの会社コードには複数の事業領域を持つことができます。事業領域が複数の会社コードに跨ることも可能です。
事業領域
事業領域(標準テーブル:TGSB)は内部管理目的の財務諸表を作成する単位です。 事業領域は他の組織単位との割り当て関係がそれぞれ下記のようになります。
- 事業領域及び会社コード:
会社コードでは、取引を 1 つまたは複数の事業領域に割り当てることができます。 - 事業領域は複数の会社コードに跨ることができます。
- 事業領域及び原価センタ:
各原価センタを 1 つの事業領域のみに割り当てます。 - 事業領域、プラントおよび部門:
プラントと部門の組合せを使用して、関連する事業領域を割り当てます。
管理会計組織
管理領域
管理領域(標準テーブル:TKA01)は、管理会計を行う組織単位です。一つ或いは複数の会社の損益を結合し、利益センタ・原価センタの階層構成ビューを作成することが可能です。 管理領域は他の組織単位との割り当て関係がそれぞれ下記のようになります。
- 管理領域および会社コード:
会社コードを 1 つの管理領域のみに割り当てることができます。この領域では、その会社コードに対して原価計算が実行されます。 - 管理領域および原価センタ:
1 つまたは複数の管理領域を 1 つの管理領域に割り当てることができます。原価センタを 1 つの管理領域のみに割り当てます。 - 管理領域および利益センタ:
1 つまたは複数の利益センタを 1 つの管理領域に割り当てることができます。利益センタを 1 つの管理領域のみに割り当てます。
利益センタ
利益センタ(標準テーブル:CEPC)は、利益を計上する組織単位です。部門や営業所などの組織とする場合が多い。
原価センタ
原価センタ(標準テーブル:CSKS)はコスト(費用)の把握、管理する単位。部門や営業所などの組織とする場合が多い。
人事組織
人事領域
人事領域(標準テーブル:T500P)は、企業における特定の領域を表す組織ユニットであり、 従業員、勤怠管理、および給与計算のアスペクトにもとづいて構成されます。
人事サブ領域
人事領域は複数の人事サブ領域(標準テーブル:T001P)に分割されます。
テーブル構成
このトピックでは、SAP ERPシステムのデータモデルを取り上げて説明します。
特徴
SAP ECCシステムは、企業で行う基幹業務のすべてを発生ベース(伝票処理)で1つのデータベース(大福帳型データベース)に一元管理する設計により、基幹業務全体を統合的に管理します。特に、受注・販売・生産などの業務における個別処理が、入力時点で即時に会計情報として反映され、参照することができることが大きな特徴となっています。1つの伝票処理(トランザクション)によって、すべての部門の情報が一度に変更され、それらが要約された会計情報は、その内容の詳細を辿っていく(ドリルダウン)ことで、業務情報のそれぞれのトランザクション(伝票)1つ1つへ結び付けることができます。
ものとお金の一元管理
大福帳型データベース
大福帳型データベースとは、発生したトランザクション・データを要約せずにそのまま蓄積していくタイプのデータベースシステムのことです。
- 購買、資材、販売、人事、経理など企業の各部門で行う基幹業務のすべてを発生ベース(伝票処理)で1カ所だけに記録されます.
- 自動転記処理で即時に会計情報に反映されます
- 1つの伝票処理(トランザクション)によって、すべての部門の情報が一度に変更されます
大福帳型データベースによって、財務諸表などの要約されたデータから逆にたどり、1枚の伝票(トランザクション・データ)にたどりつくことができます。(これをドリルダウンする、と呼びます)
生データをそのまま記録しておくことで、いつ誰によって入力・処理されたかが分かるので、時系列的に経営活動を把握し、また何かの問題が発生した場合に原因追及が容易になる、と言われています。 「one fact in one place」原則のもとに全基幹業務にわたり一元的な情報管理が実現されます。
このトピックでは、SAP ERPシステムの機能構成を取り上げて説明します。
概述
SAPでは、業務システムを構成する各機能を「アプリケーションコンポーネント」と呼んでいます。 各アプリケーションコンポーネントは、階層化のような構造を取っており、大分類>中分類>小分類と段々詳細な機能レベルにブレイクダウンしていき、機能コードで識別することができます。 業界では、よくその大分類と中分類をそれぞれモジュールとサブモジュールト゚呼んでいます。
基本モジュール
一般的に「基本モジュール」と呼ばれているのが下記の5つです 。
- FI:財務会計
財務会計のモジュール Financial Accounting
サブモジュールとしては以下のようなものがあります。- G/L(総勘定元帳)
- AP(債務管理)
- AR(債権管理)
- AA(固定資産管理)
- SL(特別目的元帳)
- CO:管理会計
管理会計のモジュール Controling - SD:販売管理
販売管理のモジュール Sales and Distribution - MM:在庫購買管理
在庫購買管理のモジュール Material Management - PP:生産計画/管理
生産計画、生産管理のモジュール Production Planning and Control
その他モジュール
基本モジュールのほかに、以下のようなモジュールがあります
- WM:倉庫管理
倉庫管理のモジュール Warehouse Management - QM:品質管理
品質管理のモジュール Quality Management - PM:プラント保全
プラント保全のモジュール Plant Maintenance - HR:人事管理
人事給与のモジュール Human Resources - PS:プロジェクト管理
プロジェクト管理のモジュール Project System - RE:不動産管理
不動産管理のモジュール Real Estate - IM:設備投資管理
設備投資管理のモジュール Investment Management - CA:クロスアプリケーション
クロスアプリケーションのモジュール Cross Application- CA-DMS:文書管理
Document Management System - CA-CL:分類
Classification
このトピックでは、SAP ECCのアーキテクチャを取り上げて説明します。
レイヤアーキテクチャ
レイヤとは、階層状に積み上がった構造の構成になる各要素のことです。 例えば、コンピュータのハードウェア上でOSが動き、OS上でアプリケーションソフトが動いている、という構造について、それぞれのことをハードウェアレイヤ、OSレイヤ、アプリケーションレイヤ、などと呼ぶことができます。 移植性や拡張性、保守性が高い情報システムを構築するためには、標準構造として、その情報システムを下記の図のような四つの論理階層に明確に分割して構築すべきと思われます。
- システム・プラットフォーム
システムプラットフォームは、情報システムの稼働基盤を提供し、ハードウェア、ネットワークや、OS、データベース管理システムなどの基礎ソフトウェアが含められます。 - テクノロジープ・ラットフォーム
テクノロジープラットフォームは、異なるシステムプラットフォームの差異を吸収しながら、上層の業務アプリケーションの実行環境を提供します。なお、ユーザ管理や権限制御、プロセス管理などの特定な業務処理に依存しない部品はここで実装されることが多いです。
テクノロジープラットフォームとして提供されるソフトウェアは、ミドルウェアやアプリケーションサーバと呼ばれることがよくあります。 - ビジネス・ドメイン
ビジネスドメイン層には、銀行や証券、小売りなど特定業務分野に共通な業務基盤や業務部品が含められます。 - ビジネス・アプリケーション
ビジネスアプリケーション層には、情報システムのエンドユーザが使用する様々な業務機能が含められます。ビジネスドメイン層が提供したものはそのまま又は少しカスタマイズしてから、ビジネスアプリケーション層のものとしてエンドユーザに使用してもらうことがあります。
通常では、レイヤ1とレイヤ2は社外から必要な製品を調達し、レイヤ4は自社開発になりますが、レイヤ3は(1)そもそも分けずにレイヤ4に統合、(2)パッケージソフトエア購入、(3)自社開発のどちらでもよくあります。 SapECCのレイヤアーキテクチャーは情報システムの四階層標準モデルに従っていて、下記の図で示すことができます。
このトピックでは、BTEの検索方法を取り上げて説明します。
検索機能利用
BTEを検索するには、SAP標準から以下のトランザクションが用意されています。
- BERE
Publish and Subscribe Interface検索 - BERP
Process Interface検索
上記のトランザクションはトランザクションコードを直接入力するほか、FIBFの「環境」メニューからも起動することができます。
BERE利用
BERP利用
プログラム内一括検索
BTEを呼び出すには、必ず「OPEN_FI_PERFORM_~」という名前の汎用モジュールを使用しているため、OPEN_FI_PERFORMというキーワードで、標準プログラムのソースを一括検索すれば、該当標準プログラムからどんなBTEを呼び出しているかが分かります。 OpenFIという呼び方はここから由来しているものと見受けられます。 汎用モジュール名の最後は必ずE或いはPが付けられており、EはPublish and Subscribe Interface、PはProcess Intefaceを示しております。
会計伝票を転記するプログラムSAPMF05Aを例として、プログラム内の一括検索方法を示します。
BTEは当初FIモジュールの業務拡張方法として導入されて、その後別のもじゅーるにも利用できるような汎用的な拡張方法に変わったため、FI以外のモジュールでBTEを呼び出す汎用モジュールも同じく「OPEN_FI_PERFORM_~」のような名前を付けております。
ALV出力時の項目カテゴリ制御は主に以下三つの方法があります。
- 自動生成
- マニュアル生成
- 半自動生成
このトピックでは、各方法をそれぞれ取り上げて説明します。
自動生成
出力テーブルの構造がデータディクショナリに定義されている場合、汎用モジュールを呼び出す際に入力パラメータI_STRUCTURE_NAMEで構造体の名前を指定することにより、項目カテゴリは内部に自動的に生成されることになります。 ここで注意すべきのは、出力テーブルは必ず該当構造体を使って定義しなけれなりません。そうではない場合、なかみが同じでも、実行時ランタイムエラーが発生します。
16をこのやり方で見直す場合、ABAPディクショナリに該当構造体を定義しておけば、以下のようにソースプログラムがすごくシンプルになります。
REPORT YLWF_ALV_FC_AUTO. *ALV用のタイププール TYPE-POOLS: slis. TYPES ttbl_account_doc TYPE STANDARD TABLE OF YLWF_FC_AUTO_STRUC. DATA g_account_doc TYPE YLWF_FC_AUTO_STRUC. DATA gtbl_account_doc TYPE ttbl_account_doc. DATA: g_bukrs TYPE bukrs. SELECTION-SCREEN BEGIN OF BLOCK LAYOUT WITH FRAME . SELECT-OPTIONS: S_BUKRS FOR g_bukrs. SELECTION-SCREEN END OF BLOCK LAYOUT. START-OF-SELECTION. SELECT bukrs belnr gjahr buzei pswbt pswsl FROM bseg INTO CORRESPONDING FIELDS OF TABLE gtbl_account_doc UP TO 10 ROWS WHERE bukrs in s_bukrs. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_structure_name = 'YLWF_FC_AUTO_STRUC' i_grid_title = '伝票照会' TABLES t_outtab = gtbl_account_doc EXCEPTIONS OTHERS = 0 .
マニュアル生成
データディクショナリでは、テーブルデータ型LVC_T_FCAT によって項目カタログが定義されています。項目カタログテーブルの各行には、出力テーブルの項目が記述されています。 項目カタログのマニュアル生成は、上記のテーブルを作成して、汎用モジュールを呼び出す際に入力パラメータIT_FIELDCATとして受け渡します。
実装の詳細は、16をご参照ください。
半自動生成
項目カタログの半自動生成は、
- ABAPディクショナリーの構造体から項目カタログを自動生成する
- 自動生成された項目カタログに対してマニュアル修正を加える
というプロセスになります。
ABAPディクショナリーの構造体から項目カタログを自動生成するには、汎用モジュールLVC_FIELDCATALOG_MERGEを使用します。
ALVを出力する前に、選択画面でユーザにALVの出力レイアウトを指定してもらう場面があります。 このトピックでは、16を元に出力レイアウト選択機能を追加する例を取り上げて説明します。
プログラムの実装
変数の定義を追加
DATA: g_variant TYPE disvariant. DATA: VG_SAVE TYPE CHAR1, VG_EXIT TYPE CHAR1, VG_VARIANT TYPE DISVARIANT, VG_VARIANT_EX TYPE DISVARIANT.
選択パラメータを追加
PARAMETERS: P_LAYOUT TYPE DISVARIANT-VARIANT.
初期化処理を追加
初期化処理で、デフォルトのバリアント値を取得して自動提案します。
INITIALIZATION. VG_SAVE = 'A'. "ユーザ定義レイアウトとグローバルレイアウトの両方を保存できます。 VG_VARIANT-REPORT = SY-REPID. VG_VARIANT_EX = VG_VARIANT.
- バリアントの初期化
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
I_SAVE = VG_SAVE
CHANGING
CS_VARIANT = VG_VARIANT_EX
EXCEPTIONS
WRONG_INPUT = 1
NOT_FOUND = 2
PROGRAM_ERROR = 3
OTHERS = 4.
IF SY-SUBRC = 0.
P_LAYOUT = VG_VARIANT_EX-VARIANT.
ENDIF.
検索ヘルプ実装
* AT SELECTION-SCREEN 選択画面:レイアウトのヘルプ設定
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_LAYOUT .
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
IS_VARIANT = VG_VARIANT
I_SAVE = VG_SAVE
IMPORTING
E_EXIT = VG_EXIT
ES_VARIANT = VG_VARIANT_EX
EXCEPTIONS
NOT_FOUND = 1
PROGRAM_ERROR = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
IF VG_EXIT = SPACE.
P_LAYOUT = VG_VARIANT_EX-VARIANT.
ELSE.
ENDIF.
ENDIF.
入力チェックを追加
入力チェック処理で、入力されたレイアウトバリアント値が存在するかどうかをチェックします。
AT SELECTION-SCREEN.
IF P_LAYOUT IS NOT INITIAL.
VG_VARIANT-VARIANT = P_LAYOUT.
CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
EXPORTING
I_SAVE = VG_SAVE
CHANGING
CS_VARIANT = VG_VARIANT
EXCEPTIONS
WRONG_INPUT = 1
NOT_FOUND = 2
PROGRAM_ERROR = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
レイアウト選択値を反映
汎用モジュールを呼び出してALV一覧出力を行う時、汎用モジュールの入力パラメータとしてレイアウトの選択値を受け渡します。
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_pf_status_set = 'PF_STATUS_SIMP'
it_fieldcat = gtbl_fieldcat i_structure_name = 'YLWF_AL'
is_layout = g_layout
IS_VARIANT = VG_VARIANT
i_save = VG_SAVE
TABLESt_outtab = gtbl_account_doc
EXCEPTIONS
program_error = 0
OTHERS = 0このトピックでは、ALVコントロールを利用したALV出力実装の基本方法を取り上げて説明します。
宣言
イベントキャッチ
*---------------------------------------------------------------------* * クラス イベントキャッチ(定義) * CLASS lcl_event_receiver DEFINITION *---------------------------------------------------------------------* CLASS LCL_EVENT_RECEIVER DEFINITION . PUBLIC SECTION. * 選択行のダブルクリックイベント * CATCH THELINE BOUBLECLICK EVENT METHODS CATCH_DOUBLECLICK FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID IMPORTING E_ROW E_COLUMN. * グリッドのツールバー(PDFボタン=オン) * CATCH THE TOOLBAR'S PDF BUTTON METHODS HANDLE_TOOLBAR_PDF FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID IMPORTING E_OBJECT. * グリッドのコマンド * CATCH THE GRID COMMAND EVENT METHODS HANDLE_UCOMM FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID IMPORTING E_UCOMM . ENDCLASS. "lcl_event_receiver DEFINITION
ALV出力用コンテナ対象
DATA VG_GRID TYPE REF TO CL_GUI_ALV_GRID.
ALVイベントキャッチ
DATA: EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER.
コントロールの実例化
ALV出力用コンテナ対象をインスタンス化する。
CREATE OBJECT VG_GRID EXPORTING I_PARENT = CL_GUI_CONTAINER=>SCREEN0.
カタログの作成
ALV出力
CALL METHOD VG_GRID->SET_TABLE_FOR_FIRST_DISPLAY EXPORTING IS_LAYOUT = WL_SLA CHANGING IT_OUTTAB = TG_ALV[] IT_FIELDCATALOG = TG_FIELDCAT[] EXCEPTIONS INVALID_PARAMETER_COMBINATION = 1 PROGRAM_ERROR = 2 TOO_MANY_LINES = 3 OTHERS = 4. CALL METHOD VG_GRID->SET_READY_FOR_INPUT " EXPORTING I_READY_FOR_INPUT = 1.
イベント処理の設定
ALV出力用イベント対象をインスタンス化します。
CREATE OBJECT EVENT_RECEIVER.
ALV出力用イベント「ダブルクリック」を実装します。
SET HANDLER EVENT_RECEIVER->CATCH_DOUBLECLICK FOR VG_GRID.
「ツールバー」イベントを実装します。
SET HANDLER EVENT_RECEIVER->HANDLE_TOOLBAR_FAX FOR VG_GRID
ALV表示
ALVを再表示します。
CALL METHOD VG_GRID->REFRESH_TABLE_DISPLAY EXPORTING
IS_STABLE = WL_STABLE.
このトピックでは、ALVの項目カタログを取り上げて説明します。
概要
項目カタログは、ALVで出力される各列(項目)のデータ型情報等が定義されます。 項目カタログに格納される定義情報は、以下のように分類することができます。
- 項目名
内部出力テーブルの項目名を指定します。列定義構造体のキー項目になります。 - データ型情報
ABAPデータ型や出力長などの情報が定義されます。
ABAPディクショナリーの項目を参照して定義するとマニュアルで定義するとの2パターンがあります。 - 単位や通貨情報
数量や金額などの項目は、それぞれ関連する単位や通貨の情報を定義する必要があります。 - 列の書式情報
- 列の出力オプション
項目カタログの項目
項目カタログの項目一覧は下記のリンクをご参考ください。 項目カタログの項目-SAP Help Portal
項目カタログの生成
基本的に、ALVを使用して表示する一覧ごとに項目カタログが必要です。項目カタログを生成する方法として、以下の方法があります。
- データディクショナリ構造を使用して自動的に生成
- ABAPプログラムでマニュアル生成
- 上記の2 つの方法を組み合わせて半自動的に生成
外部リンク
このトピックでは、ツールバー関連のプログラミングを取り上げて説明します。
機能固有のボタンを追加
関連技術
自動的に設定される選択画面の GUI ステータスでは、 アプリケーションツールバーに無効な 押ボタンが 5 つあり、これらに機能コード FC01 から FC05 までが割り当てられ ています。この命令を使用すると、機能コード FC0n の押ボタンが有効化されます。 n には 1 と 5 の間にある値を入力しなければなりません。 押ボタンを使用できるようにするには、 TABLES 命令を使用して、ABAP ディクショナリに由来する構造 SSCRFIELDS の インタ フェース作業領域を宣言しなければなりません。 選択画面を呼び出す前にインタフェース領域 sscrfields のコンポーネント functxt_0n にテキスト が割り当てられていると、 このテキストが該当の押ボ タン上に表示されます。割 り当てられていないと、押 ボタンにテキストは表示されません。
サンプル
SAP標準のMIR5請求書一覧照会トランザクションのエキスパートモード機能の実装を例として解説します。 * 画面イメージ * 機能概要 「エキスパートモード」ボタンを押下により、エキスパートモードの表示/非表示を切り替える * 実装詳細 ①選択画面の定義に対象機能コードのボタンを有効にする
SELECTION-SCREEN FUNCTION KEY 1.
②INITIALIZATIONイベントブロックでボタンの初期表示テキストを設定
sscrfields-functxt_01 = text-001. "エキスパートモード
③AT SELECTION /AT USER-COMMANDイベントブロックでボタン押下イベントを処理
CASE sscrfields-ucomm. WHEN 'FC01'. IF status_expert = c_hide."元々エキスパートモードが閉じれれた場合 status_expert = c_show. "エキスパートモードフラグをONにする sscrfields-functxt_01 = text-007."ボタンテキストを「エキスパートモード非表示」に ELSE. "元々エキスパートモードがオープンれれた場合 status_expert = c_hide."エキスパートモードフラグをOFFにする sscrfields-functxt_01 = text-001. "ボタンテキストを「エキスパートモード」に ENDIF. ENDCASE.
④AT SELECTION-SCREEN OUTPUTイベントブロックでエキスパートモード項目の表示/非表示を切り替え
LOOP AT SCREEN. CASE screen-group1. WHEN 'F'. IF status_expert = c_show. screen-active = 1. SET CURSOR FIELD 'PA_FIDOC'. ELSE. screen-active = 0. ENDIF. MODIFY SCREEN. ENDCASE. ENDLOOP.