SAP IDOC
物料主数据
供应商主数据
价格档案
采购订单
采购计划协议
srm发货单
物料凭证
发票校验
发票校验过账或删除信息返回 CALL FUNCTION 'BAPI_INCOMINGINVOICE_PARK'
EXPORTING
headerdata = headerdata
addressdata = addressdata
IMPORTING
invoicedocnumber = invoicedocnumber
fiscalyear = fiscalyear
TABLES
itemdata = itemdata
accountingdata = accountingdata
glaccountdata = glaccountdata
materialdata = materialdata
taxdata = taxdata
withtaxdata = withtaxdata
vendoritemsplitdata = vendoritemsplitdata
return = return
extensionin = extensionin. *&---------------------------------------------------------------------*
*& Form prepare_bapi_invoice
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form prepare_bapi_invoice. * Definitions
data: w_cnt type i,
w_netwr like ekpo-netwr,
w_menge like ekpo-menge. data: begin of it_headerdata occurs 0.
include structure bapi_incinv_create_header.
data: end of it_headerdata. data: begin of it_additional occurs 0.
include structure bapi_incinv_save_header_backgr.
data: end of it_additional. data: begin of it_selectp occurs 0.
include structure bapi_incinv_select_po.
data: end of it_selectp. data: begin of it_itemdata occurs 0.
include structure bapi_incinv_create_item.
data: end of it_itemdata. data: begin of it_accountdata occurs 0.
include structure bapi_incinv_create_account.
data: end of it_accountdata. data: begin of it_accdata occurs 0.
include structure bapi_incinv_create_gl_account.
data: end of it_accdata. data: begin of it_taxdata occurs 0.
include structure bapi_incinv_create_tax.
data: end of it_taxdata. data: begin of it_return occurs 0.
include structure bapiret2.
data: end of it_return. * Fill tables for BAPI-Call
clear it_headerdata.
it_headerdata-ref_doc_no = save-refnr.
it_headerdata-invoice_ind = 'X'.
it_headerdata-doc_type = 'RN'.
it_headerdata-pstng_date = sy-datum.
if not save-redat is initial.
it_headerdata-doc_date = save-redat.
else.
it_headerdata-doc_date = sy-datum.
endif.
it_headerdata-comp_code = save-bukrs.
it_headerdata-currency = save-waers.
it_headerdata-gross_amount = save-wrbtr.
it_headerdata-supcountry = save-lndwe.
append it_headerdata. clear it_additional.
it_additional-assign_deliv = 'X'.
it_additional-deliv_posting = 'S'.
it_additional-sel_goods = 'X'.
append it_additional. clear: w_cnt, save-mwskz.
loop at xekpo.
* Read PO item
clear ekpo.
select single * from ekpo
where ebeln eq xekpo-ebeln
and ebelp eq xekpo-ebelp.
* Check if entry already exist
read table it_itemdata
with key po_number = xekpo-ebeln
po_item = xekpo-ebelp.
if sy-subrc = 0.
* Collect entry in item table
it_itemdata-item_amount = it_itemdata-item_amount + xekpo-netwr.
it_itemdata-quantity = it_itemdata-quantity + xekpo-menge.
modify it_itemdata index sy-tabix.
else.
* Load entry in item table
clear it_itemdata.
add 1 to w_cnt.
it_itemdata-invoice_doc_item = w_cnt.
it_itemdata-po_number = xekpo-ebeln.
it_itemdata-po_item = xekpo-ebelp.
it_itemdata-item_amount = xekpo-netwr.
it_itemdata-quantity = xekpo-menge.
it_itemdata-po_unit_iso = xekpo-meins.
it_itemdata-tax_code = xekpo-mwskz.
it_itemdata-item_text = xekpo-txz01.
* Set GR reference document
if not ekpo-webre is initial.
select * from ekbe
where ebeln eq xekpo-ebeln
and ebelp eq xekpo-ebelp
and vgabe eq '1'
and bewtp eq 'E'
and bwart eq '101'.
it_itemdata-ref_doc = ekbe-belnr.
it_itemdata-ref_doc_year = ekbe-gjahr.
it_itemdata-ref_doc_it = ekbe-buzei.
endselect.
endif.
append it_itemdata.
endif.
* Acoounting data
if not ekpo-twrkz is initial.
select * from ekkn
where ebeln eq xekpo-ebeln
and ebelp eq xekpo-ebelp.
clear it_accountdata.
it_accountdata-invoice_doc_item = w_cnt.
it_accountdata-serial_no = ekkn-zekkn.
it_accountdata-tax_code = xekpo-mwskz.
it_accountdata-gl_account = ekkn-sakto.
it_accountdata-costcenter = ekkn-kostl.
it_accountdata-sd_doc = ekkn-vbeln.
it_accountdata-sdoc_item = ekkn-vbelp.
it_accountdata-wbs_elem = ekkn-ps_psp_pnr.
w_netwr = xekpo-netwr * ekkn-vproz / 100.
it_accountdata-item_amount = w_netwr.
w_menge = xekpo-menge * ekkn-vproz / 100.
it_accountdata-quantity = w_menge.
it_accountdata-po_unit_iso = xekpo-meins.
append it_accountdata.
endselect.
endif.
* Determine MWSKZ for Header tax
if save-mwskz is initial.
save-mwskz = xekpo-mwskz.
elseif save-mwskz ne xekpo-mwskz.
save-mwskz = '??'.
endif.
endloop.
if save-mwskz = '??'.
clear save-mwskz.
endif. clear w_cnt.
loop at it_cond where betrg ne 0.
clear it_accdata.
add 1 to w_cnt.
it_accdata-invoice_doc_item = w_cnt.
it_accdata-comp_code = save-bukrs.
it_accdata-gl_account = it_cond-skont.
it_accdata-tax_code = it_cond-mwskz.
it_accdata-item_amount = it_cond-betrg.
it_accdata-db_cr_ind = it_cond-shkzg.
it_accdata-costcenter = it_cond-kostl.
it_accdata-orderid = it_cond-aufnr.
it_accdata-item_text = save-name1.
append it_accdata.
endloop. clear it_taxdata.
it_taxdata-tax_code = save-mwskz.
it_taxdata-tax_amount = save-wmwst.
append it_taxdata. * Start of IDOC changes - Local
* ============================= select single * from yasekgfunct
where ybukrs = save-bukrs
and modulepool = 'LYAP_XIF01'
and cust_fn_id = '002'. if sy-subrc = 0.
call function yasekgfunct-kgfunction
tables
t_itemdata = it_itemdata
t_glaccountdata = it_accdata
t_accountingdata = it_accountdata
t_taxdata = it_taxdata
changing
c_headerdata = it_headerdata.
endif. * End of IDOC changes - Local
* =========================== * Check if error message exist
if not it_headerdata-item_text is initial.
save-msgv2 = it_headerdata-item_text.
save-idocst = '51'.
exit.
endif. *----------------------------------------------"Start
**Check if invoice already posted
* select single * from rbkp
* where xblnr eq save-refnr
* and lifnr eq save-lifnr
* and gjahr eq sy-datum(4)
* and rbstat ne '2'.
* if sy-subrc = 0.
* save-msgv2 = 'Invoice with same Reference number already exists'.
* save-idocst = '68'.
* exit.
* endif.
*----------------------------------------------"Ende
* Call BAPI
call function 'BAPI_INCOMINGINVOICE_PARK'
exporting
headerdata = it_headerdata
importing
invoicedocnumber = save-docnr
fiscalyear = save-gjahr
tables
itemdata = it_itemdata
glaccountdata = it_accdata
accountingdata = it_accountdata
taxdata = it_taxdata
return = it_return. commit work. * Processing depending on post status
if save-docnr is initial.
* Get error messages
save-idocst = '51'.
loop at it_return where type eq 'E'.
if sy-tabix eq 1.
save-msgv3 = it_return-message.
elseif sy-tabix eq 2.
save-msgv4 = it_return-message.
else.
exit.
endif.
endloop.
else.
* Determine FI number, could be different "Start
concatenate save-docnr save-gjahr into w_awkey.
select single * from bkpf
where bukrs eq save-bukrs
and awkey eq w_awkey. "Ende
if not bkpf-belnr is initial. "Start
save-fidoc = bkpf-belnr.
else.
save-fidoc = save-docnr.
endif. "Ende
* Start of local processing "Start
* =========================
select single * from yasekgfunct
where ybukrs = save-bukrs
and modulepool = 'LYAP_XIF01'
and cust_fn_id = '003'.
if sy-subrc = 0.
it_headerdata-inv_ref_no = save-docnr.
it_headerdata-inv_year = save-gjahr.
call function yasekgfunct-kgfunction
tables
t_itemdata = it_itemdata
t_glaccountdata = it_accdata
t_accountdata = it_accountdata
t_taxdata = it_taxdata
changing
c_headerdata = it_headerdata.
endif.
* End of local processing
* ======================= "End
endif. endform. " prepare_bapi_invoice *&---------------------------------------------------------------------
*& Func :
*& Author :*& Category: Update
*& Title Process inbound IDOC - Invoices (INVOIC)
*&---------------------------------------------------------------------
*& Note: Authority-check is not necessary here.
*&---------------------------------------------------------------------
*& Short description:
*& This function will be called by IDOC-Inbound
*& to load orders into SAP with IDOC-Processing
*&---------------------------------------------------------------------*&---------------------------------------------------------------------
function zidoc_input_invoic.
*"----------------------------------------------------------------------
*"*"Global Interface:
*" IMPORTING
*" VALUE(INPUT_METHOD) LIKE BDWFAP_PAR-INPUTMETHD
*" VALUE(MASS_PROCESSING) LIKE BDWFAP_PAR-MASS_PROC
*" EXPORTING
*" VALUE(WORKFLOW_RESULT) LIKE BDWF_PARAM-RESULT
*" VALUE(APPLICATION_VARIABLE) LIKE BDWF_PARAM-APPL_VAR
*" VALUE(IN_UPDATE_TASK) LIKE BDWFAP_PAR-UPDATETASK
*" VALUE(CALL_TRANSACTION_DONE) LIKE BDWFAP_PAR-CALLTRANS
*" TABLES
*" IDOC_CONTRL STRUCTURE EDIDC
*" IDOC_DATA STRUCTURE EDIDD
*" IDOC_STATUS STRUCTURE BDIDOCSTAT
*" RETURN_VARIABLES STRUCTURE BDWFRETVAR
*" SERIALIZATION_INFO STRUCTURE BDI_SER
*" EXCEPTIONS
*" WRONG_FUNCTION_CALLED
*"---------------------------------------------------------------------- loop at idoc_contrl. * Initial workfields and internal table
clear: save.
refresh: xekpo, it_cond.
free: xekpo, it_cond. * Get IDOC-Fields into workfields and internal table
loop at idoc_data where docnum eq idoc_contrl-docnum.
perform fill_data_invoic.
endloop. *--------------------------------------------------"Start
* if save-bukrs eq '5400' "Start
* or save-bukrs eq '1500' "
* or save-bukrs eq '1900' "
* or save-bukrs eq '3000'. "
** fill IDOC_Status
* idoc_status-docnum = idoc_contrl-docnum.
* idoc_status-status = '68'.
* append idoc_status.
* else. "
** Write invoice with BAPI
* perform prepare_bapi_invoice.
** fill IDOC_Status
* if save-docnr is initial.
** Set IDOC status
* idoc_status-docnum = idoc_contrl-docnum.
* idoc_status-status = save-idocst.
* idoc_status-msgv1 = 'Invoice not posted'.
* idoc_status-msgv2 = save-msgv2.
* idoc_status-msgv3 = save-msgv3.
* idoc_status-msgv4 = save-msgv4.
* append idoc_status.
* else.
** Set IDOC status
* idoc_status-docnum = idoc_contrl-docnum.
* idoc_status-status = '53'.
* idoc_status-msgv1 = 'Inovice posted'.
* idoc_status-msgv2 = save-docnr.
* append idoc_status.
** Create document links (IDOC/Attachments)
* perform document_links.
* endif.
* endif. "
*--------------------------------------------------"Ende *--------------------------------------------------"Start
* Get control information for company code
select single * from yapxiinvctrl
where bukrs eq save-bukrs
and lifnr eq save-lifnr. w_arch_sp = yapxiinvctrl-langu.
w_arch_id = yapxiinvctrl-archivid. clear w_xiinterf. "Ins
*--------------------------------------------------"Start
** { UC Insert
* l_string = idoc_contrl-arckey+20(16).
* call function 'HR_KR_STRING_TO_XSTRING'
* exporting
* codepage_to = '4110' "UTF-8 "UC
* unicode_string = l_string
* importing
* xstring_stream = l_xstring.
* w_ximessid-x = l_xstring.
* w_ximessid-c = idoc_contrl-arckey+36(32).
* w_ximessid-c25 = idoc_contrl-arckey+68(2).
** } UC Insert
*
** Holen Interfacename aus XI
* concatenate idoc_contrl-sndpor+3(3) '200EXCH' "Ins MB11112009
* into w_remote_system. "Ins MB11112009
*
* call function 'YAP_CHECK_ADS_MESSAGES'
* destination w_remote_system
* exporting
* messageid = w_ximessid
* importing
* interface_name = w_xiinterf.
*
** Check if the content repository is ready "
* if w_xiinterf cs 'ADS'.
* select single arc_doc_id from toa01 into w_arch_docid
* where archiv_id eq w_arch_id.
* call function 'ARCHIVOBJECT_STATUS'
* exporting
* archiv_doc_id = w_arch_docid
* archiv_id = w_arch_id
* importing
* archiv_object_status = w_object_status
* exceptions
* error_archiv = 1
* error_communicationtable = 2
* error_kernel = 3
* others = 4.
* call function 'SCMS_HTTP_SERVER_INFO'
* exporting
* crep_id = w_arch_id
* importing
* contrep_status = w_contrep_status
* exceptions
* bad_request = 1
* internal_server_error = 2
* error_http = 3
* error_url = 4
* error_signature = 5
* contrep_not_found = 6
* others = 7.
* if sy-subrc > 0.
* idoc_status-docnum = idoc_contrl-docnum.
* idoc_status-status = '51'.
* idoc_status-msgv1 = 'Document not posted'.
* idoc_status-msgv2 = 'Archive not ready'.
* append idoc_status.
* continue.
* endif.
* endif.
*--------------------------------------------------"Ende Del * Processing depending on control table
case yapxiinvctrl-process. when '0'. "Do nothing (set status=68) idoc_status-docnum = idoc_contrl-docnum.
idoc_status-status = '68'.
idoc_status-msgv1 = 'Document not posted'.
idoc_status-msgv2 = 'No action required'.
append idoc_status. when '1'. "Post regular (BAPI_INCOMINGINVOICE_PARK) *--------------------------------------------------"Start
** Check if non ADS invoice must be posted
* if yapxiinvctrl-ads eq 'X'
* and w_xiinterf ns 'ADS'.
* idoc_status-docnum = idoc_contrl-docnum.
* idoc_status-status = '68'.
* idoc_status-msgv1 = 'Invoice not posted'.
* idoc_status-msgv2 = 'Not ADS invoice, no action required'.
* append idoc_status.
* continue.
* endif.
*--------------------------------------------------"Ende * Check if document already posted
select single * from rbkp
where xblnr eq save-refnr
and lifnr eq save-lifnr
and gjahr eq sy-datum(4)
and rbstat ne '2'.
if sy-subrc = 0.
idoc_status-docnum = idoc_contrl-docnum.
idoc_status-status = '68'.
idoc_status-msgv1 = 'Invoice not posted'.
idoc_status-msgv2 = 'Invoice with same Reference number already exists'.
append idoc_status.
continue.
endif. * Post invoice with BAPI
perform prepare_bapi_invoice. if save-docnr is initial.
idoc_status-docnum = idoc_contrl-docnum.
idoc_status-status = save-idocst.
idoc_status-msgv1 = 'Invoice not posted'.
idoc_status-msgv2 = 'Error in BAPI'.
idoc_status-msgv2 = save-msgv2.
idoc_status-msgv3 = save-msgv3.
idoc_status-msgv4 = save-msgv4.
append idoc_status.
else.
idoc_status-docnum = idoc_contrl-docnum.
idoc_status-status = '53'.
idoc_status-msgv1 = 'Invoice posted'.
idoc_status-msgv2 = save-docnr.
append idoc_status. * Create document links
perform document_links. endif. when '2'. "Will be posted by Readsoft (deactivated ) *--------------------------------------------------"Start
idoc_status-docnum = idoc_contrl-docnum.
idoc_status-status = '68'.
idoc_status-msgv1 = 'Document not posted'.
idoc_status-msgv2 = 'No action required'.
append idoc_status.
*--------------------------------------------------"Ende
*--------------------------------------------------"Start
* call function '/COCKPIT/EDI_IDOC_TRANSFORM'
* exporting
* input_method = input_method
* mass_processing = mass_processing
* importing
* workflow_result = workflow_result
* application_variable = application_variable
* in_update_task = in_update_task
* call_transaction_done = call_transaction_done
* tables
* idoc_contrl = idoc_contrl
* idoc_data = idoc_data
* idoc_status = idoc_status
* return_variables = return_variables
* serialization_info = serialization_info.
*--------------------------------------------------"Ende Del endcase.
*--------------------------------------------------"Ende endloop. endfunction.
SAP IDOC的更多相关文章
- 【PI系列】SAP IDOC发送状态03,PI没有收到消息的解决办法
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[PI系列]SAP IDOC发送状态03,PI没 ...
- SAP IDOC开发(转)
创建IDOC: 第一步:WE31 创建IDOC所包含的字段. 第二步:WE30 创建IDOC 把Segment分配给IDOC第三步:WE81 创建信息类型第四步:WE82 把IDOC类型与信息 ...
- SAP iDoc 概念及管理
创建IDOC: 第一步:WE31 创建IDOC所包含的字段. 第二步:WE30 创建IDOC 把Segment分配给IDOC 第三步:WE81 创建信息类型 第四步:WE82 把 ...
- SAP IDOC 通过采购订单输出消息生成销售订单
题记: 在网络上看到一篇类似的公众号文章,叫<通过IDoc逐步指导PO&SO集成>,个人觉得整个配置过程中还是少了一些重点配置,也少了说明整个功能的核心逻辑,那么,趁着这个机会,就 ...
- SAP Idoc 事务码
SALE Display ALE Customizing SM59 RFC Destinations (Display/Maintain) BD64 Maintenance of Distributi ...
- [SAP ABAP开发技术总结]IDoc
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 【SAP业务模式】之ICS(三):前台操作
本片博文开始讲解SAP前台是如何实现ICS业务模式的. 一.VA01开立销售订单 我这里为了方便,创建了一个订单类型ZMIV作为公司间销售的订单类型,其实公司间销售订单跟标准的销售订单是一致的.同时, ...
- IDoc
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- SAP标准教材列表
AC010 mySAP Financials Overview to Financial Accounting and ReportingAC020 mySAP Financials Investme ...
随机推荐
- 学习打卡day14&&构建之法阅读笔记第二篇
对于书中所提到的结对编程我还是有些许感受的,在大二上学期我就有和同学合作,共同完成编码.有时候可能是我来做非常非常简易的前端页面部分,然后给同学一个基础框架,让同学往框架里面填充,时而遇到问题我再来沟 ...
- vue elementUI 之 this.$confirm 用法
this.$confirm('您确定退出当前账号吗?', '提示', { confirmButtonText: '确定', ...
- HCIE笔记-第三节-数据链路层与MAC地址
如果数据进行封装时,基于E2或者802.3标准,此时我们称之为是一个以太网数据帧. E2和802.3作用:定义帧头和帧尾的格式. 以太网是现在局域网组网的唯一标准. 数据:对于下层的每个层级而言,上层 ...
- Visual Studio2019 F5调试程序时选择文件后调试控制台进程关闭问题
问题:Visual Studio2019 F5调试程序时选择文件后调试控制台进程关闭问题 解决方案: 修改Visual Studio 配置项 [工具]-[选项]-[项目和解决方案]-[Web项目]-[ ...
- windwos 下编译 qsqlibase 驱动(firebird 和 interbase)
编译环境:mingw-w64 使用qtcreator打开ibase.pro,ibase.pro位置例如:R:\qt-everywhere-opensource-src-4.8.5\src\plugin ...
- 如何基于ZEGO SDK 实现通话质量监测
如何基于ZEGO SDK 实现通话质量监测 1 功能简介 在进行视频通话过程中,用户有时候会出现网络不好的情况,比如在进行多人视频通话或者多人唱歌时,我们需要实时显示用户的网络质量. 示例源码 请参考 ...
- 代码源 每日一题 分割 洛谷 P6033合并果子
题目链接:切割 - 题目 - Daimayuan Online Judge 数据加强版链接: [NOIP2004 提高组] 合并果子 加强版 - 洛谷 题目描述 有一个长度为 ∑ai 的木板,需要 ...
- [没接触过kubevirt?]15分钟快速入门kubevirt
@ 目录 本文介绍 前言 环境准备 详细版 搭建步骤 安装KubeVirt 安装virtctl客户端工具 创建VirtualMachine 启动VirtualMachineInstance 启动和停止 ...
- 用浏览器快速开启Docker的体验之旅
互联网科技发展创造了很多奇迹,比如我今天要提到的 docker 技术就是其一.我很早就关注它(在2015年写过这方面的博客),那会儿还只是一个开源项目,现在已经是一个行业事实标准了,它推动了云原生的变 ...
- 手把手教你在Linux中快速检测端口的 3 个小技巧
一个执着于技术的公众号 前言 无论是要解决网络连接问题还是配置防火墙,第一件事是要检查系统实际打开了哪些端口. 本文介绍了几种快速查找 Linux 系统上哪些端口向外部开放的方法. 什么是开放端口 监 ...