本文共 46114 字,大约阅读时间需要 153 分钟。
REPORT ZSDR_DDFYCX NO STANDARD PAGE HEADING . TABLES :VBAK , LIKP , VBUK , LIPS . *---定义结构---For Main ALV OutPut-------------------------------------* *TYPES: BEGIN OF TY_ITAB, ** CHECK TYPE FLAG, ** ICONID TYPE ICON-ID, * VKORG TYPE VBAK-VKORG, "销售组织 * KUNNR TYPE VBAK-KUNNR, "售达方 * NAME1 TYPE KNA1-NAME1, "客户名称 * PERNR TYPE KNVP-PERNR, "业务员编号 * CNAME TYPE PA0002-CNAME, "业务员 * DDYF TYPE KONV-KBETR, "代垫运费 * DDZX TYPE KONV-KBETR, "代垫装卸费 * HEJI TYPE KONV-KBETR, "合计 ** IT_CELL_TYPES TYPE SALV_T_INT4_COLUMN, ** IT_CELL_COLOR TYPE LVC_T_SCOL, * END OF TY_ITAB. *DATA: GT_ITAB TYPE STANDARD TABLE OF TY_ITAB, * GW_ITAB TYPE TY_ITAB. *FIELD-SYMBOLS <ITAB> TYPE TY_ITAB. TYPES : BEGIN OF TY_DETAL , CHECK TYPE FLAG , "选择 VKORG TYPE VBAK -VKORG , "销售组织 KUNNR TYPE VBAK -KUNNR , "售达方 NAME1 TYPE KNA1 -NAME1 , "客户名称 STCEG TYPE KNA1 -STCEG , "增值税编码 PERNR TYPE KNVP -PERNR , "业务员编号 CNAME TYPE PA0002 -CNAME , "业务员 VBELN TYPE VBAK -VBELN , "销售订单 POSNR TYPE VBAP -POSNR , "行号 WAERK TYPE VBAK -WAERK , "货币 ERDAT TYPE VBAK -ERDAT , "创建日期 AUDAT TYPE VBAK -AUDAT , "单据日期 MATNR TYPE VBAP -MATNR , "物料编码 ARKTX TYPE VBAP -ARKTX , "物料描述 LGORT TYPE VBAP -LGORT , "库位 LGOBE TYPE T001L -LGOBE , "描述 VRKME TYPE VBAP -VRKME , "销售单位 KWMENG TYPE VBAP -KWMENG , "订单重量 VBELN_VL TYPE LIPS -VBELN , "交货单 POSNR_VL TYPE LIPS -POSNR , "行号 WADAT_IST TYPE LIKP -WADAT_IST , "交货日期 LFIMG TYPE LIPS -LFIMG , "交货重量 VBELN_F TYPE VBRP -VBELN , "销售开票 POSNR_F TYPE VBRP -POSNR , "销售开票 FKDAT TYPE VBRK -FKDAT , "开票日期 RFBSK TYPE VBRK -RFBSK , "过账状态 Z005 TYPE KONV -KBETR , "代垫装卸费单价 Z003 TYPE KONV -KBETR , "装卸费单价 KF00 TYPE KONV -KBETR , "代垫运费单价 KF01 TYPE KONV -KBETR , "运费(一票制)单价 DDZX TYPE KONV -KBETR , "代垫装卸费 ZXHJ TYPE KONV -KBETR , "装卸费 DDYF TYPE KONV -KBETR , "代垫运费 YFHJ TYPE KONV -KBETR , "运费 HEJI TYPE KONV -KBETR , "合计 HXZXT TYPE VBAK -ERDAT , "核销装卸费日期 HXZXB TYPE ZFT_KM -ZBEIZ , "核销装卸费备注 HXYFT TYPE VBAK -ERDAT , "核销运费日期 HXYFB TYPE ZFT_KM -ZBEIZ , "核销运费备注 HXDDT TYPE VBAK -ERDAT , "代垫装卸费开票核销日期 HXDDB TYPE ZFT_KM -ZBEIZ , "代垫装卸费开票核销备注 HXDOC TYPE BKPF -BELNR , "代垫装卸费开票核销凭证 HXBUR TYPE BKPF -BUKRS , "代垫装卸费开票核销凭证公司代码 HXGJR TYPE BKPF -GJAHR , "代垫装卸费开票核销凭证年度 FLAG TYPE ZSD_HXMX -FLAG , "是否打印 HANDLE TYPE LIKP -HANDLE , "LIKP-VBELN 的世界范围唯一关键字 END OF TY_DETAL . DATA : GT_DETAL TYPE STANDARD TABLE OF TY_DETAL , GW_DETAL TYPE TY_DETAL . FIELD-SYMBOLS <DETAL> TYPE TY_DETAL . DATA : GT_BAPIRET TYPE STANDARD TABLE OF BAPIRET2 , GW_BAPIRET TYPE BAPIRET2 . *----------------------------------------------------------------------* * CLASS lcl_main_alv DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS LCL_MAIN_ALV DEFINITION . PUBLIC SECTION . METHODS : GENERATE_ALV . PRIVATE SECTION . DATA : O_SALV TYPE REF TO CL_SALV_TABLE . METHODS : SET_PF_STATUS CHANGING CO_ALV TYPE REF TO CL_SALV_TABLE , SET_LAYOUT CHANGING CO_ALV TYPE REF TO CL_SALV_TABLE , SET_DISPLAY_SETTING CHANGING CO_ALV TYPE REF TO CL_SALV_TABLE , SET_COLUMNS CHANGING CO_ALV TYPE REF TO CL_SALV_TABLE , REFRESH_ALV , ON_USER_COMMAND FOR EVENT ADDED_FUNCTION OF CL_SALV_EVENTS IMPORTING E_SALV_FUNCTION , HANDLE_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_SALV_EVENTS_TABLE IMPORTING ROW COLUMN , HANDLE_LINK_CLICK FOR EVENT LINK_CLICK OF CL_SALV_EVENTS_TABLE IMPORTING ROW COLUMN . ENDCLASS . "lcl_main_alv DEFINITION *----------------------------------------------------------------------* * CLASS lcl_sub_alv DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* *CLASS LCL_SUB_ALV DEFINITION ABSTRACT. * PUBLIC SECTION. * METHODS:GET_SUBDATA ABSTRACT * IMPORTING IW_ITAB TYPE TY_ITAB. * * METHODS: GENERATE_ALV ABSTRACT. * * PROTECTED SECTION. * DATA: O_SALV TYPE REF TO CL_SALV_TABLE. * *ENDCLASS. "lcl_sub_alv DEFINITION *CLASS LCL_DETAL_ALV DEFINITION INHERITING FROM LCL_SUB_ALV. * * PUBLIC SECTION. * DATA: T_DETAL TYPE STANDARD TABLE OF TY_DETAL, * LW_DETAL TYPE TY_DETAL. * METHODS: * GET_SUBDATA REDEFINITION, * GENERATE_ALV REDEFINITION. * * PROTECTED SECTION. * METHODS: * HANDLE_LINK_CLICK * FOR EVENT LINK_CLICK OF CL_SALV_EVENTS_TABLE * IMPORTING ROW COLUMN. *ENDCLASS. *---------------------------------------------------------------------* * 选择屏幕 *---------------------------------------------------------------------* SELECTION-SCREEN : BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT - 001 . SELECT-OPTIONS : S_VKORG FOR VBAK -VKORG OBLIGATORY , S_KUNNR FOR VBAK -KUNNR , S_VGBEL FOR VBAK -VBELN , S_VBELN FOR LIKP -VBELN , S_WADAT FOR LIKP -WADAT_IST , S_WBSTK FOR VBUK -WBSTK , S_LGORT FOR LIPS -LGORT . SELECTION-SCREEN END OF BLOCK B1 . SELECTION-SCREEN : BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT - 004 . PARAMETER : P_ZXF AS CHECKBOX DEFAULT '' . PARAMETER : P_YF AS CHECKBOX DEFAULT '' . SELECTION-SCREEN SKIP 1 . PARAMETER : P_HXZXF AS CHECKBOX DEFAULT '' . PARAMETER : P_HXYF AS CHECKBOX DEFAULT '' . SELECTION-SCREEN SKIP 1 . PARAMETER : P_DDWKP AS CHECKBOX DEFAULT '' . PARAMETER : P_DDYKP AS CHECKBOX DEFAULT '' . SELECTION-SCREEN END OF BLOCK B2 . SELECTION-SCREEN SKIP . SELECTION-SCREEN COMMENT /1 ( 10 ) TEXT - 005 . SELECTION-SCREEN COMMENT /1 ( 83 ) TEXT - 006 . SELECTION-SCREEN COMMENT /1 ( 83 ) TEXT - 007 . *&---------------------------------------------------------------------* *& START-OF-SELECTION *&---------------------------------------------------------------------* START-OF-SELECTION . CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING PERCENTAGE = 100 TEXT = '正在处理,请稍等......' . PERFORM GET_DATA . IF GT_DETAL IS NOT INITIAL . DATA : LO_MAIN_ALV TYPE REF TO LCL_MAIN_ALV . CREATE OBJECT LO_MAIN_ALV . LO_MAIN_ALV ->GENERATE_ALV ( ) . ELSE . MESSAGE '没有找到可以显示的记录!' TYPE 'S' DISPLAY LIKE 'E' . EXIT . ENDIF . END-OF-SELECTION . *&---------------------------------------------------------------------* *& Form GET_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM GET_DATA . DATA : LW_LIPS TYPE LIPS . DATA :LT_VBAK LIKE TABLE OF VBAK WITH HEADER LINE , LT_VBAP LIKE TABLE OF VBAP WITH HEADER LINE , LT_KONV LIKE TABLE OF KONV WITH HEADER LINE , LT_KNA1 LIKE TABLE OF KNA1 WITH HEADER LINE , LT_T001L LIKE TABLE OF T001L WITH HEADER LINE , LT_HXMX LIKE TABLE OF ZSD_HXMX WITH HEADER LINE , LT_TVPOD LIKE TABLE OF TVPOD WITH HEADER LINE , LT_TVKO LIKE TABLE OF TVKO WITH HEADER LINE , LT_VBPA LIKE TABLE OF VBPA WITH HEADER LINE . "销售发票明细 DATA : BEGIN OF LT_VBRP OCCURS 0 , VBELN TYPE VBRP -VBELN , POSNR TYPE VBRP -POSNR , KZWI1 TYPE VBRP -KZWI1 , VRKME TYPE VBRP -VRKME , FKIMG TYPE VBRP -FKIMG , AUBEL TYPE VBRP -AUBEL , AUPOS TYPE VBRP -AUPOS , VGBEL TYPE VBRP -VGBEL , VGPOS TYPE VBRP -VGPOS , KNUMV TYPE VBRK -KNUMV , SHKZG TYPE VBRP -SHKZG , FKDAT TYPE VBRK -FKDAT , KURRF TYPE VBRK -KURRF , "汇率 NETWR TYPE VBAP -NETWR , RFBSK TYPE VBRK -RFBSK , SFAKN TYPE VBRK -SFAKN , END OF LT_VBRP . REFRESH GT_DETAL . SELECT * FROM TVKO INTO TABLE LT_TVKO . SELECT LIKP ~VBELN AS VBELN_VL LIPS ~POSNR AS POSNR_VL LIKP ~WADAT_IST LIKP ~KUNNR LIKP ~VKORG LIPS ~MATNR LIPS ~ARKTX LIPS ~LFIMG LIPS ~VRKME LIPS ~VGBEL AS VBELN LIPS ~VGPOS AS POSNR FROM LIPS INNER JOIN VBUK ON VBUK ~VBELN = LIPS ~VBELN INNER JOIN LIKP ON LIKP ~VBELN = LIPS ~VBELN INTO CORRESPONDING FIELDS OF TABLE GT_DETAL WHERE LIKP ~VKORG IN S_VKORG AND LIKP ~KUNNR IN S_KUNNR AND LIPS ~VGBEL IN S_VGBEL AND LIKP ~VBELN IN S_VBELN AND LIKP ~WADAT_IST IN S_WADAT AND LIPS ~LGORT IN S_LGORT AND VBUK ~WBSTK IN S_WBSTK AND VBUK ~VBTYP = 'J' AND VBUK ~VBOBJ = 'L' AND LIPS ~LFIMG > 0 AND LIKP ~LFART = 'LF' "外向交货 . IF GT_DETAL[] IS NOT INITIAL . "销售订单 SELECT * FROM VBAK INTO TABLE LT_VBAK FOR ALL ENTRIES IN GT_DETAL WHERE VBELN = GT_DETAL -VBELN . IF LT_VBAK[] IS NOT INITIAL . SELECT * FROM KNA1 INTO TABLE LT_KNA1 FOR ALL ENTRIES IN LT_VBAK WHERE KUNNR = LT_VBAK -KUNNR . SELECT * FROM VBPA INTO TABLE LT_VBPA FOR ALL ENTRIES IN LT_VBAK WHERE VBELN = LT_VBAK -VBELN . SELECT * FROM KONV INTO TABLE LT_KONV FOR ALL ENTRIES IN LT_VBAK WHERE KNUMV = LT_VBAK -KNUMV AND KBETR <> 0 . SELECT * FROM VBAP INTO TABLE LT_VBAP FOR ALL ENTRIES IN LT_VBAK WHERE VBELN = LT_VBAK -VBELN . IF LT_VBAP[] IS NOT INITIAL . SELECT * FROM T001L INTO TABLE LT_T001L FOR ALL ENTRIES IN LT_VBAP WHERE LGORT = LT_VBAP -LGORT . ENDIF . ENDIF . "运费/装卸费核销明细表 SELECT * FROM ZSD_HXMX INTO TABLE LT_HXMX FOR ALL ENTRIES IN GT_DETAL WHERE VBELN = GT_DETAL -VBELN_VL AND POSNR = GT_DETAL -POSNR_VL . SELECT * FROM TVPOD INTO TABLE LT_TVPOD FOR ALL ENTRIES IN GT_DETAL WHERE HANDLE_LIPS = GT_DETAL -HANDLE . "取开票数量金额 SELECT VBRK ~KNUMV VBRP ~VBELN VBRP ~POSNR VBRP ~KZWI1 VBRP ~VRKME VBRP ~FKIMG VBRP ~AUBEL VBRP ~AUPOS VBRP ~SHKZG VBRK ~FKDAT VBRK ~KURRF VBRP ~NETWR VBRP ~VGBEL VBRP ~VGPOS VBRK ~RFBSK VBRK ~SFAKN FROM VBRP INNER JOIN VBRK ON VBRK ~VBELN = VBRP ~VBELN INTO CORRESPONDING FIELDS OF TABLE LT_VBRP FOR ALL ENTRIES IN GT_DETAL WHERE VBRP ~VGBEL = GT_DETAL -VBELN_VL AND VBRP ~VGPOS = GT_DETAL -POSNR_VL AND VBRP ~FKIMG > 0 . LOOP AT LT_VBRP WHERE SFAKN <> '' . DELETE LT_VBRP WHERE VBELN = LT_VBRP -SFAKN OR SFAKN = LT_VBRP -SFAKN . ENDLOOP . SORT LT_VBRP BY VBELN POSNR ASCENDING FKDAT DESCENDING . ENDIF . SORT LT_VBAK BY VBELN . SORT LT_VBAP BY VBELN POSNR . SORT LT_KNA1 BY KUNNR . SORT LT_KONV BY KNUMV KPOSN KSCHL KINAK . SORT LT_T001L BY LGORT . SORT LT_HXMX BY VBELN POSNR . SORT LT_TVKO BY VKORG . LOOP AT GT_DETAL ASSIGNING <DETAL> . "核销信息获取ZSD_HXMX READ TABLE LT_HXMX WITH KEY VBELN = <DETAL> -VBELN_VL POSNR = <DETAL> -POSNR_VL BINARY SEARCH . IF SY -SUBRC = 0 . <DETAL> -HXYFT = LT_HXMX -HXYFT . <DETAL> -HXYFB = LT_HXMX -HXYFB . <DETAL> -HXZXT = LT_HXMX -HXZXT . <DETAL> -HXZXB = LT_HXMX -HXZXB . <DETAL> -HXDDT = LT_HXMX -HXDDT . <DETAL> -HXDDB = LT_HXMX -HXDDB . <DETAL> -HXDOC = LT_HXMX -HXDOC . <DETAL> -HXBUR = LT_HXMX -HXBUR . <DETAL> -HXGJR = LT_HXMX -HXGJR . <DETAL> -FLAG = LT_HXMX -FLAG . ENDIF . * SELECT SINGLE * FROM LIPS INTO LW_LIPS * WHERE VBELN = <DETAL>-VBELN_VL * AND POSNR = <DETAL>-POSNR_VL. * IF LW_LIPS-KZPOD = '' OR LW_LIPS-KZPOD = 'A'."与POD无关或无差异 * <DETAL>-LFIMG = <DETAL>-LFIMG. * ELSEIF LW_LIPS-KZPOD = 'X'."POD未执行 * <DETAL>-LFIMG = 0. * ELSEIF LW_LIPS-KZPOD = 'B'."POD 差异 * SELECT SINGLE PODMG FROM TVPOD INTO <DETAL>-LFIMG * WHERE HANDLE_LIPS = LW_LIPS-HANDLE * AND POSNR = LW_LIPS-POSNR. * ENDIF. "计算实收数量(VLPOD) LOOP AT LT_TVPOD WHERE HANDLE_LIPS = <DETAL> -HANDLE . IF LT_TVPOD -CALCU = '+' . ADD LT_TVPOD -LFIMG_DIFF TO <DETAL> -LFIMG . ELSEIF LT_TVPOD -CALCU = '-' . SUBTRACT LT_TVPOD -LFIMG_DIFF FROM <DETAL> -LFIMG . ENDIF . ENDLOOP . READ TABLE LT_VBAK WITH KEY VBELN = <DETAL> -VBELN BINARY SEARCH . IF SY -SUBRC = 0 . <DETAL> -VKORG = LT_VBAK -VKORG . <DETAL> -KUNNR = LT_VBAK -KUNNR . <DETAL> -ERDAT = LT_VBAK -ERDAT . <DETAL> -AUDAT = LT_VBAK -AUDAT . <DETAL> -WAERK = LT_VBAK -WAERK . READ TABLE LT_KNA1 WITH KEY KUNNR = <DETAL> -KUNNR BINARY SEARCH . IF SY -SUBRC = 0 . <DETAL> -NAME1 = LT_KNA1 -NAME1 . <DETAL> -STCEG = LT_KNA1 -STCEG . ENDIF . READ TABLE LT_VBPA WITH KEY VBELN = <DETAL> -VBELN PARVW = 'VE' . IF SY -SUBRC = 0 . <DETAL> -PERNR = LT_VBPA -PERNR . SELECT SINGLE NACHN && VORNA FROM PA0002 INTO @<DETAL> -CNAME WHERE PERNR = @LT_VBPA -PERNR . ENDIF . ENDIF . READ TABLE LT_VBAP WITH KEY VBELN = <DETAL> -VBELN POSNR = <DETAL> -POSNR BINARY SEARCH . IF SY -SUBRC = 0 . <DETAL> -MATNR = LT_VBAP -MATNR . <DETAL> -ARKTX = LT_VBAP -ARKTX . <DETAL> -KWMENG = LT_VBAP -KWMENG . <DETAL> -VRKME = LT_VBAP -VRKME . <DETAL> -LGORT = LT_VBAP -LGORT . READ TABLE LT_T001L WITH KEY LGORT = LT_VBAP -LGORT BINARY SEARCH . IF SY -SUBRC = 0 . <DETAL> -LGOBE = LT_T001L -LGOBE . ENDIF . READ TABLE LT_KONV WITH KEY KNUMV = LT_VBAK -KNUMV KPOSN = <DETAL> -POSNR KSCHL = 'KF00' KINAK = '' BINARY SEARCH . IF SY -SUBRC = 0 AND LT_KONV -KBETR > 0 . "代垫运费 <DETAL> -KF00 = LT_KONV -KBETR . <DETAL> -DDYF = <DETAL> -LFIMG * LT_KONV -KBETR . ENDIF . READ TABLE LT_KONV WITH KEY KNUMV = LT_VBAK -KNUMV KPOSN = <DETAL> -POSNR KSCHL = 'Z005' KINAK = '' BINARY SEARCH . IF SY -SUBRC = 0 AND LT_KONV -KBETR > 0 . "代垫装卸费 <DETAL> -Z005 = LT_KONV -KBETR . <DETAL> -DDZX = <DETAL> -LFIMG * LT_KONV -KBETR . ENDIF . READ TABLE LT_KONV WITH KEY KNUMV = LT_VBAK -KNUMV KPOSN = <DETAL> -POSNR KSCHL = 'KF01' KINAK = '' BINARY SEARCH . IF SY -SUBRC = 0 AND LT_KONV -KBETR > 0 . "运费(一票制) <DETAL> -KF01 = LT_KONV -KBETR . <DETAL> -YFHJ = <DETAL> -LFIMG * LT_KONV -KBETR . ENDIF . READ TABLE LT_KONV WITH KEY KNUMV = LT_VBAK -KNUMV KPOSN = <DETAL> -POSNR KSCHL = 'Z003' KINAK = '' BINARY SEARCH . IF SY -SUBRC = 0 AND LT_KONV -KBETR > 0 . "装卸费 <DETAL> -Z003 = LT_KONV -KBETR . <DETAL> -ZXHJ = <DETAL> -LFIMG * LT_KONV -KBETR . ENDIF . ENDIF . <DETAL> -HEJI = <DETAL> -DDYF + <DETAL> -DDZX + <DETAL> -YFHJ + <DETAL> -ZXHJ . "开票信息 READ TABLE LT_VBRP WITH KEY VGBEL = <DETAL> -VBELN_VL VGPOS = <DETAL> -POSNR_VL . IF SY -SUBRC = 0 . <DETAL> -VBELN_F = LT_VBRP -VBELN . <DETAL> -POSNR_F = LT_VBRP -POSNR . <DETAL> -FKDAT = LT_VBRP -FKDAT . <DETAL> -RFBSK = LT_VBRP -RFBSK . ENDIF . "公司代码 年度 READ TABLE LT_TVKO WITH KEY VKORG = <DETAL> -VKORG BINARY SEARCH . IF SY -SUBRC = 0 . <DETAL> -HXBUR = LT_TVKO -BUKRS . <DETAL> -HXGJR = SY -DATUM+0 ( 4 ) . ENDIF . ENDLOOP . * IF S_LGORT[] IS NOT INITIAL. * DELETE GT_DETAL WHERE LGORT NOT IN S_LGORT. * ENDIF. *排序 SORT GT_DETAL BY VKORG KUNNR VBELN POSNR VBELN_VL POSNR_VL . IF P_ZXF = 'X' . DELETE GT_DETAL WHERE DDZX = 0 AND ZXHJ = 0 . ENDIF . IF P_YF = 'X' . DELETE GT_DETAL WHERE YFHJ = 0 . ENDIF . IF P_HXZXF = 'X' . DELETE GT_DETAL WHERE HXZXT IS NOT INITIAL . ENDIF . IF P_HXYF = 'X' . DELETE GT_DETAL WHERE HXYFT IS NOT INITIAL . ENDIF . "钢贸已开票,代垫未开票 IF P_DDWKP = 'X' . DELETE GT_DETAL WHERE RFBSK <> 'C' . DELETE GT_DETAL WHERE DDZX = 0 . DELETE GT_DETAL WHERE HXDDT IS NOT INITIAL . ENDIF . "钢贸已开票,代垫已开票 IF P_DDYKP = 'X' . DELETE GT_DETAL WHERE RFBSK <> 'C' . DELETE GT_DETAL WHERE DDZX = 0 . DELETE GT_DETAL WHERE HXDDT IS INITIAL . ENDIF . ENDFORM . " GET_DATA *----------------------------------------------------------------------* * CLASS lcl_main_alv IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS LCL_MAIN_ALV IMPLEMENTATION . METHOD GENERATE_ALV . * DATA : LX_MSG TYPE REF TO CX_SALV_MSG . TRY . CL_SALV_TABLE =>FACTORY ( IMPORTING R_SALV_TABLE = O_SALV CHANGING T_TABLE = GT_DETAL ) . CATCH CX_SALV_MSG INTO LX_MSG . ENDTRY . CALL METHOD SET_PF_STATUS CHANGING CO_ALV = O_SALV . CALL METHOD SET_LAYOUT CHANGING CO_ALV = O_SALV . CALL METHOD SET_DISPLAY_SETTING CHANGING CO_ALV = O_SALV . CALL METHOD SET_COLUMNS CHANGING CO_ALV = O_SALV . DATA : LO_EVENTS TYPE REF TO CL_SALV_EVENTS_TABLE . LO_EVENTS = O_SALV ->GET_EVENT ( ) . SET HANDLER HANDLE_DOUBLE_CLICK FOR LO_EVENTS . SET HANDLER HANDLE_LINK_CLICK FOR LO_EVENTS . SET HANDLER ON_USER_COMMAND FOR LO_EVENTS . DATA :LR_SELS TYPE REF TO CL_SALV_SELECTIONS . LR_SELS = O_SALV ->GET_SELECTIONS ( ) . LR_SELS ->SET_SELECTION_MODE ( IF_SALV_C_SELECTION_MODE =>ROW_COLUMN ) . * 显示 ALV O_SALV ->DISPLAY ( ) . ENDMETHOD . "generate_alv *设置工具栏 METHOD SET_PF_STATUS . DATA : LO_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS . IF P_DDYKP = 'X' . CO_ALV ->SET_SCREEN_STATUS ( PFSTATUS = 'ZALV_STATUS' REPORT = SY -REPID SET_FUNCTIONS = CO_ALV ->C_FUNCTIONS_ALL ) . ELSE . CO_ALV ->SET_SCREEN_STATUS ( PFSTATUS = 'ZALV_STATUS1' REPORT = SY -REPID SET_FUNCTIONS = CO_ALV ->C_FUNCTIONS_ALL ) . ENDIF . * LO_FUNCTIONS = CO_ALV->GET_FUNCTIONS( ). * LO_FUNCTIONS->SET_ALL( ABAP_TRUE ). * TRY. * LO_FUNCTIONS->SET_FUNCTION( NAME = 'DDDY' BOOLEAN = '' ). * CATCH CX_SALV_WRONG_CALL. "#EC NO_HANDLER * CATCH CX_SALV_NOT_FOUND. "#EC NO_HANDLER * ENDTRY. ENDMETHOD . "set_pf_status * Settings for Layout METHOD SET_LAYOUT . * DATA : LO_LAYOUT TYPE REF TO CL_SALV_LAYOUT , LF_VARIANT TYPE SLIS_VARI , LS_LAYOUT TYPE SALV_S_LAYOUT_INFO , LS_KEY TYPE SALV_S_LAYOUT_KEY . * LO_LAYOUT = CO_ALV ->GET_LAYOUT ( ) . LS_KEY - REPORT = SY -REPID . LS_LAYOUT = CL_SALV_LAYOUT_SERVICE =>GET_DEFAULT_LAYOUT ( S_KEY = LS_KEY RESTRICT = IF_SALV_C_LAYOUT =>RESTRICT_NONE ) . LF_VARIANT = LS_LAYOUT -LAYOUT . LO_LAYOUT ->SET_KEY ( LS_KEY ) . LO_LAYOUT ->SET_DEFAULT ( ABAP_TRUE ) . LO_LAYOUT ->SET_SAVE_RESTRICTION ( IF_SALV_C_LAYOUT =>RESTRICT_NONE ) . LO_LAYOUT ->SET_INITIAL_LAYOUT ( LF_VARIANT ) . ENDMETHOD . "set_layout METHOD SET_DISPLAY_SETTING . * DATA : LO_DISPLAY TYPE REF TO CL_SALV_DISPLAY_SETTINGS . LO_DISPLAY = O_SALV ->GET_DISPLAY_SETTINGS ( ) . LO_DISPLAY ->SET_STRIPED_PATTERN ( 'X' ) . LO_DISPLAY ->SET_FIT_COLUMN_TO_TABLE_SIZE ( 'X' ) . * lo_display->set_list_header( 'ALV Test for Display Settings' ). * ENDMETHOD . "SET_DISPLAY_SETTING * 设置列属性 METHOD SET_COLUMNS . * DATA : LO_COLS TYPE REF TO CL_SALV_COLUMNS_TABLE , LO_COLUMN TYPE REF TO CL_SALV_COLUMN_TABLE . DATA : LV_SCRTEXT_L TYPE SCRTEXT_L . DATA : COLOR TYPE LVC_S_COLO . LO_COLS = CO_ALV ->GET_COLUMNS ( ) . LO_COLS ->SET_OPTIMIZE ( ABAP_TRUE ) . LO_COLS ->SET_KEY_FIXATION ( ABAP_TRUE ) . TRY . * LO_COLS->SET_CELL_TYPE_COLUMN( 'IT_CELL_TYPES' ). * LO_COLS->SET_COLOR_COLUMN( 'IT_CELL_COLOR' ). CATCH CX_SALV_DATA_ERROR . "#EC NO_HANDLER ENDTRY . TRY . LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'CHECK' ) . LO_COLUMN ->SET_CELL_TYPE ( IF_SALV_C_CELL_TYPE =>CHECKBOX_HOTSPOT ) . LO_COLUMN ->SET_KEY ( 'X' ) . LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'VBELN' ) . LO_COLUMN ->SET_CELL_TYPE ( IF_SALV_C_CELL_TYPE => HOTSPOT ) . LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'VBELN_VL' ) . LO_COLUMN ->SET_CELL_TYPE ( IF_SALV_C_CELL_TYPE => HOTSPOT ) . LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'VBELN_F' ) . LO_COLUMN ->SET_CELL_TYPE ( IF_SALV_C_CELL_TYPE => HOTSPOT ) . LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'HANDLE' ) . LO_COLUMN ->SET_VISIBLE ( ABAP_FALSE ) . LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'HXBUR' ) . LO_COLUMN ->SET_VISIBLE ( ABAP_FALSE ) . LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'HXGJR' ) . LO_COLUMN ->SET_VISIBLE ( ABAP_FALSE ) . LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'KF00' ) . LV_SCRTEXT_L = '代垫运费单价' . LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) . LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) . LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'Z005' ) . LV_SCRTEXT_L = '代垫装卸费单价' . LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) . LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) . LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'KF01' ) . LV_SCRTEXT_L = '运费(一票制)单价' . LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) . LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) . LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'Z003' ) . LV_SCRTEXT_L = '装卸费单价' . LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) . LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) . LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'DDYF' ) . LV_SCRTEXT_L = '代垫运费' . LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) . LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) . LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'DDZX' ) . LV_SCRTEXT_L = '代垫装卸费' . LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) . LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) . COLOR -COL = '3' . COLOR -INT = '0' . COLOR -INV = '0' . LO_COLUMN ->SET_COLOR ( COLOR ) . LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'YFHJ' ) . LV_SCRTEXT_L = '运费(一票制)' . LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) . LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) . COLOR -COL = '5' . COLOR -INT = '0' . COLOR -INV = '0' . LO_COLUMN ->SET_COLOR ( COLOR ) . LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'ZXHJ' ) . LV_SCRTEXT_L = '装卸费' . LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) . LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) . COLOR -COL = '3' . COLOR -INT = '0' . COLOR -INV = '0' . LO_COLUMN ->SET_COLOR ( COLOR ) . LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'HEJI' ) . LV_SCRTEXT_L = '合计' . LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) . LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) . LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'HXZXT' ) . LV_SCRTEXT_L = '核销日期(装卸费)' . LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) . LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) . COLOR -COL = '3' . COLOR -INT = '0' . COLOR -INV = '0' . LO_COLUMN ->SET_COLOR ( COLOR ) . LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'HXZXB' ) . LV_SCRTEXT_L = '备注(装卸费)' . LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) . LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) . COLOR -COL = '3' . COLOR -INT = '0' . COLOR -INV = '0' . LO_COLUMN ->SET_COLOR ( COLOR ) . LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'HXYFT' ) . LV_SCRTEXT_L = '核销日期(运费)' . LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) . LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) . COLOR -COL = '5' . COLOR -INT = '0' . COLOR -INV = '0' . LO_COLUMN ->SET_COLOR ( COLOR ) . LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'HXYFB' ) . LV_SCRTEXT_L = '备注(运费)' . LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) . LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) . COLOR -COL = '5' . COLOR -INT = '0' . COLOR -INV = '0' . LO_COLUMN ->SET_COLOR ( COLOR ) . LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'HXDDT' ) . LV_SCRTEXT_L = '代垫装卸费开票核销日期' . LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) . LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) . COLOR -COL = '3' . COLOR -INT = '0' . COLOR -INV = '0' . LO_COLUMN ->SET_COLOR ( COLOR ) . LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'HXDDB' ) . LV_SCRTEXT_L = '代垫装卸费开票核销备注' . LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) . LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) . COLOR -COL = '3' . COLOR -INT = '0' . COLOR -INV = '0' . LO_COLUMN ->SET_COLOR ( COLOR ) . LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'HXDOC' ) . LV_SCRTEXT_L = '代垫装卸费开票核销凭证' . LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) . LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) . COLOR -COL = '3' . COLOR -INT = '0' . COLOR -INV = '0' . LO_COLUMN ->SET_COLOR ( COLOR ) . LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'FLAG' ) . LV_SCRTEXT_L = '是否打印' . LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) . LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) . COLOR -COL = '3' . COLOR -INT = '0' . COLOR -INV = '0' . LO_COLUMN ->SET_COLOR ( COLOR ) . LO_COLUMN ->SET_VISIBLE ( ABAP_TRUE ) . CATCH CX_SALV_NOT_FOUND . "#EC NO_HANDLER ENDTRY . *小计及排序设置 * DATA: LR_AGGREGATIONS TYPE REF TO CL_SALV_AGGREGATIONS. * LR_AGGREGATIONS = CO_ALV->GET_AGGREGATIONS( ). * LR_AGGREGATIONS->CLEAR( ). * DATA: LR_GROUPS TYPE REF TO CL_SALV_SORTS . * LR_GROUPS = CO_ALV->GET_SORTS( ) . * LR_GROUPS->CLEAR( ). * * TRY. * LR_AGGREGATIONS->ADD_AGGREGATION( COLUMNNAME = 'HSLVTS' ). * LR_GROUPS->ADD_SORT( COLUMNNAME = 'RACCT' * POSITION = 1 * SUBTOTAL = ABAP_TRUE * SEQUENCE = IF_SALV_C_SORT=>SORT_UP ). * * CATCH CX_SALV_NOT_FOUND CX_SALV_DATA_ERROR CX_SALV_EXISTING. * ENDTRY. ENDMETHOD . "SET_COLUMNS METHOD HANDLE_DOUBLE_CLICK . * DATA: LO_DETAL_ALV TYPE REF TO LCL_DETAL_ALV. * CASE COLUMN. * WHEN OTHERS. * READ TABLE GT_ITAB INTO GW_ITAB INDEX ROW. * IF SY-SUBRC = 0. * CREATE OBJECT LO_DETAL_ALV. * LO_DETAL_ALV->GET_SUBDATA( GW_ITAB ). * LO_DETAL_ALV->GENERATE_ALV( ). * ENDIF. * ENDCASE. ENDMETHOD . "HANDLE_DOUBLE_CLICK METHOD HANDLE_LINK_CLICK . * FIELD-SYMBOLS: <OUTTAB> TYPE STANDARD TABLE, * <LFA_DATA> TYPE ANY, * <LF_CHECK> TYPE FLAG. * DATA : * IF_TABNAME TYPE STRING. "alv_输出内部名字 * CASE COLUMN. * WHEN 'CHECK'. * READ TABLE GT_ITAB ASSIGNING <ITAB> INDEX ROW. * IF SY-SUBRC = 0. * IF <ITAB>-CHECK = 'X'. * <ITAB>-CHECK = ''. * ELSE. * <ITAB>-CHECK = 'X'. * ENDIF. * ENDIF. * WHEN 'BELNR'. * READ TABLE GT_ITAB INTO GW_ITAB INDEX ROW. * IF SY-SUBRC = 0. * SET PARAMETER ID 'BUK' FIELD GW_ITAB-RBUKRS. * SET PARAMETER ID 'GJR' FIELD GW_ITAB-GJAHR. * SET PARAMETER ID 'BLN' FIELD GW_ITAB-BELNR. * CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN. * ENDIF. * ENDCASE. * ME->REFRESH_ALV( ). CASE COLUMN . WHEN 'VBELN' . READ TABLE GT_DETAL INTO GW_DETAL INDEX ROW . IF SY -SUBRC = 0 . SET PARAMETER ID 'AUN' FIELD GW_DETAL -VBELN . CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN . ENDIF . WHEN 'CHECK' . READ TABLE GT_DETAL INTO GW_DETAL INDEX ROW . IF SY -SUBRC = 0 . IF GW_DETAL - CHECK = 'X' . CLEAR GW_DETAL - CHECK . ELSE . GW_DETAL - CHECK = 'X' . ENDIF . ENDIF . MODIFY GT_DETAL FROM GW_DETAL INDEX ROW . WHEN 'VBELN_VL' . READ TABLE GT_DETAL INTO GW_DETAL INDEX ROW . IF SY -SUBRC = 0 . SET PARAMETER ID 'VL' FIELD GW_DETAL -VBELN_VL . CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN . ENDIF . WHEN 'VBELN_F' . READ TABLE GT_DETAL INTO GW_DETAL INDEX ROW . IF SY -SUBRC = 0 AND GW_DETAL -VBELN_F IS NOT INITIAL . SET PARAMETER ID 'VF' FIELD GW_DETAL -VBELN_F . CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN . ENDIF . ENDCASE . ME ->REFRESH_ALV ( ) . ENDMETHOD . "HANDLE_link_click METHOD ON_USER_COMMAND . DATA : O_SELS TYPE REF TO CL_SALV_SELECTIONS , T_ROWS TYPE SALV_T_ROW , L_ROW TYPE LINE OF SALV_T_ROW . CASE E_SALV_FUNCTION . * WHEN 'SALL'. * GW_ITAB-CHECK = 'X'. * MODIFY GT_ITAB FROM GW_ITAB TRANSPORTING CHECK WHERE CHECK = ''. * WHEN 'DSAL'. * GW_ITAB-CHECK = ''. * MODIFY GT_ITAB FROM GW_ITAB TRANSPORTING CHECK WHERE CHECK = 'X'. WHEN 'PRINT' . * WHEN 'SALL'. * O_SELS = O_ALV->GET_SELECTIONS( ). * T_ROWS = O_SELS->GET_SELECTED_ROWS( ). * IF LINES( T_ROWS ) > 0. * READ TABLE T_ROWS INTO L_ROW INDEX 1. * ENDIF. WHEN 'ZALL' . LOOP AT GT_DETAL ASSIGNING <DETAL> WHERE CHECK = '' . <DETAL> - CHECK = 'X' . ENDLOOP . WHEN 'ZSAL' . LOOP AT GT_DETAL ASSIGNING <DETAL> WHERE CHECK = 'X' . CLEAR <DETAL> - CHECK . ENDLOOP . WHEN 'ZZXF' . "核销装卸费 READ TABLE GT_DETAL TRANSPORTING NO FIELDS WITH KEY CHECK = 'X' . IF SY -SUBRC = 0 . PERFORM FRM_HX_ZXF . ELSE . MESSAGE '请选择需要核销的条目!' TYPE 'E' . ENDIF . WHEN 'ZYF' . "核销运费 READ TABLE GT_DETAL TRANSPORTING NO FIELDS WITH KEY CHECK = 'X' . IF SY -SUBRC = 0 . PERFORM FRM_HX_YF . ELSE . MESSAGE '请选择需要核销的条目!' TYPE 'E' . ENDIF . WHEN 'ZSZXF' . "取消核销装卸费 READ TABLE GT_DETAL TRANSPORTING NO FIELDS WITH KEY CHECK = 'X' . IF SY -SUBRC = 0 . PERFORM FRM_QXHX_ZXF . ELSE . MESSAGE '请选择需要取消核销的条目!' TYPE 'E' . ENDIF . WHEN 'ZSYF' . "取消核销运费 READ TABLE GT_DETAL TRANSPORTING NO FIELDS WITH KEY CHECK = 'X' . IF SY -SUBRC = 0 . PERFORM FRM_QXHX_YF . ELSE . MESSAGE '请选择需要取消核销的条目!' TYPE 'E' . ENDIF . WHEN 'DDHX' . "代垫装卸费开票核销 READ TABLE GT_DETAL TRANSPORTING NO FIELDS WITH KEY CHECK = 'X' . IF SY -SUBRC = 0 . PERFORM FRM_DDHX_ZXF . ELSE . MESSAGE '请选择需要核销的条目!' TYPE 'E' . ENDIF . WHEN 'DDDY' . "代垫装卸费结算打印 READ TABLE GT_DETAL TRANSPORTING NO FIELDS WITH KEY CHECK = 'X' . IF SY -SUBRC = 0 . PERFORM FRM_DDDY_ZXF . ELSE . MESSAGE '请选择需要打印的条目!' TYPE 'E' . ENDIF . ENDCASE . ME ->REFRESH_ALV ( ) . ENDMETHOD . "ON_USER_COMMAND METHOD REFRESH_ALV . DATA : LO_COLS TYPE REF TO CL_SALV_COLUMNS_TABLE , LV_STBL TYPE LVC_S_STBL . LO_COLS = O_SALV ->GET_COLUMNS ( ) . LO_COLS ->SET_OPTIMIZE ( ABAP_TRUE ) . LV_STBL -ROW = 'X' . LV_STBL -COL = 'X' . O_SALV -> REFRESH ( S_STABLE = LV_STBL ) . ENDMETHOD . "REFRESH_alv ENDCLASS . "lcl_main_alv IMPLEMENTATION *----------------------------------------------------------------------* * CLASS LCL_EKPO_F_ALV IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* *CLASS LCL_DETAL_ALV IMPLEMENTATION. * METHOD GET_SUBDATA. * REFRESH T_DETAL. * LOOP AT GT_DETAL INTO GW_DETAL WHERE VKORG = IW_ITAB-VKORG * AND KUNNR = IW_ITAB-KUNNR * AND PERNR = IW_ITAB-PERNR. * APPEND GW_DETAL TO T_DETAL. * CLEAR GW_DETAL. * ENDLOOP. * ENDMETHOD. "GET_SUBDATA * METHOD GENERATE_ALV. * TRY. * * CL_SALV_TABLE=>FACTORY( * IMPORTING * R_SALV_TABLE = O_SALV * CHANGING * T_TABLE = T_DETAL ). * * CATCH CX_SALV_MSG. * * ENDTRY. * DATA: LO_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS. * LO_FUNCTIONS = O_SALV->GET_FUNCTIONS( ). * LO_FUNCTIONS->SET_ALL( ABAP_TRUE ). * * DATA: LO_COLS_TAB TYPE REF TO CL_SALV_COLUMNS_TABLE, * LO_COL_TAB TYPE REF TO CL_SALV_COLUMN_TABLE. * DATA:LV_SCRTEXT_L TYPE SCRTEXT_L, * LV_SCRTEXT_M TYPE SCRTEXT_M, * LV_SCRTEXT_S TYPE SCRTEXT_S. * LO_COLS_TAB = O_SALV->GET_COLUMNS( ). * LO_COLS_TAB->SET_OPTIMIZE( 'X' ). * TRY. * LO_COL_TAB ?= LO_COLS_TAB->GET_COLUMN( 'VBELN' ). * LO_COL_TAB->SET_CELL_TYPE( IF_SALV_C_CELL_TYPE=>HOTSPOT ). * * LO_COL_TAB ?= LO_COLS_TAB->GET_COLUMN( 'KF00' ). * LV_SCRTEXT_L = '代垫运费单价'. * LO_COL_TAB->SET_LONG_TEXT( LV_SCRTEXT_L ). * LO_COL_TAB->SET_FIXED_HEADER_TEXT( 'L' ). * * LO_COL_TAB ?= LO_COLS_TAB->GET_COLUMN( 'Z005' ). * LV_SCRTEXT_L = '代垫装卸费单价'. * LO_COL_TAB->SET_LONG_TEXT( LV_SCRTEXT_L ). * LO_COL_TAB->SET_FIXED_HEADER_TEXT( 'L' ). * * LO_COL_TAB ?= LO_COLS_TAB->GET_COLUMN( 'KF01' ). * LV_SCRTEXT_L = '运费(一票制)单价'. * LO_COL_TAB->SET_LONG_TEXT( LV_SCRTEXT_L ). * LO_COL_TAB->SET_FIXED_HEADER_TEXT( 'L' ). * * LO_COL_TAB ?= LO_COLS_TAB->GET_COLUMN( 'Z003' ). * LV_SCRTEXT_L = '装卸费单价'. * LO_COL_TAB->SET_LONG_TEXT( LV_SCRTEXT_L ). * LO_COL_TAB->SET_FIXED_HEADER_TEXT( 'L' ). * * LO_COL_TAB ?= LO_COLS_TAB->GET_COLUMN( 'DDYF' ). * LV_SCRTEXT_L = '代垫运费'. * LO_COL_TAB->SET_LONG_TEXT( LV_SCRTEXT_L ). * LO_COL_TAB->SET_FIXED_HEADER_TEXT( 'L' ). * * LO_COL_TAB ?= LO_COLS_TAB->GET_COLUMN( 'DDZX' ). * LV_SCRTEXT_L = '代垫装卸费'. * LO_COL_TAB->SET_LONG_TEXT( LV_SCRTEXT_L ). * LO_COL_TAB->SET_FIXED_HEADER_TEXT( 'L' ). * * LO_COL_TAB ?= LO_COLS_TAB->GET_COLUMN( 'YFHJ' ). * LV_SCRTEXT_L = '运费(一票制)'. * LO_COL_TAB->SET_LONG_TEXT( LV_SCRTEXT_L ). * LO_COL_TAB->SET_FIXED_HEADER_TEXT( 'L' ). * * LO_COL_TAB ?= LO_COLS_TAB->GET_COLUMN( 'ZXHJ' ). * LV_SCRTEXT_L = '装卸费'. * LO_COL_TAB->SET_LONG_TEXT( LV_SCRTEXT_L ). * LO_COL_TAB->SET_FIXED_HEADER_TEXT( 'L' ). * * LO_COL_TAB ?= LO_COLS_TAB->GET_COLUMN( 'HEJI' ). * LV_SCRTEXT_L = '合计'. * LO_COL_TAB->SET_LONG_TEXT( LV_SCRTEXT_L ). * LO_COL_TAB->SET_FIXED_HEADER_TEXT( 'L' ). * CATCH CX_SALV_NOT_FOUND. "#EC NO_HANDLER * ENDTRY. **小计 ** DATA: LR_AGGREGATIONS TYPE REF TO CL_SALV_AGGREGATIONS. ** LR_AGGREGATIONS = O_SALV->GET_AGGREGATIONS( ). ** LR_AGGREGATIONS->CLEAR( ). ** DATA: LR_GROUPS TYPE REF TO CL_SALV_SORTS . ** LR_GROUPS = O_SALV->GET_SORTS( ) . ** LR_GROUPS->CLEAR( ). * ** TRY. ** LR_AGGREGATIONS->ADD_AGGREGATION( COLUMNNAME = 'MENGE' ). ** LR_GROUPS->ADD_SORT( COLUMNNAME = 'EBELN' ** POSITION = 1 *** SUBTOTAL = ABAP_TRUE ** SEQUENCE = IF_SALV_C_SORT=>SORT_UP ). ** LR_GROUPS->ADD_SORT( COLUMNNAME = 'EBELP' ** POSITION = 1 *** SUBTOTAL = ABAP_TRUE ** SEQUENCE = IF_SALV_C_SORT=>SORT_UP ). ** CATCH CX_SALV_NOT_FOUND CX_SALV_DATA_ERROR CX_SALV_EXISTING. ** ENDTRY. ** 设置事件 * DATA: LO_EVENTS TYPE REF TO CL_SALV_EVENTS_TABLE. * LO_EVENTS = O_SALV->GET_EVENT( ). * SET HANDLER HANDLE_LINK_CLICK FOR LO_EVENTS. **行列选择 * DATA:LR_SELS TYPE REF TO CL_SALV_SELECTIONS. * LR_SELS = O_SALV->GET_SELECTIONS( ). * LR_SELS->SET_SELECTION_MODE( IF_SALV_C_SELECTION_MODE=>ROW_COLUMN ). * ** SET HANDLER ON_REFRESH_DETAILS FOR ALL INSTANCES. * O_SALV->DISPLAY( ). * * ENDMETHOD. "generate_alv * METHOD HANDLE_LINK_CLICK. * * CASE COLUMN. * WHEN 'VBELN'. * READ TABLE T_DETAL INTO LW_DETAL INDEX ROW. * IF SY-SUBRC = 0. * SET PARAMETER ID 'AUN' FIELD LW_DETAL-VBELN. * CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN. * ENDIF. * ENDCASE. * ENDMETHOD. "HANDLE_link_click *ENDCLASS. *&---------------------------------------------------------------------* *& Form FRM_HX_ZXF *&---------------------------------------------------------------------* * 核销——装卸费 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM FRM_HX_ZXF . DATA : LV_RETURNCODE , LV_DAT TYPE ERDAT , LV_BZ TYPE ZE_ZBEIZ . DATA : LT_HXMX TYPE STANDARD TABLE OF ZSD_HXMX , LW_HXMX TYPE ZSD_HXMX . CLEAR LV_RETURNCODE . PERFORM FRM_GET_CHANGED CHANGING LV_DAT LV_BZ LV_RETURNCODE . IF LV_RETURNCODE IS INITIAL . LOOP AT GT_DETAL ASSIGNING <DETAL> WHERE CHECK = 'X' . "已经核销的需要剔除 IF <DETAL> -HXZXT <> '00000000' . CONTINUE . ENDIF . IF <DETAL> -DDZX = 0 AND <DETAL> -ZXHJ = 0 . CONTINUE . ENDIF . <DETAL> -HXZXT = LV_DAT . IF <DETAL> -HXZXT = '' . <DETAL> -HXZXT = SY -DATUM . ENDIF . <DETAL> -HXZXB = LV_BZ . CLEAR : LW_HXMX . MOVE-CORRESPONDING <DETAL> TO LW_HXMX . LW_HXMX -VBELN = <DETAL> -VBELN_VL . LW_HXMX -POSNR = <DETAL> -POSNR_VL . LW_HXMX -Z003 = <DETAL> -ZXHJ . LW_HXMX -Z005 = <DETAL> -DDZX . LW_HXMX -KF01 = <DETAL> -YFHJ . * LW_HXMX-HXZXT = <DETAL>-HXZXT. * LW_HXMX-HXZXB = <DETAL>-HXZXB. * LW_HXMX-HXYFT = <DETAL>-HXYFT. * LW_HXMX-HXYFB = <DETAL>-HXYFB. APPEND LW_HXMX TO LT_HXMX . ENDLOOP . IF LT_HXMX IS NOT INITIAL . MODIFY ZSD_HXMX FROM TABLE LT_HXMX . IF SY -SUBRC = 0 . COMMIT WORK . MESSAGE '装卸费核销成功!' TYPE 'S' . ELSE . ROLLBACK WORK . MESSAGE '装卸费核销失败!' TYPE 'E' . ENDIF . ELSE . MESSAGE '没有需要核销的项目!' TYPE 'E' . ENDIF . ENDIF . ENDFORM . *&---------------------------------------------------------------------* *& Form FRM_HX_YF *&---------------------------------------------------------------------* * 核销——运费 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM FRM_HX_YF . DATA : LV_RETURNCODE , LV_DAT TYPE ERDAT , LV_BZ TYPE ZE_ZBEIZ . DATA : LT_HXMX TYPE STANDARD TABLE OF ZSD_HXMX , LW_HXMX TYPE ZSD_HXMX . CLEAR LV_RETURNCODE . PERFORM FRM_GET_CHANGED CHANGING LV_DAT LV_BZ LV_RETURNCODE . IF LV_RETURNCODE IS INITIAL . LOOP AT GT_DETAL ASSIGNING <DETAL> WHERE CHECK = 'X' . "已经核销的需要剔除 IF <DETAL> -HXYFT <> '00000000' . CONTINUE . ENDIF . IF <DETAL> -YFHJ = 0 . CONTINUE . ENDIF . <DETAL> -HXYFT = LV_DAT . IF <DETAL> -HXYFT = '' . <DETAL> -HXYFT = SY -DATUM . ENDIF . <DETAL> -HXYFB = LV_BZ . CLEAR : LW_HXMX . MOVE-CORRESPONDING <DETAL> TO LW_HXMX . LW_HXMX -VBELN = <DETAL> -VBELN_VL . LW_HXMX -POSNR = <DETAL> -POSNR_VL . LW_HXMX -Z003 = <DETAL> -ZXHJ . LW_HXMX -Z005 = <DETAL> -DDZX . LW_HXMX -KF01 = <DETAL> -YFHJ . * LW_HXMX-HXZXT = <DETAL>-HXZXT. * LW_HXMX-HXZXB = <DETAL>-HXZXB. * LW_HXMX-HXYFT = <DETAL>-HXYFT. * LW_HXMX-HXYFB = <DETAL>-HXYFB. APPEND LW_HXMX TO LT_HXMX . ENDLOOP . IF LT_HXMX IS NOT INITIAL . MODIFY ZSD_HXMX FROM TABLE LT_HXMX . IF SY -SUBRC = 0 . COMMIT WORK . MESSAGE '运费核销成功!' TYPE 'S' . ELSE . ROLLBACK WORK . MESSAGE '运费核销失败!' TYPE 'E' . ENDIF . ELSE . MESSAGE '没有需要核销的项目!' TYPE 'E' . ENDIF . ENDIF . ENDFORM . *&---------------------------------------------------------------------* *& Form FRM_QXHX_ZXF *&---------------------------------------------------------------------* * 取消核销——装卸费 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM FRM_QXHX_ZXF . DATA : LV_RETURN TYPE C . "信息提示框返回 DATA : LT_HXMX TYPE STANDARD TABLE OF ZSD_HXMX , LW_HXMX TYPE ZSD_HXMX . PERFORM FRM_POPUP_INFO USING TEXT - 003 TEXT - 002 CHANGING LV_RETURN . IF LV_RETURN <> 'J' . EXIT . ENDIF . LOOP AT GT_DETAL ASSIGNING <DETAL> WHERE CHECK = 'X' . IF <DETAL> -HXZXT IS INITIAL . CONTINUE . ENDIF . CLEAR <DETAL> -HXZXT . CLEAR <DETAL> -HXZXB . CLEAR : LW_HXMX . MOVE-CORRESPONDING <DETAL> TO LW_HXMX . LW_HXMX -VBELN = <DETAL> -VBELN_VL . LW_HXMX -POSNR = <DETAL> -POSNR_VL . LW_HXMX -Z003 = <DETAL> -ZXHJ . LW_HXMX -Z005 = <DETAL> -DDZX . LW_HXMX -KF01 = <DETAL> -YFHJ . * LW_HXMX-HXZXT = <DETAL>-HXZXT. * LW_HXMX-HXZXB = <DETAL>-HXZXB. * LW_HXMX-HXYFT = <DETAL>-HXYFT. * LW_HXMX-HXYFB = <DETAL>-HXYFB. APPEND LW_HXMX TO LT_HXMX . ENDLOOP . IF LT_HXMX IS NOT INITIAL . MODIFY ZSD_HXMX FROM TABLE LT_HXMX . IF SY -SUBRC = 0 . COMMIT WORK . MESSAGE '装卸费取消核销成功!' TYPE 'S' . ELSE . ROLLBACK WORK . MESSAGE '装卸费取消核销失败!' TYPE 'E' . ENDIF . ELSE . MESSAGE '没有需要取消核销的项目!' TYPE 'E' . ENDIF . ENDFORM . *&---------------------------------------------------------------------* *& Form FRM_QXHX_YF *&---------------------------------------------------------------------* * 取消核销——运费 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM FRM_QXHX_YF . DATA : LV_RETURN TYPE C . "信息提示框返回 DATA : LT_HXMX TYPE STANDARD TABLE OF ZSD_HXMX , LW_HXMX TYPE ZSD_HXMX . PERFORM FRM_POPUP_INFO USING TEXT - 003 TEXT - 002 CHANGING LV_RETURN . IF LV_RETURN <> 'J' . EXIT . ENDIF . LOOP AT GT_DETAL ASSIGNING <DETAL> WHERE CHECK = 'X' . IF <DETAL> -HXYFT IS INITIAL . CONTINUE . ENDIF . CLEAR <DETAL> -HXYFT . CLEAR <DETAL> -HXYFB . CLEAR : LW_HXMX . MOVE-CORRESPONDING <DETAL> TO LW_HXMX . LW_HXMX -VBELN = <DETAL> -VBELN_VL . LW_HXMX -POSNR = <DETAL> -POSNR_VL . LW_HXMX -Z003 = <DETAL> -ZXHJ . LW_HXMX -Z005 = <DETAL> -DDZX . LW_HXMX -KF01 = <DETAL> -YFHJ . * LW_HXMX-HXZXT = <DETAL>-HXZXT. * LW_HXMX-HXZXB = <DETAL>-HXZXB. * LW_HXMX-HXYFT = <DETAL>-HXYFT. * LW_HXMX-HXYFB = <DETAL>-HXYFB. APPEND LW_HXMX TO LT_HXMX . ENDLOOP . IF LT_HXMX IS NOT INITIAL . MODIFY ZSD_HXMX FROM TABLE LT_HXMX . IF SY -SUBRC = 0 . COMMIT WORK . MESSAGE '运费取消核销成功!' TYPE 'S' . ELSE . ROLLBACK WORK . MESSAGE '运费取消核销失败!' TYPE 'E' . ENDIF . ELSE . MESSAGE '没有需要取消核销的项目!' TYPE 'E' . ENDIF . ENDFORM . *&---------------------------------------------------------------------* *& Form FRM_GET_CHANGED *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * <--P_<ITAB> text * <--P_LV_RETURNCODE text *----------------------------------------------------------------------* FORM FRM_GET_CHANGED CHANGING P_DAT TYPE ERDAT P_BZ TYPE ZE_ZBEIZ P_RETURNCODE . DATA : LT_VALUE LIKE TABLE OF SVAL WITH HEADER LINE , RETURNCODE . LT_VALUE -TABNAME = 'ZSD_HXMX' . LT_VALUE -FIELDNAME = 'HXYFT' . LT_VALUE - VALUE = SY -DATUM . APPEND LT_VALUE . LT_VALUE -TABNAME = 'ZSD_HXMX' . LT_VALUE -FIELDNAME = 'HXYFB' . LT_VALUE - VALUE = '' . APPEND LT_VALUE . CALL FUNCTION 'POPUP_GET_VALUES' EXPORTING * NO_VALUE_CHECK = ' ' POPUP_TITLE = '核销备注' START_COLUMN = '5' START_ROW = '5' IMPORTING RETURNCODE = RETURNCODE TABLES FIELDS = LT_VALUE EXCEPTIONS ERROR_IN_FIELDS = 1 OTHERS = 2 . IF SY -SUBRC = 0 . P_RETURNCODE = RETURNCODE . CHECK RETURNCODE IS INITIAL . "为A表示取消 READ TABLE LT_VALUE WITH KEY FIELDNAME = 'HXYFT' . IF SY -SUBRC = 0 . P_DAT = LT_VALUE - VALUE . ENDIF . READ TABLE LT_VALUE WITH KEY FIELDNAME = 'HXYFB' . IF SY -SUBRC = 0 . P_BZ = LT_VALUE - VALUE . ENDIF . ENDIF . ENDFORM . *&---------------------------------------------------------------------* *& Form frm_popup_info *&---------------------------------------------------------------------* * 弹出框信息 *----------------------------------------------------------------------* * -->P_TEXT1 text * -->P_TEXT2 text * -->P_RETURN text *----------------------------------------------------------------------* FORM FRM_POPUP_INFO USING P_TEXT1 P_TEXT2 CHANGING P_RETURN . CALL FUNCTION 'POPUP_TO_CONFIRM_STEP' "#EC * EXPORTING DEFAULTOPTION = 'Y' TEXTLINE1 = P_TEXT1 TITEL = P_TEXT2 CANCEL_DISPLAY = '' IMPORTING ANSWER = P_RETURN . ENDFORM . "FRM_POPUP_INFO *&---------------------------------------------------------------------* *& Form FRM_DDHX_ZXF *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM FRM_DDHX_ZXF . DATA : LV_RETURNCODE , LV_DAT TYPE ERDAT , LV_BZ TYPE ZE_ZBEIZ . DATA : LT_HXMX TYPE STANDARD TABLE OF ZSD_HXMX , LW_HXMX TYPE ZSD_HXMX . *------会计凭证 DATA :I_HEADER LIKE BKPF , IT_ITEM LIKE TABLE OF ZFS_BSED WITH HEADER LINE , RETURN LIKE TABLE OF BAPIRET2 WITH HEADER LINE . CLEAR LV_RETURNCODE . PERFORM FRM_GET_CHANGED CHANGING LV_DAT LV_BZ LV_RETURNCODE . IF LV_RETURNCODE IS INITIAL . LOOP AT GT_DETAL ASSIGNING <DETAL> WHERE CHECK = 'X' . "已经核销的需要剔除 IF <DETAL> -HXDDT <> '00000000' . CONTINUE . ENDIF . IF <DETAL> -DDZX = 0 . CONTINUE . ENDIF . <DETAL> -HXDDT = LV_DAT . IF <DETAL> -HXDDT = '' . <DETAL> -HXDDT = SY -DATUM . ENDIF . <DETAL> -HXDDB = LV_BZ . "生成会计凭证 "借:应收账款-客户,贷:其他应付-开票单位 CLEAR :I_HEADER . REFRESH : IT_ITEM[] , RETURN[] . I_HEADER -BUKRS = <DETAL> -HXBUR . I_HEADER -GJAHR = <DETAL> -HXGJR . I_HEADER -BLDAT = SY -DATUM . I_HEADER -BUDAT = SY -DATUM . I_HEADER -MONAT = SY -DATUM+4 ( 2 ) . I_HEADER -BLART = 'SA' . I_HEADER -BKTXT = '代垫力费1票' . I_HEADER -XBLNR = <DETAL> -VBELN_VL && '/' && <DETAL> -POSNR_VL . I_HEADER -WAERS = <DETAL> -WAERK . CLEAR : IT_ITEM . IT_ITEM -BUZEI = 1 . IT_ITEM -UMSKZ = '' . IF <DETAL> -DDZX > 0 . IT_ITEM -BSCHL = '01' . IT_ITEM -SHKZG = 'S' . ELSE . IT_ITEM -BSCHL = '12' . IT_ITEM -SHKZG = 'H' . ENDIF . IT_ITEM -DMBTR = ABS ( <DETAL> -DDZX ) . IT_ITEM -PRCTR = '' . * IT_ITEM-ZUONR = <DETAL>-VBELN_VL && '/' && <DETAL>-POSNR_VL. IT_ITEM -SGTXT = '代垫力费1票' . IT_ITEM -KUNNR = <DETAL> -KUNNR . IT_ITEM -KOART = 'D' . APPEND IT_ITEM . CLEAR : IT_ITEM . IT_ITEM -BUZEI = 2 . IT_ITEM -UMSKZ = 'U' . IF <DETAL> -DDZX > 0 . IT_ITEM -BSCHL = '39' . IT_ITEM -SHKZG = 'H' . ELSE . IT_ITEM -BSCHL = '29' . IT_ITEM -SHKZG = 'S' . ENDIF . IT_ITEM -DMBTR = ABS ( <DETAL> -DDZX ) . IT_ITEM -PRCTR = '' . * IT_ITEM-ZUONR = <DETAL>-VBELN_VL && '/' && <DETAL>-POSNR_VL. IT_ITEM -SGTXT = '代垫力费1票' . IT_ITEM -LIFNR = '1090' . IT_ITEM -KOART = 'K' . APPEND IT_ITEM . CALL FUNCTION 'ZDOCUMENT_BILL_EXCHANG_POST' EXPORTING I_HEADER = I_HEADER LW_PRCTR = '' IMPORTING E_BELNR = I_HEADER -BELNR E_GJAHR = I_HEADER -GJAHR TABLES IT_ITEM = IT_ITEM RETURN = RETURN . IF I_HEADER -BELNR IS INITIAL . REFRESH GT_BAPIRET[] . GT_BAPIRET[] = RETURN[] . PERFORM DISPLAY_ERROR . CONTINUE . ELSE . <DETAL> -HXDOC = I_HEADER -BELNR . <DETAL> -HXGJR = I_HEADER -GJAHR . <DETAL> -HXBUR = I_HEADER -BUKRS . ENDIF . CLEAR : LW_HXMX . MOVE-CORRESPONDING <DETAL> TO LW_HXMX . LW_HXMX -VBELN = <DETAL> -VBELN_VL . LW_HXMX -POSNR = <DETAL> -POSNR_VL . LW_HXMX -Z003 = <DETAL> -ZXHJ . LW_HXMX -Z005 = <DETAL> -DDZX . LW_HXMX -KF01 = <DETAL> -YFHJ . * LW_HXMX-HXZXT = <DETAL>-HXZXT. * LW_HXMX-HXZXB = <DETAL>-HXZXB. * LW_HXMX-HXYFT = <DETAL>-HXYFT. * LW_HXMX-HXYFB = <DETAL>-HXYFB. APPEND LW_HXMX TO LT_HXMX . ENDLOOP . IF LT_HXMX IS NOT INITIAL . MODIFY ZSD_HXMX FROM TABLE LT_HXMX . IF SY -SUBRC = 0 . COMMIT WORK . MESSAGE '代垫装卸费开票核销成功!' TYPE 'S' . ELSE . ROLLBACK WORK . MESSAGE '代垫装卸费开票核销失败!' TYPE 'E' . ENDIF . ELSE . MESSAGE '没有需要核销的项目!' TYPE 'E' . ENDIF . ENDIF . ENDFORM . *&---------------------------------------------------------------------* *& Form DISPLAY_ERROR *&---------------------------------------------------------------------* * 显示错误 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM DISPLAY_ERROR . DATA : GR_TABLE TYPE REF TO CL_SALV_TABLE . DATA : LR_COLUMNS TYPE REF TO CL_SALV_COLUMNS . TRY . CL_SALV_TABLE =>FACTORY ( IMPORTING R_SALV_TABLE = GR_TABLE CHANGING T_TABLE = GT_BAPIRET ) . CATCH CX_SALV_MSG . "#EC NO_HANDLER ENDTRY . LR_COLUMNS = GR_TABLE ->GET_COLUMNS ( ) . LR_COLUMNS ->SET_OPTIMIZE ( 'X' ) . GR_TABLE ->SET_SCREEN_POPUP ( START_COLUMN = 1 END_COLUMN = 100 START_LINE = 1 END_LINE = 20 ) . GR_TABLE ->DISPLAY ( ) . ENDFORM . *&---------------------------------------------------------------------* *& Form FRM_DDDY_ZXF *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM FRM_DDDY_ZXF . DATA : FM_NAME TYPE RS38L_FNAM , LS_CONTROL_PARAM TYPE SSFCTRLOP , LS_COMPOSER_PARAM TYPE SSFCOMPOP , OUTOPT TYPE SSFCRESOP , L_JOB_OUTPUT_INFO TYPE SSFCRESCL . DATA : LT_HEADER TYPE TABLE OF ZVS_HX_HEAD , L_HEADER TYPE ZVS_HX_HEAD , LT_ITEM TYPE ZVS_HX_DETAIL_T WITH HEADER LINE . DATA : LT_HXMX TYPE STANDARD TABLE OF ZSD_HXMX , LW_HXMX TYPE ZSD_HXMX . DATA : LV_LINE TYPE I , EV_MONEY TYPE STRING , IV_MONEY TYPE BF_DMBTR , L_LAST TYPE USER_ADDR -NAME_LAST , L_FIRST TYPE USER_ADDR -NAME_FIRST . LS_CONTROL_PARAM -NO_OPEN = 'X' . LS_CONTROL_PARAM -NO_CLOSE = 'X' . CALL FUNCTION 'SSF_OPEN' EXPORTING CONTROL_PARAMETERS = LS_CONTROL_PARAM OUTPUT_OPTIONS = LS_COMPOSER_PARAM IMPORTING JOB_OUTPUT_OPTIONS = OUTOPT EXCEPTIONS FORMATTING_ERROR = 1 INTERNAL_ERROR = 2 SEND_ERROR = 3 USER_CANCELED = 4 OTHERS = 5 . "打印的页数 LOOP AT GT_DETAL INTO GW_DETAL WHERE CHECK = 'X' . MOVE-CORRESPONDING GW_DETAL TO L_HEADER . COLLECT L_HEADER INTO LT_HEADER . ENDLOOP . SORT LT_HEADER BY KUNNR . LOOP AT LT_HEADER INTO L_HEADER . REFRESH : LT_ITEM[] . "打印人 L_HEADER -USNAM = SY -UNAME . CLEAR : L_LAST ,L_FIRST . SELECT SINGLE NAME_LAST NAME_FIRST INTO (L_LAST ,L_FIRST ) FROM USER_ADDR WHERE BNAME = L_HEADER -USNAM . CONCATENATE L_LAST L_FIRST INTO L_HEADER -KAIDR . "金额大写 IV_MONEY = L_HEADER -DDZX . CALL FUNCTION 'ZFUC_NUMERIC_TO_CHINESE' EXPORTING IV_MONEY = IV_MONEY IMPORTING EV_MONEY = EV_MONEY EXCEPTIONS WRONG_MONEY = 1 OTHERS = 2 . IF SY -SUBRC = 0 . L_HEADER -DDZX_C = EV_MONEY . ENDIF . "明细 LOOP AT GT_DETAL INTO GW_DETAL WHERE CHECK = 'X' AND KUNNR = L_HEADER -KUNNR . MOVE-CORRESPONDING GW_DETAL TO LT_ITEM . APPEND LT_ITEM . CLEAR LT_ITEM . ENDLOOP . "小于10行补足十行 DESCRIBE TABLE LT_ITEM LINES LV_LINE . IF LV_LINE < 12 . LV_LINE = 12 - LV_LINE . DO LV_LINE TIMES . CLEAR LT_ITEM . APPEND LT_ITEM . ENDDO . ENDIF . CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING FORMNAME = 'ZSD_HXDDZXF_PRINT' IMPORTING FM_NAME = FM_NAME EXCEPTIONS NO_FORM = 1 NO_FUNCTION_MODULE = 2 OTHERS = 3 . CALL FUNCTION FM_NAME EXPORTING CONTROL_PARAMETERS = LS_CONTROL_PARAM OUTPUT_OPTIONS = LS_COMPOSER_PARAM I_HEAD = L_HEADER TABLES IT_ITEM = LT_ITEM[] EXCEPTIONS FORMATTING_ERROR = 1 INTERNAL_ERROR = 2 SEND_ERROR = 3 USER_CANCELED = 4 OTHERS = 5 . ENDLOOP . CALL FUNCTION 'SSF_CLOSE' IMPORTING JOB_OUTPUT_INFO = L_JOB_OUTPUT_INFO EXCEPTIONS FORMATTING_ERROR = 1 INTERNAL_ERROR = 2 SEND_ERROR = 3 OTHERS = 4 . IF SY -SUBRC = 0 . IF L_JOB_OUTPUT_INFO -OUTPUTDONE = 'X' . "是否输出到打印机 LOOP AT GT_DETAL ASSIGNING <DETAL> WHERE CHECK = 'X' . <DETAL> -FLAG = 'X' . CLEAR : LW_HXMX . MOVE-CORRESPONDING <DETAL> TO LW_HXMX . LW_HXMX -VBELN = <DETAL> -VBELN_VL . LW_HXMX -POSNR = <DETAL> -POSNR_VL . LW_HXMX -Z003 = <DETAL> -ZXHJ . LW_HXMX -Z005 = <DETAL> -DDZX . LW_HXMX -KF01 = <DETAL> -YFHJ . APPEND LW_HXMX TO LT_HXMX . ENDLOOP . IF LT_HXMX IS NOT INITIAL . MODIFY ZSD_HXMX FROM TABLE LT_HXMX . IF SY -SUBRC = 0 . COMMIT WORK . MESSAGE '代垫装卸费开票打印成功!' TYPE 'S' . ELSE . ROLLBACK WORK . MESSAGE '代垫装卸费开票打印失败!' TYPE 'E' . ENDIF . ELSE . MESSAGE '没有需要打印的项目!' TYPE 'E' . ENDIF . ENDIF . ENDIF . ENDFORM .转载地址:http://coqaf.baihongyu.com/