欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

销售单据条件价格明细表

发布时间:2025/3/20 编程问答 40 豆豆
生活随笔 收集整理的这篇文章主要介绍了 销售单据条件价格明细表 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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 .

总结

以上是生活随笔为你收集整理的销售单据条件价格明细表的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。