交貨單統計,主要查詢 LIKP,LIPS,單價取自VBAP 訂單明細表;
*&---------------------------------------------------------------------* *& Report ZSDR0030 *&---------------------------------------------------------------------* *&zhangshaohua *&---------------------------------------------------------------------* REPORT zSDR0030. TABLES :likp,lips,zsact0003,kna1,vbap,vbak,vbrp,marm,mvke,vbfa,zmmt0037,but000. **定義結構 DATA: gt_data TYPE TABLE OF zsact0003. TYPES: BEGIN OF gty_out, wadat_ist LIKE likp-wadat_ist, "發貨日期 vkorg LIKE likp-vkorg, "銷售組織代碼 vtweg LIKE lips-vtweg, "渠道編碼 vtweg_mc(10) TYPE c, "渠道名稱 vkbur LIKE lips-vkbur, "銷售辦公室編碼 vkbur_mc(20) TYPE c, "銷售辦公室名稱 vkgrp LIKE vbak-vkgrp, "銷售組編碼 vkgrp_mc(20) TYPE c, "銷售組名稱 bzirk LIKE vbkd-bzirk, "銷售地區 bzirk_mc(20) TYPE c, "銷售地區名稱 kdgrp LIKE vbkd-kdgrp, "客戶組 kdgrp_mc(20) TYPE c , "客戶組名稱 kunnr LIKE likp-kunag, "客戶代碼 name1 LIKE kna1-name1, "客戶名稱 matnr LIKE lips-matnr, "物料號 maKtx LIKE zmmt0037-maktx, "物料描述 charg LIKE lips-charg, "批號 lfart LIKE likp-lfart, "交貨單類型 lfimg LIKE lips-lfimg, "交貨數量 hsdj LIKE vbap-kwmeng, "含稅價 hsje LIKE vbap-kwmeng, "含稅價 vrkme LIKE lips-vrkme, "銷售單位 netwr LIKE vbap-kzwi1, "銷售訂單行金額 kwmeng LIKE vbap-kwmeng, "銷售訂單數量 vrkme_so LIKE vbap-vrkme, "銷售單位 vbeln LIKE likp-vbeln, "交貨單號 posnr LIKE lips-posnr, "行項目號 vbtyp_v LIKE vbfa-vbtyp_v, " ddbh LIKE vbak-vbeln , "訂單編號 rybh LIKE vbpa-kunnr, "業務員號 ryxm LIKE but000-name_last , "業務員姓名 zzbusin LIKE zmmt0037-zzbusin, "事業部 zzproducst LIKE zmmt0037-zzproducst, "生產企業 zzabccat LIKE zmmt0037-zzabccat, "ABC類別 umVKz LIKE lips-UMVKZ, "每件數量 umrez like zmmt0037-umrez, "標准件數量 wgbez LIKE zmmt0037-wgbez, "物料組 zzdosage_desc LIKE zmmt0037-zzdosage_desc, "劑型描述 ewbez LIKE zmmt0037-ewbez, "治療領域 vtext LIKE zmmt0037-vtext, "產品類別 zsl LIKE lips-lfimg, "主數量 fzsl LIKE lips-lfimg, "輔助數量 vsart LIKE vbkd-vsart, "運輸方式 vsart_mc(20) TYPE c, "運輸方式名稱 END OF gty_out. DATA: lv_kwmeng_su TYPE vbap-kwmeng, "銷售單位數量 lv_kwmeng_bu TYPE vbap-kwmeng, "基本單位數量 lv_netwr TYPE vbap-netwr, "金額 lwa_data TYPE zsact0003, lt_marm TYPE TABLE OF marm, "單位轉化系數 lwa_marm TYPE marm, lt_mvke TYPE TABLE OF mvke, "銷售單位 lwa_mvke TYPE mvke, lv_price TYPE p LENGTH 11 DECIMALS 5, "銷售單價 lv_lfimg TYPE lips-lfimg, "發貨數量 lv_lfimg_ba TYPE lips-lfimg, "發貨數量(基本單位) lv_fkimg TYPE vbrp-fkimg, "開票數量 lv_fkimg_ba TYPE vbrp-fkimg. "開票數量(基本單位) *標准的ALV輸出 * slis 類型池 全局變量 定義,多數沒用, DATA: g_repid TYPE sy-repid, g_line TYPE slis_fieldcat_alv, gt_fieldcat TYPE slis_t_fieldcat_alv, gt_layout TYPE slis_layout_alv, gt_sortinfo TYPE slis_sortinfo_alv, gt_lvc_title TYPE lvc_title, gt_list_top_of_page TYPE slis_t_listheader, gt_events TYPE slis_t_event, gt_fcat TYPE lvc_t_fcat, gt_table TYPE REF TO data, gs_settings TYPE lvc_s_glay, f2code LIKE sy-ucomm VALUE '&TEA'. * 定義用於輸出的內表 DATA: gt_tab TYPE STANDARD TABLE OF gty_out WITH HEADER LINE. DATA: gt_tab2 TYPE STANDARD TABLE OF gty_out. **定義雙擊執行事務代碼 用, 猜的 DATA ok_code LIKE sy-ucomm. DATA: g_ucomm LIKE sy-ucomm. DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE."用來存儲屏幕字段參數值,傳遞錄屏參數 * messages of call transaction DATA: messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE."記錄執行BDC過程中產生的消息 DATA: ls_mss LIKE bdcmsgcoll. *選擇屏幕 SELECT-OPTIONS: s_kunnr FOR likp-kunag,"客戶號 s_vkorg FOR likp-vkorg,"銷售組織 s_Vtweg FOR LIps-vtweg,"渠道 s_matnr FOR LIps-matnr,"物料號 s_FHRQ FOR likp-wadat_ist OBLIGATORY. "實際發貨日期 *************************************************************** **2 功能 程序 ************************************************************** ** 1 統計發貨情況,含正向發貨和退貨 START-OF-SELECTION. "發貨 SELECT a~wadat_ist, "發貨日期 a~vkorg, "銷售組織代碼 b~vtweg, "渠道編碼 b~vtweg AS vtweg_mc, "渠道名稱 b~vkbur, "銷售辦公室編碼 b~vkbur AS vkbur_mc, "銷售辦公室編碼 g~vkgrp, "銷售組編碼 g~vkgrp AS vkgrp_mc, "銷售組名稱 e~bzirk, "銷售地區 e~bzirk AS bzirk_mc, "銷售地區名稱 e~kdgrp, "客戶組 e~kdgrp AS kdgrp_mc, a~kunag AS kunnr, "客戶代碼 h~name1 , "客戶名稱 b~matnr, "物料號 i~maktx, "物料描述 b~charg, "批號 a~lfart, "交貨單類型 b~lfimg, "交貨數量 f~kzwi1 AS hsdj, "含稅價 f~kzwi1 AS hsje, "含稅價 b~vrkme, "銷售單位 f~kzwi1 AS netwr, "銷售訂單行金額 f~kwmeng, "銷售訂單數量 f~vrkme AS vrkme_so, "銷售單位 a~vbeln, b~posnr, d~vbtyp_v, g~vbeln , "訂單號 j~kunnr AS ywy, "業務員號 k~name_last, "姓名 i~zzbusin, "事業部 i~zzproducst, " 生產企業 i~zzabccat, "ABC分類 b~umvkz, "每件數量 i~umrez, "標准件數量 i~wgbez, "物料組 i~zzdosage_desc, "劑型描述 i~ewbez, "治療領域 i~vtext, "產品類別 b~lfimg as zsl, "主數量 b~lfimg as fzsl, "輔助主數量 e~vsart, ' ' AS vsart_mc INTO TABLE @gt_tab FROM likp AS a INNER JOIN lips AS b ON a~vbeln = b~vbeln LEFT JOIN vbfa AS d ON b~vbeln = d~vbeln AND b~posnr = d~posnn AND d~vbtyp_v = 'C' "只獲取銷售訂單和交貨單的關聯數據 LEFT JOIN vbkd AS e ON d~vbelv = e~vbeln LEFT JOIN vbap AS f ON d~vbelv = f~vbeln AND d~posnv = f~posnr LEFT JOIN vbak AS g ON d~vbelv = g~vbeln LEFT JOIN kna1 AS h ON a~kunag = h~kunnr LEFT JOIN zmmt0037 AS i ON b~matnr = i~matnr LEFT JOIN vbpa AS j ON a~vbeln = j~vbeln AND j~parvw = 'Z1' LEFT JOIN but000 AS k ON j~kunnr = k~partner WHERE a~wadat_ist IN @s_FHRQ AND a~kunag IN @s_kunnr AND b~matnr IN @s_matnr AND a~vkorg IN @s_vkorg AND b~vtweg IN @s_vtweg AND a~wbstk = 'C' AND a~lfart = 'LF'. "退貨 SELECT a~wadat_ist, "發貨日期 a~vkorg, "銷售組織代碼 b~vtweg, "渠道編碼 b~vtweg AS vtweg_mc, "渠道名稱 b~vkbur, "銷售辦公室編碼 b~vkbur AS vkbur_mc, "銷售辦公室編碼 g~vkgrp, "銷售組編碼 g~vkgrp AS vkgrp_mc, "銷售組名稱 e~bzirk, "銷售地區 e~bzirk AS bzirk_mc, "銷售地區名稱 e~kdgrp, "客戶組 e~kdgrp AS kdgrp_mc, a~kunag AS kunnr, "客戶代碼 h~name1 , "客戶名稱 b~matnr, "物料號 i~maktx, "物料描述 b~charg, "批號 a~lfart, "交貨單類型 b~lfimg, "交貨數量 f~kzwi1 AS hsdj, "含稅價 f~kzwi1 AS hsje, "含稅金額 b~vrkme, "銷售單位 f~kzwi1 AS netwr, "銷售訂單行金額 f~kwmeng, "銷售訂單數量 f~vrkme AS vrkme_so, "銷售單位 a~vbeln, b~posnr, d~vbtyp_v, g~vbeln , "訂單號 j~kunnr AS ywy, "業務員號 k~name_last , "姓名 zzbusin, "事業部 zzproducst, " 生產企業 zzabccat, "ABC分類 b~umvkz, "每件數量 i~umrez, "標准件數量 i~wgbez, "物料組 i~zzdosage_desc, "劑型描述 i~ewbez, "治療領域 i~vtext, "產品類別 b~lfimg as zsl, "主數量 b~lfimg as fzsl, "輔助主數量 e~vsart, "運輸方式 ' ' AS vsart_mc APPENDING TABLE @gt_tab FROM likp AS a INNER JOIN lips AS b ON a~vbeln = b~vbeln LEFT JOIN vbfa AS d ON b~vbeln = d~vbeln AND b~posnr = d~posnn AND d~vbtyp_v = 'H' "只獲取銷售訂單和交貨單的關聯數據 LEFT JOIN vbkd AS e ON d~vbelv = e~vbeln LEFT JOIN vbap AS f ON d~vbelv = f~vbeln AND d~posnv = f~posnr LEFT JOIN vbak AS g ON d~vbelv = g~vbeln LEFT JOIN kna1 AS h ON a~kunag = h~kunnr LEFT JOIN zmmt0037 AS i ON b~matnr = i~matnr LEFT JOIN vbpa AS j ON a~vbeln = j~vbeln AND j~parvw = 'Z1' LEFT JOIN but000 AS k ON j~kunnr = k~partner WHERE a~wadat_ist IN @s_FHRQ AND a~kunag IN @s_kunnr AND b~matnr IN @s_matnr AND a~vkorg IN @s_vkorg AND b~vtweg IN @s_vtweg AND a~lfart = 'LR'. **2 將相關列取值由代碼變為中文描述 **取訂單類型字典 SELECT auart,bezei AS ddlx INTO TABLE @DATA(ddlx) FROM tvakt WHERE auart LIKE 'Z%' AND spras = '1' . **取運輸方式字典 SELECT bezei, vsart INTO TABLE @DATA(ysfs) FROM t173t WHERE spras = '1' . LOOP AT ysfs ASSIGNING FIELD-SYMBOL(<ysfs>). CLEAR gt_tab. gt_tab-vsart_mc = <ysfs>-bezei. "MODIFI 內表名 FROM 結構(如果同名,可以不要 FROM GT_TAB) TRANSPORTING 要修改的字段名 WHERE 字段名= 新值。 MODIFY gt_tab FROM gt_tab TRANSPORTING vsart_mc WHERE vsart = <ysfs>-vsart. ENDLOOP. **取銷售渠道字典 **SELECT vtweg, vtext INTO TABLE @DATA(xsqd) FROM tvtwt WHERE spras = '1'. * 查詢渠道 SELECT vtweg, vtext INTO TABLE @DATA(vtweg1) FROM tvtwt WHERE spras = '1' . LOOP AT vtweg1 ASSIGNING FIELD-SYMBOL(<vtweg1>). CLEAR gt_tab. gt_tab-vtweg_mc = <vtweg1>-vtext. "MODIFI 內表名 FROM 結構(如果同名,可以不要 FROM GT_TAB) TRANSPORTING 要修改的字段名 WHERE 字段名= 新值。 MODIFY gt_tab FROM gt_tab TRANSPORTING vtweg_mc WHERE vtweg = <vtweg1>-vtweg. ENDLOOP. **取銷售組織 SELECT vkorg, vtext INTO TABLE @DATA(xszz) FROM tvkot WHERE spras = '1' . LOOP AT xszz ASSIGNING FIELD-SYMBOL(<xszz>). CLEAR gt_tab. gt_tab-vkorg = <xszz>-vtext. MODIFY gt_tab FROM gt_tab TRANSPORTING vkorg WHERE vkorg = <xszz>-vkorg. ENDLOOP. * 查詢銷售辦公室 SELECT vkbur, bezei INTO TABLE @DATA(vkbur) FROM tvkbt WHERE spras = '1' . LOOP AT vkbur ASSIGNING FIELD-SYMBOL(<vkbur>). CLEAR gt_tab. gt_tab-vkbur_mc = <vkbur>-bezei. MODIFY gt_tab FROM gt_tab TRANSPORTING vkbur_mc WHERE vkbur = <vkbur>-vkbur. ENDLOOP. ** 查詢銷售組 SELECT vkgrp, bezei INTO TABLE @DATA(vkgrp) FROM tvgrt WHERE spras = '1' . LOOP AT vkgrp ASSIGNING FIELD-SYMBOL(<vkgrp>). CLEAR gt_tab. gt_tab-vkgrp_mc = <vkgrp>-bezei. MODIFY gt_tab FROM gt_tab TRANSPORTING vkgrp_mc WHERE vkgrp = <vkgrp>-vkgrp. ENDLOOP. ** 查詢銷售地區 SELECT bzirk, bztxt INTO TABLE @DATA(bzirk) FROM t171t WHERE spras = '1' . LOOP AT bzirk ASSIGNING FIELD-SYMBOL(<bzirk>). CLEAR gt_tab. gt_tab-bzirk_mc = <bzirk>-bztxt. MODIFY gt_tab FROM gt_tab TRANSPORTING bzirk_mc WHERE bzirk = <bzirk>-bzirk. ENDLOOP. ** 查詢客戶組(客?類型描述) SELECT kdgrp,ktext INTO TABLE @DATA(khlx) FROM t151t WHERE spras = '1'. LOOP AT khlx ASSIGNING FIELD-SYMBOL(<khlx>). CLEAR gt_tab. gt_tab-kdgrp_mc = <khlx>-ktext. MODIFY gt_tab FROM gt_tab TRANSPORTING kdgrp_mc WHERE kdgrp = <khlx>-kdgrp. ENDLOOP. **2 處理單價、主數量等其它輔助信息 **FIELD-SYMBOL 指針 可直接更改內表字段的值 . LOOP AT gt_tab ASSIGNING FIELD-SYMBOL(<fs_out>). <fs_out>-hsdj = <fs_out>-netwr / <fs_out>-kwmeng. "用銷售金額 除以 訂單數量,得到 含稅單價 IF <fs_out>-lfart = 'LR'. <fs_out>-lfimg = <fs_out>-lfimg * -1. <fs_out>-netwr = <fs_out>-netwr * -1. ENDIF. <fs_out>-hsje = <fs_out>-lfimg * <fs_out>-hsdj. "用交貨數量* 訂單的含稅單價 if <fs_out>-umvkz > 1. <fs_out>-zsl = <fs_out>-lfimg * <fs_out>-umrez."轉換為最小包裝數 endif. if <fs_out>-umrez <> 0 . <fs_out>-fzsl = <fs_out>-zsl / <fs_out>-umrez."轉換為標准件包裝數 endif . "去掉前導000 SHIFT <fs_OUT>-kunnr LEFT DELETING LEADING '0'. SHIFT <fs_OUT>-vbeln LEFT DELETING LEADING '0'. SHIFT <fs_OUT>-matnr LEFT DELETING LEADING '0'. SHIFT <fs_OUT>-ddbh LEFT DELETING LEADING '0'. SHIFT <fs_OUT>-rybh LEFT DELETING LEADING '0'. ENDLOOP. **刪除重復行項目 SORT gt_tab ASCENDING BY vbeln posnr. DELETE gt_tab WHERE lfimg = 0 . END-OF-SELECTION. **執行函數 PERFORM frm_show_alv. * 輸出 alv 報表 FORM frm_show_alv . DEFINE append_alv_field. CLEAR g_line. g_line-fieldname = &1. g_line-tabname = 'GT_ALV'. g_line-reptext_ddic = &2. g_line-seltext_l = &2. g_line-seltext_m = &2. g_line-seltext_s = &2. g_line-cfieldname = &3. g_line-ctabname = &4. g_line-no_out = &5. g_line-no_zero = &6. g_line-outputlen = &7. g_line-qfieldname = &8. g_line-just = &9. g_line-ddictxt = 'L'. g_line-do_sum = 'X'. IF g_line-fieldname = 'LFIMG'. "如果字段名為LFIMG,則將小數位設置為0,其它的設置為2位 g_line-decimals_out = '0'. "去掉小數點后的0 ELSE. g_line-decimals_out = '2'. "去掉小數點后的0 ENDIF. APPEND g_line TO gt_fieldcat. END-OF-DEFINITION. **ALV 顯示字段 REFRESH:gt_fieldcat. gt_layout-colwidth_optimize = 'X'. " 自適應寬度 append_alv_field 'VKORG' '銷售組織' '' '' '' '' '' '' ''. append_alv_field 'vtweg' '渠道' '' '' '' '' '' '' ''. append_alv_field 'vtweg_mc' '渠道名稱' '' '' '' '' '' '' ''. append_alv_field 'WADAT_IST' '票據日期' '' '' '' '' '' '' ''. append_alv_field 'VBELN' '交貨單號' '' '' '' '' '' '' ''. append_alv_field 'RYBH' '業務員號' '' '' '' '' '' '' ''. append_alv_field 'RYXM' '業務員姓名' '' '' '' '' '' '' ''. append_alv_field 'kunnr' '客戶號' '' '' '' '' '' '' ''. append_alv_field 'name1' '客戶名稱' '' '' '' '' '' '' ''. append_alv_field 'matnr' '物料號' '' '' '' '' '' '' ''. append_alv_field 'maktx' '物料描述' '' '' '' '' '' '' ''. append_alv_field 'charg' '批號' '' '' '' '' '' '' ''. append_alv_field 'lfart' '類型' '' '' '' '' '' '' ''. append_alv_field 'LFIMG' '交貨數量' '' '' '' '' '' '' ''. append_alv_field 'zsl' '主數量' '' '' '' '' '' '' ''. append_alv_field 'fzsl' '輔助數量' '' '' '' '' '' '' ''. append_alv_field 'hsdj' '單價' '' '' '' '' '' '' ''. append_alv_field 'hsje' '金額' '' '' '' '' '' '' ''. append_alv_field 'NETWR' '訂單金額' '' '' '' '' '' '' ''. append_alv_field 'KWMENG' '訂單數量' '' '' '' '' '' '' ''. append_alv_field 'VTWEG' '行項目' '' '' '' '' '' '' ''. append_alv_field 'DDBH' '訂單號' '' '' '' '' '' '' ''. append_alv_field 'kdgrp' '客戶類型' '' '' '' '' '' '' ''. append_alv_field 'kdgrp_mc' '客戶類型名稱' '' '' '' '' '' '' ''. append_alv_field 'vkbur' '銷售辦公室' '' '' '' '' '' '' ''. append_alv_field 'vkbur_mc' '銷售辦名稱' '' '' '' '' '' '' ''. append_alv_field 'vkgrp' '銷售組' '' '' '' '' '' '' ''. append_alv_field 'vkgrp_mc' '銷售組名稱' '' '' '' '' '' '' ''. append_alv_field 'bzirk' '銷售地區號' '' '' '' '' '' '' ''. append_alv_field 'bzirk_mc' '銷售地區' '' '' '' '' '' '' ''. append_alv_field 'zzbusin' '事業部' '' '' '' '' '' '' ''. append_alv_field 'zzproducst' '生產企業' '' '' '' '' '' '' ''. append_alv_field 'zzabccat' 'ABC分類' '' '' '' '' '' '' ''. append_alv_field 'vsart' '運輸方式1' '' '' '' '' '' '' ''. append_alv_field 'vsart_mc' '運輸方式' '' '' '' '' '' '' ''. append_alv_field 'umrez' '件數量' '' '' '' '' '' '' ''. append_alv_field 'wgbez' '物料組' '' '' '' '' '' '' ''. append_alv_field 'zzdosage_desc' '劑型' '' '' '' '' '' '' ''. append_alv_field 'ewbez' '治療領域' '' '' '' '' '' '' ''. append_alv_field 'vtext' '產品類別' '' '' '' '' '' '' ''. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid * i_callback_pf_status_set = 'FRM_STATUS' "GUI指定子程序 * i_callback_user_command = 'FRM_USER_COMM' "客戶命令指定子程序 is_layout = gt_layout it_fieldcat = gt_fieldcat[] * it_events = events[] TABLES t_outtab = gt_tab[] "指定要顯示的內表名稱 EXCEPTIONS program_error = 1 OTHERS = 2. ENDFORM.