*&********************************************************************** *& PROGRAM : ZGSD002A0005 *&********************************************************************** *& DESCRIPTION : 受注一覧(変更履歴) *& T-cd : ZS0209 *& *&********************************************************************** *& MODIFICATION *& DATE NO AUTHOR CONTENTS *& --------------------------------------------------------------------- *& *&********************************************************************** REPORT ZGSD002A0005 NO STANDARD PAGE HEADING MESSAGE-ID ZGSD001. *----------------------------------------------------------------------* * TYPES *---------------------------------------------------------------------- *----------------------------------------------------------------------* * PARAMETERS/SELECT-OPTIONS定義 *----------------------------------------------------------------------* SELECT-OPTIONS: S_AUART FOR W_S_AUART OBLIGATORY "受注タイプ NO INTERVALS. SELECTION-SCREEN SKIP 1. ** 非表示項目 ** SELECT-OPTIONS: S_VKORG FOR W_S_VKORG OBLIGATORY "販売組織 NO INTERVALS. SELECT-OPTIONS: S_VKBUR FOR W_S_VKBUR "営業所 NO INTERVALS. SELECT-OPTIONS: S_VKGRP FOR W_S_VKGRP "営業グループ NO INTERVALS. SELECTION-SCREEN SKIP 1. SELECT-OPTIONS: S_UPDAY FOR W_S_UPDAY OBLIGATORY. "変更日 *--- 非表示項目 ---------------------------------------* SELECT-OPTIONS: S_VBELN FOR W_S_VBELN "受注伝票 NO-DISPLAY. *----- ALV一覧 SELECTION-SCREEN SKIP 2. SELECTION-SCREEN BEGIN OF BLOCK BL01 WITH FRAME TITLE TEXT-T04. "ALV一覧 PARAMETERS: P_VAR TYPE DISVARIANT-VARIANT. "バリアント SELECTION-SCREEN END OF BLOCK BL01. *----------------------------------------------------------------------* * AT SELECTION-SCREEN *----------------------------------------------------------------------* AT SELECTION-SCREEN. *----- 販売組織チェック PERFORM CHECK_VKORG. *----------------------------------------------------------------------* * AT SELECTION-SCREEN ON VALUE-REQUEST *----------------------------------------------------------------------* AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_VAR. *----- 表示バリアント取得 PERFORM GET_VARIANTS. *----------------------------------------------------------------------* * START-OF-SELECTION *----------------------------------------------------------------------* START-OF-SELECTION. *-- 初期処理 PERFORM INIT_PROC. *-- 主処理 PERFORM MAIN_PROC. *&---------------------------------------------------------------------* *& Form CHECK_VKORG *&---------------------------------------------------------------------* * 販売組織チェック *----------------------------------------------------------------------* FORM CHECK_VKORG. DATA: LW_BUKRS TYPE TVKO-BUKRS. *----- 販売組織の存在チェック SELECT SINGLE BUKRS INTO LW_BUKRS FROM TVKO WHERE VKORG IN S_VKORG. * IF SY-SUBRC <> 0. * 入力された値は存在しません(&) MESSAGE E015(ZGSD001) WITH TEXT-M02. ENDIF. *----- 権限チェック AUTHORITY-CHECK OBJECT 'Z_ALPHA' ID 'BUKRS' FIELD LW_BUKRS ID 'WERKS' DUMMY. IF SY-SUBRC <> 0. MESSAGE E001(ZGBC001) WITH LW_BUKRS. * 会社コード &1 に対する権限がありません ENDIF. ENDFORM. " CHECK_VKORG *&---------------------------------------------------------------------* *& Form INIT_PROC *&---------------------------------------------------------------------* * 初期処理 *----------------------------------------------------------------------* FORM INIT_PROC. *----- 登録情報の退避 PERFORM SET_REG_INFO. ENDFORM. " INIT_PROC *&---------------------------------------------------------------------* *& Form SET_REG_INFO *&---------------------------------------------------------------------* * 登録情報の退避 *----------------------------------------------------------------------* FORM SET_REG_INFO. CLEAR: W_CPROG, W_UNAME, W_DATLO, W_TIMLO. W_CPROG = SY-CPROG. "実行プログラム W_UNAME = SY-UNAME. "実行者 W_DATLO = SY-DATLO. "実行日 W_TIMLO = SY-TIMLO. "実行時刻 ENDFORM. " SET_REG_INFO *&---------------------------------------------------------------------* *& Form MAIN_PROC *&---------------------------------------------------------------------* * MAIN *----------------------------------------------------------------------* FORM MAIN_PROC. CLEAR: FLG_ERR. *-- 出力情報の取得 PERFORM GET_OUTPUT_DATA. IF FLG_ERR = 'X'. * 対象データがありません MESSAGE S024(ZGSD001). RETURN. ELSE. *-- 受注一覧(変更履歴) 一覧画面 CALL SCREEN 9000. ENDIF. ENDFORM. " MAIN_PROC *&---------------------------------------------------------------------* *& Form GET_OUTPUT_DATA *&---------------------------------------------------------------------* * 出力情報の取得 *----------------------------------------------------------------------* FORM GET_OUTPUT_DATA. DATA: LW_LINES TYPE SY-TABIX. REFRESH: TD_DISP. CLEAR: TH_DISP. *-- 受注伝票情報の取得 PERFORM GET_VBAK_DATA_V2. IF FLG_ERR <> 'X'. *-- 出力対象項目を汎用コードテーブルより取得 PERFORM GET_ZGCMT0001_DATA_01. "変更履歴テーブル用 PERFORM GET_ZGCMT0001_DATA_02. "特注情報用 *-- 出力データ作成 -------------------------* LOOP AT TD_VBA2 INTO TH_VBA2. CLEAR: TH_DISP. *--- 「変更履歴テーブル」取得 PERFORM GET_CDHDR_POS_DATA. *--- 「特注情報」変更情報取得 PERFORM GET_TOKUTYU_DATA. ENDLOOP. IF ( TD_DISP[] IS INITIAL ). FLG_ERR = 'X'. ELSE. SORT TD_DISP BY VBELN ASCENDING UDATE DESCENDING UTIME DESCENDING POSNR ASCENDING. CLEAR: LW_LINES. LW_LINES = LINES( TD_DISP ). * &1 件表示されました MESSAGE S158(ZGSD001) WITH LW_LINES. ENDIF. ENDIF. ENDFORM. " GET_OUTPUT_DATA *&---------------------------------------------------------------------* *& Module STATUS_9000 OUTPUT *&---------------------------------------------------------------------* * 表題、ステータス設定 *----------------------------------------------------------------------* MODULE STATUS_9000 OUTPUT. SET PF-STATUS 'ST9000'. SET TITLEBAR 'TL9000'. ENDMODULE. " STATUS_9000 OUTPUT *---------------------------------------------------------------------* * CLASS LCL_EVENT_RECIEVER DEFINITION *---------------------------------------------------------------------* * ALVイベントレシーバ(定義) *---------------------------------------------------------------------* CLASS LCL_EVENT_RECIEVER DEFINITION. PUBLIC SECTION. *----- ダブルクリック METHODS double_click FOR EVENT double_click OF CL_GUI_ALV_GRID. PRIVATE SECTION. ENDCLASS. "LCL_EVENT_RECIEVER DEFINITION *---------------------------------------------------------------------* * CLASS LCL_EVENT_RECIEVER IMPLEMENTATION *---------------------------------------------------------------------* * ALVイベントレシーバ(実装) *---------------------------------------------------------------------* CLASS LCL_EVENT_RECIEVER IMPLEMENTATION. *----- ダブルクリック METHOD double_click. *---- 選択行の取得 PERFORM GET_SELECT_LINE. *--- 受注伝票選照会 IF ( ST_COL_ID-FIELDNAME = 'VBELN' ) AND ( W_VALUE IS NOT INITIAL ). SET PARAMETER ID 'AUN' FIELD W_VALUE. CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN. *--- 購買依頼照会 ELSEIF ( ST_COL_ID-FIELDNAME = 'BANFN' ) AND ( W_VALUE IS NOT INITIAL ). SET PARAMETER ID 'BAN' FIELD W_VALUE. CALL TRANSACTION 'ME53N' AND SKIP FIRST SCREEN. *--- 購買発注照会 ELSEIF ( ST_COL_ID-FIELDNAME = 'EBELN' ) AND ( W_VALUE IS NOT INITIAL ). SET PARAMETER ID 'BES' FIELD W_VALUE. CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN. *--- 計画手配照会 ELSEIF ( ST_COL_ID-FIELDNAME = 'PLNUM' ) AND ( W_VALUE IS NOT INITIAL ). SET PARAMETER ID 'PAF' FIELD W_VALUE. CALL TRANSACTION 'MD13' AND SKIP FIRST SCREEN. *--- 指図伝票照会 ELSEIF ( ST_COL_ID-FIELDNAME = 'AUFNR' ) AND ( W_VALUE IS NOT INITIAL ). SET PARAMETER ID 'ANR' FIELD W_VALUE. CALL TRANSACTION 'CO03' AND SKIP FIRST SCREEN. ENDIF. ENDMETHOD. "double_click ENDCLASS. "LCL_EVENT_RECIEVER IMPLEMENTATION *&---------------------------------------------------------------------* *& Module USER_COMMAND_9000 INPUT *&---------------------------------------------------------------------* * ユーザコマンド設定 *----------------------------------------------------------------------* MODULE USER_COMMAND_9000 INPUT. CASE OK_9000. *_/_/ 編集押下 _/_/_/_/_/_/_/_/ WHEN 'AD_EDIT'. *_/_/ 再読込押下 _/_/_/_/_/_/_/ WHEN 'REFRESH'. PERFORM USER_COMM_9000_REFRESH. ENDCASE. * 初期化 CLEAR: OK_9000. ENDMODULE. " USER_COMMAND_9000 INPUT *&---------------------------------------------------------------------* *& Form GET_SELECT_LINE *&---------------------------------------------------------------------* * 選択行の取得 *----------------------------------------------------------------------* FORM GET_SELECT_LINE. * 初期化 CLEAR: W_ROW, W_VALUE, ST_COL_ID. *----- 選択行の取得 CALL METHOD GR_SELECTION->GET_CURRENT_CELL IMPORTING E_ROW = W_ROW E_VALUE = W_VALUE ES_COL_ID = ST_COL_ID. ENDFORM. " GET_SELECT_LINE *&---------------------------------------------------------------------* *& Module USER_COMMAND_EXIT_9000 INPUT *&---------------------------------------------------------------------* * ユーザコマンド処理:EXIT命令 *----------------------------------------------------------------------* MODULE USER_COMMAND_EXIT_9000 INPUT. CASE OK_9000. ******************** 前画面、中止ボタン押下時 ************************** WHEN 'BACK' OR 'CANC' OR 'EXIT'. * 初期化 CLEAR: OK_9000. *----- 一覧画面に戻る LEAVE TO SCREEN 0. ENDCASE. ENDMODULE. " USER_COMMAND_EXIT_9000 INPUT *&---------------------------------------------------------------------* *& Module ALV_INIT OUTPUT *&---------------------------------------------------------------------* * データ選択ALVリスト画面 初期処理 *----------------------------------------------------------------------* MODULE ALV_INIT OUTPUT. IF CN_SELECTION IS INITIAL. *-- ALV GRIDの生成 PERFORM CREATE_ALV_GRID. *-- ALV GRID表示パラメータ編集 PERFORM EDIT_ALV_PARAMETER. *「U」ユーザ固有のバリアント *「X」ユーザ非固有のバリアント *「A」両方 W_SAVE = 'A'. *---- ALV GRIDの表示 CALL METHOD GR_SELECTION->SET_TABLE_FOR_FIRST_DISPLAY EXPORTING * I_BUFFER_ACTIVE = * I_BYPASSING_BUFFER = * I_CONSISTENCY_CHECK = * I_STRUCTURE_NAME = IS_VARIANT = TH_VARIANT I_SAVE = W_SAVE I_DEFAULT = 'X' IS_LAYOUT = W_LAYOUT * IS_PRINT = * IT_SPECIAL_GROUPS = IT_TOOLBAR_EXCLUDING = TD_TOOLBAR_EX * IT_HYPERLINK = * IT_ALV_GRAPHICS = * IT_EXCEPT_QINFO = * IR_SALV_ADAPTER = CHANGING IT_OUTTAB = TD_DISP IT_FIELDCATALOG = TD_FIELD_CAT * IT_SORT = * IT_FILTER = EXCEPTIONS INVALID_PARAMETER_COMBINATION = 1 PROGRAM_ERROR = 2 TOO_MANY_LINES = 3 OTHERS = 4 . 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. ENDMODULE. " ALV_INIT OUTPUT *&---------------------------------------------------------------------* *& Form CREATE_ALV_GRID *&---------------------------------------------------------------------* * ALV GRIDの生成 *----------------------------------------------------------------------* FORM CREATE_ALV_GRID. DATA: LW_EVENT_RECIEVER TYPE REF TO LCL_EVENT_RECIEVER. *---- コンテナーの生成 CREATE OBJECT CN_SELECTION EXPORTING CONTAINER_NAME = 'CN_SELECT' EXCEPTIONS CNTL_ERROR = 1 CNTL_SYSTEM_ERROR = 2 CREATE_ERROR = 3 LIFETIME_ERROR = 4 LIFETIME_DYNPRO_DYNPRO_LINK = 5 OTHERS = 6. * IF SY-SUBRC <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. *---- ALVグリッドの生成 CREATE OBJECT GR_SELECTION EXPORTING * I_SHELLSTYLE = 0 * I_LIFETIME = I_PARENT = CN_SELECTION * I_APPL_EVENTS = SPACE * I_PARENTDBG = * I_APPLOGPARENT = * I_GRAPHICSPARENT = * I_NAME = * I_FCAT_COMPLETE = SPACE EXCEPTIONS ERROR_CNTL_CREATE = 1 ERROR_CNTL_INIT = 2 ERROR_CNTL_LINK = 3 ERROR_DP_CREATE = 4 OTHERS = 5. * IF SY-SUBRC <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. * イベント登録 CREATE OBJECT LW_EVENT_RECIEVER. SET HANDLER LW_EVENT_RECIEVER->double_click FOR GR_SELECTION. ENDFORM. " CREATE_ALV_GRID *&---------------------------------------------------------------------* *& Form EDIT_ALV_PARAMETER *&---------------------------------------------------------------------* * ALV GRID表示パラメータ編集 *----------------------------------------------------------------------* FORM EDIT_ALV_PARAMETER. * 初期化 CLEAR: W_LAYOUT, TH_VARIANT. REFRESH: TD_FIELD_CAT, TD_TOOLBAR_EX. *----- レイアウト設定 W_LAYOUT-ZEBRA = 'X'. "縞模様 W_LAYOUT-CWIDTH_OPT = 'X'. "列幅の最適化 * W_LAYOUT-NO_ROWMARK = 'X'. "選択無効化 *----選択ボタン W_LAYOUT-BOX_FNAME = 'SEL'. W_LAYOUT-SEL_MODE = 'A'. *----- ツールバー設定(除外) APPEND CL_GUI_ALV_GRID=>MC_FC_PRINT TO TD_TOOLBAR_EX. "印刷 APPEND CL_GUI_ALV_GRID=>MC_FC_VIEWS TO TD_TOOLBAR_EX. "ビュー変更 APPEND CL_GUI_ALV_GRID=>MC_FC_GRAPH TO TD_TOOLBAR_EX. "グラフィック *----- バリアント設定 TH_VARIANT-REPORT = SY-CPROG. TH_VARIANT-VARIANT = P_VAR. *-- 項目設定1 PERFORM CREAT_FIELDS_CAT_01. **----- 項目設定2 * CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' * EXPORTING ** I_BUFFER_ACTIVE = * I_STRUCTURE_NAME = 'ZGCMS0502' ** I_CLIENT_NEVER_DISPLAY = 'X' ** I_BYPASSING_BUFFER = ** I_INTERNAL_TABNAME = * CHANGING * CT_FIELDCAT = TD_FIELD_CAT * EXCEPTIONS * INCONSISTENT_INTERFACE = 1 * PROGRAM_ERROR = 2 * OTHERS = 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. * * PERFORM CHANGE_FIELDNAME USING: * 'VBELN' ' ' TEXT-I01, "[受注伝票] * 'POSNR' ' ' TEXT-I02, "[明細] * 'MATNR' ' ' TEXT-I03, "[品目] * 'ARKTX' ' ' TEXT-I04, "[品目テキスト] * 'VDATU' ' ' TEXT-I05, "[指定納期] * 'KWMENG' ' ' TEXT-I06, "[数量] * 'VRKME' ' ' TEXT-I07, "[単位] * 'DISPO' ' ' TEXT-I08, "[MRP管理者] * 'CHNGIND' ' ' TEXT-I09, "[変更内容] * 'VALUE_OLD' ' ' TEXT-I10, "[旧値] * 'VALUE_NEW' ' ' TEXT-I11, "[新値] * 'UDATE' ' ' TEXT-I12, "[変更日] * 'USERNAME' ' ' TEXT-I13, "[変更者] * 'EBELN' ' ' TEXT-I14, "[購買発注番号] * 'SPECIAL2' ' ' TEXT-I15, "[業者] * 'AUFNR' ' ' TEXT-I16. "[製造指図番号] ENDFORM. " EDIT_ALV_PARAMETER *&---------------------------------------------------------------------* *& Form CHANGE_FIELDNAME *&---------------------------------------------------------------------* * 項目属性諸修正(項目長変更/項目見出し変更) *----------------------------------------------------------------------* * --> IW_FIELDNAME 項目名 * --> IW_NO_OUT 出力(X:非表示) * --> IW_TEXT 項目テキスト *----------------------------------------------------------------------* FORM CHANGE_FIELDNAME USING IW_FIELDNAME IW_NO_OUT IW_TEXT. DATA: LTH_FIELD_CAT LIKE LINE OF TD_FIELD_CAT. LTH_FIELD_CAT-NO_OUT = IW_NO_OUT. "出力 LTH_FIELD_CAT-SELTEXT = IW_TEXT. "項目名 LTH_FIELD_CAT-REPTEXT = IW_TEXT. "ドメイン MODIFY TD_FIELD_CAT FROM LTH_FIELD_CAT TRANSPORTING NO_OUT SELTEXT REPTEXT WHERE FIELDNAME = IW_FIELDNAME. ENDFORM. " CHANGE_FIELDNAME *&---------------------------------------------------------------------* *& Form SET_FIELDS_CAT *&---------------------------------------------------------------------* * 項目設定 *----------------------------------------------------------------------* * -->PI_FIELDNAME text * -->PI_COLTEXT text * -->PI_DATATYPE text * -->PI_OUTPUTLEN text *----------------------------------------------------------------------* FORM SET_FIELDS_CAT USING PI_FIELDNAME PI_COLTEXT PI_DATATYPE PI_OUTPUTLEN. CLEAR TH_FIELD_CAT. TH_FIELD_CAT-FIELDNAME = PI_FIELDNAME. TH_FIELD_CAT-COLTEXT = PI_COLTEXT. TH_FIELD_CAT-DATATYPE = PI_DATATYPE. TH_FIELD_CAT-OUTPUTLEN = PI_OUTPUTLEN. APPEND TH_FIELD_CAT TO TD_FIELD_CAT. ENDFORM. " SET_FIELDS_CAT *&---------------------------------------------------------------------* *& Form CREAT_FIELDS_CAT_01 *&---------------------------------------------------------------------* * 項目設定1 *----------------------------------------------------------------------* FORM CREAT_FIELDS_CAT_01. * 受注伝票 PERFORM SET_FIELDS_CAT USING 'VBELN' TEXT-I01 'CHAR' '10'. * 明細 PERFORM SET_FIELDS_CAT USING 'POSNR' TEXT-I02 'CHAR' '6'. * 品目コード PERFORM SET_FIELDS_CAT USING 'MATNR' TEXT-I03 'CHAR' '35'. * 品目テキスト PERFORM SET_FIELDS_CAT USING 'ARKTX' TEXT-I04 'CHAR' '40'. * 指定納期 PERFORM SET_FIELDS_CAT USING 'VDATU' TEXT-I05 'DATS' '10'. * 数量 PERFORM SET_FIELDS_CAT USING 'KWMENG' TEXT-I06 'QUAN' '15'. * 単位 PERFORM SET_FIELDS_CAT USING 'VRKME' TEXT-I07 'CHAR' '3'. * MRP管理者 PERFORM SET_FIELDS_CAT USING 'DISPO' TEXT-I08 'CHAR' '3'. * 変更内容(TXT) PERFORM SET_FIELDS_CAT USING 'ZCHGTXT' TEXT-I09 'CHAR' '4'. * 変更項目(TXT) PERFORM SET_FIELDS_CAT USING 'FNAME_TXT' TEXT-I25 'CHAR' '50'. * 旧値 PERFORM SET_FIELDS_CAT USING 'VALUE_OLD' TEXT-I10 'CHAR' '254'. * 新値 PERFORM SET_FIELDS_CAT USING 'VALUE_NEW' TEXT-I11 'CHAR' '254'. * 変更日 PERFORM SET_FIELDS_CAT USING 'UDATE' TEXT-I12 'DATS' '10'. * 変更者 PERFORM SET_FIELDS_CAT USING 'USERNAME' TEXT-I13 'DATS' '10'. * 購買依頼 PERFORM SET_FIELDS_CAT USING 'BANFN' TEXT-I27 'CHAR' '10'. * 購買発注番号 PERFORM SET_FIELDS_CAT USING 'EBELN' TEXT-I14 'CHAR' '10'. ** 業者 * PERFORM SET_FIELDS_CAT USING 'SPECIAL2' * TEXT-I15 * 'CHAR' * '32'. * 業者 PERFORM SET_FIELDS_CAT USING 'NAME1' TEXT-I15 'CHAR' '40'. * 計画手配 PERFORM SET_FIELDS_CAT USING 'PLNUM' TEXT-I26 'CHAR' '10'. * 製造指図番号 PERFORM SET_FIELDS_CAT USING 'AUFNR' TEXT-I16 'CHAR' '12'. *-- 非表示項目 ----* IF SY-TCODE <> 'ZS0209'. * 販売組織 PERFORM SET_FIELDS_CAT USING 'VKORG' TEXT-I29 'CHAR' '4'. * 受注タイプ PERFORM SET_FIELDS_CAT USING 'AUART' TEXT-I18 'CHAR' '4'. * 仕入先 PERFORM SET_FIELDS_CAT USING 'LIFNR' TEXT-I28 'CHAR' '10'. * 対象値(伝票番号) PERFORM SET_FIELDS_CAT USING 'OBJECTID' TEXT-I20 'CHAR' '90'. * 変更文書番号 PERFORM SET_FIELDS_CAT USING 'CHANGENR' TEXT-I21 'CHAR' '10'. * テーブル名 PERFORM SET_FIELDS_CAT USING 'TABNAME' TEXT-I22 'CHAR' '30'. * 変更テーブルレコードキー(CL+伝票+明細) PERFORM SET_FIELDS_CAT USING 'TABKEY' TEXT-I23 'CHAR' '70'. * 変更時刻 PERFORM SET_FIELDS_CAT USING 'UTIME' TEXT-I19 'TIMS' '6'. * 変更内容 PERFORM SET_FIELDS_CAT USING 'CHNGIND' TEXT-I09 'CHAR' '1'. * 変更項目 PERFORM SET_FIELDS_CAT USING 'FNAME' TEXT-I17 'CHAR' '30'. * T-cd(PGM ID) PERFORM SET_FIELDS_CAT USING 'TCODE' TEXT-I24 'CHAR' '40'. ENDIF. ENDFORM. " CREAT_FIELDS_CAT_01 *&---------------------------------------------------------------------* *& Form USER_COMM_900_REFRESH *&---------------------------------------------------------------------* * 再読込押下 *----------------------------------------------------------------------* FORM USER_COMM_9000_REFRESH. *-- 項目カタログ取得 CALL METHOD GR_SELECTION->GET_FRONTEND_FIELDCATALOG IMPORTING ET_FIELDCATALOG = TD_FIELD_CAT. *-- 出力情報の取得(再取得) PERFORM GET_OUTPUT_DATA. *-- テーブルの再照会 CALL METHOD GR_SELECTION->REFRESH_TABLE_DISPLAY * EXPORTING * IS_STABLE = * I_SOFT_REFRESH = EXCEPTIONS FINISHED = 1 OTHERS = 2. IF SY-SUBRC <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. ENDFORM. " USER_COMM_9000_REFRESH *&---------------------------------------------------------------------* *& Form GET_ZGCMT0001_DATA_01 *&---------------------------------------------------------------------* * 汎用コードから取得(CDHDR/CDPOS用) *----------------------------------------------------------------------* FORM GET_ZGCMT0001_DATA_01. REFRESH: TD_ZGCMT0001_01. CLEAR: TH_ZGCMT0001_01. *-- 汎用コードテーブルに設定されている判定項目を取得 SELECT * INTO TABLE TD_ZGCMT0001_01 FROM ZGCMT0001 WHERE KEYNUM = '168' AND XSIDEL <> 'X' AND TEXT01 <> 'ZGCMT0503'. IF SY-SUBRC = 0. ENDIF. ENDFORM. " GET_ZGCMT0001_DATA_01 *&---------------------------------------------------------------------* *& Form GET_ZGCMT0001_DATA_02 *&---------------------------------------------------------------------* * 汎用コードから取得(ZGCMT0503用) *----------------------------------------------------------------------* FORM GET_ZGCMT0001_DATA_02. REFRESH: TD_ZGCMT0001_02. CLEAR: TH_ZGCMT0001_02. *-- 汎用コードテーブルに設定されている判定項目を取得 SELECT * INTO TABLE TD_ZGCMT0001_02 FROM ZGCMT0001 WHERE KEYNUM = '168' AND XSIDEL <> 'X' AND TEXT01 = 'ZGCMT0503'. IF SY-SUBRC = 0. ENDIF. ENDFORM. " GET_ZGCMT0001_DATA_01 *&---------------------------------------------------------------------* *& Form GET_CDHDR_POS_DATA *&---------------------------------------------------------------------* * 変更履歴テーブル取得 *----------------------------------------------------------------------* FORM GET_CDHDR_POS_DATA. DATA: LTD_CDHDR TYPE TABLE OF CDHDR, LTH_CDHDR TYPE CDHDR. DATA: LTD_CDPOS TYPE TABLE OF CDPOS, LTH_CDPOS TYPE CDPOS. DATA: LW_OBJECTCLAS TYPE CDHDR-OBJECTCLAS VALUE 'VERKBELEG'. REFRESH: LTD_CDHDR, LTD_CDPOS. CLEAR: LTH_CDHDR, LTH_CDPOS. SELECT * INTO TABLE LTD_CDHDR FROM CDHDR WHERE OBJECTCLAS = 'VERKBELEG' AND OBJECTID = TH_VBA2-VBELN "受注伝票番号 AND UDATE IN S_UPDAY. IF SY-SUBRC = 0. SORT LTD_CDHDR BY OBJECTID ASCENDING CHANGENR ASCENDING. LOOP AT LTD_CDHDR INTO LTH_CDHDR. SELECT * INTO TABLE LTD_CDPOS FROM CDPOS WHERE OBJECTCLAS = LTH_CDHDR-OBJECTCLAS AND OBJECTID = LTH_CDHDR-OBJECTID AND CHANGENR = LTH_CDHDR-CHANGENR AND ( CHNGIND = 'I' "挿入 OR CHNGIND = 'U' "更新 OR CHNGIND = 'D' ) "削除 . IF SY-SUBRC = 0. SORT LTD_CDPOS BY CHANGENR ASCENDING. CLEAR: LTH_CDPOS. LOOP AT LTD_CDPOS INTO LTH_CDPOS. *-------- 汎用テーブルに表示対象項目が設定されている場合 IF NOT ( TD_ZGCMT0001_01[] IS INITIAL ). READ TABLE TD_ZGCMT0001_01 INTO TH_ZGCMT0001_01 WITH KEY TEXT01 = LTH_CDPOS-TABNAME TEXT02 = LTH_CDPOS-FNAME. IF ( SY-SUBRC <> 0 ). DELETE LTD_CDPOS WHERE TABNAME = LTH_CDPOS-TABNAME AND FNAME = LTH_CDPOS-FNAME. CONTINUE. ELSE. * 表示対象データ ENDIF. ENDIF. *-------------------------------------* * 一覧表示対象データの作成 *-------------------------------------* CLEAR: TH_DISP. MOVE-CORRESPONDING TH_VBA2 TO TH_DISP. TH_DISP-CHNGIND = LTH_CDPOS-CHNGIND. "*変更内容(コード) CASE TH_DISP-CHNGIND. "変更内容(TEXT) WHEN 'I'. TH_DISP-ZCHGTXT = TEXT-T01. "'挿入'. WHEN 'U'. TH_DISP-ZCHGTXT = TEXT-T03. "'更新'. WHEN 'D'. TH_DISP-ZCHGTXT = TEXT-T02. "'削除'. ENDCASE. TH_DISP-FNAME = LTH_CDPOS-FNAME. "*変更項目 IF ( TH_ZGCMT0001_01-TEXT04 IS INITIAL ). TH_DISP-FNAME_TXT = LTH_CDPOS-FNAME. ELSE. TH_DISP-FNAME_TXT = TH_ZGCMT0001_01-TEXT04. "変更項目(TEXT) ENDIF. TH_DISP-VALUE_OLD = LTH_CDPOS-VALUE_OLD. "旧値 TH_DISP-VALUE_NEW = LTH_CDPOS-VALUE_NEW. "新値 TH_DISP-UDATE = LTH_CDHDR-UDATE. "変更日 TH_DISP-UTIME = LTH_CDHDR-UTIME. "変更時刻 TH_DISP-USERNAME = LTH_CDHDR-USERNAME. "変更者 TH_DISP-TCODE = LTH_CDHDR-TCODE. "*T-CD TH_DISP-OBJECTID = LTH_CDPOS-OBJECTID. "*対象値(伝票番号) TH_DISP-CHANGENR = LTH_CDPOS-CHANGENR. "*変更文書番号 TH_DISP-TABNAME = LTH_CDPOS-TABNAME. "*テーブル名 TH_DISP-TABKEY = LTH_CDPOS-TABKEY. "*変更テーブルレコードキー(CL+伝票+明細) *------ その他の差分情報の取得 ----------* PERFORM GET_VBAP USING LTH_CDPOS-TABNAME "テーブル名 LTH_CDPOS-TABKEY . "(CL+伝票+明細) ENDLOOP. ENDIF. ENDLOOP. ENDIF. ENDFORM. " GET_CDHDR_POS_DATA *&---------------------------------------------------------------------* *& Form GET_MARC *&---------------------------------------------------------------------* * MRP管理者の取得 *----------------------------------------------------------------------* * -->PI_MATNR text * -->PI_WERKS text * <--PO_DISPO text *----------------------------------------------------------------------* FORM GET_MARC USING PI_MATNR PI_WERKS CHANGING PO_DISPO. DATA: LTH_MARC TYPE MARC. SELECT SINGLE * INTO LTH_MARC FROM MARC WHERE MATNR = PI_MATNR "品目 AND WERKS = PI_WERKS "プラント AND LVORM <> 'X'. "プラントレベルでの品目削除フラグ IF SY-SUBRC = 0. PO_DISPO = LTH_MARC-DISPO. ENDIF. ENDFORM. " GET_MARC *&---------------------------------------------------------------------* *& Form GET_ZGCMT50X *&---------------------------------------------------------------------* * 特注情報,受注-指図連携テーブルの情報取得 * 1:特注情報のみ取得 * 2:受注-指図連携テーブルのみ取得 * 3:両方取得 *----------------------------------------------------------------------* * -->PI_TYPE text * -->PI_VBELN text * -->PI_POSNR text * <--PO_SPECIAL2 text * <--PO_PLNUM text * <--PO_AUFNR text * <--PO_BANFN text * <--PO_EBELN text *----------------------------------------------------------------------* FORM GET_ZGCMT50X USING PI_TYPE PI_VBELN PI_POSNR PI_VKORG CHANGING PO_SPECIAL2 PO_PLNUM PO_AUFNR PO_BANFN PO_EBELN. DATA: LTH_ZGCMT0503 TYPE ZGCMT0503, LTH_ZGCMT0504 TYPE ZGCMT0504, LTD_ZGCMT0504 TYPE TABLE OF ZGCMT0504. DATA: LW_BANFN TYPE ZGCMT0504-BANFN, LW_EBELN TYPE ZGCMT0504-EBELN, LW_PLNUM TYPE ZGCMT0504-PLNUM, LW_AUFNR TYPE ZGCMT0504-AUFNR, LW_POSNUM TYPE ZGCMT0504-POSNUM VALUE '001'. *-- 特注情報 CLEAR: LTH_ZGCMT0503. IF ( PI_TYPE = '1' ) OR ( PI_TYPE = '3' ). SELECT SINGLE * INTO LTH_ZGCMT0503 FROM ZGCMT0503 WHERE VBELN = PI_VBELN AND POSNR = PI_POSNR. IF SY-SUBRC = 0. PO_SPECIAL2 = LTH_ZGCMT0503-SPECIAL2. ENDIF. ENDIF. *-- 受注-指図連携テーブル REFRESH: LTD_ZGCMT0504. CLEAR: LTH_ZGCMT0504. CLEAR: LW_BANFN, LW_EBELN, LW_PLNUM, LW_AUFNR. IF ( PI_TYPE = '2' ) OR ( PI_TYPE = '3' ). SELECT * INTO TABLE LTD_ZGCMT0504 FROM ZGCMT0504 WHERE VBELN = PI_VBELN AND POSNR = PI_POSNR AND VKORG = PI_VKORG. IF SY-SUBRC = 0. * SORT LTD_ZGCMT0504 BY POSNUM ASCENDING. "昇順 * READ TABLE LTD_ZGCMT0504 INTO LTH_ZGCMT0504 INDEX 1. * LOOP AT LTD_ZGCMT0504 INTO LTH_ZGCMT0504. * ** 最初に見つかった「発注伝票番号」をセット * IF NOT ( LTH_ZGCMT0504-EBELN IS INITIAL ) * AND ( LW_EBELN IS INITIAL ). * LW_EBELN = LTH_ZGCMT0504-EBELN. * ENDIF. * ** 最初に見つかった「指図番号」をセット * IF NOT ( LTH_ZGCMT0504-AUFNR IS INITIAL ) * AND ( LW_AUFNR IS INITIAL ). * LW_AUFNR = LTH_ZGCMT0504-AUFNR. * ENDIF. * * IF NOT ( LW_EBELN IS INITIAL ) * AND NOT ( LW_AUFNR IS INITIAL ). * EXIT. * ENDIF. * * ENDLOOP. * * PO_EBELN = LW_EBELN. * PO_AUFNR = LW_AUFNR. SORT LTD_ZGCMT0504 BY POSNUM ASCENDING. "昇順 READ TABLE LTD_ZGCMT0504 INTO LTH_ZGCMT0504 WITH KEY POSNUM = LW_POSNUM. "連番=1 IF SY-SUBRC = 0. PO_BANFN = LTH_ZGCMT0504-BANFN. PO_EBELN = LTH_ZGCMT0504-EBELN. PO_PLNUM = LTH_ZGCMT0504-PLNUM. PO_AUFNR = LTH_ZGCMT0504-AUFNR. ENDIF. ENDIF. ENDIF. ENDFORM. " GET_ZGCMT50X *&---------------------------------------------------------------------* *& Form GET_VBAK_DATA_V2 *&---------------------------------------------------------------------* * 受注伝票情報の取得(ver2) *----------------------------------------------------------------------* FORM GET_VBAK_DATA_V2. REFRESH: TD_VBA2. CLEAR: TH_VBA2. *----- 受注データの取得 SELECT VBAK~VBELN "受注伝票 VBAK~AUART "受注タイプ VBAK~VKORG "販売組織 VBAK~VKGRP "営業GRP VBAK~VKBUR "営業所 VBAK~VDATU "指定納入日 VBUK~FKSTK "請求ステータス * INTO CORRESPONDING FIELDS OF TABLE TD_VBA2 INTO TABLE TD_VBA2 FROM VBAK INNER JOIN VBUK ON VBAK~VBELN = VBUK~VBELN WHERE VBAK~VBELN IN S_VBELN "販売伝票 AND VBAK~AUART IN S_AUART "受注タイプ AND VBAK~VKORG IN S_VKORG "販売組織 AND VBAK~VKGRP IN S_VKGRP "営業グループ AND VBAK~VKBUR IN S_VKBUR "営業所 * AND VBAK~VDATU IN S_UPDAY "指定納入日 AND VBUK~FKSTK <> 'C'. "請求ステータス:請求完了以外 IF SY-SUBRC <> 0. FLG_ERR = 'X'. ELSE. ENDIF. ENDFORM. " GET_VBAK_DATA_V2 *&---------------------------------------------------------------------* *& Form GET_VBAP *&---------------------------------------------------------------------* * 受注伝票明細情報を取得 *----------------------------------------------------------------------* * -->PI_TABNAME テーブル名 * -->PI_TABKEY テーブルキー(CL+伝票+明細) *----------------------------------------------------------------------* FORM GET_VBAP USING PI_TABNAME PI_TABKEY. DATA: LTD_VBAP TYPE TABLE OF VBAP, LTH_VBAP TYPE VBAP. DATA: LW_TABKEY TYPE CDPOS-TABKEY, LW_CL(3) TYPE C, LW_VBELN TYPE VBAP-VBELN, LW_POSNR(6) TYPE C, LW_ETENR TYPE VBEP-ETENR, LW_DENPYO TYPE EKKO-EBELN, LW_TYPE(1) TYPE C, LW_TMP(50) TYPE C. REFRESH: LTD_VBAP. CLEAR: LTH_VBAP. CLEAR: LW_TABKEY, LW_CL, LW_VBELN ,LW_POSNR, LW_ETENR. LW_CL = PI_TABKEY+0(3). LW_VBELN = PI_TABKEY+3(10). LW_POSNR = PI_TABKEY+13(6). LW_ETENR = PI_TABKEY+19(4). "納入日程行 *-- ヘッダの更新履歴 --* IF ( LW_POSNR = SPACE ) OR ( LW_POSNR = '000000' ). TH_DISP-POSNR = '000000'. "明細 APPEND TH_DISP TO TD_DISP. *-- 明細の更新履歴 --* ELSE. SELECT * INTO TABLE LTD_VBAP FROM VBAP WHERE VBELN = LW_VBELN AND POSNR = LW_POSNR. IF SY-SUBRC = 0. LOOP AT LTD_VBAP INTO LTH_VBAP. TH_DISP-POSNR = LTH_VBAP-POSNR. "明細 TH_DISP-MATNR = LTH_VBAP-MATNR. "品目 TH_DISP-ARKTX = LTH_VBAP-ARKTX. "受注明細のテキスト (短) TH_DISP-KWMENG = LTH_VBAP-KWMENG. "累積受注数量 (販売単位) TH_DISP-VRKME = LTH_VBAP-VRKME. "販売単位 TH_DISP-WERKS = LTH_VBAP-WERKS. "*プラント PERFORM GET_VBEP USING LTH_VBAP-VBELN LTH_VBAP-POSNR LW_ETENR CHANGING TH_DISP-VDATU. "指定納入日(明細) PERFORM GET_MARC USING TH_DISP-MATNR TH_DISP-WERKS CHANGING TH_DISP-DISPO. "MRP管理者 CLEAR: LW_TMP. PERFORM GET_ZGCMT50X USING '2' "2:受注-指図連携テーブルのみ取得 TH_DISP-VBELN TH_DISP-POSNR TH_DISP-VKORG CHANGING LW_TMP TH_DISP-PLNUM "計画手配 TH_DISP-AUFNR "製造指図番号 TH_DISP-BANFN "購買依頼番号 TH_DISP-EBELN. "購買発注番号 CLEAR: LW_DENPYO, LW_TYPE. IF NOT ( TH_DISP-EBELN IS INITIAL ). LW_DENPYO = TH_DISP-EBELN. LW_TYPE = 'E'. ELSEIF NOT ( TH_DISP-BANFN IS INITIAL ). LW_DENPYO = TH_DISP-BANFN. LW_TYPE = 'B'. ELSE. ENDIF. IF NOT ( LW_DENPYO IS INITIAL ). PERFORM GET_LFA1 USING LW_DENPYO "購買発注番号 LW_TYPE CHANGING TH_DISP-LIFNR "仕入先 TH_DISP-NAME1. "名称1(仕入先名称) ENDIF. APPEND TH_DISP TO TD_DISP. ENDLOOP. ENDIF. ENDIF. ENDFORM. " GET_VBAP *&---------------------------------------------------------------------* *& Form GET_TOKUTYU_DATA *&---------------------------------------------------------------------* * 「特注情報」変更情報取得 *----------------------------------------------------------------------* FORM GET_TOKUTYU_DATA. DATA: LTD_ZGCMT0503 TYPE TABLE OF ZGCMT0503, LTH_ZGCMT0503 TYPE ZGCMT0503. DATA: LTD_VBAP TYPE TABLE OF VBAP, LTH_VBAP TYPE VBAP. DATA: LW_TMP(50) TYPE C, LW_TMP2(10) TYPE C, LW_TMP3(10) TYPE C, LW_DENPYO TYPE EKKO-EBELN, LW_TYPE(1) TYPE C, LW_ETENR TYPE VBEP-ETENR. REFRESH: LTD_VBAP. CLEAR: LTH_VBAP. IF ( TD_ZGCMT0001_02[] IS INITIAL ). ** 汎用コードレコードが存在しない場合、表示対象外 ELSE. SELECT * INTO TABLE LTD_VBAP FROM VBAP WHERE VBELN = TH_VBA2-VBELN. LOOP AT LTD_VBAP INTO LTH_VBAP. SELECT * INTO TABLE LTD_ZGCMT0503 FROM ZGCMT0503 WHERE VBELN = LTH_VBAP-VBELN AND POSNR = LTH_VBAP-POSNR AND UP_DATUM IN S_UPDAY. IF SY-SUBRC = 0. CLEAR: LTH_ZGCMT0503. LOOP AT LTD_ZGCMT0503 INTO LTH_ZGCMT0503. IF ( LTH_ZGCMT0503-IN_DATUM <> LTH_ZGCMT0503-UP_DATUM ) OR ( LTH_ZGCMT0503-IN_UZEIT <> LTH_ZGCMT0503-UP_UZEIT ). CLEAR: TH_DISP. MOVE-CORRESPONDING TH_VBA2 TO TH_DISP. CLEAR: TH_ZGCMT0001_02. READ TABLE TD_ZGCMT0001_02 INTO TH_ZGCMT0001_02 INDEX 1. TH_DISP-FNAME = TH_ZGCMT0001_02-TEXT02. "*項目名'SPECIAL1' IF ( TH_ZGCMT0001_02-TEXT04 IS INITIAL ). TH_DISP-FNAME_TXT = TH_ZGCMT0001_02-TEXT02. ELSE. TH_DISP-FNAME_TXT = TH_ZGCMT0001_02-TEXT04. "変更項目(TEXT) ENDIF. CASE TH_ZGCMT0001_02-TEXT02. WHEN 'SPECIAL1'. TH_DISP-VALUE_NEW = LTH_ZGCMT0503-SPECIAL1. "特殊指定項目1 WHEN 'SPECIAL2'. TH_DISP-VALUE_NEW = LTH_ZGCMT0503-SPECIAL2. "特殊指定項目2 WHEN 'INTKEY'. TH_DISP-VALUE_NEW = LTH_ZGCMT0503-INTKEY. "社内キーNo指示 WHEN 'CUSKEY'. TH_DISP-VALUE_NEW = LTH_ZGCMT0503-CUSKEY. "得意先キーNo ENDCASE. TH_DISP-UDATE = LTH_ZGCMT0503-UP_DATUM. "更新日 TH_DISP-UTIME = LTH_ZGCMT0503-UP_UZEIT. "更新時間 TH_DISP-USERNAME = LTH_ZGCMT0503-UP_UNAME. "変更者 TH_DISP-TCODE = LTH_ZGCMT0503-UP_PROG. "変更PGM * TH_DISP-SPECIAL2 = LTH_ZGCMT0503-SPECIAL2. "業者 TH_DISP-ZCHGTXT = TEXT-T03. "'更新'. TH_DISP-POSNR = LTH_VBAP-POSNR. "明細 TH_DISP-MATNR = LTH_VBAP-MATNR. "品目 TH_DISP-ARKTX = LTH_VBAP-ARKTX. "受注明細のテキスト (短) TH_DISP-KWMENG = LTH_VBAP-KWMENG. "累積受注数量 (販売単位) TH_DISP-VRKME = LTH_VBAP-VRKME. "販売単位 TH_DISP-WERKS = LTH_VBAP-WERKS. "*プラント PERFORM GET_VBEP USING LTH_VBAP-VBELN LTH_VBAP-POSNR LW_ETENR "納入日程行 CHANGING TH_DISP-VDATU. "指定納入日(明細) PERFORM GET_MARC USING TH_DISP-MATNR TH_DISP-WERKS CHANGING TH_DISP-DISPO. "MRP管理者 CLEAR: LW_TMP, LW_TMP2, LW_TMP3. PERFORM GET_ZGCMT50X USING '2' "ZGCMT0504の検索のみ行う TH_DISP-VBELN TH_DISP-POSNR TH_DISP-VKORG CHANGING LW_TMP "*業者 TH_DISP-PLNUM "計画手配 TH_DISP-AUFNR "製造指図番号 TH_DISP-BANFN "購買依頼番号 TH_DISP-EBELN. "購買発注番号 CLEAR: LW_DENPYO, LW_TYPE. IF NOT ( TH_DISP-EBELN IS INITIAL ). LW_DENPYO = TH_DISP-EBELN. LW_TYPE = 'E'. ELSEIF NOT ( TH_DISP-BANFN IS INITIAL ). LW_DENPYO = TH_DISP-BANFN. LW_TYPE = 'B'. ELSE. ENDIF. IF NOT ( LW_DENPYO IS INITIAL ). PERFORM GET_LFA1 USING LW_DENPYO "各種伝票番号 LW_TYPE "伝票種類( B(依頼)、E(発注) ) CHANGING TH_DISP-LIFNR "仕入先 TH_DISP-NAME1. "名称1(仕入先名称) ENDIF. APPEND TH_DISP TO TD_DISP. ENDIF. ENDLOOP. ENDIF. ENDLOOP. ENDIF. ENDFORM. " GET_TOKUTYU_DATA