需求:合并开票

同一种发票类型的开在一张发票上,不同类型的发票类型开在不同发票上;
即:同一客户、销售组织、开票类型的结算单,开在同一张发票上。

也可以通过 VF04 合并开票。
如若通过BAPI,则可以通过 BAPI_BILLINGDOC_CREATEMULTIPLE 开票:

Data:
  gt_vbak TYPE TABLE OF vbak WITH HEADER LINE,
  gt_vbap TYPE TABLE OF vbap WITH HEADER LINE,
 
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.
 
 
*-------------------------------------------------------------------------
*            BAPI 赋值
*-------------------------------------------------------------------------
FORM frm_ready_billing .
 
  DATA: lv_message TYPE bapi_msg.
 
  REFRESH:gt_vbfa[],gt_likp[].
 
* "找交货单号
  SELECT *         
    FROM vbfa
    INTO CORRESPONDING FIELDS OF TABLE gt_vbfa
    FOR ALL ENTRIES IN gt_alv
    WHERE vbelv = gt_alv-vbeln
      AND vbtyp_n = 'J'.
 
  IF gt_vbfa[] IS NOT INITIAL.
 
    SELECT *
      FROM likp
      INTO CORRESPONDING FIELDS OF TABLE gt_likp
      FOR ALL ENTRIES IN gt_vbfa
      WHERE vbeln = gt_vbfa-vbeln.
 
  ENDIF.
 
  SORT gt_alv BY fkara vkorg kunnr. "同一销售组织、开票类型、客户,统一开票
 
  LOOP AT gt_alv INTO gw_alv.
 
    READ TABLE gt_vbfa WITH KEY vbelv = gw_alv-vbeln.
    IF sy-subrc = 0.
 
      LOOP AT gt_vbfa WHERE vbelv = gw_alv-vbeln.
 
        gv_count = gv_count + 1.
 
        gt_billingdatain-ref_doc    = gt_vbfa-vbelv.  "凭证号
        gt_billingdatain-ref_item   = gt_vbfa-posnv.
 
        gt_billingdatain-doc_number = gt_vbfa-vbeln.  "交货单号
        gt_billingdatain-itm_number = gt_vbfa-posnn.  "
 
 
        gt_billingdatain-doc_type   = gw_alv-auart.   "销售凭证类型
        gt_billingdatain-ref_doc_ca = 'C'.            "SD 凭证类别
 
        gt_billingdatain-ordbilltyp = gw_alv-fkara.   "开票类型
        gt_billingdatain-salesorg   = gw_alv-vkorg.   "销售组织
 
 
        READ TABLE gt_vbak WITH KEY vbeln = gw_alv-vbeln.
        IF sy-subrc = 0.
          gt_billingdatain-distr_chan = gt_vbak-vtweg. "分销渠道
          gt_billingdatain-division   = gt_vbak-spart. "产品组
 
          LOOP AT gt_konv WHERE knumv = gt_vbak-knumv.
            gt_conditiondatain-data_index = gv_count.
            gt_conditiondatain-cond_curr  = gt_konv-waers.
            APPEND gt_conditiondatain.
          ENDLOOP.
 
        ENDIF.
 
        gt_billingdatain-ship_to = gw_alv-kunnr. "客户
        gt_billingdatain-sold_to = gt_billingdatain-ship_to.  "售达方
        gt_billingdatain-bill_to = gt_billingdatain-ship_to.  "开票方
        gt_billingdatain-payer   = gt_billingdatain-ship_to.  "付款方
        READ TABLE gt_vbkd WITH KEY vbeln = gw_alv-vbeln.
        IF sy-subrc = 0.
          gt_billingdatain-payment_terms = gt_vbkd-zterm.     "付款方式
          gt_billingdatain-incoterms1 = gt_vbkd-inco1.        "国际贸易条款1
          gt_billingdatain-incoterms2 = gt_vbkd-inco2.        "国际贸易条款2
        ENDIF.
        READ TABLE gt_vbap WITH KEY vbeln = gw_alv-vbeln.
        IF sy-subrc = 0.
          gt_billingdatain-plant = gt_vbap-werks.             "工厂
          gt_billingdatain-material = gt_vbap-matnr.          "物料
          gt_billingdatain-currency = gt_vbap-waerk.          "currency
        ENDIF.
        gt_billingdatain-req_qty       = abs( gt_vbfa-rfmng ). "数量
        gt_billingdatain-sales_unit    = gt_vbfa-meins.        "单位
        gt_billingdatain-bill_date     = pr_sdate.             "开票日期
        gt_billingdatain-price_date    = pr_sdate.             "开票日期
 
        APPEND gt_billingdatain.
 
      ENDLOOP.
 
    ELSE.
 
      CLEAR gt_vbap.
 
      " vbap
      READ TABLE gt_vbap WITH KEY vbeln = gw_alv-vbeln.
      IF sy-subrc = 0.
        CLEAR gt_vbap.
        LOOP AT gt_vbap WHERE vbeln = gw_alv-vbeln.
 
          gv_count = gv_count + 1.
 
          gt_billingdatain-ref_doc    = gt_vbap-vbeln.  "凭证号
          gt_billingdatain-ref_item   = gt_vbap-posnr.
 
          gt_billingdatain-doc_number = gt_vbap-vbeln.  "交货单号
          gt_billingdatain-itm_number = gt_vbap-posnr.
 
          gt_billingdatain-doc_type   = gw_alv-auart.   "销售凭证类型
          gt_billingdatain-ref_doc_ca = 'C'.            "SD 凭证类别
 
          gt_billingdatain-ordbilltyp = gw_alv-fkara.   "开票类型
          gt_billingdatain-salesorg   = gw_alv-vkorg.   "销售组织
 
 
          READ TABLE gt_vbak WITH KEY vbeln = gw_alv-vbeln.
          IF sy-subrc = 0.
            gt_billingdatain-distr_chan = gt_vbak-vtweg. "分销渠道
            gt_billingdatain-division   = gt_vbak-spart. "产品组
 
            LOOP AT gt_konv WHERE knumv = gt_vbak-knumv.
              gt_conditiondatain-data_index = gv_count.
              gt_conditiondatain-cond_curr  = gt_konv-waers.
              APPEND gt_conditiondatain.
            ENDLOOP.
 
          ENDIF.
 
          gt_billingdatain-ship_to = gw_alv-kunnr. "客户
          gt_billingdatain-sold_to = gt_billingdatain-ship_to.  "售达方
          gt_billingdatain-bill_to = gt_billingdatain-ship_to.  "开票方
          gt_billingdatain-payer   = gt_billingdatain-ship_to.  "付款方
          READ TABLE gt_vbkd WITH KEY vbeln = gw_alv-vbeln.
          IF sy-subrc = 0.
            gt_billingdatain-payment_terms = gt_vbkd-zterm.  "付款方式
            gt_billingdatain-incoterms1 = gt_vbkd-inco1.     "国际贸易条款1
            gt_billingdatain-incoterms2 = gt_vbkd-inco2.     "国际贸易条款2
          ENDIF.
          READ TABLE gt_vbap WITH KEY vbeln = gw_alv-vbeln.
          IF sy-subrc = 0.
            gt_billingdatain-plant    = gt_vbap-werks.          "工厂
            gt_billingdatain-material = gt_vbap-matnr.       "物料
 
            gt_billingdatain-currency = gt_vbap-waerk.          "currency
          ENDIF.
          gt_billingdatain-req_qty       = abs( gt_vbap-zmeng ). "数量
          gt_billingdatain-sales_unit    = gt_vbap-zieme.        "单位
          gt_billingdatain-bill_date     = pr_sdate.            "开票日期
          gt_billingdatain-price_date    = pr_sdate.            "开票日期
 
          APPEND gt_billingdatain.
 
 
        ENDLOOP.
      ENDIF.
 
    ENDIF.
 
    AT END OF kunnr.   "同一销售组织、单据类型、客户,统一开票
 
      PERFORM frm_order_billing CHANGING lv_message.   "开票
 
      CLEAR gt_billingdatain[].
      CLEAR gv_count.
      gv_item = 10.
    ENDAT.
 
  ENDLOOP.
 
* 开票异常
  IF NOT gv_flagx IS INITIAL.
 
*   MESSAGE s285 DISPLAY LIKE cn_fail.
    CONCATENATE '错误:开票失败,' lv_message INTO lv_message.
    MESSAGE lv_message TYPE cn_fail.
 
* 开票成功
  ELSEIF gv_flagw = space AND gv_flagx = space.
 
    MESSAGE s284 DISPLAY LIKE cn_succ.
 
* 开票出现错误,但可开票,出警告
  ELSEIF NOT gv_flagw IS INITIAL AND gv_flagx = space.
 
    CONCATENATE '警告:开票成功,' lv_message INTO lv_message.
    MESSAGE lv_message TYPE cn_warn.
 
  ENDIF.
ENDFORM.                    " FRM_READY_BILLING
 
 
*-------------------------------------------------------------------------
*            CALL BAPI
*-------------------------------------------------------------------------
FORM frm_order_billing CHANGING pv_message.
 
  DATA: lt_success TYPE TABLE OF bapivbrksuccess WITH HEADER LINE,
        lt_return  TYPE TABLE OF bapiret1 WITH HEADER LINE.
 
  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 = cn_flagx.
  ENDIF.
 
  IF NOT lt_return[] IS INITIAL.
 
    LOOP AT lt_return WHERE type = 'E'.
      CONCATENATE lt_return-message ' ' INTO pv_message.
    ENDLOOP.
 
    gv_flagw = cn_flagx.
  ENDIF.
 
  IF gv_flagx IS INITIAL.
 
* Post Run
    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.
  ENDIF.
 
ENDFORM.                    " FRM_ORDER_BILLING

VF01 BAPI :BAPI_BILLINGDOC_CREATEMULTIPLE相关推荐

  1. VF01 BAPI :BAPI_BILLINGDOC_CREATEMULTIPLE

    需求:合并开票 同一种发票类型的开在一张发票上,不同类型的发票类型开在不同发票上: 即:同一客户.销售组织.开票类型的结算单,开在同一张发票上. 也可以通过 VF04 合并开票. 如若通过BAPI,则 ...

  2. 【修正】销售开票BAPI实例:BAPI_BILLINGDOC_CREATEMULTIPLE

    FORM FRM_GENERATE_BILLING . *----------------------------------------------------------------------- ...

  3. SAP VF01销售开票:BAPI_BILLINGDOC_CREATEMULTIPLE

    VF01的界面是这样的: 界面可以看出,需要传的主要的参数有这么几个,这里的凭证用的是交货单号. 据我了解,销售开票之前的流程是这样的: 生成销售单->销售单生成交货单->交货单过账-&g ...

  4. abap 发票冲销VF11的BAPI:BAPI_BILLINGDOC_CANCEL1

    发票冲销VF11的BAPI:BAPI_BILLINGDOC_CANCEL1 更多请加群:455101474

  5. SAP 固定资产调拨BAPI:BAPI_FIXEDASSET_CHANGE

    固定资产调拨 BAPI:BAPI_FIXEDASSET_CHANGE 以下代码供参考: "BAPI导入参数DATA: LV_COMPANYCODE LIKE BAPI1022_1-COMP_ ...

  6. PP报工确认bapi:BAPI_PRODORDCONF_CREATE_TT

    主要实现代码: DATA: *BAPI相关定义timetickets LIKE bapi_pp_timeticket OCCURS 0 WITH HEADER LINE,return_detail L ...

  7. MIGO相关bapi:BAPI_GOODSMVT_CREATE 移动类型314 E

    主要实现代码: DATA: goodsmvt_header LIKE  bapi2017_gm_head_01,           itab            TYPE TABLE OF bap ...

  8. ABAP BAPI:BAPI_PR_CHANGE批量修改采购申请审批状态等

    更改PR:BAPI_PR_CHANGE 审批 BAPI_REQUISITION_RELEASE 取消审批 BAPI_REQUISITION_RESET_RELEASE 获取审批策略,审批组 IF lt ...

  9. VA05批量更新BAPI:SD_BULK_CHANGE

    碰到一个需求,需要实现VA05批量更新定价的功能,前台VA05可以对销售订单进行批量更新工厂,物料,定价,货币,DEBUG了一下发现底层调用的函数为SD_BULK_CHANGE. 其实批量更新销售订单 ...

最新文章

  1. 华为SDSec分为几层
  2. 深度学习——你需要了解的八大开源框架
  3. CISS.SideMenu的bug
  4. Zookeeper的作用
  5. 前端状态机系列:SCXML与XState对应关系
  6. 前端学习(3151):react-hello-react之DoM的diff算法
  7. 原生ajax请求的五个步骤
  8. MSDN宇宙版到货!
  9. spring mvc 对象型参数的传递(遇到坑了)
  10. QString字符串中双引号的梗
  11. 求助ET服装打版软件
  12. 1.59TB《全球 12.5 米高程DEM for WeServer》发布
  13. 数字图像处理课程作业1-大米检测
  14. RGB-D相机原理与选型
  15. 3dmax三点照明法场景照明的方法和技巧
  16. Codeforces 1156B
  17. xpage 传参_一个轻量级的Android路由框架,基于ARouter上进行改良,优化Fragment的使用,可结合XPage使用。...
  18. 什么是最优化问题(Optimization Problem)?
  19. 计算机图像处理的未来发展,探讨计算机图像处理技术的发展趋势与展望
  20. python爬虫拉勾网职位信息

热门文章

  1. 瑞幸咖啡的每一个环节,都蕴含着增长知识点
  2. 【干货】APP产品处理加载机制和刷新机制的交互方法解析
  3. 《人月神话》(P11)为舍弃而计划
  4. 疯狂ios之cocos2d中的声音
  5. MongoDB安装与副本集配置
  6. 关于云计算最新趋势的讨论
  7. datatables设置解析
  8. yum之如何手动创建本地yum仓库
  9. php二进制安全的含义
  10. SAMBA服务和FTP服务讲解(week3_day1)--技术流ken