博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
销售单据条件价格明细表
阅读量:2035 次
发布时间:2019-04-28

本文共 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 
.
      <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 
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 
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 
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 
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 
.
      <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 
.
      <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 
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 
.
    
DELETE GT_DETAL 
WHERE HXDDT 
IS 
NOT 
INITIAL
.
  
ENDIF
.
  
"钢贸已开票,代垫已开票
  
IF P_DDYKP 
'X'
.
    
DELETE GT_DETAL 
WHERE RFBSK <> 
'C' 
.
    
DELETE GT_DETAL 
WHERE DDZX 
.
    
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 
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 
.
          
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 
.
          
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 
.
          
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 
.
          
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 
.
          
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 
.
          
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 
AND <DETAL>
-ZXHJ 
.
        
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 
.
        
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 
.
        
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 
.
        
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 
.
      
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 
.
      
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 
.
        
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 
.
    
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 
.
          
COMMIT 
WORK
.
          
MESSAGE 
'代垫装卸费开票打印成功!' 
TYPE 
'S'
.
        
ELSE
.
          
ROLLBACK 
WORK
.
          
MESSAGE 
'代垫装卸费开票打印失败!' 
TYPE 
'E'
.
        
ENDIF
.
      
ELSE
.
        
MESSAGE 
'没有需要打印的项目!' 
TYPE 
'E'
.
      
ENDIF
.
    
ENDIF
.
  
ENDIF
.
ENDFORM
.

转载地址:http://coqaf.baihongyu.com/

你可能感兴趣的文章
面试必问的16个经典问题的回答思路
查看>>
java高级多线程编程--关于线程的停止问题
查看>>
java多线程基础
查看>>
java多线程编程体会
查看>>
Java多线程编程经验
查看>>
体验Java 1.5中面向方面(AOP)编程
查看>>
AOP下的权限控制实现
查看>>
Oracle数据库存储过程 ,去除给定字符串中重复的字符串
查看>>
oracle SQL性能优化
查看>>
ORACLE 测试题 看看你能答出多少?
查看>>
通过JDBC连接Oracle数据库中的十大技巧
查看>>
Oracle 11g新特性点评
查看>>
服务器集群怎么实现?
查看>>
如何实现ArcSDE的集群功能
查看>>
servlet和JSP有本质上的区别么?
查看>>
sde在DBMS中的存储表结构
查看>>
如何在RedHat Linux上实现集群负载均衡
查看>>
Linux 服务器集群系统实现方案详解
查看>>
Linux操作系统下的集群原理及实战经历
查看>>
电信系统方案 >> 电信综合营帐系统
查看>>