![[SAP ABAP] ALV報(bào)表練習(xí)6](http://pic.xiahunao.cn/yaotu/[SAP ABAP] ALV報(bào)表練習(xí)6)
銷售訂單憑證流追蹤報(bào)表業(yè)務(wù)目的根據(jù)選擇屏幕的篩選條件使用ALV報(bào)表顯示以銷售訂單為原點(diǎn)實(shí)時(shí)、可視化地追溯從 訂單錄入 到 收款過(guò)賬 的全鏈路單據(jù)流轉(zhuǎn)狀態(tài)信息支撐訂單履行過(guò)程中的異常監(jiān)控與高效協(xié)同效果展示輸入指定篩選條件點(diǎn)擊執(zhí)行按鈕效果如下所示完整代碼如下所示主程序(zrs0511)*---------------------------------------------------------------------* * Report ZRS0511 *---------------------------------------------------------------------* REPORT zrs0511. INCLUDE zrs0511_top. 數(shù)據(jù)定義 INCLUDE zrs0511_f01. 子例程 *----------------------------------------------------------------------* * DESC: INITIALIZATION 事件 *----------------------------------------------------------------------* INITIALIZATION. *----------------------------------------------------------------------* * DESC: AT SELECTION-SCREEN OUTPUT 事件 *----------------------------------------------------------------------* AT SELECTION-SCREEN OUTPUT. *----------------------------------------------------------------------* * DESC: AT SELECTION-SCREEN 事件 *----------------------------------------------------------------------* AT SELECTION-SCREEN. *----------------------------------------------------------------------* * DESC: START-OF-SELECTION 事件 *----------------------------------------------------------------------* START-OF-SELECTION. PERFORM frm_get_data. 獲取數(shù)據(jù) 檢查數(shù)據(jù)是否為空 IF gt_item IS INITIAL. MESSAGE 不存在滿足條件的數(shù)據(jù)請(qǐng)確認(rèn)選擇條件 TYPE I. ENDIF. *---------------------------------------------------------------------* * END-OF-SELECTION 事件 *---------------------------------------------------------------------* END-OF-SELECTION. PERFORM frm_display_data. ALV呈現(xiàn)數(shù)據(jù)INCLUDE程序(zrs0511_top)*---------------------------------------------------------------------* * 包含 ZRS0511_TOP *---------------------------------------------------------------------* TABLES: vbrk, vbrp, vbak, lips, vbap, likp, bseg, konv. * 選擇屏幕 SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE text-001. SELECT-OPTIONS: s_vkorg FOR vbak-vkorg NO INTERVALS NO-EXTENSION, Sales Org s_erdat FOR vbak-erdat. SO開單日期範(fàn)圍 SELECTION-SCREEN END OF BLOCK b01. * 自定義數(shù)據(jù)類型 TYPES: BEGIN OF ty_item, so_vbeln TYPE vbak-vbeln, SO單號(hào) dn_vbeln TYPE lips-vbeln, DN交貨單 lfdat TYPE likp-lfdat, DN出貨日期 matnr TYPE vbap-matnr, 料號(hào) arktx TYPE vbap-arktx, 品名描述 kwmeng TYPE vbap-kwmeng, 銷售訂單數(shù)量(SO現(xiàn)有數(shù)量) vrkme TYPE vbap-vrkme, 銷售單位 bukrs TYPE vbrk-bukrs, 公司代碼 werks TYPE vbap-werks, 廠別 lgort TYPE vbap-lgort, 倉(cāng)碼 bstnk TYPE vbak-bstnk, 客戶訂單 mblnr TYPE mkpf-mblnr, 過(guò)賬編號(hào)(GD goods issue) belnr TYPE bseg-belnr, SAP發(fā)票號(hào)(Accounting document) billing_vbeln TYPE vbrk-vbeln, BillingNo fkdat TYPE vbrk-fkdat, Billing日期 unit_price TYPE netwr_fp, 未稅單價(jià) netwr TYPE vbrp-netwr, 未稅金額(Net value) fkimg TYPE vbrp-fkimg, 開票數(shù)量 kbetr TYPE konv-kbetr, 稅率(Tax code) mwsbp TYPE vbrp-mwsbp, 稅金(Tax amount) brtwr TYPE vbrp-brtwr, 含稅金額(Gross value) END OF ty_item. TYPES: BEGIN OF ty_bseg, belnr TYPE bseg-belnr, 會(huì)計(jì)憑證號(hào) gjahr TYPE bseg-gjahr, 會(huì)計(jì)年度 vbeln TYPE bseg-vbeln, 參考憑證發(fā)票號(hào) bukrs TYPE bseg-bukrs, 公司代碼 END OF ty_bseg. TYPES: BEGIN OF ty_bseg_key, vbeln TYPE vbrk-vbeln, 發(fā)票號(hào) gjahr TYPE bseg-gjahr, 會(huì)計(jì)年度 bukrs TYPE bseg-bukrs, 公司代碼 END OF ty_bseg_key. * 定義內(nèi)表和結(jié)構(gòu)體變量 DATA: gs_item TYPE ty_item, gt_item TYPE STANDARD TABLE OF ty_item, gs_bseg TYPE ty_bseg, gt_bseg TYPE STANDARD TABLE OF ty_bseg, gs_bseg_key TYPE ty_bseg_key, gt_bseg_key TYPE STANDARD TABLE OF ty_bseg_key. * ALV參數(shù)定義 DATA: gs_layout TYPE lvc_s_layo, 用于定義ALV表單的相關(guān)格式、屬性 gs_fcat TYPE lvc_s_fcat, 字段目錄工作區(qū) gt_fcat LIKE TABLE OF gs_fcat. 字段目錄內(nèi)表INCLUDE程序(zrs0511_f01)*---------------------------------------------------------------------* * 包含 ZRS0511_F01 *---------------------------------------------------------------------* *---------------------------------------------------------------------* * Form frm_get_data *---------------------------------------------------------------------* FORM frm_get_data . SELECT DISTINCT likp~lfdat DN出貨日期 vbak~vbeln AS so_vbeln SO單號(hào) lips~vbeln AS dn_vbeln DN交貨單 vbap~matnr 料號(hào) vbap~arktx 品名描述 vbap~kwmeng 銷售訂單數(shù)量(SO現(xiàn)有數(shù)量) vbap~vrkme 銷售單位 vbap~werks 廠別 vbap~lgort 倉(cāng)碼 vbak~bstnk 客戶訂單 mkpf~mblnr 過(guò)賬編號(hào) vbrk~vbeln AS billing_vbeln BillingNo vbrk~fkdat Billing日期 vbrk~bukrs 公司代碼 vbrp~netwr 未稅金額(Net value) vbrp~fkimg 開票數(shù)量 vbrp~mwsbp 稅金(Tax amount) INTO CORRESPONDING FIELDS OF TABLE gt_item FROM vbrp INNER JOIN vbrk ON vbrk~vbeln vbrp~vbeln INNER JOIN lips ON lips~vbeln vbrp~vgbel AND lips~posnr vbrp~vgpos INNER JOIN likp ON likp~vbeln lips~vbeln INNER JOIN mkpf ON mkpf~xblnr lips~vbeln INNER JOIN vbap ON vbap~vbeln lips~vgbel AND vbap~posnr lips~vgpos INNER JOIN vbak ON vbak~vbeln vbap~vbeln LEFT JOIN vbkd ON vbkd~vbeln vbap~vbeln AND vbkd~posnr vbap~posnr WHERE vbak~vkorg IN s_vkorg AND vbak~erdat IN s_erdat AND vbrp~fkimg 0. * 構(gòu)建查詢BSEG表的關(guān)鍵字段 LOOP AT gt_item INTO gs_item. gs_bseg_key-vbeln gs_item-billing_vbeln. gs_bseg_key-gjahr gs_item-fkdat0(4). 從Billing日期取年度 gs_bseg_key-bukrs gs_item-bukrs. 公司代碼 COLLECT gs_bseg_key INTO gt_bseg_key. ENDLOOP. * 查詢BSEG表數(shù)據(jù) IF gt_bseg_key[] IS NOT INITIAL. SELECT belnr gjahr vbeln bukrs INTO CORRESPONDING FIELDS OF TABLE gt_bseg FROM bseg FOR ALL ENTRIES IN gt_bseg_key WHERE vbeln gt_bseg_key-vbeln AND gjahr gt_bseg_key-gjahr AND bukrs gt_bseg_key-bukrs. ENDIF. LOOP AT gt_item INTO gs_item. 根據(jù)發(fā)票號(hào)、會(huì)計(jì)年度、公司代碼查找對(duì)應(yīng)的BSEG記錄 READ TABLE gt_bseg INTO gs_bseg WITH KEY vbeln gs_item-billing_vbeln gjahr gs_item-fkdat0(4) bukrs gs_item-bukrs. IF sy-subrc 0. 找到匹配記錄填充會(huì)計(jì)憑證號(hào) gs_item-belnr gs_bseg-belnr. ELSE. 未找到匹配記錄會(huì)計(jì)憑證號(hào)保持初始值 CLEAR gs_item-belnr. ENDIF. 更新內(nèi)表 MODIFY gt_item FROM gs_item. ENDLOOP. FIELD-SYMBOLS: fs_item TYPE ty_item. * 計(jì)算未稅單價(jià)、稅率和含稅金額、轉(zhuǎn)換銷售單位 LOOP AT gt_item ASSIGNING fs_item. 未稅單價(jià) IF fs_item-fkimg 0. fs_item-unit_price fs_item-netwr / fs_item-fkimg. ELSE. fs_item-unit_price 0. ENDIF. 含稅金額 未稅金額 稅金 fs_item-brtwr fs_item-netwr fs_item-mwsbp. 稅率 稅金 / 未稅金額 fs_item-kbetr fs_item-mwsbp / fs_item-netwr. 轉(zhuǎn)換銷售單位 IF fs_item-vrkme IS NOT INITIAL. CALL FUNCTION CONVERSION_EXIT_CUNIT_OUTPUT EXPORTING input fs_item-vrkme language sy-langu 當(dāng)前登錄語(yǔ)言 IMPORTING output fs_item-vrkme EXCEPTIONS unit_not_found 1 OTHERS 2. IF sy-subrc 0. CONTINUE. 轉(zhuǎn)換失敗時(shí)字段保持原值不變 ENDIF. ENDIF. ENDLOOP. * 排序 SORT gt_item. ENDFORM. frm_get_data *---------------------------------------------------------------------* * Form frm_display_data *---------------------------------------------------------------------* FORM frm_display_data . PERFORM frm_alv_set_fields. 調(diào)用函數(shù)展示ALV數(shù)據(jù) CALL FUNCTION REUSE_ALV_GRID_DISPLAY_LVC EXPORTING i_callback_program sy-repid it_fieldcat_lvc gt_fcat 設(shè)置ALV列屬性 is_layout_lvc gs_layout 設(shè)置ALV布局 TABLES t_outtab gt_item 內(nèi)表數(shù)據(jù) EXCEPTIONS program_error 1 OTHERS 2. ENDFORM. frm_display_data *---------------------------------------------------------------------* * Form frm_alv_set_fields *---------------------------------------------------------------------* FORM frm_alv_set_fields . CLEAR: gs_fcat, gt_fcat, gs_layout. * 設(shè)置行的屬性(ALV界面格式) gs_layout-zebra X. 斑馬條紋顯示 gs_layout-cwidth_opt X. 優(yōu)化列寬設(shè)置 * ALV字段處理宏 DEFINE catalog. gs_fcat-fieldname 1. 設(shè)置要輸出的表格列的值在內(nèi)表中定義的字段名(必須大寫) gs_fcat-fix_column 2. 固定列 gs_fcat-ref_table 3. gs_fcat-edit 4. gs_fcat-colddictxt L. gs_fcat-scrtext_l 5. 設(shè)置要輸出的表格列的列名即ALV報(bào)表顯示的列名 gs_fcat-ref_field 6. gs_fcat-outputlen 7. gs_fcat-emphasize 8. 列顏色 gs_fcat-hotspot 9. 熱點(diǎn) APPEND gs_fcat TO gt_fcat. END-OF-DEFINITION. * 1 2 3 4 5 6 7 8 9 catalog: SO_VBELN X SO單號(hào) , DN_VBELN X DN交貨單 , LFDAT X DN出貨日期 , MATNR 料號(hào) , ARKTX 品名描述 , KWMENG 銷售訂單數(shù)量 , VRKME 銷售單位 , WERKS 廠別 , LGORT 倉(cāng)碼 , BSTNK 客戶訂單 , MBLNR 過(guò)賬編號(hào) , BELNR 會(huì)計(jì)憑證 , BILLING_VBELN BillingNo , FKDAT Billing日期 , UNIT_PRICE 未稅單價(jià) , NETWR 未稅金額 , FKIMG 開票數(shù)量 , KBETR 稅率 , MWSBP 稅金 , BRTWR 含稅金額 . 處理SO_VBELN字段的Excel導(dǎo)出問(wèn)題 LOOP AT gt_fcat INTO gs_fcat WHERE fieldname SO_VBELN. gs_fcat-scrtext_l SO單號(hào). 長(zhǎng)文本 gs_fcat-scrtext_m SO單號(hào). 中文本 gs_fcat-scrtext_s SO. 短文本 gs_fcat-edit_mask ALPHA. gs_fcat-datatype CHAR. 字符類型 gs_fcat-inttype C. 內(nèi)部類型為字符 gs_fcat-outputlen 10. 明確指定長(zhǎng)度為10 gs_fcat-no_zero . 關(guān)鍵不刪除前導(dǎo)零 MODIFY gt_fcat FROM gs_fcat. EXIT. ENDLOOP. 處理DN_VBELN字段的Excel導(dǎo)出問(wèn)題 LOOP AT gt_fcat INTO gs_fcat WHERE fieldname DN_VBELN. gs_fcat-scrtext_l DN交貨單. 長(zhǎng)文本 gs_fcat-scrtext_m DN交貨單. 中文本 gs_fcat-scrtext_s DN. 短文本 gs_fcat-edit_mask ALPHA. gs_fcat-datatype CHAR. 字符類型 gs_fcat-inttype C. 內(nèi)部類型為字符 gs_fcat-outputlen 10. 明確指定長(zhǎng)度為10 gs_fcat-no_zero . 關(guān)鍵不刪除前導(dǎo)零 MODIFY gt_fcat FROM gs_fcat. EXIT. ENDLOOP. ENDFORM. frm_alv_set_fields