BAPI:销售订单转交货单-拣配-过账-开票

FUNCTION zfm_so_to_dn.“销售订单转交货单
*”----------------------------------------------------------------------
"“本地接口:
*” IMPORTING
*" VALUE(IV_VBELN) TYPE VBELN_VA
*" VALUE(IV_CHECK) TYPE CHAR1 OPTIONAL
*" EXPORTING
*" VALUE(ET_MESSAGE) TYPE CHAR100
*" VALUE(ET_DELIVERY) TYPE VBELN_VL
*" TABLES
*" ET_SO_DN STRUCTURE BAPIDLVITEMCREATED OPTIONAL
*"----------------------------------------------------------------------
*(修改日志)--------------------------------------------------------
*

  • 日志号 修改人 修改时间 修改说明 传输号码

  • 001

DATA: lv_ship_point TYPE bapidlvcreateheader-ship_point,
lv_due_date TYPE bapidlvcreateheader-due_date,
lv_delivery TYPE bapishpdelivnumb-deliv_numb,
lt_so_items TYPE STANDARD TABLE OF bapidlvreftosalesorder,
ls_so_item TYPE bapidlvreftosalesorder,
lt_return TYPE STANDARD TABLE OF bapiret2,
ls_return TYPE bapiret2.

"获取最大交货日期
SELECT SINGLE MAX( edatu )
INTO lv_due_date
FROM vbep
WHERE vbeln = iv_vbeln.

"装运点
SELECT SINGLE vbap~vstel
INTO lv_ship_point
FROM vbap
WHERE vbeln = iv_vbeln.

IF iv_check = ‘’."不检查库存

"交货单行数据
SELECT vbeln AS ref_doc"交货单posnr AS ref_item"交货单项目kwmeng AS dlv_qty"交货单数量vrkme AS sales_unit"交货单单位
INTO CORRESPONDING FIELDS OF TABLE lt_so_items
FROM vbap
WHERE vbeln = iv_vbeln.

ELSE.

SELECT vbap~vbeln  AS ref_doc,"交货单vbap~posnr  AS ref_item,"交货单项目vbap~kwmeng AS dlv_qty,"交货单数量vbap~vrkme  AS sales_unit,"交货单单位vbap~matnr ,"物料vbap~werks,"工厂vbap~lgort,"存储地点mard~labst "非限制使用的估价的库存INTO TABLE @DATA(lt_vbap)FROM vbapLEFT JOIN mard ON vbap~werks = mard~werksAND vbap~matnr = mard~matnrAND vbap~lgort = mard~lgortWHERE vbeln = @iv_vbeln.

*检查库存
REFRESH lt_so_items.
LOOP AT lt_vbap INTO DATA(ls_vbap).

  IF ls_vbap-dlv_qty > ls_vbap-labst.IF et_message IS INITIAL.et_message =  '物料:' && ls_vbap-matnr && '库存地点:' && ls_vbap-lgort && '工厂:' && ls_vbap-werks && '库存不足'.ELSE.et_message = et_message && '/'&&'物料:' && ls_vbap-matnr && '库存地点:' && ls_vbap-lgort && '工厂:' && ls_vbap-werks && '库存不足'.ENDIF.CONTINUE.ENDIF.CLEAR ls_so_item.ls_so_item-ref_doc    = ls_vbap-ref_doc."交货单.ls_so_item-ref_item   = ls_vbap-ref_item."交货单项目.ls_so_item-dlv_qty    = ls_vbap-dlv_qty."交货单数量.ls_so_item-sales_unit = ls_vbap-sales_unit."交货单单位.APPEND ls_so_item TO lt_so_items.ENDLOOP.

ENDIF.

CHECK et_message IS INITIAL.

CALL FUNCTION ‘BAPI_OUTB_DELIVERY_CREATE_SLS’
EXPORTING
ship_point = lv_ship_point
due_date = lv_due_date
IMPORTING
delivery = lv_delivery
TABLES
sales_order_items = lt_so_items
created_items = et_so_dn
return = lt_return.
IF sy-subrc = 0 AND lv_delivery IS NOT INITIAL.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait = 'X'."交货单
et_delivery = lv_delivery.

ELSE.

CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.LOOP AT lt_return INTO ls_returnWHERE type = 'A' ORtype = 'E' ORtype = 'X'.IF et_message NS ls_return-message."排斥重复的错误信息et_message = et_message && '/' && ls_return-message.ENDIF.ENDLOOP.

ENDIF.

ENDFUNCTION.

FUNCTION zfm_dn_to_picking.“交货单拣配
*”----------------------------------------------------------------------
"“本地接口:
*” IMPORTING
*" VALUE(IV_VBELN) TYPE VBELN_VL
*" EXPORTING
*" VALUE(ET_MESSAGE) TYPE CHAR100
*"----------------------------------------------------------------------
*(修改日志)--------------------------------------------------------
*

  • 日志号 修改人 修改时间 修改说明 传输号码

  • 001

DATA: ls_vbkok LIKE vbkok,
lt_vbpok LIKE TABLE OF vbpok,
ls_vbpok LIKE vbpok,
lt_prott TYPE TABLE OF prott.

REFRESH lt_vbpok.

ls_vbkok-vbeln_vl = iv_vbeln.

SELECT vbeln AS vbeln_vl"参考单据
posnr AS posnr_vl"参考单据项目
vbeln AS vbeln"交货单
posnr AS posnn"交货单项目
lfimg AS pikmg"拣配数量
INTO CORRESPONDING FIELDS OF TABLE lt_vbpok
FROM lips
WHERE vbeln = iv_vbeln.

CALL FUNCTION ‘SD_DELIVERY_UPDATE_PICKING’ "一行行更新
EXPORTING
vbkok_wa = ls_vbkok
synchron = ‘X’

  • NO_MESSAGES_UPDATE     = ' '
    nicht_sperren          = 'X'
    aufrufer_t             = 'X'
    if_error_messages_send = 'X'
    
    TABLES
    vbpok_tab = lt_vbpok
    prot = lt_prott.
    IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE ‘S’ NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO et_message.
    ENDIF.

ENDFUNCTION.

FUNCTION zfm_dn_to_gz.“交货单过账
*”----------------------------------------------------------------------
"“本地接口:
*” IMPORTING
*" VALUE(IV_VBELN) TYPE VBELN_VL
*" EXPORTING
*" VALUE(ET_MESSAGE) TYPE CHAR100
*"----------------------------------------------------------------------
*(修改日志)--------------------------------------------------------
*

  • 日志号 修改人 修改时间 修改说明 传输号码

  • 001

DATA:ls_header_data TYPE bapiobdlvhdrcon,
ls_header_control TYPE bapiobdlvhdrctrlcon,
lt_return TYPE STANDARD TABLE OF bapiret2,
ls_return TYPE bapiret2.

ls_header_data-deliv_numb = iv_vbeln. "交货单
ls_header_control-deliv_numb = iv_vbeln."交货单
ls_header_control-post_gi_flg = ‘X’."自动过帐货物移动
ls_header_control-volume_flg = ‘X’."确认

"外向交货单发货过账
CALL FUNCTION ‘BAPI_OUTB_DELIVERY_CONFIRM_DEC’
EXPORTING
header_data = ls_header_data
header_control = ls_header_control
delivery = iv_vbeln
TABLES
return = lt_return.

LOOP AT lt_return INTO ls_return
WHERE type = ‘A’ OR
type = ‘E’ OR
type = ‘X’.

IF et_message NS ls_return-message."排斥重复的错误信息et_message = et_message && '/' && ls_return-message.
ENDIF.

ENDLOOP.

IF et_message IS INITIAL .

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait = 'X'.

ELSE.

CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

ENDIF.

ENDFUNCTION.

FUNCTION zfm_dn_to_fp.“交货单转发票
*”----------------------------------------------------------------------
"“本地接口:
*” IMPORTING
*" VALUE(IV_VBELN) TYPE VBELN_VL
*" EXPORTING
*" VALUE(ET_MESSAGE) TYPE CHAR100
*" VALUE(ET_VBELN_VF) TYPE VBELN_VF
*"----------------------------------------------------------------------
*(修改日志)--------------------------------------------------------
*

  • 日志号 修改人 修改时间 修改说明 传输号码

  • 001

DATA: lt_billingdatain TYPE TABLE OF bapivbrk,
ls_billingdatain TYPE bapivbrk,
lt_success TYPE TABLE OF bapivbrksuccess,
ls_success TYPE bapivbrksuccess,
lt_return TYPE TABLE OF bapiret1,
ls_return TYPE bapiret1,
lv_vbtyp TYPE vbrk-vbtyp VALUE ‘J’.

SELECT lips~vbeln,"交货单
lips~posnr,"交货单项目
lips~matnr,"物料号
lips~lfimg,"交货单数量
lips~vrkme,"单位
likp~kunnr,"售达方
vbak~vkorg,"销售组织
vbak~vtweg,"分销渠道
vbak~spart,"产品组
vbap~werks,"工厂
tvak~fkarv "发票类型
INTO TABLE @DATA(lt_lips)
FROM lips
LEFT JOIN likp ON lips~vbeln = likp~vbeln
LEFT JOIN vbap ON lips~vgbel = vbap~vbeln AND
lips~vgpos = vbap~posnr
LEFT JOIN vbak ON vbap~vbeln = vbak~vbeln
LEFT JOIN tvak ON vbak~auart = tvak~auart
WHERE lips~vbeln = @iv_vbeln.

LOOP AT lt_lips INTO DATA(ls_lips).

CLEAR ls_billingdatain.ls_billingdatain-doc_number    = ls_lips-vbeln.  "交货单
ls_billingdatain-itm_number    = ls_lips-posnr.  "交货单项目
ls_billingdatain-ref_doc       = ls_lips-vbeln.  "参考单据的单据编号 - 交货单
ls_billingdatain-ref_item      = ls_lips-posnr.  "参考项目的项目号 - 交货单项目
ls_billingdatain-ref_doc_ca    = lv_vbtyp.       "交货单
ls_billingdatain-salesorg      = ls_lips-vkorg.  "销售组织
ls_billingdatain-distr_chan    = ls_lips-vtweg.  "分销渠道
ls_billingdatain-division      = ls_lips-spart.  "产品组
ls_billingdatain-ordbilltyp    = ls_lips-fkarv.  "发票类型
ls_billingdatain-sold_to       = ls_lips-kunnr.  "售达方
ls_billingdatain-ship_to       = ls_lips-kunnr.  "送达方
ls_billingdatain-bill_to       = ls_lips-kunnr.  "开票方
ls_billingdatain-payer         = ls_lips-kunnr.  "付款方
ls_billingdatain-plant         = ls_lips-werks.  "工厂
ls_billingdatain-material      = ls_lips-matnr.  "物料号
ls_billingdatain-req_qty       = ls_lips-lfimg.  "交货单数量
ls_billingdatain-sales_unit    = ls_lips-vrkme.  "单位
APPEND ls_billingdatain TO lt_billingdatain.

ENDLOOP.

CALL FUNCTION ‘BAPI_BILLINGDOC_CREATEMULTIPLE’
TABLES
billingdatain = lt_billingdatain
return = lt_return "返回错误消息
success = lt_success."返回成功单据号消息

IF lt_success IS INITIAL.

CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.LOOP AT lt_return INTO ls_return WHERE type = 'A' ORtype = 'E' ORtype = 'X'.IF et_message NS ls_return-message."排斥重复的错误信息et_message = et_message && '/' && ls_return-message.ENDIF.
ENDLOOP.

ELSE.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait = 'X'."返回成功的发票号
READ TABLE lt_success INTO ls_success INDEX 1.
IF sy-subrc = 0.et_vbeln_vf = ls_success-bill_doc.
ENDIF.

ENDIF.

ENDFUNCTION.


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部