*&---------------------------------------------------------*
*& Report SingerJulie
*&
*&---------------------------------------------------------*
*&
*& ALVについて完全なノート
*&
*&---------------------------------------------------------*
REPORT Y_ALV_34114
NO STANDARD PAGE HEADING.
TABLES: VBRK. "データベースを参考します
TYPE-POOLS:SLIS. "データ型グループを参考します
TYPE-POOLS:TRUXS.
*&---------------------------------------------------------*
*& タイプグループを創設します
*&---------------------------------------------------------*
TYPES:BEGIN OF TYP_DATA. "ALV用タイプグループ
TYPES BOX TYPE C LENGTH 1. "行の選中
INCLUDE STRUCTURE YSTRU_ALV_1122_0707. "出力用構造
TYPES COLOR TYPE C LENGTH 4. "行の色
TYPES CLR TYPE LVC_T_SCOL. "セルの色
TYPES:END OF TYP_DATA.
TYPES:
BEGIN OF TYP_VBRK,
VKORG TYPE VBRK-VKORG, "売組
FKDAT TYPE VBRK-FKDAT, "請求索引および印刷に対します請求日
VBELN TYPE VBRK-VBELN, "会計年度
END OF TYP_VBRK.
TYPES:
BEGIN OF TYP_VBRP,
VBELN TYPE VBRP-VBELN, "請求伝票
POSNR TYPE VBRP-POSNR, "請求明細
FKIMG TYPE VBRP-FKIMG, "在庫単位による請求数量
MEINS TYPE VBRP-MEINS, "基本数量単位
NETWR TYPE VBRP-NETWR, "伝票通貨での請求明細の正味額
END OF TYP_VBRP.
*&---------------------------------------------------------*
*& 内部テーブルとワークエリアを創設します
*&---------------------------------------------------------*
DATA:
GIT_VBRK TYPE STANDARD TABLE OF TYP_VBRK, "FOR ALL ENTRIES用内部テーブル
GIT_VBRP TYPE STANDARD TABLE OF TYP_VBRP, "FOR ALL ENTRIES用内部テーブル
GIT_DATA TYPE STANDARD TABLE OF TYP_DATA,
GW_VBRK TYPE TYP_VBRK, "FOR ALL ENTRIES用ワークエリア
GW_VBRP TYPE TYP_VBRP, "FOR ALL ENTRIES用ワークエリア
GW_DATA TYPE TYP_DATA.
DATA:
GIT_FIELDCAT TYPE slis_t_fieldcat_alv, "FIELDCAT用内部テーブル
GW_FIELDCAT TYPE slis_fieldcat_alv, "FIELDCAT用ワークエリア
GIT_SORT TYPE slis_t_sortinfo_alv, "SORT用内部テーブル
GW_SORT TYPE slis_sortinfo_alv, "SORT用ワークエリア
GW_LAYOUT TYPE slis_layout_alv. "LAYOUT用ワークエリア
DATA:
GIT_ULDATA TYPE TABLE OF YSTRU_ALV_1123_0712, "アップデート出力用内部テーブル
GW_ULDATA TYPE YSTRU_ALV_1123_0712, "アップデート出力用ワークエリア
GIT_UL_DBT TYPE STANDARD TABLE OF YALV_1123, "DBTを更新するための内部テーブル
GW_UL_DBT TYPE YALV_1123. "DBTを更新するためのワークエリア
*&---------------------------------------------------------*
*& 選択画面を創設します
*&---------------------------------------------------------*
PARAMETERS:
P_DL RADIOBUTTON GROUP G1 USER-COMMAND UCOM1 DEFAULT 'X', "ダウンロード
P_UL RADIOBUTTON GROUP G1 . "アップロード
SELECTION-SCREEN SKIP.
PARAMETERS:
P_TXT RADIOBUTTON GROUP G3 MODIF ID M4 "TEXT でアップロードします
USER-COMMAND UCOM3 DEFAULT 'X',
P_XLS RADIOBUTTON GROUP G3 MODIF ID M4, "EXCELでアップロードします
P_SERVER RADIOBUTTON GROUP G3 MODIF ID M4. "サーバにアップロードします
SELECTION-SCREEN SKIP.
PARAMETERS:
P_FILE TYPE FILEPATH-PATHINTERN MODIF ID M3, "論理パス名
P_NAME TYPE STRING MODIF ID M3 "ファイル名
DEFAULT 'SERVER_UPLOAD_34114.TXT',
P_FIL_L TYPE STRING MODIF ID M3, "ローカルパス名
P_VKORG TYPE VBRK-VKORG MODIF ID M2. "売組
SELECT-OPTIONS:
S_FKDAT FOR VBRK-FKDAT NO-EXTENSION MODIF ID M2. "請求索引および印刷に対します請求日
SELECTION-SCREEN SKIP.
PARAMETERS:
P_FLDC1 RADIOBUTTON GROUP G2 MODIF ID M1 DEFAULT 'X' "手動でFIELDCATを編集します
USER-COMMAND UCOM2,
P_SE11 RADIOBUTTON GROUP G2 MODIF ID M1, "直接にSE11構造を使用します
P_FLDC2 RADIOBUTTON GROUP G2 MODIF ID M1. "構造によってFIELDCAT内部テーブルを編集します
*&---------------------------------------------------------*
*& 主処理事件
*&---------------------------------------------------------*
INITIALIZATION.
PERFORM F_INITIAL. "初期化事件
AT SELECTION-SCREEN OUTPUT.
PERFORM F_SCREEN_MOD. "スクリーン属性制御事件
AT SELECTION-SCREEN.
PERFORM F_SCREEN_CHECK. "スクリーンチェック事件
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FIL_L.
PERFORM F_F4HELP_FOR_PATH.
START-OF-SELECTION.
PERFORM F_GET_DATA. "データを取得します
PERFORM F_EDIT_DATA. "データを編集します
PERFORM F_OUTPUT. "データを出力します
PERFORM F_TOP_OF_PAGE.
*&---------------------------------------------------------*
*& Form F_INITIAL
*&---------------------------------------------------------*
* 初期化事件
*----------------------------------------------------------*
FORM F_INITIAL .
P_VKORG = '5000'. "売組の初期値
S_FKDAT-SIGN = 'I'.
S_FKDAT-OPTION = 'EQ'.
S_FKDAT-LOW = '20170601'. "請求日の最大値
S_FKDAT-HIGH = '20170730'. "請求日の最小値
APPEND S_FKDAT TO S_FKDAT.
CLEAR:
GIT_VBRK, "内部テーブルをクリアします
GIT_VBRP,
GIT_DATA,
GW_VBRK, "ワークエリアをクリアします
GW_VBRP,
GW_DATA.
ENDFORM. " F_INITIAL
*&---------------------------------------------------------*
*& Form F_SCREEN_CHECK
*&---------------------------------------------------------*
* スクリーンチェック事件
*----------------------------------------------------------*
FORM F_SCREEN_CHECK .
CHECK SY-UCOMM = '' "F8
OR SY-UCOMM = 'ONLI'. "ENTER
IF S_FKDAT = SPACE. "請求日 = SPACE
MESSAGE E001(Y_MESSAGE_34114) WITH TEXT-009. "相応の値を入力してください。
ELSEIF P_SERVER = 'X' "アップロード
AND P_UL = 'X' "サーバにアップロードします
.
IF P_FILE = SPACE. "論理パス名 = SPACE
MESSAGE E001(Y_MESSAGE_34114) WITH TEXT-033. "論理パス名を入力してください。
* DISPLAY LIKE 'E'.
* LEAVE LIST-PROCESSING .
* ELSEIF P_NAME = SPACE. "ファイル名 = SPACE
* MESSAGE S001(Y_MESSAGE_34114) WITH TEXT-034 "ファイル名を入力してください。
* DISPLAY LIKE 'E'.
* LEAVE LIST-PROCESSING .
ENDIF.
ENDIF.
ENDFORM. " F_SCREEN_CHECK
*&---------------------------------------------------------*
*& Form F_SCREEN_MOD
*&---------------------------------------------------------*
* スクリーン属性制御事件
*----------------------------------------------------------*
FORM F_SCREEN_MOD .
LOOP AT SCREEN.
IF P_DL = 'X'. "ダウンロード
IF SCREEN-GROUP1 = 'M3' "アップロードファイル
OR SCREEN-GROUP1 = 'M4' "TXT ELS SERVER
.
SCREEN-ACTIVE = 0. "現れません
MODIFY SCREEN. "スクリーンを刷新します
ENDIF.
ELSEIF P_UL = 'X'
AND P_SERVER = SPACE. "アップロード
IF SCREEN-GROUP1 = 'M1' "手動 直接SE11 直接+FIELDCAT
OR SCREEN-GROUP1 = 'M2' "売組 請求日
OR SCREEN-GROUP1 = 'M3' "アップロードファイル
.
SCREEN-ACTIVE = 0. "現れません
MODIFY SCREEN. "スクリーンを刷新します
ENDIF.
ELSEIF P_UL = 'X' "アップロード
AND P_SERVER = 'X'. "サーバにアップロードします
IF SCREEN-GROUP1 = 'M1' "手動 直接SE11 直接+FIELDCAT
OR SCREEN-GROUP1 = 'M2' "売組 請求日
.
SCREEN-ACTIVE = 0. "現れません
MODIFY SCREEN. "スクリーンを刷新します
ENDIF.
IF SCREEN-NAME = 'P_FILE' "論理パス名
OR SCREEN-NAME = 'P_FIL_L'. "ローカルパス名
SCREEN-REQUIRED = 2. "仮入力しなちゃ
MODIFY SCREEN. "スクリーンを刷新します
ENDIF.
* ELSE.
*
* IF SCREEN-GROUP1 = 'M5' "ダウンロードパスと名
* OR SCREEN-GROUP1 = 'M8' "TEXT でアップロードします
* OR SCREEN-GROUP1 = 'M9' "EXCELでアップロードします
* .
*
* SCREEN-ACTIVE = 1. "現れます
* MODIFY SCREEN. "スクリーンを刷新します
*
* ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " F_SCREEN_MOD
*&---------------------------------------------------------*
*& Form F_GET_DATA
*&---------------------------------------------------------*
* データを取得します
*----------------------------------------------------------*
FORM F_GET_DATA
. "一番目のデータベースのデータ
SELECT VKORG "売組
FKDAT "請求日
VBELN "請求伝票
FROM VBRK
INTO TABLE GIT_VBRK
WHERE VKORG = P_VKORG "売組
AND FKDAT IN S_FKDAT "請求日
.
SORT GIT_VBRK BY VBELN ASCENDING. "ソートします
DELETE ADJACENT DUPLICATES FROM GIT_VBRK "重複項目を削除します
COMPARING VBELN.
IF GIT_VBRK IS NOT INITIAL
. "二番目のデータベースのデータ
SELECT VBELN "請求伝票
POSNR "請求明細
FKIMG "請求数量
MEINS "基本数量単位
NETWR "正味額
FROM VBRP
INTO TABLE GIT_VBRP
FOR ALL ENTRIES IN GIT_VBRK
WHERE VBELN = GIT_VBRK-VBELN "請求伝票
.
ENDIF.
ENDFORM. " F_GET_DATA
*&---------------------------------------------------------*
*& Form F_EDIT_DATA
*&---------------------------------------------------------*
* データを編集します
*----------------------------------------------------------*
FORM F_EDIT_DATA .
SORT GIT_VBRP BY VBELN ASCENDING. "ソートします
LOOP AT GIT_VBRK INTO GW_VBRK
. "データを総ワークエリアに値を賦与します
GW_DATA-VKORG = GW_VBRK-VKORG. "売組
GW_DATA-FKDAT = GW_VBRK-FKDAT. "請求日
GW_DATA-VBELN = GW_VBRK-VBELN. "請求伝票
IF SY-SUBRC = 0.
READ TABLE GIT_VBRP INTO GW_VBRP "二分検索
WITH KEY VBELN = GW_VBRK-VBELN
BINARY SEARCH
. "データを総ワークエリアに値を賦与します
GW_DATA-VBELN = GW_VBRP-VBELN. "請求伝票
GW_DATA-POSNR = GW_VBRP-POSNR. "請求明細
GW_DATA-FKIMG = GW_VBRP-FKIMG. "請求数量
GW_DATA-MEINS = GW_VBRP-MEINS. "基本数量単位
GW_DATA-NETWR = GW_VBRP-NETWR. "正味額
ENDIF.
APPEND GW_DATA TO GIT_DATA. "データを総内部テーブルに値を賦与します
ENDLOOP.
ENDFORM. " F_EDIT_DATA
*&---------------------------------------------------------*
*& Form F_OUTPUT
*&---------------------------------------------------------*
* データを出力します
*----------------------------------------------------------*
FORM F_OUTPUT .
IF P_UL = 'X'.
CASE 'X'.
WHEN P_TXT.
PERFORM F_UPLOAD_TXT. "TEXTでアップロードします
WHEN P_XLS.
PERFORM F_UPLOAD_XLS. "XLSでアップロードします
WHEN P_SERVER.
PERFORM F_UPLOAD_SERVER. "サーバにアップロードします
ENDCASE.
ELSE.
CASE 'X'.
WHEN P_FLDC1. "手動でFIELDCATを編集します
PERFORM F_ALV_FIELDCAT.
WHEN P_SE11. "直接にSE11構造を使用します
PERFORM F_ALV_SE11.
WHEN P_FLDC2. "構造によってFIELDCAT内部テーブルを編集します
PERFORM F_ALV_FIELDCAT2.
ENDCASE.
ENDIF.
ENDFORM. " F_OUTPUT
*&---------------------------------------------------------*
*& Form F_ALV_FIELDCAT
*&---------------------------------------------------------*
* 手動でFIELDCATを編集します
*----------------------------------------------------------*
FORM F_ALV_FIELDCAT .
PERFORM F_EDIT_DISPLAY.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'F_STATUS'
I_CALLBACK_USER_COMMAND = 'F_COMMAND'
I_CALLBACK_TOP_OF_PAGE = 'F_TOP_OF_PAGE'
IS_LAYOUT = GW_LAYOUT
IT_FIELDCAT = GIT_FIELDCAT
IT_SORT = GIT_SORT
I_GRID_TITLE = TEXT-010
I_SAVE = 'A'
TABLES
T_OUTTAB = GIT_DATA
EXCEPTIONS
PROGRAM_ERROR = 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. " F_ALV_FIELDCAT
*&---------------------------------------------------------*
*& Form F_ALV_SE11
*&---------------------------------------------------------*
* 直接にSE11構造を使用します
*----------------------------------------------------------*
FORM F_ALV_SE11 .
PERFORM F_EDIT_DISPLAY.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'F_STATUS'
I_CALLBACK_USER_COMMAND = 'F_COMMAND'
I_CALLBACK_TOP_OF_PAGE = 'F_TOP_OF_PAGE'
I_STRUCTURE_NAME = 'YSTRU_ALV_1122_0707'
IS_LAYOUT = GW_LAYOUT
IT_FIELDCAT = GIT_FIELDCAT
IT_SORT = GIT_SORT
I_GRID_TITLE = TEXT-010
TABLES
T_OUTTAB = GIT_DATA
EXCEPTIONS
PROGRAM_ERROR = 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. " F_ALV_SE11
*&---------------------------------------------------------*
*& Form F_ALV_FIELDCAT2
*&---------------------------------------------------------*
* 構造によってFIELDCAT内部テーブルを編集します
*----------------------------------------------------------*
FORM F_ALV_FIELDCAT2 .
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = SY-REPID
* I_INTERNAL_TABNAME =
I_STRUCTURE_NAME = 'YSTRU_ALV_1122_0707'
CHANGING
CT_FIELDCAT = GIT_FIELDCAT
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 F_EDIT_DISPLAY.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'F_STATUS'
I_CALLBACK_USER_COMMAND = 'F_COMMAND'
I_CALLBACK_TOP_OF_PAGE = 'F_TOP_OF_PAGE'
I_STRUCTURE_NAME = 'YSTRU_ALV_1122_0707'
IS_LAYOUT = GW_LAYOUT
IT_FIELDCAT = GIT_FIELDCAT
IT_SORT = GIT_SORT
I_GRID_TITLE = TEXT-010
TABLES
T_OUTTAB = GIT_DATA
EXCEPTIONS
PROGRAM_ERROR = 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. " F_ALV_FIELDCAT2
*&---------------------------------------------------------*
*& Form F_EDIT_DISPLAY
*&---------------------------------------------------------*
* FIELDCATALOG LAYOUT SORT を編集します
*----------------------------------------------------------*
FORM F_EDIT_DISPLAY .
DATA:
LW_CLR TYPE LVC_S_SCOL. "セルの色
GW_LAYOUT-ZEBRA = 'X'. "ゼブラのような線
GW_LAYOUT-colwidth_optimize = 'X'. "列の最適化
GW_LAYOUT-box_fieldname = 'BOX'. "行の戦中のボタン
GW_LAYOUT-info_fieldname = 'COLOR'. "行の色
GW_LAYOUT-coltab_fieldname = 'CLR'. "セルの色
GW_SORT-FIELDNAME = 'FKDAT'. "請求日
GW_SORT-UP = 1. "昇順
GW_SORT-subtot = 'X'.
APPEND GW_SORT TO GIT_SORT.
CLEAR GW_SORT.
GW_SORT-FIELDNAME = 'FKIMG'. "請求数量
GW_SORT-UP = 1. "昇順
APPEND GW_SORT TO GIT_SORT.
CLEAR GW_SORT.
IF P_FLDC1 = 'X'. "手動でFIELDCATを編集します
PERFORM F_FIELDCAT_1.
ELSEIF P_FLDC2 = 'X' OR P_SE11 = 'X'. "構造によってFIELDCAT内部テーブルを編集します
PERFORM F_FIELDCAT_2.
ENDIF.
LOOP AT GIT_DATA INTO GW_DATA.
IF GW_DATA-NETWR = 0. "正味額はゼロの場合
LW_CLR-FNAME = 'NETWR'. "正味額
LW_CLR-COLOR-COL = 5. "色の番号 (1-7)
LW_CLR-COLOR-INT = 1. "色が濃くなります (0,1)
LW_CLR-COLOR-INV = 0. "バックグラウンド (0,1)
APPEND LW_CLR TO GW_DATA-CLR.
CLEAR LW_CLR.
ENDIF.
MODIFY GIT_DATA FROM GW_DATA.
ENDLOOP.
ENDFORM. " F_EDIT_DISPLAY
*&---------------------------------------------------------*
*& Form F_FIELDCAT_1
*&---------------------------------------------------------*
* 手動でFIELDCATを編集します
*----------------------------------------------------------*
FORM F_FIELDCAT_1 .
GW_FIELDCAT-FIELDNAME = 'VKORG'. "売組
GW_FIELDCAT-seltext_l = TEXT-001.
GW_FIELDCAT-KEY = 'X'. "KEYの様子で表示します
APPEND GW_FIELDCAT TO GIT_FIELDCAT.
CLEAR GW_FIELDCAT.
GW_FIELDCAT-FIELDNAME = 'FKDAT'. "請求日
GW_FIELDCAT-seltext_l = TEXT-002.
GW_FIELDCAT-KEY = 'X'. "KEYの様子で表示します
GW_FIELDCAT-JUST = 'L'. "左揃えで表示します
APPEND GW_FIELDCAT TO GIT_FIELDCAT.
CLEAR GW_FIELDCAT.
GW_FIELDCAT-FIELDNAME = 'GJAHR'. "会計年度
GW_FIELDCAT-seltext_l = TEXT-003.
IF GW_DATA-GJAHR IS INITIAL. "会計年度はスペースの場合
GW_FIELDCAT-EMPHASIZE = 'C300'. "黄色で列を表示します
ENDIF.
APPEND GW_FIELDCAT TO GIT_FIELDCAT.
CLEAR GW_FIELDCAT.
GW_FIELDCAT-FIELDNAME = 'VBELN'. "請求伝票
GW_FIELDCAT-seltext_l = TEXT-004.
APPEND GW_FIELDCAT TO GIT_FIELDCAT.
CLEAR GW_FIELDCAT.
GW_FIELDCAT-FIELDNAME = 'POSNR'. "請求明細
GW_FIELDCAT-seltext_l = TEXT-005.
APPEND GW_FIELDCAT TO GIT_FIELDCAT.
CLEAR GW_FIELDCAT.
GW_FIELDCAT-FIELDNAME = 'FKIMG'. "請求数量
GW_FIELDCAT-seltext_l = TEXT-006.
GW_FIELDCAT-DO_SUM = 1. "合計
APPEND GW_FIELDCAT TO GIT_FIELDCAT.
CLEAR GW_FIELDCAT.
GW_FIELDCAT-FIELDNAME = 'MEINS'. "基本数量単位
GW_FIELDCAT-seltext_l = TEXT-007.
APPEND GW_FIELDCAT TO GIT_FIELDCAT.
CLEAR GW_FIELDCAT.
GW_FIELDCAT-FIELDNAME = 'NETWR'. "正味額
GW_FIELDCAT-seltext_l = TEXT-008.
GW_FIELDCAT-DO_SUM = 1. "合計
APPEND GW_FIELDCAT TO GIT_FIELDCAT.
CLEAR GW_FIELDCAT.
GW_FIELDCAT-FIELDNAME = 'COMMENT1'. "付注
GW_FIELDCAT-seltext_l = TEXT-015.
GW_FIELDCAT-outputlen = 20.
GW_FIELDCAT-EDIT = 'X'. "編集できます
APPEND GW_FIELDCAT TO GIT_FIELDCAT.
CLEAR GW_FIELDCAT.
LOOP AT GIT_DATA INTO GW_DATA.
IF GW_DATA-FKIMG >= 1000. "請求数量>=1000の場合
GW_DATA-COLOR = 'C610'. "赤色で行を表示します
MODIFY GIT_DATA FROM GW_DATA.
ELSEIF GW_DATA-FKIMG >= 100. "請求数量>=100の場合
GW_DATA-COLOR = 'C600'. "赤色で字を表示します
MODIFY GIT_DATA FROM GW_DATA.
ENDIF.
ENDLOOP.
ENDFORM. " F_FIELDCAT_1
*&---------------------------------------------------------*
*& Form F_FIELDCAT_2
*&---------------------------------------------------------*
* 構造によってFIELDCAT内部テーブルを編集します
*----------------------------------------------------------*
FORM F_FIELDCAT_2 .
LOOP AT GIT_DATA INTO GW_DATA.
IF GW_DATA-FKIMG >= 1000. "請求数量>=1000の場合
GW_DATA-COLOR = 'C610'. "赤色で行を表示します
MODIFY GIT_DATA FROM GW_DATA.
ELSEIF GW_DATA-FKIMG >= 100. "請求数量>=100の場合
GW_DATA-COLOR = 'C600'. "赤色で字を表示します
MODIFY GIT_DATA FROM GW_DATA.
ENDIF.
ENDLOOP.
LOOP AT GIT_FIELDCAT INTO GW_FIELDCAT.
IF GW_FIELDCAT-FIELDNAME = 'FKDAT'. "売組
GW_FIELDCAT-KEY = 'X'. "KEYの様子で表示します
ELSEIF GW_FIELDCAT-FIELDNAME = 'VKORG'. "請求日
GW_FIELDCAT-KEY = 'X'. "KEYの様子で表示します
READ TABLE GIT_DATA INTO GW_DATA
WITH KEY GW_DATA-GJAHR.
ELSEIF GW_FIELDCAT-FIELDNAME = 'GJAHR' "会計年度
AND GW_DATA-GJAHR = SPACE. "会計年度はスペースの場合
GW_FIELDCAT-EMPHASIZE = 'C300'. "黄色で列を表示します
ELSEIF GW_FIELDCAT-FIELDNAME = 'FKIMG'. "請求数量
GW_FIELDCAT-DO_SUM = '1'. "合計します
ELSEIF GW_FIELDCAT-FIELDNAME = 'NETWR'. "正味額
GW_FIELDCAT-DO_SUM = '1'. "合計します
ELSEIF GW_FIELDCAT-FIELDNAME = 'COMMENT1'. "付注
GW_FIELDCAT-EDIT = 'X'. "編集できます
ENDIF.
MODIFY GIT_FIELDCAT FROM GW_FIELDCAT. "FIRLDCAT内部テーブルを変更します
ENDLOOP.
ENDFORM. " F_FIELDCAT_2
*&---------------------------------------------------------*
*& Form F_STATUS
*&---------------------------------------------------------*
* ALV STATUS を編集します
*----------------------------------------------------------*
FORM F_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'STANDARD_34114' EXCLUDING RT_EXTAB. "機能ボタン
ENDFORM. "F_STATUS
*&---------------------------------------------------------*
*& Form F_COMMAND
*&---------------------------------------------------------*
* ALV USER-COMMAND を編集します
*----------------------------------------------------------*
FORM F_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD
. "更新した後のデータを内部テーブルに更新します
DATA: LV_GRID TYPE REF TO CL_GUI_ALV_GRID,
LV_VALID TYPE C.
* READ TABLE LIT_DOWNLOAD INDEX rs_selfield-tabindex. "変更した内容を内部テーブルに更新します
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = LV_GRID.
CALL METHOD LV_GRID->CHECK_CHANGED_DATA
IMPORTING
E_VALID = LV_VALID.
CASE R_UCOMM. "ボタンの USER COMMAND
WHEN 'SHDB'.
MESSAGE S003(Y_MESSAGE_34114) WITH 'SHDB'. "SHDBを呼び出します
WHEN 'BAPI'.
MESSAGE S003(Y_MESSAGE_34114) WITH 'BAPI'. "BAPIを呼び出します
WHEN 'BDC'.
MESSAGE S003(Y_MESSAGE_34114) WITH 'BDC'. "BDCを呼び出します
WHEN '&IC1'. "ダブルクリック事件
R_UCOMM = '&ETA'. "行の詳しい情報
* MESSAGE S004(Y_MESSAGE_34114) "第n行をクリックしました。
* WITH RS_SELFIELD-TABINDEX. "行数
READ TABLE GIT_DATA INTO GW_DATA "行のあるFIELD情報が必要の場合
INDEX RS_SELFIELD-TABINDEX. "行数
IF SY-SUBRC = 0.
MESSAGE S004(Y_MESSAGE_34114) "第n行をクリックしました。
WITH RS_SELFIELD-TABINDEX "行数
GW_DATA-FKDAT "請求日
TEXT-011 "「数量:」
GW_DATA-FKIMG "請求数量
.
ENDIF.
WHEN 'DOWNLOAD'.
PERFORM F_DOWNLOAD. "ダウンロード
ENDCASE.
ENDFORM. "F_COMMAND
*&---------------------------------------------------------*
*& Form F_TOP_OF_PAGE
*&---------------------------------------------------------*
* TOP_OF_PAGE を編集します
*----------------------------------------------------------*
FORM F_TOP_OF_PAGE .
DATA:
LIT_HEADER TYPE slis_t_listheader, "HEADER用内部テーブル
LW_HEADER TYPE slis_listheader. "HEADER用ワークエリア
CLEAR LIT_HEADER.
LW_HEADER-TYP = 'H'. "ヘッダー
LW_HEADER-INFO = TEXT-012. "ヘッダー
APPEND LW_HEADER TO LIT_HEADER.
CLEAR LW_HEADER.
LW_HEADER-TYP = 'S'. "セレクション
LW_HEADER-INFO = TEXT-013. "セレクション
APPEND LW_HEADER TO LIT_HEADER.
CLEAR LW_HEADER.
LW_HEADER-TYP = 'A'. "アクション
LW_HEADER-INFO = TEXT-014. "アクション
APPEND LW_HEADER TO LIT_HEADER.
CLEAR LW_HEADER.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = LIT_HEADER
* I_LOGO =
* I_END_OF_LIST_GRID =
* I_ALV_FORM =
.
ENDFORM. " F_TOP_OF_PAGE
*&---------------------------------------------------------*
*& Form F_DOWNLOAD
*&---------------------------------------------------------*
* ダウンロード
*----------------------------------------------------------*
FORM F_DOWNLOAD .
DATA:
LIT_DOWNLOAD TYPE TABLE OF YSTRU_ALV_1123_0712, "ダウンロード用内部テーブル
LW_DOWNLOAD TYPE YSTRU_ALV_1123_0712. "ダウンロード用ワークエリア
* DATA:
* LV_FILE TYPE STRING. "ファイルパスと名
*
* LV_FILE = P_FILE_U. "C:\Users\handhand\Desktop\DL\DL.TXT
DATA:
LV_FILENAME TYPE STRING, "ファイル名
LV_PATH TYPE STRING, "ファイルパス
LV_FULLPATH TYPE STRING. "ファイルパスと名(POPUP)
LOOP AT GIT_DATA INTO GW_DATA WHERE BOX = 'X'. "行を選択られた場合
MOVE-CORRESPONDING GW_DATA TO LW_DOWNLOAD. "データを移します
WRITE GW_DATA-FKDAT TO LW_DOWNLOAD-FKDAT. "出力様式を変更します
APPEND LW_DOWNLOAD TO LIT_DOWNLOAD.
CLEAR LW_DOWNLOAD.
ENDLOOP.
LW_DOWNLOAD-VKORG = TEXT-016. "販売組織
LW_DOWNLOAD-FKDAT = TEXT-017. "請求日
LW_DOWNLOAD-GJAHR = TEXT-018. "会計年度
LW_DOWNLOAD-VBELN = TEXT-019. "販売伝票番号
LW_DOWNLOAD-POSNR = TEXT-020. "明細番号
LW_DOWNLOAD-FKIMG = TEXT-021. "請求済数量
LW_DOWNLOAD-MEINS = TEXT-022. "基本数量単位
LW_DOWNLOAD-NETWR = TEXT-023. "正味額
LW_DOWNLOAD-COMMENT1 = TEXT-024. "付注テキスト
INSERT LW_DOWNLOAD INTO LIT_DOWNLOAD INDEX 1. "ヘッダーを作ります
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG "ポップアップ
EXPORTING
WINDOW_TITLE = 'ポップアップタイトル' "標題
DEFAULT_EXTENSION = 'TXT' "黙認格式
DEFAULT_FILE_NAME = 'DOWNLOAD' "黙認名
* WITH_ENCODING = "
* FILE_FILTER = "
INITIAL_DIRECTORY = 'C:\Users\handhand\Desktop\DL' "黙認パス
* PROMPT_ON_OVERWRITE = 'X' "
CHANGING
FILENAME = LV_FILENAME "ファイル名
PATH = LV_PATH "ファイルパス
FULLPATH = LV_FULLPATH "ファイルパスと名(POPUP)
* USER_ACTION =
* FILE_ENCODING =
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 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.
CALL FUNCTION 'GUI_DOWNLOAD' "ダウンロード
EXPORTING
* FILENAME = LV_FILE "ファイルパスと名(選択画面)
FILENAME = LV_FULLPATH "ファイルパスと名(POPUP)
FILETYPE = 'ASC' "ファイルタイプ (ASCテキスト/BINバイト)
* APPEND = 'X' "追加します (X/SPACE)
WRITE_FIELD_SEPARATOR = 'X' "TABでフィールド間で分割します
TRUNC_TRAILING_BLANKS = 'X' "フィールドの後ろのスペースを消します
* CODEPAGE = ' ' "言語の種類によって番号は違います
* IMPORTING
* FILELENGTH = "フィールドの長さ
TABLES
DATA_TAB = LIT_DOWNLOAD "出力するための内部テーブル
* FIELDNAMES = "フィールド名
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
OTHERS = 22
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
REFRESH LIT_DOWNLOAD.
ENDFORM. " F_DOWNLOAD
*&---------------------------------------------------------*
*& Form F_UPLOAD_TXT
*&---------------------------------------------------------*
* TEXTでアップロードします
*----------------------------------------------------------*
FORM F_UPLOAD_TXT .
DATA:
LIT_FILE TYPE FILETABLE, "パス用内部テーブル
LW_FILE TYPE FILE_TABLE, "パス用ワークエリア
LV_PATH TYPE STRING, "ファイルパス
LV_RC TYPE I. "RC
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG "アップロードパスを取得します
CHANGING
FILE_TABLE = LIT_FILE "ファイルパスと名
RC = LV_RC "RC
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
NOT_SUPPORTED_BY_GUI = 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.
ELSE.
READ TABLE LIT_FILE INTO LW_FILE INDEX 1. "パスを取得します
IF SY-SUBRC = 0.
LV_PATH = LW_FILE-FILENAME. "ファイルパス
ENDIF.
ENDIF.
CALL FUNCTION 'GUI_UPLOAD' "アップロードします
EXPORTING
FILENAME = LV_PATH "ファイルパス
FILETYPE = 'ASC'
* HAS_FIELD_SEPARATOR = ' '
* HEADER_LENGTH = 0
* READ_BY_LINE = 'X'
* DAT_MODE = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* CHECK_BOM = ' '
* VIRUS_SCAN_PROFILE =
* NO_AUTH_CHECK = ' '
* IMPORTING
* FILELENGTH =
* HEADER =
TABLES
DATA_TAB = GIT_ULDATA "出力用内部テーブル
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17
.
IF SY-SUBRC <> 0.
MESSAGE S009(Y_MESSAGE_34114) WITH TEXT-027 "内部テーブルの中にデータがありません
DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ELSE.
PERFORM F_UPLOAD_DATA_EDIT.
IF GIT_UL_DBT IS NOT INITIAL.
PERFORM F_LOCK. "ロックします
INSERT YALV_1123 FROM TABLE GIT_UL_DBT "DATA BASE TABLEを更新します
ACCEPTING DUPLICATE KEYS.
IF SY-SUBRC = 0.
COMMIT WORK. "保存します
MESSAGE S005(Y_MESSAGE_34114). "成功しました
ELSE.
ROLLBACK WORK. "ロールバックします
MESSAGE S006(Y_MESSAGE_34114) WITH TEXT-029 "アップロード失敗しました
DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
PERFORM F_UNLOCK. "ロックをリリースします
ELSE.
MESSAGE S009(Y_MESSAGE_34114) WITH TEXT-028 "内部テーブルの中にデータがありません
DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDIF.
CLEAR: GW_ULDATA,
GW_UL_DBT.
PERFORM F_UPLOAD_DATA_OUTPUT.
ENDFORM. "F_UPLOAD_TXT
*&---------------------------------------------------------*
*& Form F_UPLOAD_XLS
*&---------------------------------------------------------*
* XLSでアップロードします
*----------------------------------------------------------*
FORM F_UPLOAD_XLS .
DATA:
LIT_FILE TYPE FILETABLE, "パス用内部テーブル
LW_FILE TYPE FILE_TABLE, "パス用ワークエリア
LV_PATH LIKE RLGRAP-FILENAME,
LV_RC TYPE I, "RC
LIT_RAW TYPE TRUXS_T_TEXT_DATA. "RAW
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG "アップロードパスを取得します
CHANGING
FILE_TABLE = LIT_FILE "ファイルパスと名
RC = LV_RC "RC
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
NOT_SUPPORTED_BY_GUI = 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.
ELSE.
READ TABLE LIT_FILE INTO LW_FILE INDEX 1. "パスを取得します
IF SY-SUBRC = 0.
LV_PATH = LW_FILE-FILENAME. "ファイルパス
ENDIF.
ENDIF.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP' "EXCELのみ使えるアップロード汎用モジュール
EXPORTING
I_TAB_RAW_DATA = LIT_RAW "RAW
I_FILENAME = LV_PATH "ファイルパスと名
TABLES
I_TAB_CONVERTED_DATA = GIT_ULDATA "出力用内部テーブル
EXCEPTIONS
CONVERSION_FAILED = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE S009(Y_MESSAGE_34114) WITH TEXT-027 "内部テーブルの中にデータがありません
DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ELSE.
PERFORM F_UPLOAD_DATA_EDIT.
IF GIT_UL_DBT IS NOT INITIAL.
PERFORM F_LOCK. "ロックします
INSERT YALV_1123 FROM TABLE GIT_UL_DBT "DATA BASE TABLEを更新します
ACCEPTING DUPLICATE KEYS.
IF SY-SUBRC = 0.
COMMIT WORK. "保存します
MESSAGE S005(Y_MESSAGE_34114). "成功しました
ELSE.
ROLLBACK WORK. "ロールバックします
MESSAGE S006(Y_MESSAGE_34114) WITH TEXT-029 "アップロード失敗しました
DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
PERFORM F_UNLOCK. "ロックをリリースします
ELSE.
MESSAGE S009(Y_MESSAGE_34114) WITH TEXT-028 "内部テーブルの中にデータがありません
DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDIF.
CLEAR: GW_ULDATA,
GW_UL_DBT.
PERFORM F_UPLOAD_DATA_OUTPUT.
ENDFORM. " F_UPLOAD_XLS
*&---------------------------------------------------------*
*& Form F_UPLOAD_SERVER
*&---------------------------------------------------------*
* サーバ にアップロードします
*----------------------------------------------------------*
FORM F_UPLOAD_SERVER .
CONSTANTS
CNS_TAB TYPE ABAP_CR_LF
VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF. "タブ
DATA:
LV_FILE TYPE STRING. "ファイルパスと名
CALL FUNCTION 'GUI_UPLOAD' "アップロードします
EXPORTING
FILENAME = P_FIL_L "ファイルパス
FILETYPE = 'ASC'
* HAS_FIELD_SEPARATOR = ' '
* HEADER_LENGTH = 0
* READ_BY_LINE = 'X'
* DAT_MODE = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* CHECK_BOM = ' '
* VIRUS_SCAN_PROFILE =
* NO_AUTH_CHECK = ' '
* IMPORTING
* FILELENGTH =
* HEADER =
TABLES
DATA_TAB = GIT_ULDATA "出力用内部テーブル
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* CALL FUNCTION 'FILE_GET_NAME_USING_PATH'
* EXPORTING
** CLIENT = SY-MANDT
* LOGICAL_PATH = P_FILE "ファイルパス
** OPERATING_SYSTEM = SY-OPSYS
** PARAMETER_1 = ' '
** PARAMETER_2 = ' '
** PARAMETER_3 = ' '
** USE_BUFFER = ' '
* FILE_NAME = P_NAME "ファイル名
** USE_PRESENTATION_SERVER = ' '
** ELEMINATE_BLANKS = 'X'
* IMPORTING
* FILE_NAME_WITH_PATH = LV_FILE "ファイルパスと名
* EXCEPTIONS
* PATH_NOT_FOUND = 1
* MISSING_PARAMETER = 2
* OPERATING_SYSTEM_NOT_FOUND = 3
* FILE_SYSTEM_NOT_FOUND = 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.
OPEN DATASET LV_FILE "ファイルパスと名
FOR OUTPUT "FOR OUTPUT / FOR APPENDING
IN TEXT MODE ENCODING DEFAULT "IN TEXT MODE / IN BINARY MODE
. "ユニコードプログラム用 ENCODING DEFAULT
LOOP AT GIT_ULDATA INTO GW_ULDATA.
CATCH SYSTEM-EXCEPTIONS FILE_ACCESS_ERRORS = 9.
TRANSFER GW_ULDATA TO LV_FILE.
ENDCATCH.
CASE SY-SUBRC.
WHEN 0.
MESSAGE S005(Y_MESSAGE_34114). "成功しました
WHEN 9.
MESSAGE S006(Y_MESSAGE_34114) "書き込むことが失敗しました
WITH TEXT-030 DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
WHEN OTHERS.
MESSAGE S010(Y_MESSAGE_34114) "ほかのエラーが発生しました
WITH TEXT-031 DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDCASE.
ENDLOOP.
CATCH SYSTEM-EXCEPTIONS FILE_ACCESS_ERRORS = 9.
CLOSE DATASET LV_FILE.
ENDCATCH.
CASE SY-SUBRC.
WHEN 0.
MESSAGE S005(Y_MESSAGE_34114). "成功しました
WHEN 9.
MESSAGE S006(Y_MESSAGE_34114) "クローズすることが失敗しました
WITH TEXT-032 DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
WHEN OTHERS.
MESSAGE S010(Y_MESSAGE_34114) "ほかのエラーが発生しました
WITH TEXT-031 DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDCASE.
PERFORM F_UPLOAD_DATA_EDIT.
PERFORM F_UPLOAD_DATA_OUTPUT.
ENDFORM. " F_UPLOAD_SERVER
*&---------------------------------------------------------------------*
*& Form F_F4HELP_FOR_PATH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM F_F4HELP_FOR_PATH .
DATA:
LIT_FILE TYPE FILETABLE, "パス用内部テーブル
LW_FILE TYPE FILE_TABLE, "パス用ワークエリア
LV_RC TYPE I. "RC
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG "アップロードパスを取得します
CHANGING
FILE_TABLE = LIT_FILE "ファイルパスと名
RC = LV_RC "RC
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
NOT_SUPPORTED_BY_GUI = 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.
ELSE.
READ TABLE LIT_FILE INTO LW_FILE INDEX 1. "パスを取得します
IF SY-SUBRC = 0.
P_FIL_L = LW_FILE-FILENAME. "ファイルパス
ENDIF.
ENDIF.
ENDFORM. " F_F4HELP_FOR_PATH
*&---------------------------------------------------------*
*& Form F_UPLOAD_DATA_EDIT
*&---------------------------------------------------------*
* text
*----------------------------------------------------------*
FORM F_UPLOAD_DATA_EDIT .
DATA:
LV_VKORG TYPE STRING, "売組
LV_FKDAT TYPE STRING, "請求索引および印刷に対します請求日
LV_GJAHR TYPE STRING, "会計年度
LV_VBELN TYPE STRING, "請求伝票
LV_POSNR TYPE STRING, "請求明細
LV_FKIMG TYPE STRING, "在庫単位による請求数量
LV_FKIMG_2 TYPE YALV_1123-FKIMG, "データタイプを変更します
LV_MEINS TYPE STRING, "基本数量単位
LV_NETWR TYPE STRING, "伝票通貨での請求明細の正味額
LV_NETWR_2 TYPE YALV_1123-NETWR, "データタイプを変更します
LV_COMMENT TYPE STRING, "付注
LV_FKDAT_Y TYPE STRING, "請求日 YEAR
LV_FKDAT_M TYPE STRING, "請求日 MONTH
LV_FKDAT_D TYPE STRING, "請求日 DAY
LV_FKDAT_2 TYPE STRING. "請求日 DATABASETABLE
DELETE GIT_ULDATA INDEX 1. "ヘッダーを削除します
LOOP AT GIT_ULDATA INTO GW_ULDATA. "目標内部テーブル
IF P_TXT = 'X'.
SPLIT GW_ULDATA
AT cl_abap_char_utilities=>HORIZONTAL_TAB
INTO LV_VKORG "売組
LV_FKDAT "請求索引および印刷に対します請求日
LV_GJAHR "会計年度
LV_VBELN "請求伝票
LV_POSNR "請求明細
LV_FKIMG "在庫単位による請求数量
LV_MEINS "基本数量単位
LV_NETWR "伝票通貨での請求明細の正味額
LV_COMMENT. "付注
CONDENSE LV_VKORG. "売組
CONDENSE LV_FKDAT. "請求索引および印刷に対します請求日
CONDENSE LV_GJAHR. "会計年度
CONDENSE LV_VBELN. "請求伝票
CONDENSE LV_POSNR. "請求明細
CONDENSE LV_FKIMG. "在庫単位による請求数量
CONDENSE LV_MEINS. "基本数量単位
CONDENSE LV_NETWR. "伝票通貨での請求明細の正味額
CONDENSE LV_COMMENT. "付注
ELSEIF P_XLS = 'X'.
LV_VKORG = GW_ULDATA-VKORG.
LV_FKDAT = GW_ULDATA-FKDAT.
LV_GJAHR = GW_ULDATA-GJAHR.
LV_VBELN = GW_ULDATA-VBELN.
LV_POSNR = GW_ULDATA-POSNR.
LV_FKIMG = GW_ULDATA-FKIMG.
LV_MEINS = GW_ULDATA-MEINS.
LV_NETWR = GW_ULDATA-NETWR.
LV_COMMENT = GW_ULDATA-COMMENT1.
ENDIF.
SPLIT LV_FKDAT AT '.' "2017.05.01
INTO LV_FKDAT_Y "2017
LV_FKDAT_M "05
LV_FKDAT_D. "01
CONCATENATE LV_FKDAT_Y "2017
LV_FKDAT_M "05
LV_FKDAT_D "01
INTO LV_FKDAT_2. "20170501
LV_FKIMG_2 = LV_FKIMG.
LV_NETWR_2 = LV_NETWR.
GW_UL_DBT-VKORG = LV_VKORG. "売組
GW_UL_DBT-FKDAT = LV_FKDAT_2. "請求索引および印刷に対します請求日
GW_UL_DBT-GJAHR = LV_GJAHR. "会計年度
GW_UL_DBT-VBELN = LV_VBELN. "請求伝票
GW_UL_DBT-POSNR = LV_POSNR. "請求明細
GW_UL_DBT-FKIMG = LV_FKIMG_2. "在庫単位による請求数量
GW_UL_DBT-MEINS = LV_MEINS. "基本数量単位
GW_UL_DBT-NETWR = LV_NETWR_2. "伝票通貨での請求明細の正味額
GW_UL_DBT-COMMENT1 = LV_COMMENT. "付注
APPEND GW_UL_DBT TO GIT_UL_DBT.
ENDLOOP.
ENDFORM. " F_UPLOAD_DATA_EDIT
*&---------------------------------------------------------*
*& Form F_UPLOAD_DATA_OUTPUT
*&---------------------------------------------------------*
* text
*----------------------------------------------------------*
FORM F_UPLOAD_DATA_OUTPUT .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' "出力します
EXPORTING
I_STRUCTURE_NAME = 'YSTRU_ALV_1122_0707'
TABLES
T_OUTTAB = GIT_UL_DBT "更新したばかりの目標内部テーブル
EXCEPTIONS
PROGRAM_ERROR = 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. " F_UPLOAD_DATA_OUTPUT
*&---------------------------------------------------------*
*& Form F_LOCK
*&---------------------------------------------------------*
* データベーステーブルをロックします
*----------------------------------------------------------*
FORM F_LOCK .
CALL FUNCTION 'ENQUEUE_EYALV_1123'
EXPORTING
MODE_YALV_1123 = 'E'
MANDT = SY-MANDT
* VBELN =
* X_VBELN = ' '
* _SCOPE = '2'
* _WAIT = ' '
* _COLLECT = ' '
EXCEPTIONS
FOREIGN_LOCK = 1
SYSTEM_FAILURE = 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.
ENDFORM. " F_LOCK
*&---------------------------------------------------------*
*& Form F_UNLOCK
*&---------------------------------------------------------*
* データベーステーブルのロックをリリースします
*----------------------------------------------------------*
FORM F_UNLOCK .
CALL FUNCTION 'DEQUEUE_EYALV_1123'
EXPORTING
MODE_YALV_1123 = 'E'
MANDT = SY-MANDT
* VBELN =
* X_VBELN = ' '
* _SCOPE = '3'
* _SYNCHRON = ' '
* _COLLECT = ' '
.
ENDFORM. " F_UNLOCK``
SAP ABAP ALV完整版示例笔记(已更新)
最新推荐文章于 2025-02-13 01:39:28 发布