(1)将ALV输出表中的menge字段设置为editable,并能够对用户的输入值进行合法性检查。
(2)可以选中多行,并仅对选中的行进行数量更新。
[@more@]*----------------------------------------------------------------------*
* アドオン機能名称 : 購買発注数量一括更新
* プログラムID : ZKSCMMB0001_ZHOUGH
* プログラム名称 : ZKSCMMB0001_ZHOUGH
* 作成者 : 周 光輝
* 作成日 : 2007/08/20
*----------------------------------------------------------------------*
* <処理概要>
* 入力画面に紐付く購買発注伝票一覧を元に、購買発注数量の一括更新を行う。
*----------------------------------------------------------------------*
* <更新記録>
* 更新日 No. 更新者 更新内容
* ---------- ---- ------------ --------------------------------------
* 2007/08/20 0001 周 光輝 新規作成
*----------------------------------------------------------------------*
REPORT ZKSCMMB0001_ZHOUGH
NO STANDARD PAGE HEADING
MESSAGE-ID ZMSG.
*----------------------------------------------------------------------*
* TABLE
*----------------------------------------------------------------------*
TABLES:
EKKO, "購買伝票ヘッダ
EKPO. "購買伝票明細
*----------------------------------------------------------------------*
* TYPE-POOLS
*----------------------------------------------------------------------*
TYPE-POOLS:
SLIS.
*----------------------------------------------------------------------*
* TYPE
*----------------------------------------------------------------------*
* 品目テキスト用
TYPES:
BEGIN OF TYP_MAKT,
MATNR LIKE MAKT-MATNR, "品目コード
MAKTX LIKE MAKT-MAKTX, "品目テキスト
END OF TYP_MAKT.
* 仕入先のアドレス用
TYPES:
BEGIN OF TYP_LFA1,
LIFNR LIKE LFA1-LIFNR, "仕入先コード
ADRNR LIKE LFA1-ADRNR, "住所
END OF TYP_LFA1.
* 仕入先名称用
TYPES:
BEGIN OF TYP_ADRC,
ADDRNUMBER LIKE ADRC-ADDRNUMBER, "アドレス番号
NAME1 LIKE ADRC-NAME1, "名称 1
END OF TYP_ADRC.
*----------------------------------------------------------------------*
* STRUCTURE
*----------------------------------------------------------------------*
* 購買発注データ用
DATA:
BEGIN OF TH_PURORDER,
EBELN LIKE EKKO-EBELN, "購買伝票
LIFNR LIKE EKKO-LIFNR, "仕入先
EBELP LIKE EKPO-EBELP, "明細
MATNR LIKE EKPO-MATNR, "品目コード
MENGE LIKE EKPO-MENGE, "購買発注数量
MEINS LIKE EKPO-MEINS, "発注単位
WERKS LIKE EKPO-WERKS, "プラント
MAKTX LIKE MAKT-MAKTX, "品目テキスト
NAME1 LIKE ADRC-NAME1, "名称
CHK(1) TYPE C, "チェックボックス
END OF TH_PURORDER.
DATA:
TH_MAKT TYPE TYP_MAKT, "品目テキスト用
TH_LFA1 TYPE TYP_LFA1, "仕入先のアドレス用
TH_ADRC TYPE TYP_ADRC, "仕入先名称用
TH_ALV_LAYOUT TYPE SLIS_LAYOUT_ALV, "ALVレイアウト
TH_FIELDCAT TYPE SLIS_FIELDCAT_ALV. "フィールドカタログ
*----------------------------------------------------------------------*
* INTERNAL TABLE
*----------------------------------------------------------------------*
DATA:
TD_PURORDER LIKE TABLE OF TH_PURORDER, "購買発注データ用
TD_MAKT TYPE TABLE OF TYP_MAKT, "品目テキスト用
TD_LFA1 TYPE TABLE OF TYP_LFA1, "仕入先のアドレス用
TD_ADRC TYPE TABLE OF TYP_ADRC. "仕入先名称用
DATA:
TD_FIELDCAT TYPE TABLE OF SLIS_FIELDCAT_ALV,
"ALVフィールドカタログ
IT_HEADER TYPE SLIS_T_LISTHEADER. "ALVヘッダ
*----------------------------------------------------------------------*
* WORKS
*----------------------------------------------------------------------*
DATA:
W_EKOTX LIKE T024E-EKOTX, "購買組織テキスト
W_DATE LIKE SY-DATUM, "処理の開始日付
W_TIME LIKE SY-UZEIT, "処理の開始時刻
W_REPID LIKE SY-REPID. "プログラム名
*----------------------------------------------------------------------*
* CONSTANTS
*----------------------------------------------------------------------*
CONSTANTS:
* ALVのイベントに対するフォーム
CNS_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'FRM_TOP_OF_PAGE',
CNS_SET_PF_STAT TYPE SLIS_FORMNAME VALUE 'FRM_SET_PF_STATUS',
CNS_USER_CMND TYPE SLIS_FORMNAME VALUE 'ALV_USER_COMMAND',
CNS_CHK_ITEM(3) TYPE C VALUE 'CHK', "CHK
CNS_FLG_ON(1) TYPE C VALUE 'X', "ON
CNS_FLG_OFF(1) TYPE C VALUE SPACE, "OFF
CNS_TYPE_H TYPE C VALUE 'H', "リストヘッダタイプ
CNS_TYPE_S TYPE C VALUE 'S'. "リストヘッダタイプ
*----------------------------------------------------------------------*
* PARAMETERS
*----------------------------------------------------------------------*
PARAMETERS:
P_EKORG LIKE EKKO-EKORG OBLIGATORY. "購買組織
SELECT-OPTIONS:
S_BEDAT FOR EKKO-BEDAT OBLIGATORY, "購買伝票日付
S_EKGRP FOR EKKO-EKGRP, "購買グループ
S_LIFNR FOR EKKO-LIFNR, "仕入先
S_EBELN FOR EKKO-EBELN, "購買伝票番号
S_MATNR FOR EKPO-MATNR, "品目コード
S_WERKS FOR EKPO-WERKS. "プラント
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
* 購買組織の存在チェック
PERFORM FRM_VALIDATE_EKORG.
*----------------------------------------------------------------------*
* START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
GET TIME.
W_DATE = SY-DATUM. "処理の開始日付
W_TIME = SY-UZEIT. "処理の開始時刻
W_REPID = SY-REPID. "プログラム名
* 購買発注データ取得
PERFORM FRM_RETRIEVE_PURORDER.
* 品目テキストの取得
PERFORM FRM_RETRIEVE_MAKT.
* 仕入先のアドレス番号の取得
PERFORM FRM_RETRIEVE_LFA1.
* 仕入先名称の取得
PERFORM FRM_RETRIEVE_ADRC.
* 購買発注データの編集
PERFORM FRM_EDIT_PURORDER.
*----------------------------------------------------------------------*
* END-OF-SELECTION
*----------------------------------------------------------------------*
END-OF-SELECTION.
* ALV一覧出力
PERFORM FRM_DISPLAY_ALV.
*----------------------------------------------------------------------*
* TOP-OF-PAGE
*----------------------------------------------------------------------*
TOP-OF-PAGE.
*&---------------------------------------------------------------------*
*& Form FRM_VALIDATE_EKORG
*&---------------------------------------------------------------------*
* 購買組織の存在チェック
*----------------------------------------------------------------------*
* なし
*----------------------------------------------------------------------
FORM FRM_VALIDATE_EKORG.
SELECT SINGLE EKOTX "購買組織テキスト
FROM T024E "購買組織
INTO W_EKOTX
WHERE EKORG = P_EKORG. "購買組織
*-抽出失敗時
IF SY-SUBRC <> 0.
*- エラーメッセージ出力
MESSAGE E001 WITH P_EKORG.
"購買組織 &1 は存在しません
ENDIF.
ENDFORM. " FRM_VALIDATE_EKORG
*&---------------------------------------------------------------------*
*& Form FRM_RETRIEVE_PURORDER
*&---------------------------------------------------------------------*
* 購買発注データ取得
*----------------------------------------------------------------------*
* なし
*----------------------------------------------------------------------*
FORM FRM_RETRIEVE_PURORDER.
SELECT EKKO~EBELN "購買伝票番号
EKKO~LIFNR "仕入先
EKPO~EBELP "購買伝票の明細番号
EKPO~MATNR "品目コード
EKPO~MENGE "購買発注数量
EKPO~MEINS "発注単位
EKPO~WERKS "プラント
INTO TABLE TD_PURORDER "購買発注データ
FROM EKKO "購買伝票ヘッダ
INNER JOIN EKPO "購買伝票明細
ON EKKO~EBELN = EKPO~EBELN
INNER JOIN EKET "分納契約納入日程行
ON EKPO~EBELN = EKET~EBELN
AND EKPO~EBELP = EKET~EBELP
WHERE EKKO~EKORG = P_EKORG "購買組織
AND EKPO~LOEKZ = SPACE "購買伝票の削除フラグ
AND EKET~WEMNG = 0 "入庫数量
AND EKPO~MATNR <> SPACE "品目コード
AND EKKO~EKGRP IN S_EKGRP "購買グループ
AND EKKO~LIFNR IN S_LIFNR "仕入先
AND EKKO~BEDAT IN S_BEDAT "購買伝票日付
AND EKKO~EBELN IN S_EBELN "購買伝票番号
AND EKPO~MATNR IN S_MATNR "品目コード
AND EKPO~WERKS IN S_WERKS. "プラント
*-抽出失敗時
IF SY-SUBRC <> 0.
*- エラーメッセージ出力
MESSAGE S002 DISPLAY LIKE 'E'.
"対象データが存在しません
ENDIF.
ENDFORM. " FRM_RETRIEVE_PURORDER
*&---------------------------------------------------------------------*
*& Form FRM_RETRIEVE_MAKT
*&---------------------------------------------------------------------*
* 品目テキストの取得
*----------------------------------------------------------------------*
* なし
*----------------------------------------------------------------------*
FORM FRM_RETRIEVE_MAKT.
CHECK TD_PURORDER IS NOT INITIAL.
SELECT MATNR "品目コード
MAKTX "品目テキスト
FROM MAKT "品目テキスト
INTO TABLE TD_MAKT
FOR ALL ENTRIES IN TD_PURORDER
WHERE MATNR = TD_PURORDER-MATNR "品目コード
AND SPRAS = SY-LANGU. "言語キー
ENDFORM. " FRM_RETRIEVE_MAKT
*&---------------------------------------------------------------------*
*& Form FRM_RETRIEVE_LFA1
*&---------------------------------------------------------------------*
* 仕入先のアドレス番号の取得
*----------------------------------------------------------------------*
* なし
*----------------------------------------------------------------------*
FORM FRM_RETRIEVE_LFA1.
CHECK TD_PURORDER IS NOT INITIAL.
SELECT LIFNR "仕入先コード
ADRNR "住所
FROM LFA1 "仕入先マスタ
INTO TABLE TD_LFA1 "仕入先のアドレス
FOR ALL ENTRIES IN TD_PURORDER
WHERE LIFNR = TD_PURORDER-LIFNR.
ENDFORM. " FRM_RETRIEVE_LFA1
*&---------------------------------------------------------------------*
*& Form FRM_RETRIEVE_ADRC
*&---------------------------------------------------------------------*
* 仕入先名称の取得
*----------------------------------------------------------------------*
* なし
*----------------------------------------------------------------------*
FORM FRM_RETRIEVE_ADRC.
CHECK TD_LFA1 IS NOT INITIAL.
SELECT ADDRNUMBER "アドレス番号
NAME1 "名称 1
FROM ADRC "仕入先マスタ
INTO TABLE TD_ADRC "仕入先のアドレス
FOR ALL ENTRIES IN TD_LFA1
WHERE ADDRNUMBER = TD_LFA1-ADRNR.
ENDFORM. " FRM_RETRIEVE_ADRC
*&---------------------------------------------------------------------*
*& Form FRM_EDIT_PURORDER
*&---------------------------------------------------------------------*
* 購買発注データの編集
*----------------------------------------------------------------------*
* なし
*----------------------------------------------------------------------*
FORM FRM_EDIT_PURORDER.
LOOP AT TD_PURORDER INTO TH_PURORDER.
READ TABLE TD_MAKT INTO TH_MAKT WITH KEY MATNR = TH_PURORDER-MATNR.
*- 抽出成功時
IF SY-SUBRC = 0.
TH_PURORDER-MAKTX = TH_MAKT-MAKTX. "品目テキストの編集
ENDIF.
READ TABLE TD_LFA1 INTO TH_LFA1 WITH KEY LIFNR = TH_PURORDER-LIFNR.
*- 抽出成功時
IF SY-SUBRC = 0.
READ TABLE TD_ADRC INTO TH_ADRC
WITH KEY ADDRNUMBER = TH_LFA1-ADRNR.
*-- 抽出成功時
IF SY-SUBRC = 0.
TH_PURORDER-NAME1 = TH_ADRC-NAME1. "仕入先名称の編集
ENDIF.
ENDIF.
*- 購買発注データ用テーブルを更新
MODIFY TD_PURORDER FROM TH_PURORDER TRANSPORTING MAKTX NAME1.
ENDLOOP.
* ソート(購買伝票 > 明細)
SORT TD_PURORDER BY EBELN EBELP.
ENDFORM. " FRM_EDIT_PURORDER
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_FIELDCAT
*&---------------------------------------------------------------------*
* フィールドカタログの作成
*-----------------------------------------------------------
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8214011/viewspace-965151/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8214011/viewspace-965151/