ALV_FieldEdit

ttn133發表於2008-07-07

(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/238575/viewspace-1006910/,如需轉載,請註明出處,否則將追究法律責任。