• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
^ω^SAp傻X^o^
博客园    首页    新随笔    联系   管理    订阅  订阅
VF04,单独开票 票折程序
*&---------------------------------------------------------------------*
*& Report ZFID005
*&---------------------------------------------------------------------*
*&添加程序注释BY :XY 20170208
*&---------------------------------------------------------------------*
REPORT zfid005.

TYPE-POOLS: slis.
*======================================================================*
* Tabellen                                                             *
*======================================================================*
TABLES : vbco7.
TABLES : rv60a.
TABLES : tvfk .
TABLES : tvfkd.
TABLES : tvko .
TABLES : t005 .
TABLES : vkdfi,vbak,vkdfs.
************************************************************************
*                       定义类型
************************************************************************

* 定义用与转换的类型
TYPES: BEGIN OF ty_out,
         vkorg     TYPE vkorg, "销售组织
         spart     TYPE spart,
         vtweg     TYPE vtweg,
         kunnr     TYPE kunnr, "客户
         name1     TYPE string, "受达方名称
         kunn2     TYPE string, "付款方编号
         name2     TYPE string, "付款方名称
         knrze     TYPE knb1-knrze, "总部编号
         name3     TYPE string, "总部描述
         fktyp     TYPE vkdfs-fktyp, "出具发票类别
         ftext     TYPE string, "出具发票类别描述
         vbeln     TYPE vbeln, "发货单号
         posnr     TYPE posnr, "发货打行项目
         fkdat     TYPE fkdat, "出具发票日期
         auart     TYPE auart, "凭证类型
         bezei     TYPE v_tvak-bezei, "凭证类型描述
         fkart     TYPE fkart, "开票类型
         vgbel     TYPE vgbel, "销售订单号
         vgpos     TYPE vgpos, "销售订单行号
         mtart     TYPE mara-mtart, "物料类型
         mtbez     TYPE t134t-mtbez, "物料类型描述
         matnr     TYPE matnr, "物料编码
         maktx     TYPE maktx, "物料描述
         kwmeng    TYPE bstmg, "数量
         meins     TYPE meins, "单位
         vertn     TYPE vbap-vertn, "活动项目
         zproj     TYPE zfit001-zproj, "活动项目描述
         xflag     TYPE c, "票折计算标识
         zdiscount TYPE c, "票折行
         kbetr     TYPE zkbetr, "零售价
         akbetr    TYPE zkbetr, "零售金额
         vkbetr    TYPE zkbetr6, "订单价
         avkbetr   TYPE zkbetr2, "订单价金额
         pzqdj     TYPE zkbetr6, "票折前单价
         pzqje     TYPE kbetr, "票折前金额
         pzhje     TYPE kbetr, "票折后金额
         pzhdj     TYPE zkbetr6, "票折后单价
         "modify by xy 20170227
         "PZHJEFS type KBETR,"票折后金额(反算)
         pzhjefs   TYPE zkbetr2, "票折后金额(反算)
         "modify ended
         pzzk      TYPE zkbetr, "票折折扣

         wc        TYPE kbetr, "尾差

         knumv     TYPE knumv,
         zterm     TYPE dzterm,
         type      TYPE c,
         statu     TYPE char10,
         msg       TYPE string,
         chbox     TYPE c LENGTH 1,
         bill      TYPE vbeln,
         billmsg   TYPE string,
         billdate  TYPE sy-datum,
*     CELLCOLOR TYPE LVC_T_SCOL,
       END OF ty_out.

TYPES: BEGIN OF ty_kunnr_akbetr,
         kunnr   TYPE kunnr,
         akbetr  TYPE kbetr, "零售金额
         pzqje   TYPE kbetr, "票折前金额
         "modify by xy 20170227
         "PZHJEFS type KBETR,
         pzhjefs TYPE zkbetr2, "票折后金额(反算)
         "modify ended
       END OF ty_kunnr_akbetr.
************************************************************************
*                    声明内表、工作区和全局变量
************************************************************************
DATA: gt_out TYPE STANDARD TABLE OF ty_out,
      gs_out LIKE LINE OF gt_out.

"add by xy 20170302
DATA: BEGIN OF wa_vbeln,
        vgbel TYPE vgbel, "销售订单号
        "VGPOS type VGPOS,"销售订单行号
      END OF wa_vbeln.
DATA:gt_vbeln LIKE TABLE OF wa_vbeln.
"add ended
FIELD-SYMBOLS <fs_out> TYPE ty_out.



DATA: gt_k_akbetr TYPE TABLE OF ty_kunnr_akbetr,
      gs_k_akbetr TYPE ty_kunnr_akbetr.


DATA  g_rassc TYPE rassc.
** 使用 ALV
DATA: it_fieldcat TYPE slis_t_fieldcat_alv,    " ALV 标题内表
      wa_layout   TYPE slis_layout_alv.        " ALV 格式
*      it_events   TYPE slis_t_event.           " ALV事件处理

DATA :l_num TYPE n LENGTH 10,
      s_num TYPE n LENGTH 10,
      m_num TYPE n LENGTH 3.

DATA: zflag(1) TYPE C.

FIELD-SYMBOLS <p_hsl>.                         " 定义指针

************************************************************************
*                    选择屏幕                                          *
************************************************************************

*======================================================================*
* Selektionsdynpro 1000                                                *
*======================================================================*

*Block : Belegdaten----------------------------------------------------*
"SELECTION-SCREEN SKIP 1.

PARAMETERS p_date TYPE sy-datum DEFAULT sy-datum.
SELECTION-SCREEN BEGIN OF BLOCK beleg WITH FRAME TITLE TEXT-a01.
SELECT-OPTIONS s_fkdat FOR vbco7-fkdat NO-EXTENSION.
SELECT-OPTIONS s_fkart FOR vbco7-fkart.
SELECT-OPTIONS s_vbeln FOR vbco7-vbeln.
SELECT-OPTIONS s_vgbel FOR vbak-vbeln.
SELECTION-SCREEN END   OF BLOCK beleg.

*Block : Organisationsdaten--------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK organ WITH FRAME TITLE TEXT-001.
PARAMETERS: p_vkorg   LIKE vbco7-vkorg MEMORY ID fko OBLIGATORY DEFAULT 1500.
SELECT-OPTIONS s_vtweg FOR vbco7-vtweg.
SELECT-OPTIONS s_spart FOR vbco7-spart.
SELECT-OPTIONS s_vstel FOR vbco7-vstel.
SELECTION-SCREEN END   OF BLOCK organ.

*Block : Kundendaten---------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK kunde WITH FRAME TITLE TEXT-a02.
SELECT-OPTIONS: s_kunnr FOR vbco7-kunnr MATCHCODE OBJECT debi,
                s_kunnr2 FOR vbco7-kunnr MATCHCODE OBJECT debi,"开票方
                s_kunnr3 FOR vbco7-kunnr MATCHCODE OBJECT debi,"付款方
                s_kunnr4 FOR vbco7-kunnr MATCHCODE OBJECT debi."总部
SELECTION-SCREEN END   OF BLOCK kunde.

SELECTION-SCREEN BEGIN OF BLOCK select WITH FRAME TITLE TEXT-a03.
PARAMETERS: p_so AS CHECKBOX DEFAULT 'X',
            p_dn AS CHECKBOX DEFAULT 'X',
            p_in AS CHECKBOX DEFAULT 'X'.

SELECTION-SCREEN END   OF BLOCK select.

************************************************************************
*                    初始化事件                                        *
************************************************************************
INITIALIZATION.




************************************************************************
*                    选择屏幕事件                                      *
************************************************************************
AT SELECTION-SCREEN.


************************************************************************
*                   START-OF-SELECTION                                *
************************************************************************
START-OF-SELECTION.

  PERFORM  frm_getdata.
  PERFORM  frm_dealdata.

************************************************************************
*                   END-OF-SELECTION                                   *
************************************************************************
END-OF-SELECTION.
* using alv to display report
  PERFORM frm_alv.

*&---------------------------------------------------------------------*
*&      Form  FRM_GETDATA
*&---------------------------------------------------------------------*
*  功能描述:按指定条件从数据库表中取出数据,并传入相应的内表或工作区
*----------------------------------------------------------------------*
*  入口参数:无
*  出口参数:无
*----------------------------------------------------------------------*
FORM frm_getdata .
  DATA:lt_vkdfs TYPE TABLE OF vkdfs,
       ls_vkdfs TYPE vkdfs.
  DATA:lt_vkdfs1 TYPE TABLE OF vkdfs,
       ls_vkdfs1 TYPE vkdfs.
  DATA:lt_vkdfs2 TYPE TABLE OF vkdfs, "交货单开票用
       ls_vkdfs2 TYPE vkdfs.
  DATA:lt_vkdfs3 TYPE TABLE OF vkdfs, "公司间开票用
       ls_vkdfs3 TYPE vkdfs.
  DATA:lt_kna1  TYPE TABLE OF kna1,
       ls_kna1  TYPE kna1,
       lt_kna12 TYPE TABLE OF kna1,
       lt_kna13 TYPE TABLE OF kna1,
       lt_kna14 TYPE TABLE OF kna1.
  DATA:lt_knvp TYPE TABLE OF knvp,
       ls_knvp TYPE knvp.
  DATA:lt_knb1 TYPE TABLE OF knb1,
       ls_knb1 TYPE knb1.
  DATA:
*      LT_LIKP type table of LIKP,
*     LS_LIKP type LIKP,
    lt_lips  TYPE TABLE OF lips,
    ls_lips  TYPE lips,
    lt_lips3 TYPE TABLE OF lips,
    ls_lips3 TYPE lips,
    lt_vbak  TYPE TABLE OF vbak,
    ls_vbak  TYPE vbak,
    lt_vbap  TYPE TABLE OF vbap,
    ls_vbap  TYPE vbap.
  DATA: lt_prcd_elements TYPE TABLE OF prcd_elements,
        ls_prcd_elements TYPE prcd_elements.
  DATA:lt_vbak1 TYPE TABLE OF vbak,
       ls_vbak1 TYPE vbak,
       lt_vbap1 TYPE TABLE OF vbap,
       ls_vbap1 TYPE vbap.
  DATA:lt_ekko3 TYPE TABLE OF ekko,
       ls_ekko3 TYPE ekko,
       lt_ekpo3 TYPE TABLE OF ekpo,
       ls_ekpo3 TYPE ekpo.
  DATA: lt_prcd_elements1 TYPE TABLE OF prcd_elements,
        ls_prcd_elements1 TYPE prcd_elements.
  DATA: lt_prcd_elements3 TYPE TABLE OF prcd_elements,
        ls_prcd_elements3 TYPE prcd_elements.
  DATA:lt_tvakt TYPE TABLE OF tvakt,
       ls_tvakt TYPE tvakt.
  DATA:lt_t161t TYPE TABLE OF t161t,
       ls_t161t TYPE t161t.
  DATA:lt_tvakt1 TYPE TABLE OF tvakt,
       ls_tvakt1 TYPE tvakt.
  DATA:lt_vbkd TYPE TABLE OF vbkd,
       ls_vbkd TYPE vbkd.

  DATA:lt_mara    TYPE TABLE OF mara,
       ls_mara    TYPE mara,
       lt_t134t   TYPE TABLE OF t134t,
       ls_t134t   TYPE t134t,
       lt_makt    TYPE TABLE OF makt,
       ls_makt    TYPE makt,
       lt_zfit001 TYPE TABLE OF zfit001,
       ls_zfit001 TYPE zfit001.
  DATA:lt_zfit013 TYPE TABLE OF zfit013,
       ls_zfit013 TYPE zfit013.

  IF p_so = 'X'.
    "如果勾选销售订单,取VKDPS表信息,出具发票类别FKTYP = A(与订单相关的出具发票凭证)
    SELECT * INTO TABLE lt_vkdfs1 FROM vkdfs
      WHERE fkart IN s_fkart"开票类型
        AND fkdat IN s_fkdat "出具发票日期
        AND vbeln IN s_vgbel"销售订单

        AND vkorg = p_vkorg"销售组织
        AND vtweg IN s_vtweg"分销渠道
        AND spart IN s_spart"产品组
        AND vstel IN s_vstel "装运地点

        AND kunnr IN s_kunnr
        AND fktyp = 'A'.

    IF lt_vkdfs1[] IS NOT INITIAL.
      "如果不为空,表示针对销售订单有开票,取销售订单凭证类型和条件号等信息
      SELECT vbeln
             auart "销售凭证类型
             knumv "条件号
             vbtyp "销售和分销凭证类别(长)
             INTO CORRESPONDING FIELDS OF TABLE lt_vbak FROM vbak
              FOR ALL ENTRIES IN lt_vkdfs1
              WHERE vbeln = lt_vkdfs1-vbeln.

      " 取没有完全开票的销售订单行项目 的物料、数量、款项项目等信息
      SELECT vbeln
             posnr
             matnr
             zmeng AS kwmeng "目标数量(采用销售单位)
             vrkme"以销售单位表示的累计订购数量
             vertn " 款项项目
        INTO CORRESPONDING FIELDS OF TABLE lt_vbap FROM vbap
              FOR ALL ENTRIES IN lt_vkdfs1
              WHERE vbeln = lt_vkdfs1-vbeln
                  AND fksaa <> 'C' "销售订单行项目没有完全开票
                  AND fksaa <> ''.

      "如果销售订单不为空,取凭证类型文本
      IF lt_vbak[] IS NOT INITIAL.
        SELECT * INTO TABLE lt_tvakt FROM tvakt
                FOR ALL ENTRIES IN lt_vbak
                WHERE auart = lt_vbak-auart
                  AND spras = 1.

        "按销售订单的条件号取价格
        SELECT
              client
              knumv
              kposn
              stunr
              zaehk
              kappl
              kschl
              kbetr
              kpein
              INTO CORRESPONDING FIELDS OF TABLE lt_prcd_elements FROM prcd_elements
              FOR ALL ENTRIES IN lt_vbak
              WHERE knumv = lt_vbak-knumv.
      ENDIF.
    ENDIF.
  ENDIF.

  "如果勾选交货单,取VKDFS表中数据,FKTYP = L(交货-相关的出具发票凭证)
  IF p_dn = 'X'  .
    SELECT * INTO TABLE lt_vkdfs2 FROM vkdfs
      WHERE fkart IN s_fkart
        AND fkdat IN s_fkdat
        AND vbeln IN s_vbeln

        AND vkorg = p_vkorg
        AND vtweg IN s_vtweg
        AND spart IN s_spart
        AND vstel IN s_vstel

        AND kunnr IN s_kunnr
        AND ( fktyp = 'L'  ).
  ENDIF.

  "取公司间数据
  IF p_in = 'X'.
    SELECT * INTO TABLE lt_vkdfs3 FROM vkdfs
      WHERE fkart IN s_fkart
        AND fkdat IN s_fkdat
        AND vbeln IN s_vbeln

        AND vkorg = p_vkorg
        AND vtweg IN s_vtweg
        AND spart IN s_spart
        AND vstel IN s_vstel

        AND kunnr IN s_kunnr
        AND ( fktyp = 'I'  ).
  ENDIF.

  "如果交货单有发票数据
  IF lt_vkdfs2[] IS NOT INITIAL.
*          select * into table LT_LIKP from LIKP
*                  for all entries in LT_VKDFS2
*                  where VBELN = LT_VKDFS2-VBELN.
    "取交货单明细行的数据
    SELECT vbeln
           posnr
           vgbel
           vgpos
           lgmng"以仓库保管单位级的实际交货数量
            INTO CORRESPONDING FIELDS OF TABLE lt_lips FROM lips
            FOR ALL ENTRIES IN lt_vkdfs2
            WHERE vbeln = lt_vkdfs2-vbeln
              AND vgbel IN s_vgbel
              AND fksta <> 'C'
              AND fksta <> ''
              AND lgmng <> 0.
    "如果有交货数据,取销售订单的条件号
    IF lt_lips[] IS NOT INITIAL.
      SELECT vbeln
              auart
              knumv
              vbtyp
              INTO CORRESPONDING FIELDS OF TABLE lt_vbak1 FROM vbak
            FOR ALL ENTRIES IN lt_lips
            WHERE vbeln = lt_lips-vgbel.
      SELECT vbeln
             posnr
             matnr
             kwmeng
             vrkme
             vertn INTO CORRESPONDING FIELDS OF TABLE lt_vbap1 FROM vbap
              FOR ALL ENTRIES IN lt_lips
              WHERE vbeln = lt_lips-vgbel.
      IF lt_vbak1[] IS NOT INITIAL.
        SELECT * INTO TABLE lt_tvakt1 FROM tvakt
                FOR ALL ENTRIES IN lt_vbak1
                WHERE auart = lt_vbak1-auart
                  AND spras = 1.
        SELECT
                client
                knumv
                kposn
                stunr
                zaehk
                kappl
                kschl
                kbetr
                kpein INTO CORRESPONDING FIELDS OF TABLE lt_prcd_elements1 FROM prcd_elements
              FOR ALL ENTRIES IN lt_vbak1
              WHERE knumv = lt_vbak1-knumv.
      ENDIF.
    ENDIF.
  ENDIF.


  IF lt_vkdfs3[] IS NOT INITIAL.
    SELECT vbeln
          posnr
          vgbel
          vgpos
          lgmng
           INTO CORRESPONDING FIELDS OF TABLE lt_lips3 FROM lips
           FOR ALL ENTRIES IN lt_vkdfs3
           WHERE vbeln = lt_vkdfs3-vbeln
             AND vgbel IN s_vgbel
             AND fkivp <> 'C'
             AND fkivp <> ''
             AND lgmng <> 0.
    "公司间开票数据
    IF lt_lips3[] IS NOT INITIAL.
      SELECT ebeln
             bsart
             knumv
            INTO CORRESPONDING FIELDS OF TABLE lt_ekko3 FROM ekko
                 FOR ALL ENTRIES IN lt_lips3
                 WHERE ebeln = lt_lips3-vgbel.
      SELECT ebeln
             ebelp
             matnr
             menge
             meins  INTO CORRESPONDING FIELDS OF TABLE lt_ekpo3 FROM ekpo
              FOR ALL ENTRIES IN lt_lips
              WHERE ebeln = lt_lips-vgbel.
      IF lt_ekko3[] IS NOT INITIAL.
        SELECT * INTO TABLE lt_t161t FROM t161t
            FOR ALL ENTRIES IN lt_ekko3
            WHERE bsart = lt_ekko3-bsart
              AND spras = 1.
        SELECT
                 client
                 knumv
                 kposn
                 stunr
                 zaehk
                 kappl
                 kschl
                 kbetr
                 kpein INTO CORRESPONDING FIELDS OF TABLE lt_prcd_elements3 FROM prcd_elements
               FOR ALL ENTRIES IN lt_ekko3
               WHERE knumv = lt_ekko3-knumv.

      ENDIF.
    ENDIF.
  ENDIF.

  APPEND LINES OF lt_vkdfs1 TO lt_vkdfs.
  APPEND LINES OF lt_vkdfs2 TO lt_vkdfs.
  APPEND LINES OF lt_vkdfs3 TO lt_vkdfs.

  IF lt_vkdfs[] IS NOT INITIAL.
    SELECT kunnr name1 name2 INTO CORRESPONDING FIELDS OF TABLE lt_kna1
           FROM kna1 FOR ALL ENTRIES IN lt_vkdfs
           WHERE kunnr = lt_vkdfs-kunnr.

    SELECT * INTO TABLE lt_knvp FROM knvp
            FOR ALL ENTRIES IN lt_vkdfs
            WHERE kunnr = lt_vkdfs-kunnr
              AND vkorg = lt_vkdfs-vkorg
              AND vtweg = lt_vkdfs-vtweg
              AND spart = lt_vkdfs-spart
              AND parvw = 'RG'.
    IF lt_knvp[] IS NOT INITIAL.
      SELECT kunnr name1 name2 INTO CORRESPONDING FIELDS OF TABLE lt_kna13 FROM kna1 FOR ALL ENTRIES IN lt_knvp
                    WHERE kunnr = lt_knvp-kunn2.
    ENDIF.

    SELECT kunnr bukrs knrze INTO CORRESPONDING FIELDS OF TABLE lt_knb1
         FROM knb1 FOR ALL ENTRIES IN lt_vkdfs
         WHERE kunnr = lt_vkdfs-kunnr
           AND bukrs = lt_vkdfs-vkorg.
    IF lt_knb1[] IS NOT INITIAL.
      SELECT kunnr name1 name2 INTO CORRESPONDING FIELDS OF TABLE lt_kna14 FROM kna1 FOR ALL ENTRIES IN lt_knb1
                    WHERE kunnr = lt_knb1-knrze.
    ENDIF.
  ENDIF.


  "so
 "MODIFY BY XY 04.03.2017 10:09:13
  SORT lt_vbak BY vbeln.
  SORT lt_kna1 BY kunnr.
  SORT lt_knvp BY kunnr vkorg vtweg spart.
  SORT lt_kna13 BY kunnr.
  SORT lt_knb1 BY bukrs kunnr.
  SORT lt_kna14 BY kunnr.
  SORT lt_tvakt BY auart.
  SORT lt_prcd_elements BY knumv kposn kschl.

  SORT lt_vbak1 BY vbeln.
  SORT lt_vbap1 BY vbeln posnr.
  SORT lt_tvakt1 BY auart.
  SORT lt_prcd_elements1 BY knumv kposn kschl.

 "MODIFY ENDED BY XY 04.03.2017 10:09:13

  LOOP AT lt_vkdfs1 INTO ls_vkdfs1.

    LOOP AT lt_vbap INTO ls_vbap WHERE vbeln =  ls_vkdfs1-vbeln.
      CLEAR ls_vbak.
      READ TABLE lt_vbak INTO ls_vbak WITH KEY vbeln = ls_vbap-vbeln BINARY SEARCH.

      CLEAR ls_kna1.
      READ TABLE lt_kna1 INTO ls_kna1 WITH KEY kunnr = ls_vkdfs1-kunnr BINARY SEARCH.
      CLEAR ls_kna1.
      READ TABLE lt_knvp INTO ls_knvp WITH KEY kunnr = ls_vkdfs1-kunnr
                                               vkorg = ls_vkdfs1-vkorg
                                               vtweg = ls_vkdfs1-vtweg
                                               spart = ls_vkdfs1-spart BINARY SEARCH.
      CLEAR gs_out.
      gs_out-vkorg = ls_vkdfs1-vkorg."销售组织
      gs_out-vtweg = ls_vkdfs1-vtweg."分销渠道
      gs_out-spart = ls_vkdfs1-spart."产品组
      gs_out-kunnr = ls_vkdfs1-kunnr."客户
      CONCATENATE ls_kna1-name1 ls_kna1-name2 INTO gs_out-name1."受达方名称
      gs_out-kunn2 = ls_knvp-kunn2."付款方编号
      CLEAR ls_kna1.
      READ TABLE lt_kna13 INTO ls_kna1 WITH KEY kunnr = ls_knvp-kunn2 BINARY SEARCH.
      CONCATENATE ls_kna1-name1 ls_kna1-name2 INTO gs_out-name2."受达方名称
      CLEAR ls_knb1.
      READ TABLE lt_knb1 INTO ls_knb1 WITH KEY bukrs = ls_vkdfs1-vkorg
                                               kunnr = ls_vkdfs1-kunnr BINARY SEARCH.
      gs_out-knrze = ls_knb1-knrze."总部编号
      CLEAR ls_kna1.
      READ TABLE lt_kna14 INTO ls_kna1 WITH KEY kunnr = ls_knb1-knrze BINARY SEARCH.
      CONCATENATE ls_kna1-name1 ls_kna1-name2 INTO gs_out-name3."总部描述

      gs_out-fktyp = ls_vkdfs1-fktyp."出具发票类别
      gs_out-ftext = '与订单相关的出具发票凭证'.

*         VBELN type VBELN,"发货单号
*         POSNR type POSNR,"发货打行项目

      gs_out-fkdat = ls_vkdfs1-fkdat."出具发票日期
      gs_out-auart = ls_vbak-auart."凭证类型
      gs_out-knumv = ls_vbak-knumv.
      CLEAR ls_tvakt.
      READ TABLE lt_tvakt INTO ls_tvakt WITH KEY auart = ls_vbak-auart BINARY SEARCH.
      gs_out-bezei = ls_tvakt-bezei."凭证类型描述
      gs_out-fkart = ls_vkdfs1-fkart."开票类型
      gs_out-vgbel = ls_vbap-vbeln."销售订单号
      gs_out-vgpos = ls_vbap-posnr."销售订单行号
*                GS_OUT-MTART = MARA-MTART,"物料类型
*         MTBEZ type T134T-MTBEZ,"物料类型描述
      gs_out-matnr = ls_vbap-matnr."物料编码
*         MAKTX type MAKTX,"物料描述
      gs_out-kwmeng = ls_vbap-kwmeng."数量
      IF ls_vbak-vbtyp = 'K' OR ls_vbak-vbtyp = 'H'.
        gs_out-kwmeng = gs_out-kwmeng * -1.
      ENDIF.
      gs_out-meins = ls_vbap-vrkme."单位
      gs_out-vertn = ls_vbap-vertn."活动项目
*         ZPROJ type ZFIT001-ZPROJ,"活动项目描述
*         XFLAG type C,"票折计算标识
*      ZDISCOUNT type C,"票折行
      CLEAR ls_prcd_elements.
      READ TABLE lt_prcd_elements INTO ls_prcd_elements WITH KEY knumv = ls_vbak-knumv
                                                                 kposn = ls_vbap-posnr
                                                                 kschl = 'ZPR1' BINARY SEARCH.
      gs_out-kbetr = ls_prcd_elements-kbetr / ls_prcd_elements-kpein."零售价
      gs_out-akbetr = gs_out-kbetr * gs_out-kwmeng. "零售金额
      READ TABLE lt_prcd_elements INTO ls_prcd_elements WITH KEY knumv = ls_vbak-knumv
                                                                 kposn = ls_vbap-posnr
                                                                 kschl = 'ZPR3'.
      gs_out-vkbetr = ls_prcd_elements-kbetr / ls_prcd_elements-kpein.""订单价
      gs_out-avkbetr = gs_out-vkbetr * gs_out-kwmeng. "订单金额

*         PZQDJ type KBETR,"票折前单价
*         PZQJE type KBETR,"票折前金额
*         PZHJE type KBETR,"票折后金额
*         PZHDJ type KBETR,"票折后单价
*       PZHJEFS type KBETR,"票折后金额(反算)
*         PZZK  type KBETR,"票折折扣

      APPEND gs_out TO gt_out.
*                   clear GS_K_AKBETR.
*                   move-corresponding GS_OUT to GS_K_AKBETR.
*                   collect GS_K_AKBETR into GT_K_AKBETR.
    ENDLOOP.
  ENDLOOP.

  "交货单
  LOOP AT lt_vkdfs2 INTO ls_vkdfs1.

    LOOP AT lt_lips INTO ls_lips WHERE vbeln =  ls_vkdfs1-vbeln.
*                  clear LS_LIKP.
*                  read table LT_LIKP into LS_LIKP with key VBELN = LS_LIPS-VBELN.
      CLEAR ls_vbak.
      READ TABLE lt_vbak1 INTO ls_vbak WITH KEY vbeln = ls_lips-vgbel BINARY SEARCH.
      CLEAR ls_vbap.
      READ TABLE lt_vbap1 INTO ls_vbap WITH KEY vbeln = ls_lips-vgbel
                                                 posnr = ls_lips-vgpos BINARY SEARCH.
      CLEAR ls_kna1.
      READ TABLE lt_kna1 INTO ls_kna1 WITH KEY kunnr = ls_vkdfs1-kunnr BINARY SEARCH.
      CLEAR ls_knvp.
      READ TABLE lt_knvp INTO ls_knvp WITH KEY kunnr = ls_vkdfs1-kunnr
                                               vkorg = ls_vkdfs1-vkorg
                                               vtweg = ls_vkdfs1-vtweg
                                               spart = ls_vkdfs1-spart BINARY SEARCH.
      CLEAR gs_out.
      gs_out-vkorg = ls_vkdfs1-vkorg."销售组织
      gs_out-vtweg = ls_vkdfs1-vtweg."分销渠道
      gs_out-spart = ls_vkdfs1-spart."产品组
      gs_out-kunnr = ls_vkdfs1-kunnr."客户
      CONCATENATE ls_kna1-name1 ls_kna1-name2 INTO gs_out-name1."受达方名称
      gs_out-kunn2 = ls_knvp-kunn2."付款方编号
      CLEAR ls_kna1.
      READ TABLE lt_kna13 INTO ls_kna1 WITH KEY kunnr = ls_knvp-kunn2 BINARY SEARCH.
      CONCATENATE ls_kna1-name1 ls_kna1-name2 INTO gs_out-name2."受达方名称
      CLEAR ls_knb1.
      READ TABLE lt_knb1 INTO ls_knb1 WITH KEY bukrs = ls_vkdfs1-vkorg
                                               kunnr = ls_vkdfs1-kunnr BINARY SEARCH.
      gs_out-knrze = ls_knb1-knrze."总部编号
      CLEAR ls_kna1.
      READ TABLE lt_kna14 INTO ls_kna1 WITH KEY kunnr = ls_knb1-knrze BINARY SEARCH.
      CONCATENATE ls_kna1-name1 ls_kna1-name2 INTO gs_out-name3."总部描述

      gs_out-fktyp = ls_vkdfs1-fktyp."出具发票类别
      gs_out-ftext = '交货-相关的出具发票凭证'.


      gs_out-vbeln = ls_lips-vbeln."发货单号
      gs_out-posnr = ls_lips-posnr."发货打行项目

      gs_out-fkdat = ls_vkdfs1-fkdat."出具发票日期
      gs_out-auart = ls_vbak-auart."凭证类型
      gs_out-knumv = ls_vbak-knumv.
      CLEAR ls_tvakt.
      READ TABLE lt_tvakt1 INTO ls_tvakt WITH KEY auart = ls_vbak-auart BINARY SEARCH.
      gs_out-bezei = ls_tvakt-bezei."凭证类型描述
      gs_out-fkart = ls_vkdfs1-fkart."开票类型
      gs_out-vgbel = ls_vbap-vbeln."销售订单号
      gs_out-vgpos = ls_vbap-posnr."销售订单行号
*                GS_OUT-MTART = MARA-MTART,"物料类型
*         MTBEZ type T134T-MTBEZ,"物料类型描述
      gs_out-matnr = ls_vbap-matnr."物料编码
*         MAKTX type MAKTX,"物料描述
      gs_out-kwmeng = ls_lips-lgmng."数量
      IF ls_vbak-vbtyp = 'K' OR ls_vbak-vbtyp = 'H'.
        gs_out-kwmeng = gs_out-kwmeng * -1.
      ENDIF.
      gs_out-meins = ls_vbap-vrkme."单位
      gs_out-vertn = ls_vbap-vertn."活动项目
*         ZPROJ type ZFIT001-ZPROJ,"活动项目描述
*         XFLAG type C,"票折计算标识
*      ZDISCOUNT type C,"票折行
      CLEAR ls_prcd_elements.
      READ TABLE lt_prcd_elements1 INTO ls_prcd_elements WITH KEY knumv = ls_vbak-knumv
                                                                 kposn = ls_vbap-posnr
                                                                 kschl = 'ZPR1' BINARY SEARCH.
      gs_out-kbetr = ls_prcd_elements-kbetr / ls_prcd_elements-kpein."零售价
      gs_out-akbetr = ls_prcd_elements-kbetr / ls_prcd_elements-kpein * gs_out-kwmeng. "零售金额

      CLEAR ls_prcd_elements.
      READ TABLE lt_prcd_elements1 INTO ls_prcd_elements WITH KEY knumv = ls_vbak-knumv
                                                                 kposn = ls_vbap-posnr
                                                                 kschl = 'ZPR3' BINARY SEARCH.

      gs_out-vkbetr = ls_prcd_elements-kbetr / ls_prcd_elements-kpein.""订单价
      gs_out-avkbetr = ls_prcd_elements-kbetr / ls_prcd_elements-kpein * gs_out-kwmeng. "订单金额

*         PZQDJ type KBETR,"票折前单价
*         PZQJE type KBETR,"票折前金额
*         PZHJE type KBETR,"票折后金额
*         PZHDJ type KBETR,"票折后单价
*       PZHJEFS type KBETR,"票折后金额(反算)
*         PZZK  type KBETR,"票折折扣
      APPEND gs_out TO gt_out.
*                   clear GS_K_AKBETR.
*                   move-corresponding GS_OUT to GS_K_AKBETR.
*                   collect GS_K_AKBETR into GT_K_AKBETR.
    ENDLOOP.

  ENDLOOP.


  "公司间 begin
  LOOP AT lt_vkdfs3 INTO ls_vkdfs1.

    LOOP AT lt_lips3 INTO ls_lips WHERE vbeln =  ls_vkdfs1-vbeln.
      CLEAR ls_ekko3.
      READ TABLE lt_ekko3 INTO ls_ekko3 WITH KEY ebeln = ls_lips-vgbel.

      CLEAR ls_ekpo3.
      READ TABLE lt_ekpo3 INTO ls_ekpo3 WITH KEY ebeln = ls_lips-vgbel
                                                 ebelp = ls_lips-vgpos.
      CLEAR ls_kna1.
      READ TABLE lt_kna1 INTO ls_kna1 WITH KEY kunnr = ls_vkdfs1-kunnr.
      CLEAR ls_knvp.
      READ TABLE lt_knvp INTO ls_knvp WITH KEY kunnr = ls_vkdfs1-kunnr
                                               vkorg = ls_vkdfs1-vkorg
                                               vtweg = ls_vkdfs1-vtweg
                                               spart = ls_vkdfs1-spart.
      CLEAR gs_out.
      gs_out-vkorg = ls_vkdfs1-vkorg."销售组织
      gs_out-vtweg = ls_vkdfs1-vtweg."分销渠道
      gs_out-spart = ls_vkdfs1-spart."产品组
      gs_out-kunnr = ls_vkdfs1-kunnr."客户
      CONCATENATE ls_kna1-name1 ls_kna1-name2 INTO gs_out-name1."受达方名称
      gs_out-kunn2 = ls_knvp-kunn2."付款方编号
      CLEAR ls_kna1.
      READ TABLE lt_kna13 INTO ls_kna1 WITH KEY kunnr = ls_knvp-kunn2.
      CONCATENATE ls_kna1-name1 ls_kna1-name2 INTO gs_out-name2."受达方名称
      CLEAR ls_knb1.
      READ TABLE lt_knb1 INTO ls_knb1 WITH KEY bukrs = ls_vkdfs1-vkorg
                                               kunnr = ls_vkdfs1-kunnr.
      gs_out-knrze = ls_knb1-knrze."总部编号
      CLEAR ls_kna1.
      READ TABLE lt_kna14 INTO ls_kna1 WITH KEY kunnr = ls_knb1-knrze.
      CONCATENATE ls_kna1-name1 ls_kna1-name2 INTO gs_out-name3."总部描述

      gs_out-fktyp = ls_vkdfs1-fktyp."出具发票类别
      gs_out-ftext = '公司间交货-相关的出具发票凭证'.

      gs_out-vbeln = ls_lips-vbeln."发货单号
      gs_out-posnr = ls_lips-posnr."发货打行项目

      gs_out-fkdat = ls_vkdfs1-fkdat."出具发票日期
      gs_out-auart = ls_ekko3-bsart."凭证类型
      gs_out-knumv = ls_ekko3-knumv.
      CLEAR ls_t161t.
      READ TABLE lt_t161t INTO ls_t161t WITH KEY bsart = ls_ekko3-bsart.
      gs_out-bezei = ls_t161t-batxt."凭证类型描述
      gs_out-fkart = ls_vkdfs1-fkart."开票类型
      gs_out-vgbel = ls_lips-vgbel."销售订单号
      gs_out-vgpos = ls_lips-vgpos."销售订单行号
*                GS_OUT-MTART = MARA-MTART,"物料类型
*         MTBEZ type T134T-MTBEZ,"物料类型描述
      gs_out-matnr = ls_ekpo3-matnr."物料编码
*         MAKTX type MAKTX,"物料描述
      gs_out-kwmeng = ls_lips-lgmng."数量
      gs_out-meins = ls_ekpo3-meins."单位
*                GS_OUT-VERTN = LS_VBAP-VERTN."活动项目
*         ZPROJ type ZFIT001-ZPROJ,"活动项目描述
*         XFLAG type C,"票折计算标识
*      ZDISCOUNT type C,"票折行
      CLEAR ls_prcd_elements.
      READ TABLE lt_prcd_elements3 INTO ls_prcd_elements WITH KEY knumv = ls_ekko3-knumv
                                                                 kposn = ls_ekpo3-ebelp
                                                                 kschl = 'ZPR1'.
      gs_out-kbetr = ls_prcd_elements-kbetr / ls_prcd_elements-kpein."零售价
      gs_out-akbetr = ls_prcd_elements-kbetr / ls_prcd_elements-kpein * gs_out-kwmeng. "零售金额

      CLEAR ls_prcd_elements.
      READ TABLE lt_prcd_elements3 INTO ls_prcd_elements WITH KEY knumv = ls_ekko3-knumv
                                                                 kposn = ls_ekpo3-ebelp
                                                                 kschl = 'PB00'.

      gs_out-vkbetr = ls_prcd_elements-kbetr / ls_prcd_elements-kpein.""订单价
      gs_out-avkbetr = ls_prcd_elements-kbetr / ls_prcd_elements-kpein * gs_out-kwmeng. "订单金额

*         PZQDJ type KBETR,"票折前单价
*         PZQJE type KBETR,"票折前金额
*         PZHJE type KBETR,"票折后金额
*         PZHDJ type KBETR,"票折后单价
*       PZHJEFS type KBETR,"票折后金额(反算)
*         PZZK  type KBETR,"票折折扣
      APPEND gs_out TO gt_out.
*                   clear GS_K_AKBETR.
*                   move-corresponding GS_OUT to GS_K_AKBETR.
*                   collect GS_K_AKBETR into GT_K_AKBETR.
    ENDLOOP.

  ENDLOOP.
  "公司间 end


  IF gt_out[] IS NOT INITIAL.
    SELECT matnr mtart INTO CORRESPONDING FIELDS OF TABLE lt_mara FROM mara
                       FOR ALL ENTRIES IN gt_out
                       WHERE matnr = gt_out-matnr.
    SELECT matnr maktx INTO CORRESPONDING FIELDS OF TABLE lt_makt FROM makt
                       FOR ALL ENTRIES IN gt_out
                       WHERE matnr = gt_out-matnr
                         AND spras = 1.
    IF lt_mara[] IS NOT INITIAL.
      SELECT mtart mtbez INTO CORRESPONDING FIELDS OF TABLE lt_t134t FROM t134t
                         FOR ALL ENTRIES IN lt_mara
                         WHERE mtart = lt_mara-mtart
                           AND spras = 1.
    ENDIF.
    SELECT * INTO TABLE lt_zfit001 FROM zfit001
                       FOR ALL ENTRIES IN gt_out
                       WHERE zproj_code = gt_out-vertn.

    SELECT vbeln posnr zterm INTO CORRESPONDING FIELDS OF TABLE lt_vbkd FROM vbkd
                           FOR ALL ENTRIES IN gt_out
                           WHERE vbeln = gt_out-vgbel.

  ENDIF.

  SELECT * INTO TABLE lt_zfit013 FROM zfit013.

  LOOP AT gt_out ASSIGNING <fs_out>.
    CLEAR ls_mara.
    READ TABLE lt_mara INTO ls_mara WITH KEY matnr = <fs_out>-matnr.
    CLEAR ls_makt.
    READ TABLE lt_makt INTO ls_makt WITH KEY matnr = <fs_out>-matnr.
    CLEAR ls_t134t.
    READ TABLE lt_t134t INTO ls_t134t WITH KEY mtart = ls_mara-mtart.
    CLEAR ls_zfit001.
    READ TABLE lt_zfit001 INTO ls_zfit001 WITH KEY zproj_code = <fs_out>-vertn.
    CLEAR ls_vbkd.
    READ TABLE lt_vbkd INTO ls_vbkd WITH KEY vbeln = <fs_out>-vbeln.

    <fs_out>-zterm = ls_vbkd-zterm.
    IF <fs_out>-knrze IS INITIAL.
      <fs_out>-knrze = <fs_out>-kunnr.
      <fs_out>-name3 = <fs_out>-name1.
    ENDIF.
    <fs_out>-mtart = ls_mara-mtart.
    <fs_out>-maktx = ls_makt-maktx.
    <fs_out>-mtbez = ls_t134t-mtbez.

    <fs_out>-zproj = ls_zfit001-zproj."活动项目描述
    READ TABLE lt_zfit013 INTO ls_zfit013 WITH KEY fktyp = <fs_out>-fktyp
                                                   mtart = <fs_out>-mtart.
    IF sy-subrc EQ 0.
      <fs_out>-xflag = 'X'."票折计算标识 物料类型与出具发票类别在票折范围自建表,设置X
    ENDIF.
    <fs_out>-zdiscount = ls_zfit001-zdiscount."票折行
    IF <fs_out>-xflag = 'X' AND <fs_out>-zdiscount = 'X'.
    ELSE.
*         PZQDJ type KBETR,"票折前单价
*         PZQJE type KBETR,"票折前金额
      <fs_out>-pzqdj = <fs_out>-vkbetr.
      <fs_out>-pzqje = <fs_out>-avkbetr.

      "ADD BY XY 20170302
      <fs_out>-pzhdj = <fs_out>-pzqdj.
      "ADD ENDED

    ENDIF.

    IF <fs_out>-xflag = 'X'.
      CLEAR gs_k_akbetr.
*         move-corresponding <FS_OUT> to GS_K_AKBETR.
      CLEAR gs_k_akbetr.
      gs_k_akbetr-kunnr = <fs_out>-kunnr.
      gs_k_akbetr-pzqje = <fs_out>-pzqje.
      gs_k_akbetr-akbetr = <fs_out>-akbetr.
      COLLECT gs_k_akbetr INTO gt_k_akbetr.
    ENDIF.
  ENDLOOP.


  LOOP AT gt_out ASSIGNING <fs_out>.
*1、票折计算标识=X,按客户,根据零售金额比例分摊票折前金额,保留两位小数:
*票折后金额=(该行零售金额/按客户合计的零售金额)*按客户合计的票折前金额
*2、票折计算标识<>X,票折后金额=票折前金额
    CLEAR gs_k_akbetr.
    READ TABLE gt_k_akbetr INTO gs_k_akbetr WITH KEY kunnr = <fs_out>-kunnr.
    IF <fs_out>-xflag = 'X'.
*         PZHJE type KBETR,"票折后金额
*         PZHDJ type KBETR,"票折后单价
      IF gs_k_akbetr-akbetr NE 0.
        <fs_out>-pzhje = <fs_out>-akbetr / gs_k_akbetr-akbetr * gs_k_akbetr-pzqje.
      ENDIF.
    ELSE.
      <fs_out>-pzhje = <fs_out>-pzqje.
    ENDIF.

    IF <fs_out>-kwmeng NE 0.
      IF <fs_out>-xflag = 'X' AND <fs_out>-zdiscount = 'X'.
      <fs_out>-pzhdj = <fs_out>-pzhje / <fs_out>-kwmeng.
      ENDIF.
    ENDIF.

    <fs_out>-pzhjefs = <fs_out>-pzhdj * <fs_out>-kwmeng.
    IF <fs_out>-avkbetr NE 0.
      <fs_out>-pzzk = <fs_out>-pzhje / <fs_out>-avkbetr * 100."票折折扣
    ENDIF.
    IF <fs_out>-xflag = 'X'.
      CLEAR gs_k_akbetr.
      gs_k_akbetr-kunnr = <fs_out>-kunnr.
      gs_k_akbetr-pzhjefs = <fs_out>-pzhjefs.
      COLLECT gs_k_akbetr INTO gt_k_akbetr.
    ENDIF.
  ENDLOOP.

  LOOP AT gt_k_akbetr INTO gs_k_akbetr.
    IF gs_k_akbetr-pzqje NE gs_k_akbetr-pzhjefs .
      LOOP AT gt_out ASSIGNING <fs_out> WHERE kunnr = gs_k_akbetr-kunnr
                                            AND xflag = 'X'
                                            AND zdiscount = 'X'.
        <fs_out>-wc = gs_k_akbetr-pzqje - gs_k_akbetr-pzhjefs.
        EXIT.
      ENDLOOP.

    ENDIF.
  ENDLOOP.

ENDFORM.                    " FRM_GETDATA
*&---------------------------------------------------------------------*
*&      Form  FRM_DEALDATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_dealdata .


ENDFORM.                    " FRM_DEALDATA




*&---------------------------------------------------------------------*
*&      Form  FRM_ALV
*&---------------------------------------------------------------------*
*  功能描述:ALV显示子程序
*----------------------------------------------------------------------*
*  入口参数:无
*  出口参数:无
*----------------------------------------------------------------------*
FORM frm_alv .

  PERFORM frm_fieldcat.
  PERFORM frm_layout.
  PERFORM frm_output.

ENDFORM.                    " FRM_ALV
*&---------------------------------------------------------------------*
*&      Form  FRM_FIELDCAT
*&---------------------------------------------------------------------*
*  功能描述:显示ALV列的标题、列宽、CHECKBOX
*----------------------------------------------------------------------*
*  入口参数:无
*  出口参数:无
*----------------------------------------------------------------------*
FORM frm_fieldcat .
  PERFORM frm_disp TABLES it_fieldcat   USING:
         'VKORG'  '销售组织'  '' '' '' '',
         'KUNNR'  '客户'  '' '' '' '',
         'NAME1'  '售达方名称'  '' '' '' '',
         'KUNN2'  '付款方编号'  '' '' '' '',
         'NAME2'  '付款方名称'  '' '' '' '',
         'KNRZE'  '总部编号'  '' '' '' '',
         'NAME3'  '总部描述'  '' '' '' '',
         'FKTYP'  '出具发票类别'  '' '' '' '',
         'FTEXT'  '出具发票类别描述'  '' '' '' '',
         'VBELN'  '发货单号'  '' '' '' '',
         'POSNR'  '发货单行项目'  '' '' '' '',
         'FKDAT'  '出具发票日期'  '' '' '' '',
         'AUART'  '凭证类型'  '' '' '' '',
         'BEZEI'  '凭证类型描述'  '' '' '' '',
         'FKART'  '开票类型'  '' '' '' '',
         'VGBEL'  'SO/PO号'  '' '' '' '',
         'VGPOS'  'SO/PO行号'  '' '' '' '',
         'MTART'  '物料类型'  '' '' '' '',
         'MTBEZ'  '物料类型描述'  '' '' '' '',
         'MATNR'  '物料编码'  '' '' '' '',
         'MAKTX'  '物料描述'  '' '' '' '',
         'KWMENG'  '数量'  '' '' '' '',
         'MEINS'  '单位'  '' '' '' '',
         'VERTN'  '活动项目'  '' '' '' '',
         'ZPROJ'  '活动项目描述'  '' '' '' '',
         'XFLAG'  '票折计算标识'  '' '' '' '',
      'ZDISCOUNT'  '票折行'  '' '' '' 'X',
         'KBETR'  '零售价'  '' '' '' '',
        'AKBETR'  '零售金额'  '' '' '' '',
        'VKBETR'  '订单价'  '' '' '' '',
       'AVKBETR'  '订单价金额'  '' '' '' '',
         'PZQDJ'  '票折前单价'  '' '' '' '',
         'PZQJE'  '票折前金额'  '' '' '' '',
         'PZHJE'  '票折后金额'  '' '' '' '',
         'PZHDJ'  '票折后单价'  '' '' '' '',
       'PZHJEFS'  '票折后金额(反算)'  '' '' '' '',
         'PZZK'   '票折折扣(%)'  '' '' '' '',
         'WC'     '尾差' '' '' '' '',
         'STATU'   '状态'  '' '' '' '',
         'TYPE'   '状态'  '' '' '' '',
         'MSG'   '消息'  '' '' '' '',
         'BILLDATE'   '开票日期'  '' 'ERDAT' 'VBAK' 'X',
         'BILL'   '发票号'  '' '' '' '',
         'BILLMSG'   '开票消息'  '' '' '' ''.



ENDFORM.                    " FRM_FIELDCAT
*&---------------------------------------------------------------------
*&      Form  FRM_FIELD_DISP
*&---------------------------------------------------------------------*
*  功能描述:通过传入字段名、字段名的相应描述,得到ALV视图的列标题
*----------------------------------------------------------------------*
*  入口参数:大写字段名、字段名的描述,列的宽度,参考的系统表字段名,参考
*            的系统表名(不需要的参数传为空)。
*  出口参数:无
*----------------------------------------------------------------------*
FORM frm_disp TABLES it_fieldcat TYPE slis_t_fieldcat_alv
                   USING fu_name TYPE slis_fieldcat_alv-fieldname" 自定义数据库表字段
                    fu_disp TYPE slis_fieldcat_alv-seltext_l" 字段描述
*                    fu_colwidth TYPE slis_fieldcat_alv-outputlen" 输出列的宽度
                    fu_nozero TYPE slis_fieldcat_alv-no_zero" 是否显示前导零
                    fu_refname TYPE slis_fieldcat_alv-ref_fieldname" 参考的系统表字段
                    fu_reftab TYPE slis_fieldcat_alv-ref_tabname" 参考的系统表
                    fu_edit   TYPE slis_fieldcat_alv-edit.
  "形参类型与slis_fieldcat_alv中相应字段名的类型保持一致

  DATA: lw_fieldcat TYPE slis_fieldcat_alv.

  CLEAR lw_fieldcat.
  lw_fieldcat-fieldname = fu_name.         " 自定义数据库表字段
  lw_fieldcat-ref_fieldname = fu_refname.  " 参考的系统表字段
  lw_fieldcat-ref_tabname = fu_reftab.     " 参考的系统表
  lw_fieldcat-seltext_l = fu_disp.         " 字段描述
*  lw_fieldcat-outputlen = fu_colwidth.     " 输出列的宽度
  lw_fieldcat-no_zero = fu_nozero.         " 是否显示前导零
  lw_fieldcat-edit = fu_edit.

  lw_fieldcat-icon    = 'X'.      "-icon    = 'X'.      "图标功能
  APPEND lw_fieldcat TO it_fieldcat.

ENDFORM.                    " FRM_DISP
*&---------------------------------------------------------------------*
*&      Form  FRM_LAYOUT
*&---------------------------------------------------------------------*
*  功能描述:显示ALV报表中的斑马线,设置ALV报表的第一列为CHECKBOX
*----------------------------------------------------------------------*
*  入口参数:无
*  出口参数:无
*----------------------------------------------------------------------*
FORM frm_layout .

  wa_layout-colwidth_optimize = 'X'.     " ALV显示的列宽自动调整
  wa_layout-zebra             = 'X'.     " ALV中显示斑马线
  wa_layout-box_fieldname = 'CHBOX'.  " 第一列设置为CHECKBOX按钮
*  WA_LAYOUT-COLTAB_FIELDNAME = 'CELLCOLOR'.

ENDFORM.                    " FRM_LAYOUT

*&---------------------------------------------------------------------*
*&      Form  FRM_OUTPUT
*&---------------------------------------------------------------------*
*  功能描述:输出ALV报表的视图
*----------------------------------------------------------------------*
*  入口参数:无
*  出口参数:无
*----------------------------------------------------------------------*
FORM frm_output .

  DATA: l_repid    LIKE sy-repid,
        gs_variant TYPE disvariant.

  gs_variant-report = sy-repid.
  l_repid = sy-repid.

  DATA:lc_glay TYPE lvc_s_glay.
  lc_glay-edt_cll_cb = 'X'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_pf_status_set = 'FRM_SET_STATUS' "自定义按钮及事件
      i_callback_user_command  = 'FRM_USER_COMMAND'
      i_callback_program       = l_repid
      is_variant               = gs_variant
      i_html_height_top        = 26     " I_CALLBACK_HTML_TOP_OF_PAGE = 'HTML_TOP_OF_PAGE'
      is_layout                = wa_layout
      it_fieldcat              = it_fieldcat[]
      i_grid_settings          = lc_glay
      i_save                   = 'A'
    TABLES
      t_outtab                 = gt_out
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM.                    " FRM_OUTPUT




*&---------------------------------------------------------------------*
*&      Form  FRM_SET_STATUS
*&---------------------------------------------------------------------*
*  功能描述:在SE80中定义一个STANDARD_FULLSCREEN的状态栏
*----------------------------------------------------------------------*
*  入口参数:无
*  出口参数:无
*----------------------------------------------------------------------*
FORM frm_set_status USING rt_extab TYPE slis_t_extab..

  SET PF-STATUS 'STANDARD'.    "定义GUI状态,添加应用工具栏按钮

ENDFORM.                    " FRM_SET_STATUS

FORM frm_set_status1 USING rt_extab TYPE slis_t_extab..

  SET PF-STATUS 'STANDARD1'.    "定义GUI状态,添加应用工具栏按钮

ENDFORM.                    " FRM_SET_STATUS
*&---------------------------------------------------------------------*
*&      Form  FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*  功能描述:响应用户的操作
*----------------------------------------------------------------------*
*  入口参数:无
*  出口参数:无
*----------------------------------------------------------------------*
FORM frm_user_command USING ucomm LIKE sy-ucomm
                         selfield TYPE slis_selfield..

  selfield-refresh = 'X'.
  CASE sy-ucomm.    "sy-ucomm获得按钮的功能码

    WHEN 'VF04'.
      PERFORM frm_vf04.
    WHEN 'BILL'.
      PERFORM frm_ready_billing.
    WHEN 'SAVE'.
      PERFORM frm_save.
    WHEN 'BACK' .
      LEAVE TO SCREEN 0.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
    WHEN 'REFRESH'.
      PERFORM frm_refresh.

  ENDCASE.

ENDFORM.                    " FRM_USER_COMMAND

FORM frm_refresh.

  REFRESH gt_k_akbetr.
  LOOP AT gt_out ASSIGNING <fs_out>.


    IF <fs_out>-xflag = 'X' AND <fs_out>-zdiscount = 'X'.
      CLEAR:<fs_out>-pzqdj,<fs_out>-pzqje.
    ELSE.
*        PZQDJ type KBETR,"票折前单价
*        PZQJE type KBETR,"票折前金额
      <fs_out>-pzqdj = <fs_out>-vkbetr.
      <fs_out>-pzqje = <fs_out>-avkbetr.

    ENDIF.

    IF <fs_out>-xflag = 'X'.
      CLEAR gs_k_akbetr.
      gs_k_akbetr-kunnr = <fs_out>-kunnr.
      gs_k_akbetr-pzqje = <fs_out>-pzqje.
      gs_k_akbetr-akbetr = <fs_out>-akbetr.
      COLLECT gs_k_akbetr INTO gt_k_akbetr.
    ENDIF.
  ENDLOOP.


  LOOP AT gt_out ASSIGNING <fs_out>.
*1、票折计算标识=X,按客户,根据零售金额比例分摊票折前金额,保留两位小数:
*票折后金额=(该行零售金额/按客户合计的零售金额)*按客户合计的票折前金额
*2、票折计算标识<>X,票折后金额=票折前金额
    CLEAR gs_k_akbetr.
    READ TABLE gt_k_akbetr INTO gs_k_akbetr WITH KEY kunnr = <fs_out>-kunnr.

    IF <fs_out>-xflag = 'X'.
*         PZHJE type KBETR,"票折后金额
*         PZHDJ type KBETR,"票折后单价
      IF gs_k_akbetr-akbetr NE 0.
        <fs_out>-pzhje = <fs_out>-akbetr / gs_k_akbetr-akbetr * gs_k_akbetr-pzqje.
      ENDIF.
    ELSE.
      <fs_out>-pzhje = <fs_out>-pzqje.
    ENDIF.

    IF <fs_out>-kwmeng NE 0.
      <fs_out>-pzhdj = <fs_out>-pzhje / <fs_out>-kwmeng.
    ENDIF.

    <fs_out>-pzhjefs = <fs_out>-pzhdj * <fs_out>-kwmeng.
    IF <fs_out>-avkbetr NE 0.
      <fs_out>-pzzk = ( <fs_out>-pzhjefs + <fs_out>-wc ) / <fs_out>-avkbetr * 100."票折折扣
    ENDIF.
    IF <fs_out>-xflag = 'X'.
      CLEAR gs_k_akbetr.
      gs_k_akbetr-kunnr = <fs_out>-kunnr.
      gs_k_akbetr-pzhjefs = <fs_out>-pzhjefs.
      COLLECT gs_k_akbetr INTO gt_k_akbetr.
    ENDIF.
    CLEAR <fs_out>-wc.
  ENDLOOP.

  LOOP AT gt_k_akbetr INTO gs_k_akbetr.
    IF gs_k_akbetr-pzqje NE gs_k_akbetr-pzhjefs.
      LOOP AT gt_out ASSIGNING <fs_out> WHERE kunnr = gs_k_akbetr-kunnr
                                            AND xflag = 'X'
                                            AND zdiscount = 'X'.
        <fs_out>-wc = gs_k_akbetr-pzqje - gs_k_akbetr-pzhjefs.
        EXIT.
      ENDLOOP.

    ENDIF.
  ENDLOOP.
ENDFORM.

FORM frm_save.
  DATA: i_bapisdh1x LIKE bapisdh1x,
        i_return    LIKE TABLE OF bapiret2 WITH HEADER LINE. "返回消息
  DATA: conditions_in  LIKE TABLE OF   bapicond WITH HEADER LINE,
        conditions_inx LIKE TABLE OF  bapicondx WITH HEADER LINE.
  DATA: ls_prcd_elements TYPE prcd_elements.

  DATA:lt_zfit014 TYPE TABLE OF zfit014 WITH HEADER LINE.
  DATA:l_lastdt TYPE char15.

  DATA: DKPEIN LIKE prcd_elements-KPEIN.
*票折前单价传入ZK03
*票折后单价传入ZPR4
*尾差传入ZK05
*票折折扣ZK04

  CONCATENATE sy-datum sy-uzeit INTO  l_lastdt.
  LOOP AT gt_out ASSIGNING <fs_out> WHERE chbox = 'X'.
    "add by xy 20170302
    CLEAR wa_vbeln-vgbel.
    wa_vbeln-vgbel = <fs_out>-vgbel.
    COLLECT wa_vbeln INTO gt_vbeln.
    "add ended
*        if <FS_OUT>-FKTYP eq 'I'.
*                   <FS_OUT>-TYPE = 'S'.
*                   <FS_OUT>-STATU = ICON_LED_GREEN.
*        else.
*
*                 refresh: I_RETURN,CONDITIONS_IN,CONDITIONS_INX.
*
*                 I_BAPISDH1X-UPDATEFLAG = 'U'.
*
**         票折前单价传入ZK03
*                 clear CONDITIONS_IN.
*                 clear LS_PRCD_ELEMENTS.
*                 select single * into LS_PRCD_ELEMENTS from  PRCD_ELEMENTS where KNUMV = <FS_OUT>-KNUMV
*                                                                           and KPOSN = <FS_OUT>-VGPOS
*                                                                           and KSCHL = 'ZK03'.
*                 CONDITIONS_IN-ITM_NUMBER  = <FS_OUT>-VGPOS."  条件项目号
*                 CONDITIONS_IN-COND_TYPE  = 'ZK03'.
*                 CONDITIONS_IN-COND_VALUE = <FS_OUT>-PZQDJ.
*                 CONDITIONS_IN-COND_ST_NO = LS_PRCD_ELEMENTS-STUNR.
*                 CONDITIONS_IN-COND_COUNT = LS_PRCD_ELEMENTS-ZAEHK.
*                 CONDITIONS_IN-COND_P_UNT = 1.
*                 CONDITIONS_IN-CURRENCY = 'CNY'.
*                 append CONDITIONS_IN.
*
*                 clear CONDITIONS_INX.
*                 CONDITIONS_INX-ITM_NUMBER = <FS_OUT>-VGPOS.
*                 CONDITIONS_INX-COND_TYPE  = 'ZK03'.
*
*                 if LS_PRCD_ELEMENTS is not initial.
*                      CONDITIONS_INX-UPDATEFLAG = 'U'.
*                 else.
*                      CONDITIONS_INX-UPDATEFLAG = 'I'.
*                 endif.
*                 CONDITIONS_INX-COND_VALUE = 'X'.
*                 CONDITIONS_INX-COND_ST_NO = LS_PRCD_ELEMENTS-STUNR.
*                 CONDITIONS_INX-COND_COUNT = LS_PRCD_ELEMENTS-ZAEHK.
*                 CONDITIONS_INX-COND_P_UNT = 'X'.
*                 CONDITIONS_INX-CURRENCY = 'X'.
*                 append CONDITIONS_INX.
*
*         "票折后单价传入ZPR4
*                 clear CONDITIONS_IN.
*                 clear LS_PRCD_ELEMENTS.
*                 select single * into LS_PRCD_ELEMENTS from  PRCD_ELEMENTS where KNUMV = <FS_OUT>-KNUMV
*                                                                           and KPOSN = <FS_OUT>-VGPOS
*                                                                           and KSCHL = 'ZPR4'.
*                 CONDITIONS_IN-ITM_NUMBER  = <FS_OUT>-VGPOS."  条件项目号
*                 CONDITIONS_IN-COND_TYPE  = 'ZPR4'.
*                 CONDITIONS_IN-COND_VALUE = <FS_OUT>-PZHDJ.
*                 CONDITIONS_IN-COND_ST_NO = LS_PRCD_ELEMENTS-STUNR.
*                 CONDITIONS_IN-COND_COUNT = LS_PRCD_ELEMENTS-ZAEHK.
*                 CONDITIONS_IN-COND_P_UNT = 1.
*                 CONDITIONS_IN-CURRENCY = 'CNY'.
*                 append CONDITIONS_IN.
*
*                 clear CONDITIONS_INX.
*                 CONDITIONS_INX-ITM_NUMBER = <FS_OUT>-VGPOS.
*                 CONDITIONS_INX-COND_TYPE  = 'ZPR4'.
*                 clear LS_PRCD_ELEMENTS.
*                 select single * into LS_PRCD_ELEMENTS from  PRCD_ELEMENTS where KNUMV = <FS_OUT>-KNUMV
*                                                                           and KPOSN = <FS_OUT>-VGPOS
*                                                                           and KSCHL = 'ZPR4'.
*                 if LS_PRCD_ELEMENTS is not initial.
*                      CONDITIONS_INX-UPDATEFLAG = 'U'.
*                 else.
*                      CONDITIONS_INX-UPDATEFLAG = 'I'.
*                 endif.
*                 CONDITIONS_INX-COND_VALUE = 'X'.
*                 CONDITIONS_INX-COND_ST_NO = LS_PRCD_ELEMENTS-STUNR.
*                 CONDITIONS_INX-COND_COUNT = LS_PRCD_ELEMENTS-ZAEHK.
*                 CONDITIONS_INX-COND_P_UNT = 'X'.
*                 CONDITIONS_INX-CURRENCY = 'X'.
*                 append CONDITIONS_INX.
**         票折折扣ZK04
*                 clear CONDITIONS_IN.
*                 clear LS_PRCD_ELEMENTS.
*                 select single * into LS_PRCD_ELEMENTS from  PRCD_ELEMENTS where KNUMV = <FS_OUT>-KNUMV
*                                                                           and KPOSN = <FS_OUT>-VGPOS
*                                                                           and KSCHL = 'ZK04'.
*                 CONDITIONS_IN-ITM_NUMBER  = <FS_OUT>-VGPOS."  条件项目号
*                 CONDITIONS_IN-COND_TYPE  = 'ZK04'.
*                 CONDITIONS_IN-COND_VALUE = <FS_OUT>-PZZK.
*                 CONDITIONS_IN-COND_ST_NO = LS_PRCD_ELEMENTS-STUNR.
*                 CONDITIONS_IN-COND_COUNT = LS_PRCD_ELEMENTS-ZAEHK.
**                 CONDITIONS_IN-COND_P_UNT = 1.
**                 CONDITIONS_IN-CURRENCY = 'CNY'.
*                 append CONDITIONS_IN.
*
*                 clear CONDITIONS_INX.
*                 CONDITIONS_INX-ITM_NUMBER = <FS_OUT>-VGPOS.
*                 CONDITIONS_INX-COND_TYPE  = 'ZK04'.
*                 if LS_PRCD_ELEMENTS is not initial.
*                      CONDITIONS_INX-UPDATEFLAG = 'U'.
*                 else.
*                      CONDITIONS_INX-UPDATEFLAG = 'I'.
*                 endif.
*                 CONDITIONS_INX-COND_VALUE = 'X'.
*                 CONDITIONS_INX-COND_ST_NO = LS_PRCD_ELEMENTS-STUNR.
*                 CONDITIONS_INX-COND_COUNT = LS_PRCD_ELEMENTS-ZAEHK.
**                 CONDITIONS_INX-COND_P_UNT = 'X'.
**                 CONDITIONS_INX-CURRENCY = 'X'.
*                 append CONDITIONS_INX.
*
**         尾差传入ZK05
**                 if <FS_OUT>-WC ne 0.
*                     clear CONDITIONS_IN.
*                     select single * into LS_PRCD_ELEMENTS from  PRCD_ELEMENTS where KNUMV = <FS_OUT>-KNUMV
*                                                                           and KPOSN = <FS_OUT>-VGPOS
*                                                                           and KSCHL = 'ZK05'.
*                     CONDITIONS_IN-ITM_NUMBER  = <FS_OUT>-VGPOS."  条件项目号
*                     CONDITIONS_IN-COND_TYPE  = 'ZK05'.
*                     CONDITIONS_IN-COND_VALUE = <FS_OUT>-WC.
*                     CONDITIONS_IN-COND_ST_NO = LS_PRCD_ELEMENTS-STUNR.
*                     CONDITIONS_IN-COND_COUNT = LS_PRCD_ELEMENTS-ZAEHK.
*                     CONDITIONS_IN-COND_P_UNT = 1.
*                     CONDITIONS_IN-CURRENCY = 'CNY'.
*                     append CONDITIONS_IN.
*
*                     clear CONDITIONS_INX.
*                     CONDITIONS_INX-ITM_NUMBER = <FS_OUT>-VGPOS.
*                     CONDITIONS_INX-COND_TYPE  = 'ZK05'.
*                     if LS_PRCD_ELEMENTS is not initial.
*                          CONDITIONS_INX-UPDATEFLAG = 'U'.
*                     else.
*                          CONDITIONS_INX-UPDATEFLAG = 'I'.
*                     endif.
*                     CONDITIONS_INX-COND_VALUE = 'X'.
*                     CONDITIONS_INX-COND_ST_NO = LS_PRCD_ELEMENTS-STUNR.
*                     CONDITIONS_INX-COND_COUNT = LS_PRCD_ELEMENTS-ZAEHK.
*                     CONDITIONS_INX-COND_P_UNT = 'X'.
*                     CONDITIONS_INX-CURRENCY = 'X'.
*                     append CONDITIONS_INX.
*                 endif.
*                 call function 'BAPI_SALESORDER_CHANGE'
*                       exporting
*                         SALESDOCUMENT    = <FS_OUT>-VGBEL "订单号
*                         ORDER_HEADER_INX = I_BAPISDH1X     "Sales Order Check List
*                       tables
*                         RETURN           = I_RETURN  "返回消息
*                         CONDITIONS_IN    = CONDITIONS_IN
*                         CONDITIONS_INX   = CONDITIONS_INX.
*
*                   loop at I_RETURN where TYPE = 'E' or TYPE = 'A' .
*               "      concatenate <FS_OUT>-MSG I_RETURN-MESSAGE ';'  into <FS_OUT>-MSG.
*                   endloop.
*                 if SY-SUBRC ne 0.
*                   call function 'BAPI_TRANSACTION_COMMIT'
*                     exporting
*                       WAIT = 'X'.
*                   <FS_OUT>-TYPE = 'S'.
*                   <FS_OUT>-STATU = ICON_LED_GREEN.
*                   move-corresponding <FS_OUT> to LT_ZFIT014.
*                   LT_ZFIT014-LASTDT = L_LASTDT.
*                   append LT_ZFIT014.
*                 else.
*                   call function 'BAPI_TRANSACTION_ROLLBACK'.
*                   <FS_OUT>-TYPE = 'E'.
*                   <FS_OUT>-STATU = ICON_LED_RED.
*                 endif.
*                  loop at I_RETURN  .
*                     concatenate <FS_OUT>-MSG I_RETURN-MESSAGE ';'  into <FS_OUT>-MSG.
*                   endloop.
*      endif.
  ENDLOOP.

  LOOP AT gt_vbeln INTO wa_vbeln.
    REFRESH: i_return,conditions_in,conditions_inx.
    CLEAR zflag.
    LOOP AT gt_out ASSIGNING <fs_out> WHERE chbox = 'X' AND vgbel = wa_vbeln-vgbel.
      "如果FKTYP = 'I' 不做处理
      IF <fs_out>-fktyp EQ 'I'.
        <fs_out>-type = 'S'.
        <fs_out>-statu = icon_led_green.
        zflag = 'X'.
      ELSE.
        zflag = ''.
        i_bapisdh1x-updateflag = 'U'.

"先取ZPR3的条件价格单位,用来作为其它字段的价格单位
        CLEAR conditions_in.
        CLEAR ls_prcd_elements.
        SELECT SINGLE * INTO ls_prcd_elements FROM  prcd_elements WHERE knumv = <fs_out>-knumv
                                                                  AND kposn = <fs_out>-vgpos
                                                                  AND kschl = 'ZPR3'.
        "如果没读到就用1。
        CLEAR DKPEIN.
        IF SY-SUBRC = 0.
          DKPEIN = ls_prcd_elements-KPEIN.
        ELSE.
          DKPEIN = 1.
        ENDIF.

*         票折前单价传入ZK03
        CLEAR conditions_in.
        CLEAR ls_prcd_elements.
        SELECT SINGLE * INTO ls_prcd_elements FROM  prcd_elements WHERE knumv = <fs_out>-knumv
                                                                  AND kposn = <fs_out>-vgpos
                                                                  AND kschl = 'ZK03'.
        conditions_in-itm_number  = <fs_out>-vgpos."  条件项目号
        conditions_in-cond_type  = 'ZK03'.
        conditions_in-cond_value = <fs_out>-pzqdj * DKPEIN.
        conditions_in-cond_st_no = ls_prcd_elements-stunr.
        conditions_in-cond_count = ls_prcd_elements-zaehk.
        conditions_in-cond_p_unt = DKPEIN."条件单位取
        conditions_in-currency = 'CNY'.
        APPEND conditions_in.

        CLEAR conditions_inx.
        conditions_inx-itm_number = <fs_out>-vgpos.
        conditions_inx-cond_type  = 'ZK03'.

        IF ls_prcd_elements IS NOT INITIAL.
          conditions_inx-updateflag = 'U'.
        ELSE.
          conditions_inx-updateflag = 'I'.
        ENDIF.
        conditions_inx-cond_value = 'X'.
        conditions_inx-cond_st_no = ls_prcd_elements-stunr.
        conditions_inx-cond_count = ls_prcd_elements-zaehk.
        conditions_inx-cond_p_unt = 'X'.
        conditions_inx-currency = 'X'.
        APPEND conditions_inx.

        "票折后单价传入ZPR4
        CLEAR conditions_in.
        CLEAR ls_prcd_elements.
        SELECT SINGLE * INTO ls_prcd_elements FROM  prcd_elements WHERE knumv = <fs_out>-knumv
                                                                  AND kposn = <fs_out>-vgpos
                                                                  AND kschl = 'ZPR4'.
        conditions_in-itm_number  = <fs_out>-vgpos."  条件项目号
        conditions_in-cond_type  = 'ZPR4'.
        conditions_in-cond_value = <fs_out>-pzhdj * DKPEIN.
        conditions_in-cond_st_no = ls_prcd_elements-stunr.
        conditions_in-cond_count = ls_prcd_elements-zaehk.
        conditions_in-cond_p_unt = DKPEIN.
        conditions_in-currency = 'CNY'.
        APPEND conditions_in.

        CLEAR conditions_inx.
        conditions_inx-itm_number = <fs_out>-vgpos.
        conditions_inx-cond_type  = 'ZPR4'.
        CLEAR ls_prcd_elements.
        SELECT SINGLE * INTO ls_prcd_elements FROM  prcd_elements WHERE knumv = <fs_out>-knumv
                                                                  AND kposn = <fs_out>-vgpos
                                                                  AND kschl = 'ZPR4'.
        IF ls_prcd_elements IS NOT INITIAL.
          conditions_inx-updateflag = 'U'.
        ELSE.
          conditions_inx-updateflag = 'I'.
        ENDIF.
        conditions_inx-cond_value = 'X'.
        conditions_inx-cond_st_no = ls_prcd_elements-stunr.
        conditions_inx-cond_count = ls_prcd_elements-zaehk.
        conditions_inx-cond_p_unt = 'X'.
        conditions_inx-currency = 'X'.
        APPEND conditions_inx.
*         票折折扣ZK04
        CLEAR conditions_in.
        CLEAR ls_prcd_elements.
        SELECT SINGLE * INTO ls_prcd_elements FROM  prcd_elements WHERE knumv = <fs_out>-knumv
                                                                  AND kposn = <fs_out>-vgpos
                                                                  AND kschl = 'ZK04'.
        conditions_in-itm_number  = <fs_out>-vgpos."  条件项目号
        conditions_in-cond_type  = 'ZK04'.
        conditions_in-cond_value = <fs_out>-pzzk.
        conditions_in-cond_st_no = ls_prcd_elements-stunr.
        conditions_in-cond_count = ls_prcd_elements-zaehk.
*                 CONDITIONS_IN-COND_P_UNT = 1.
*                 CONDITIONS_IN-CURRENCY = 'CNY'.
        APPEND conditions_in.

        CLEAR conditions_inx.
        conditions_inx-itm_number = <fs_out>-vgpos.
        conditions_inx-cond_type  = 'ZK04'.
        IF ls_prcd_elements IS NOT INITIAL.
          conditions_inx-updateflag = 'U'.
        ELSE.
          conditions_inx-updateflag = 'I'.
        ENDIF.
        conditions_inx-cond_value = 'X'.
        conditions_inx-cond_st_no = ls_prcd_elements-stunr.
        conditions_inx-cond_count = ls_prcd_elements-zaehk.
*                 CONDITIONS_INX-COND_P_UNT = 'X'.
*                 CONDITIONS_INX-CURRENCY = 'X'.
        APPEND conditions_inx.

*         尾差传入ZK05
*                 if <FS_OUT>-WC ne 0.
        CLEAR conditions_in.
        SELECT SINGLE * INTO ls_prcd_elements FROM  prcd_elements WHERE knumv = <fs_out>-knumv
                                                              AND kposn = <fs_out>-vgpos
                                                              AND kschl = 'ZK05'.
        conditions_in-itm_number  = <fs_out>-vgpos."  条件项目号
        conditions_in-cond_type  = 'ZK05'.
        conditions_in-cond_value = <fs_out>-wc.
        conditions_in-cond_st_no = ls_prcd_elements-stunr.
        conditions_in-cond_count = ls_prcd_elements-zaehk.
        conditions_in-cond_p_unt = 1.
        conditions_in-currency = 'CNY'.
        APPEND conditions_in.

        CLEAR conditions_inx.
        conditions_inx-itm_number = <fs_out>-vgpos.
        conditions_inx-cond_type  = 'ZK05'.
        IF ls_prcd_elements IS NOT INITIAL.
          conditions_inx-updateflag = 'U'.
        ELSE.
          conditions_inx-updateflag = 'I'.
        ENDIF.
        conditions_inx-cond_value = 'X'.
        conditions_inx-cond_st_no = ls_prcd_elements-stunr.
        conditions_inx-cond_count = ls_prcd_elements-zaehk.
        conditions_inx-cond_p_unt = 'X'.
        conditions_inx-currency = 'X'.
        APPEND conditions_inx.
      ENDIF.
    ENDLOOP.

    "针对销售订单号过账
    IF zflag <> 'X'.
          call function 'BAPI_SALESORDER_CHANGE'
            exporting
              SALESDOCUMENT    = wa_vbeln-VGBEL "订单号
              ORDER_HEADER_INX = I_BAPISDH1X     "Sales Order Check List
            tables
              RETURN           = I_RETURN  "返回消息
              CONDITIONS_IN    = CONDITIONS_IN
              CONDITIONS_INX   = CONDITIONS_INX.

        loop at I_RETURN where TYPE = 'E' or TYPE = 'A' .
    "      concatenate <FS_OUT>-MSG I_RETURN-MESSAGE ';'  into <FS_OUT>-MSG.
        endloop.
      if SY-SUBRC ne 0.
        call function 'BAPI_TRANSACTION_COMMIT'
          exporting
            WAIT = 'X'.
        "当前销售订单号 绿灯
        LOOP AT gt_out ASSIGNING <fs_out> WHERE chbox = 'X' AND vgbel = wa_vbeln-vgbel.
          <FS_OUT>-TYPE = 'S'.
          <FS_OUT>-STATU = ICON_LED_GREEN.
        ENDLOOP.

        move-corresponding <FS_OUT> to LT_ZFIT014.
        LT_ZFIT014-LASTDT = L_LASTDT.
        append LT_ZFIT014.
      else.
        call function 'BAPI_TRANSACTION_ROLLBACK'.
        LOOP AT gt_out ASSIGNING <fs_out> WHERE chbox = 'X' AND vgbel = wa_vbeln-vgbel.
          <FS_OUT>-TYPE = 'E'.
          <FS_OUT>-STATU = ICON_LED_RED.
        ENDLOOP.
      endif.
       loop at I_RETURN  .
          concatenate <FS_OUT>-MSG I_RETURN-MESSAGE ';'  into <FS_OUT>-MSG.
        endloop.
    ENDIF.
  ENDLOOP.

  MODIFY zfit014 FROM TABLE lt_zfit014.
ENDFORM.

FORM frm_vf04.
  RANGES r_vbeln FOR vbco7-vbeln.
  LOOP AT gt_out ASSIGNING <fs_out> WHERE chbox = 'X' AND type = 'S'.
    IF <fs_out>-fktyp = 'L'.
      r_vbeln-low = <fs_out>-vbeln.
    ELSE.
      r_vbeln-low = <fs_out>-vgbel.
    ENDIF.
    r_vbeln-sign = 'I'.
    r_vbeln-option = 'EQ'.
    APPEND r_vbeln.
  ENDLOOP.
*  append lines of S_VBELN to R_VBELN.
*  append lines of S_VGBEL to R_VBELN.
  IF r_vbeln[] IS NOT INITIAL.
    SUBMIT sdbilldl WITH p_fkdat = s_fkdat-low
                    WITH p_fkdab = s_fkdat-high
                    WITH p_fkart IN s_fkart
                    WITH s_vbeln IN r_vbeln
                    WITH p_vkorg = p_vkorg
                    WITH s_vtweg IN s_vtweg
                    WITH s_spart IN s_spart
                    WITH s_vstel IN s_vstel
                    WITH p_kunnr IN s_kunnr
                    WITH p_allea = p_so
                    WITH p_alleb = p_dn
                    VIA SELECTION-SCREEN
                    AND RETURN.
  ENDIF.
ENDFORM.


DATA:
  gt_billingdatain   TYPE TABLE OF bapivbrk WITH HEADER LINE,
  gt_conditiondatain TYPE TABLE OF bapikomv WITH HEADER LINE,
  gt_errors          TYPE TABLE OF bapivbrkerrors WITH HEADER LINE,
  gv_flagx           TYPE c,
  gv_flagw           TYPE c,
  gv_count           TYPE int4.
DATA: gt_prcd_elements TYPE TABLE OF prcd_elements,
      gs_prcd_elements TYPE prcd_elements.
DATA: lt_success TYPE TABLE OF bapivbrksuccess WITH HEADER LINE,
      lt_return  TYPE TABLE OF bapiret1 WITH HEADER LINE.
*-------------------------------------------------------------------------
*            CALL BAPI
*-------------------------------------------------------------------------
FORM frm_order_billing CHANGING pv_message.





  SORT gt_billingdatain BY ref_doc.
  REFRESH: lt_return[],lt_success[],gt_errors[].

* Test Run
*  call function 'BAPI_BILLINGDOC_CREATEMULTIPLE'
*    exporting
**     CREATORDATAIN   =
*      TESTRUN         = 'X'
**     posting         = 'X'
*    tables
*      BILLINGDATAIN   = GT_BILLINGDATAIN
*      CONDITIONDATAIN = GT_CONDITIONDATAIN
**     CCARDDATAIN     =
**     TEXTDATAIN      =
*      ERRORS          = GT_ERRORS
*      RETURN          = LT_RETURN
*      SUCCESS         = LT_SUCCESS.
*
*  if not GT_ERRORS[] is initial.
*    GV_FLAGX = 'X'.
*  endif.
*
*  if not LT_RETURN[] is initial.
*
*    loop at LT_RETURN where TYPE = 'E'.
*      concatenate LT_RETURN-MESSAGE ' ' into PV_MESSAGE.
*    endloop.
*
*    GV_FLAGW = 'X'.
*  endif.

*  if GV_FLAGX is initial  .

* Post Run
  REFRESH :gt_errors,lt_return,lt_success.
  CALL FUNCTION 'BAPI_BILLINGDOC_CREATEMULTIPLE'
    EXPORTING
*     CREATORDATAIN   =
      testrun         = ''
*     POSTING         = 'X'
    TABLES
      billingdatain   = gt_billingdatain
      conditiondatain = gt_conditiondatain
*     CCARDDATAIN     =
*     TEXTDATAIN      =
      errors          = gt_errors
      return          = lt_return
      success         = lt_success.

  IF NOT lt_success[] IS INITIAL.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
  ENDIF.
  LOOP AT lt_return WHERE type = 'E'.
    CONCATENATE lt_return-message ' ' INTO pv_message.
  ENDLOOP.
*    loop at LT_SUCCESS.
*      VBELN = LT_SUCCESS-BILL_DOC.
*      if VBELN is not initial.
*        exit.
*       endif.
*    endloop.
*  endif.

ENDFORM.                    " FRM_ORDER_BILLING


*-------------------------------------------------------------------------
*            BAPI 赋值
*-------------------------------------------------------------------------
FORM frm_ready_billing .

  DATA: lv_message TYPE bapi_msg,
        l_vbeln    TYPE vbeln,
        l_posnr    TYPE posnr.

  DATA: lt_out TYPE TABLE OF ty_out,
        ls_out TYPE ty_out.
  DATA: lt_zfit015 TYPE TABLE OF zfit015,
        ls_zfit015 TYPE zfit015.
  SELECT * INTO TABLE  gt_prcd_elements FROM prcd_elements
                       FOR ALL ENTRIES IN gt_out
                       WHERE knumv = gt_out-knumv.

  LOOP AT gt_out INTO gs_out WHERE chbox = 'X' AND bill IS INITIAL AND type = 'S'.
    ls_out-vkorg = gs_out-vkorg.
    ls_out-kunnr = gs_out-kunnr.
    ls_out-fkart = gs_out-fkart.
    COLLECT ls_out INTO lt_out.
  ENDLOOP. "同一销售组织、开票类型、客户,统一开票


  LOOP AT lt_out INTO ls_out.
    REFRESH: gt_billingdatain ,  gt_conditiondatain ,gt_errors.
    gv_count = 0.
    LOOP AT gt_out INTO gs_out WHERE chbox = 'X'
                                   AND bill IS INITIAL
                                   AND type = 'S'
                                   AND vkorg = ls_out-vkorg
                                   AND kunnr = ls_out-kunnr
                                   AND fkart = ls_out-fkart.
      CLEAR gt_billingdatain.
      IF gs_out-billdate IS INITIAL .
        gs_out-billdate = p_date.
        IF gs_out-billdate IS INITIAL.
          gs_out-billdate = sy-datum.
        ENDIF.
        MODIFY gt_out FROM gs_out TRANSPORTING billdate.
      ENDIF.
      gv_count = gv_count + 1.
      IF gs_out-fktyp = 'L'.

        gt_billingdatain-ref_doc    = gs_out-vbeln.  "交货单号
        gt_billingdatain-ref_item   = gs_out-posnr.


        gt_billingdatain-doc_number = gs_out-vgbel."凭证号
        gt_billingdatain-itm_number = gs_out-vgpos.

        gt_billingdatain-doc_type   = gs_out-auart.   "销售凭证类型
        gt_billingdatain-ref_doc_ca = 'J'.            "SD 凭证类别
      ELSEIF gs_out-fktyp = 'A'.
        gt_billingdatain-ref_doc    = gs_out-vgbel.  "SO
        gt_billingdatain-ref_item   = gs_out-vgpos.


        gt_billingdatain-doc_number = gs_out-vbeln."DN
        gt_billingdatain-itm_number = gs_out-posnr.

        gt_billingdatain-doc_type   = gs_out-auart.   "销售凭证类型
        gt_billingdatain-ref_doc_ca = 'C'.            "SD 凭证类别
      ELSEIF gs_out-fktyp = 'I'.
        gt_billingdatain-ref_doc    = gs_out-vbeln.  "交货单号
        gt_billingdatain-ref_item   = gs_out-posnr.


        gt_billingdatain-doc_number = gs_out-vgbel."凭证号
        gt_billingdatain-itm_number = gs_out-vgpos.

        gt_billingdatain-doc_type   = gs_out-auart.   "销售凭证类型
        gt_billingdatain-ref_doc_ca = 'J'.            "SD 凭证类别

      ENDIF.
*
      gt_billingdatain-ordbilltyp = gs_out-fkart.   "开票类型
      gt_billingdatain-salesorg   = gs_out-vkorg.   "销售组织
*
*
      gt_billingdatain-distr_chan = gs_out-vtweg. "分销渠道
      gt_billingdatain-division   = gs_out-spart. "产品组
*
*              票折前单价传入ZK03
*              票折后单价传入ZPR4
*              尾差传入ZK05
*              票折折扣ZK04
*              clear GT_CONDITIONDATAIN.
*              GT_CONDITIONDATAIN-DATA_INDEX = GV_COUNT.
*              GT_CONDITIONDATAIN-COND_TYPE = 'ZK03'.
*              GT_CONDITIONDATAIN-COND_VALUE = GS_OUT-PZQDJ.
*              GT_CONDITIONDATAIN-COND_CURR  = 'CNY'.
*              append GT_CONDITIONDATAIN.
*              clear GT_CONDITIONDATAIN.
*              GT_CONDITIONDATAIN-DATA_INDEX = GV_COUNT.
*              GT_CONDITIONDATAIN-COND_TYPE = 'ZPR4'.
*              GT_CONDITIONDATAIN-COND_VALUE = GS_OUT-PZHDJ.
*              GT_CONDITIONDATAIN-COND_CURR  = 'CNY'.
*              append GT_CONDITIONDATAIN.
*              clear GT_CONDITIONDATAIN.
*              GT_CONDITIONDATAIN-DATA_INDEX = GV_COUNT.
*              GT_CONDITIONDATAIN-COND_TYPE = 'ZK05'.
*              GT_CONDITIONDATAIN-COND_VALUE = GS_OUT-WC.
*              GT_CONDITIONDATAIN-COND_CURR  = 'CNY'.
*              append GT_CONDITIONDATAIN.
*              clear GT_CONDITIONDATAIN.
*              GT_CONDITIONDATAIN-DATA_INDEX = GV_COUNT.
*              GT_CONDITIONDATAIN-COND_TYPE = 'ZK04'.
*              GT_CONDITIONDATAIN-COND_VALUE = GS_OUT-PZZK.
*              GT_CONDITIONDATAIN-COND_CURR  = 'CNY'.
*              append GT_CONDITIONDATAIN.
*            loop at GT_PRCD_ELEMENTS into GS_PRCD_ELEMENTS
*                                      where KNUMV = GS_OUT-KNUMV
*                                        and KPOSN = GS_OUT-VGPOS.
*              if GS_PRCD_ELEMENTS-KSCHL = 'ZK03'
*              or GS_PRCD_ELEMENTS-KSCHL = 'ZPR4'
*              or GS_PRCD_ELEMENTS-KSCHL = 'ZK05'
*              or GS_PRCD_ELEMENTS-KSCHL = 'ZK04'.
*                   continue.
*              endif.
*              GT_CONDITIONDATAIN-DATA_INDEX = GV_COUNT.
*              GT_CONDITIONDATAIN-COND_TYPE = GS_PRCD_ELEMENTS-KSCHL.
*              GT_CONDITIONDATAIN-COND_VALUE = GS_PRCD_ELEMENTS-KBETR.
*              GT_CONDITIONDATAIN-COND_CURR  = GS_PRCD_ELEMENTS-WAERS.
*
*              GT_CONDITIONDATAIN-COND_P_UNT = GS_PRCD_ELEMENTS-KPEIN.
*              GT_CONDITIONDATAIN-COND_D_UNT = GS_PRCD_ELEMENTS-KMEIN.
*
*              append GT_CONDITIONDATAIN.
*            endloop.

      gt_billingdatain-ship_to = gs_out-kunnr. "客户
      gt_billingdatain-sold_to = gt_billingdatain-ship_to.  "售达方
      gt_billingdatain-bill_to = gt_billingdatain-ship_to.  "开票方
      gt_billingdatain-payer   = gs_out-kunn2.  "付款方
*          READ TABLE gt_vbkd WITH KEY vbeln = gw_alv-vbeln.
*          IF sy-subrc = 0.
      gt_billingdatain-payment_terms = gs_out-zterm.  "付款方式
*            gt_billingdatain-incoterms1 = gt_vbkd-inco1.     "国际贸易条款1
*            gt_billingdatain-incoterms2 = gt_vbkd-inco2.     "国际贸易条款2
*          ENDIF.

*          GT_BILLINGDATAIN-PLANT    = GS_OUT-WERKS.          "工厂
      gt_billingdatain-material = gs_out-matnr.       "物料
*
      gt_billingdatain-currency = 'CNY'.          "currency
      gt_billingdatain-req_qty       = abs( gs_out-kwmeng ). "数量
      gt_billingdatain-sales_unit    = gs_out-meins.        "单位
      gt_billingdatain-bill_date     = gs_out-billdate.            "开票日期
      gt_billingdatain-price_date    = gs_out-billdate.            "开票日期
*
      APPEND gt_billingdatain.

    ENDLOOP.


    CLEAR:gv_flagw,gv_flagx,l_vbeln,lv_message.
    PERFORM frm_order_billing CHANGING lv_message .   "开票
*       call transaction '/$PXA'.
*
*       开票异常
*        if not GV_FLAGX is initial.
*
**         MESSAGE s285 DISPLAY LIKE cn_fail.
*          concatenate '错误:开票失败,' LV_MESSAGE into LV_MESSAGE.
*
**       开票成功
*        elseif GV_FLAGW = SPACE and GV_FLAGX = SPACE.
*
**          MESSAGE s284 DISPLAY LIKE cn_succ.
*          concatenate '错误:开票成功,' LV_MESSAGE into LV_MESSAGE.
**       开票出现错误,但可开票,出警告
*        elseif not GV_FLAGW is initial and GV_FLAGX = SPACE.
*
*          concatenate '警告:开票成功,' LV_MESSAGE into LV_MESSAGE.
**          MESSAGE lv_message TYPE cn_warn.
*
*        endif.

    LOOP AT gt_out ASSIGNING <fs_out> WHERE chbox = 'X'
                                AND bill IS INITIAL
                                AND type = 'S'
                                AND vkorg = ls_out-vkorg
                                AND kunnr = ls_out-kunnr
                                AND fkart = ls_out-fkart.
      IF <fs_out>-fktyp = 'L' OR <fs_out>-fktyp = 'I'.
        l_vbeln = <fs_out>-vbeln.
        l_posnr = <fs_out>-posnr.
      ELSE.
        l_vbeln = <fs_out>-vgbel.
        l_posnr = <fs_out>-vgpos.
      ENDIF.
      LOOP AT lt_success WHERE ref_doc = l_vbeln
                            AND ref_doc_item = l_posnr.
        <fs_out>-bill = lt_success-bill_doc.
        CLEAR ls_zfit015.
        ls_zfit015-vbeln = lt_success-bill_doc.
        ls_zfit015-posnr = lt_success-bill_doc_item.
        APPEND ls_zfit015 TO lt_zfit015.
      ENDLOOP.
      IF <fs_out>-bill IS NOT INITIAL.
        <fs_out>-billmsg = '开票成功'.
      ELSE.
        <fs_out>-billmsg = lv_message.
      ENDIF.
    ENDLOOP.
  ENDLOOP.


  MODIFY zfit015 FROM TABLE lt_zfit015.

ENDFORM.                    " FRM_READY_BILLING


* data: LT_BILLING_DATA_IN type standard table of  BAPIVBRK,
*        LW_BILLING_DATA_IN like line of LT_BILLING_DATA_IN,
*        LT_COND_DATA_IN type standard table of  BAPIKOMV,
*        LW_COND_DATA_IN like line of LT_COND_DATA_IN,
*        LT_CCARD_DATA_IN type standard table of  BAPICCARD_VF,
*        LT_RETURN type standard table of BAPIRETURN1,
*        LW_RETURN like line of LT_RETURN.
*form FRM_CREATEFROMDATA changing PV_MESSAGE
*                                 VBELN .
*   clear:PV_MESSAGE,VBELN.
*   refresh:LT_RETURN,LT_CCARD_DATA_IN.
*
*  "调用bapi
*    call function 'BAPI_BILLINGDOC_CREATEFROMDATA'
*      tables
*        BILLING_DATA_IN   = LT_BILLING_DATA_IN
*        CONDITION_DATA_IN = LT_COND_DATA_IN
*        RETURNLOG_OUT     = LT_RETURN
*        CCARD_DATA_IN     = LT_CCARD_DATA_IN.
*
*    read table LT_RETURN into LW_RETURN with key TYPE = 'E'.
*    if SY-SUBRC = 0.
*      "失败
*    else.
*     call function 'BAPI_TRANSACTION_COMMIT'
*        exporting
*          WAIT = 'X'.
*
*      read table LT_RETURN into LW_RETURN index 1.
*
*      if SY-SUBRC = 0.
*        VBELN = LW_RETURN-MESSAGE_V1.
*      endif.
*    endif.
*    loop at LT_RETURN into LW_RETURN   .
*      concatenate PV_MESSAGE ',' LW_RETURN-MESSAGE into PV_MESSAGE.
*    endloop.
*    shift PV_MESSAGE left deleting leading ','.
*endform.
*
*form FRM_READY_BILLING_DATA.
*
*  data: LV_MESSAGE type BAPI_MSG,
*        L_VBELN type VBELN.
*
*  data: LT_OUT type table of TY_OUT,
*        LS_OUT type TY_OUT.
*
*  select * into table  GT_PRCD_ELEMENTS from PRCD_ELEMENTS
*                       for all entries in GT_OUT
*                       where KNUMV = GT_OUT-KNUMV.
*
*  loop at GT_OUT into GS_OUT where CHBOX = 'X'.
*    LS_OUT-VKORG = GS_OUT-VKORG.
*    LS_OUT-KUNNR = GS_OUT-KUNNR.
*    LS_OUT-FKART = GS_OUT-FKART.
*    collect LS_OUT into LT_OUT.
*  endloop. "同一销售组织、开票类型、客户,统一开票
*
*
*  loop at LT_OUT into LS_OUT.
*      refresh: LT_BILLING_DATA_IN ,  LT_COND_DATA_IN ,LT_RETURN,LT_CCARD_DATA_IN.
*        GV_COUNT = 0.
*     loop at GT_OUT into GS_OUT where CHBOX = 'X'
*                                    and VKORG = LS_OUT-VKORG
*                                    and KUNNR = LS_OUT-KUNNR
*                                    and FKART = LS_OUT-FKART.
*          if GS_OUT-BILLDATE is initial .
*            GS_OUT-BILLDATE = SY-DATUM.
*            modify GT_OUT from GS_OUT transporting BILLDATE.
*          endif.
*          add 1 to  GV_COUNT .
*
*
*          LW_BILLING_DATA_IN-REF_DOC  = GS_OUT-VBELN.     "交货单
*          LW_BILLING_DATA_IN-REF_ITEM = GS_OUT-POSNR.     "行项目
*
*          LW_BILLING_DATA_IN-REQ_QTY  = ABS( GS_OUT-KWMENG ).   "交货单数量
*          LW_BILLING_DATA_IN-SALES_UNIT = GS_OUT-MEINS.   "销售单位
*           select single VBTYP
*             into LW_BILLING_DATA_IN-REF_DOC_CA                  "交货单对应类别,可能为退货,可能为正常交货
*             from LIKP
*            where VBELN = GS_OUT-VBELN.
*
*          LW_BILLING_DATA_IN-BILL_DATE = GS_OUT-BILLDATE.  "发票日期
*          append LW_BILLING_DATA_IN to LT_BILLING_DATA_IN.
*
*
**              票折前单价传入ZK03
**              票折后单价传入ZPR4
**              尾差传入ZK05
**              票折折扣ZK04
*              clear LW_COND_DATA_IN.
*              LW_COND_DATA_IN-DATA_INDEX = GV_COUNT.
*              LW_COND_DATA_IN-COND_TYPE = 'ZK03'.
*              LW_COND_DATA_IN-COND_VALUE = GS_OUT-PZQDJ.
*              LW_COND_DATA_IN-COND_CURR  = 'CNY'.
*              append LW_COND_DATA_IN  to LT_COND_DATA_IN.
*              clear GT_CONDITIONDATAIN.
*              LW_COND_DATA_IN-DATA_INDEX = GV_COUNT.
*              LW_COND_DATA_IN-COND_TYPE = 'ZPR4'.
*              LW_COND_DATA_IN-COND_VALUE = GS_OUT-PZHDJ.
*              LW_COND_DATA_IN-COND_CURR  = 'CNY'.
*              append LW_COND_DATA_IN  to LT_COND_DATA_IN.
*              clear GT_CONDITIONDATAIN.
*              LW_COND_DATA_IN-DATA_INDEX = GV_COUNT.
*              LW_COND_DATA_IN-COND_TYPE = 'ZK05'.
*              LW_COND_DATA_IN-COND_VALUE = GS_OUT-WC.
*              LW_COND_DATA_IN-COND_CURR  = 'CNY'.
*              append LW_COND_DATA_IN  to LT_COND_DATA_IN.
*              clear GT_CONDITIONDATAIN.
*              LW_COND_DATA_IN-DATA_INDEX = GV_COUNT.
*              LW_COND_DATA_IN-COND_TYPE = 'ZK04'.
*              LW_COND_DATA_IN-COND_VALUE = GS_OUT-PZZK.
*              LW_COND_DATA_IN-COND_CURR  = 'CNY'.
*              append LW_COND_DATA_IN  to LT_COND_DATA_IN.
*            loop at GT_PRCD_ELEMENTS into GS_PRCD_ELEMENTS
*                                      where KNUMV = GS_OUT-KNUMV
*                                        and KPOSN = GS_OUT-VGPOS.
*              if GS_PRCD_ELEMENTS-KSCHL = 'ZK03'
*              or GS_PRCD_ELEMENTS-KSCHL = 'ZPR4'
*              or GS_PRCD_ELEMENTS-KSCHL = 'ZK05'
*              or GS_PRCD_ELEMENTS-KSCHL = 'ZK04'.
*                   continue.
*              endif.
*              LW_COND_DATA_IN-DATA_INDEX = GV_COUNT.
*              LW_COND_DATA_IN-COND_TYPE = GS_PRCD_ELEMENTS-KSCHL.
*              LW_COND_DATA_IN-COND_VALUE = GS_PRCD_ELEMENTS-KBETR.
*              LW_COND_DATA_IN-COND_CURR  = GS_PRCD_ELEMENTS-WAERS.
*
*              append LW_COND_DATA_IN  to LT_COND_DATA_IN.
*            endloop.
*
*
*
*
*     endloop.
*
*       perform FRM_CREATEFROMDATA changing LV_MESSAGE L_VBELN.   "开票
*
*
*        loop at GT_OUT assigning <FS_OUT> where CHBOX = 'X'
*                                    and VKORG = LS_OUT-VKORG
*                                    and KUNNR = LS_OUT-KUNNR
*                                    and FKART = LS_OUT-FKART.
*              select single VBELN into <FS_OUT>-BILL from VBRP where VGBEL = <FS_OUT>-VBELN
*                                                                 and VGPOS = <FS_OUT>-POSNR.
*              if <FS_OUT>-BILL is not initial.
*                <FS_OUT>-BILLMSG = '开票成功'.
*              else.
*                <FS_OUT>-BILLMSG = LV_MESSAGE.
*              endif.
*         endloop.
*  endloop.
*
*endform.                    " FRM_READY_BILLING

 

^_^很多人都把资料锁进了note里,以后还怎么百度呢^_^
posted on 2017-03-07 09:25  ^ω^SAP傻X^o^  阅读(1893)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3