SAP ABAP 顾问(开发工程师)能力模型_Terry谈企业数字化的博客-CSDN博客目标:基于对SAP abap 顾问能力模型的梳理,给一年左右经验的abaper 快速成长为三年经验提参考ALV/REPORT|SMARTFROM|SCREEN|OLE|BAPI|BDC|PI|IDOC|RFC|API|WEBSERVICE|Enhancement|UserExits|Badi|Debughttps://blog.csdn.net/java_zhong1990/article/details/132469977

目标: 掌握SAP MM模块,主要流程相关的BAPI 函数的使用,主要有如下模块:

询价 报价 货源清单 配额安排 采购信息记录 框架协议-合同 框架协议-计划协议 采购订单 采购收货  发票校验 发票过账


一 背景说明

1.1 什么是SAP BAPI.

BAPI是SAP系统标准函数,比如:采购申请创建函数、采购订单创建函数等等。

1.2 SAP采购模块标准流程

1.2.1 模块导航
采购信息记录修改 SAP_ABAP_MM_BAPI清单案例教程——采购信息记录_企业数字化建设者的博客-CSDN博客
框架协议-合同创建 SAP_ABAP_MM_BAPI清单案例教程——框架协议-合同_企业数字化建设者的博客-CSDN博客
框架协议-合同修改 SAP_ABAP_MM_BAPI清单案例教程——框架协议-合同_企业数字化建设者的博客-CSDN博客
框架协议-计划协议创建 SAP_ABAP_MM_BAPI清单案例教程——框架协议-计划协议_企业数字化建设者的博客-CSDN博客
采购申请创建 SAP_ABAP_MM_BAPI清单案例教程——采购申请_企业数字化建设者的博客-CSDN博客
采购订单创建 SAP_ABAP_MM_BAPI清单案例教程——采购订单_企业数字化建设者的博客-CSDN博客
采购订单收货创建 SAP_ABAP_MM_BAPI清单案例教程——采购订单收货_企业数字化建设者的博客-CSDN博客
采购发票预制 SAP_ABAP_MM_BAPI清单案例教程——采购发票校验_企业数字化建设者的博客-CSDN博客
采购发票过账 SAP_ABAP_MM_BAPI清单案例教程——采购发票过账_企业数字化建设者的博客-CSDN博客
采购发票付款 SAP_ABAP_FI_BAPI清单案例教程——采购付款/销售收款_BAPI_ACC_DOCUMENT_POST_F-02-CSDN博客

1.2.2 BAPI清单

ME_INFORECORD_MAINTAIN  采购信息记录修改
BAPI_CONTRACT_CREATE 框架协议-合同创建
BAPI_CONTRACT_CHANGE 框架协议-合同修改
BAPI_SAG_CREATE 框架协议-计划协议创建
BAPI_PR_CREATE 采购申请创建
BAPI_PO_CREATE1 采购订单创建
BAPI_GOODSMVT_CREATE 采购订单收货创建
BAPI_INCOMINGINVOICE_PARK 采购发票预制
BAPI_INCOMINGINVOICE_POST 采购发票过账
BAPI_ACC_DOCUMENT_POST 采购付款过帐

二 代码模板

1.3 采购付款过账

1.3.1 创建

1.3.2 修改

1.3.3 删除

REPORT zficp001.INCLUDE zficp001_top.
INCLUDE zficp001_frm.INITIALIZATION.PERFORM initialization.AT SELECTION-SCREEN .CASE sscrfields-ucomm .WHEN 'FC01'.PERFORM download_templateUSING'凭证批导模板.xls''ZFICP001'.WHEN OTHERS.ENDCASE.AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file .PERFORM select_file CHANGING p_file .START-OF-SELECTION .PERFORM upload_data .PERFORM show_data .
*&---------------------------------------------------------------------*
*& 包含               ZFICP001_TOP
*&---------------------------------------------------------------------*
TYPE-POOLS: esp1,slis .TABLES: sscrfields,t001 .TYPES: BEGIN OF tt_extd ,t_msg TYPE esp1_message_tab_type,style TYPE lvc_t_styl,END OF tt_extd .DATA: go_cx        TYPE REF TO cx_root,lv_msg       TYPE string,lv_msg_total TYPE string.TYPES: BEGIN OF tt_show,id          TYPE num08, "索引号bukrs       TYPE bukrs, "公司代码blart       TYPE blart, "凭证类型bldat       TYPE bldat, "发票日期budat       TYPE budat, "过帐日期monat       TYPE monat, "会计期间waers       TYPE waers, "货币码
*         numpg      TYPE j_1anopg, "附件张数bktxt       TYPE bktxt, "凭证抬头文本xblnr       TYPE xblnr, "参考bschl       TYPE bschl, "过账码hkont       TYPE hkont, "科目编码kunnr       TYPE kunnr, "客户编号lifnr       TYPE lifnr, "供应商编号fkber       TYPE fkber, "功能范围ebeln       TYPE ebeln,  "采购凭证编号ebelp       TYPE ebelp,  "采购凭证项目编号anln1       TYPE anln1, "主资产号anln2       TYPE anln2, "资产次级编号umskz       TYPE umskz, "特别总账标识newbw       TYPE newbw, "事务类型wrbtr       TYPE wrbtr, "原币金额dmbtr       TYPE dmbtr, "本币金额
*         SKFBT      TYPE SKFBT, "可使用的凭证货币的现金折扣金额neg_postng  TYPE xnegp, "反记帐rstgr       TYPE rstgr, "原因代码kostl       TYPE kostl, "成本中心prctr       TYPE prctr, "利润中心
*         matnr      TYPE matnr18, "物料号matnr       TYPE mara-matnr, "物料号 CHANGE BY HUANGXMA 20190104 将物料编号由18->40wbs_element TYPE ps_posid,aufnr       TYPE aufnr, "内部订单kkber       TYPE kkber, "信用范围mwskz       TYPE mwskz, "税码xmwst       TYPE xmwst, "计算税额勾选zuonr       TYPE dzuonr, "行项目分配sgtxt       TYPE sgtxt, "行项目文本ref_key_1   TYPE xref1 , "付款参考 ADD  20210901 BY xjc 新增付款参考字段bzdat       TYPE bzdat, "资产起息日 add by huangxma 20190111
*         valut      TYPE valut, "起息日zfbdt       TYPE dzfbdt, "付款基准日zterm       TYPE dzterm, "付款条件vbund       TYPE vbund, "贸易伙伴*         wwa05      TYPE char4, "rkeg_wwa05, "代运行组织   “注释 BY HUANGXMA 20180328
*         wwa10      TYPE char6, "rkeg_wwa10, "代运行组
*         wwb05      TYPE char18, "rkeg_wwb05,"产品
*         wwd05      TYPE char2, "rkeg_wwd05, "业务单据类别
*         wwd10      TYPE char4, "rkeg_wwd10, "业务类型
*         wwd20      TYPE char4, "rkeg_wwd20, "结算来源
*         wwd21      TYPE char4, "rkeg_wwd21, "结算类型
*         wwd35      TYPE char6, "rkeg_wwd35, "费目组
*         wwd36      TYPE char3, "rkeg_wwd36, "费用类别
*         wwd37      TYPE char15, "rkeg_wwd37,"费用细目
*         wwc10      TYPE lifnr,              "供应商
*         kndnr      TYPE kunde_pa,           "客户
*         wwb30      TYPE char4, "rkeg_wwb30, "产品大类zlsch       TYPE schzw_bseg,         "付款方式"----------------------特殊总账zfbdt1      TYPE dzfbdt,wdate       TYPE wdate,wname       TYPE wname,wbzog       TYPE wbzog,wbank       TYPE wbank,wlzbp       TYPE wlzbp,gjahr       TYPE gjahr,   """"财年belnr       TYPE belnr_d, """"会计凭证light.                   """""处理状态INCLUDE    TYPE tt_extd.TYPES: END OF tt_show .
DATA: callbdc TYPE char1.
DATA: BEGIN OF gt_copa_field OCCURS 0 ,fname TYPE fieldname,END OF gt_copa_field .DATA: gs_documentheader    LIKE bapiache09,   "表头gs_customercpd       LIKE bapiacpa09,   "会计记帐: 业务伙伴开票凭证 (可接收负载)gs_fica_hd           LIKE bapiaccahd,   "应收和应付附加合同帐户表头行gt_accountreceivable LIKE TABLE OF bapiacar09 WITH HEADER LINE,    "客户项目gt_accountgl         LIKE TABLE OF bapiacgl09 WITH HEADER LINE,    "总帐科目gt_accounttax        LIKE TABLE OF bapiactx09 WITH HEADER LINE,    "税务项目gt_criteria          LIKE TABLE OF bapiackec9 WITH HEADER LINE,    "会计记帐:CO-PA 科目分配特性gt_valuefield        LIKE TABLE OF bapiackev9 WITH HEADER LINE,    "会计记帐:CO-PA 科目分配值字段gt_currencyamount    LIKE TABLE OF bapiaccr09 WITH HEADER LINE,    "货币项目gt_return            LIKE TABLE OF bapiret2   WITH HEADER LINE,    "返回参数gt_receivers         LIKE TABLE OF bdi_logsys WITH HEADER LINE,    "传输逻辑系统的结gt_fica_it           LIKE TABLE OF bapiaccait WITH HEADER LINE,    "应收和应付附加合同帐户行项目gt_accountpayable    LIKE TABLE OF bapiacap09 WITH HEADER LINE,    "供应商项目gt_paymentcard       LIKE TABLE OF bapiacpc09 WITH HEADER LINE,    "付款卡信息gt_extension1        LIKE TABLE OF bapiacextc WITH HEADER LINE,    "客户退出' 参数的容器gt_realestate        LIKE TABLE OF bapiacre09 WITH HEADER LINE,    "不动产科目分配数据gt_extension2        LIKE TABLE OF bapiparex  WITH HEADER LINE.    "BAPI 参数 ExtensionIn/ExtensionOut 的参考结构DATA: gt_tbsl     TYPE TABLE OF tbsl WITH HEADER LINE,gt_show     TYPE TABLE OF tt_show WITH HEADER LINE,gt_show_bdc TYPE TABLE OF tt_show WITH HEADER LINE,ls_msg      TYPE  esp1_message_wa_type,lt_msg      TYPE  esp1_message_tab_type,gs_layo     TYPE lvc_s_layo,gs_fcat     TYPE lvc_s_fcat,gt_fcat     TYPE lvc_t_fcat.SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE TEXT-b01 .PARAMETERS p_file TYPE localfile ."OBLIGATORY .
SELECTION-SCREEN END OF BLOCK b01 .SELECTION-SCREEN FUNCTION KEY: 1 .
*&---------------------------------------------------------------------*
*& Include ZFIDG003_FRM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  SELECT_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--PC_FILE  text
*----------------------------------------------------------------------*
FORM select_file  CHANGING pc_file.DATA: lt_filetab  TYPE filetable WITH HEADER LINE .DATA: rc          TYPE i,file_filter TYPE string. "file filter*定义file filter,注意定义的格式,显示的时候最后一个为默认的显示
*与你定义的DEFAULT_EXTENSION无关file_filter = 'Excel Files (*.xls)|*.xls|All Files (*.*)|*.*'.CALL METHOD cl_gui_frontend_services=>file_open_dialogEXPORTING
*     window_title            =default_extension       = '*.xls'
*     default_filename        =file_filter             = file_filter
*     with_encoding           =
*     initial_directory       =
*     multiselection          =CHANGINGfile_table              = lt_filetab[]rc                      = rc
*     user_action             =
*     file_encoding           =EXCEPTIONSfile_open_dialog_failed = 1cntl_error              = 2error_no_gui            = 3not_supported_by_gui    = 4OTHERS                  = 5.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.IF lt_filetab[] IS NOT INITIAL.READ TABLE lt_filetab INDEX 1.pc_file = lt_filetab .ENDIF.ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  UPLOAD_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM upload_data .DATA: lt_data TYPE TABLE OF alsmex_tabline WITH HEADER LINE .FIELD-SYMBOLS: <value> .IF p_file IS INITIAL .MESSAGE '请选择数据文件' TYPE 'S' DISPLAY LIKE 'E' .STOP .ENDIF .CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'EXPORTINGfilename                = p_filei_begin_col             = 1i_begin_row             = 4i_end_col               = 61 "change by xjc 20210901 新增付款仓靠字段i_end_row               = 20000TABLESintern                  = lt_dataEXCEPTIONSinconsistent_parameters = 1upload_ole              = 2OTHERS                  = 3.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.LOOP AT lt_data .AT NEW row .CLEAR gt_show .ENDAT .ASSIGN COMPONENT lt_data-col OF STRUCTURE gt_show TO <value> .IF sy-subrc EQ 0 .IF lt_data-col EQ '0020' OR lt_data-col EQ '0021' OR lt_data-col EQ '0022'."金额字段不需要输入','REPLACE ALL OCCURRENCES OF REGEX ',' IN lt_data-value WITH ''.ENDIF.CONDENSE lt_data-value."抛出异常CLEAR: lv_msg.TRY.<value> = lt_data-value .CATCH cx_root INTO go_cx.lv_msg = go_cx->if_message~get_text( ).IF lv_msg IS NOT INITIAL .lv_msg_total = lv_msg_total && lv_msg.ENDIF .ENDTRY.ENDIF .AT END OF row .IF gt_show-anln2 EQ space .gt_show-anln2 = '0' .ENDIF .PERFORM conversion_exit_alpha_input USING gt_show-lifnr .PERFORM conversion_exit_alpha_input USING gt_show-kunnr .PERFORM conversion_exit_alpha_input USING gt_show-prctr .PERFORM conversion_exit_alpha_input USING gt_show-kostl .PERFORM conversion_exit_alpha_input USING gt_show-hkont .PERFORM conversion_exit_alpha_input USING gt_show-anln1 .PERFORM conversion_exit_alpha_input USING gt_show-anln2 .PERFORM conversion_exit_alpha_input2 USING gt_show-matnr .PERFORM check_data .IF gt_show-t_msg IS NOT INITIAL .gt_show-light = '1' .ENDIF .APPEND gt_show .ENDAT .ENDLOOP .ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SHOW_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM show_data .DEFINE add_fcat.gs_fcat-fieldname = &1.gs_fcat-coltext   = &2.gs_fcat-edit      = &3.gs_fcat-checkbox  = &4.gs_fcat-ref_field = &5.gs_fcat-ref_table = &6.gs_fcat-cfieldname = &7.gs_fcat-no_zero = &8.APPEND gs_fcat TO gt_fcat.CLEAR gs_fcat.END-OF-DEFINITION.add_fcat 'LIGHT'   '处理状态' '' '' '' '' '' ''.add_fcat 'GJAHR'   '财年' '' '' '' '' '' ''.add_fcat 'BELNR'   '会计凭证' '' '' '' '' '' ''.add_fcat 'BUKRS'   '公司代码' '' '' '' '' '' ''.add_fcat 'BLART'   '凭证类型' '' '' '' '' '' ''.add_fcat 'BLDAT'   '发票日期' '' '' '' '' '' ''.add_fcat 'BUDAT'   '过帐日期' '' '' '' '' '' ''.add_fcat 'MONAT'   '会计期间' '' '' '' '' '' ''.add_fcat 'WAERS'   '货币码' '' '' '' '' '' ''.
*  ADD_FCAT 'NUMPG'   '附件张数' '' '' '' '' '' ''.add_fcat 'BKTXT'   '凭证抬头文本' '' '' '' '' '' ''.add_fcat 'XBLNR'   '参考' '' '' '' '' '' ''.add_fcat 'BSCHL'   '过账码' '' '' '' '' '' ''.add_fcat 'HKONT'   '科目编码' '' '' '' '' '' ''.add_fcat 'KUNNR'   '客户编号' '' '' '' '' '' ''.add_fcat 'LIFNR'   '供应商编号' '' '' '' '' '' ''.add_fcat 'FKBER'   '功能代码' '' '' '' '' '' ''.add_fcat 'EBELN'   '采购凭证' '' '' '' '' '' ''.add_fcat 'EBELP'   '采购凭证项目' '' '' '' '' '' ''.add_fcat 'ANLN1'   '主资产号' '' '' '' '' '' ''.add_fcat 'ANLN2'   '资产次级编号' '' '' '' '' '' ''.add_fcat 'UMSKZ'   '特别总账标识' '' '' '' '' '' ''.add_fcat 'NEWBW'   '事务类型' '' '' '' '' '' ''.add_fcat 'WRBTR'   '原币金额' '' '' '' '' '' ''.add_fcat 'DMBTR'   '本币金额' '' '' '' '' '' ''.
*  ADD_FCAT 'SKFBT'   '现金折扣金额' '' '' '' '' '' ''.add_fcat 'NEG_POSTNG'   '反记帐' '' '' '' '' '' ''.add_fcat 'RSTGR'   '原因代码' '' '' '' '' '' ''.add_fcat 'KOSTL'   '成本中心' '' '' '' '' '' ''.add_fcat 'PRCTR'   '利润中心' '' '' '' '' '' ''.add_fcat 'MATNR'   '物料编号' '' '' '' '' '' 'X'.add_fcat 'WBS_ELEMENT'   'WBS要素' '' '' '' '' '' ''.add_fcat 'AUFNR'   '内部订单' '' '' '' '' '' ''.add_fcat 'KKBER'   '信用范围' '' '' '' '' '' ''.add_fcat 'MWSKZ'   '税码' '' '' '' '' '' ''.add_fcat 'XMWST'   '计算税额勾选' '' '' '' '' '' ''.add_fcat 'ZUONR'   '行项目分配' '' '' '' '' '' ''.add_fcat 'SGTXT'   '行项目文本' '' '' '' '' '' ''.add_fcat 'REF_KEY_1'   '付款参考' '' '' '' '' '' ''. "add by xjc 20210901 新增付款参考字段add_fcat 'BZDAT'   '资产起息日' '' '' '' '' '' ''.
*  ADD_FCAT 'VALUT'   '起息日' '' '' '' '' '' ''.add_fcat 'ZFBDT'   '付款基准日' '' '' '' '' '' ''.add_fcat 'ZTERM'   '付款条件' '' '' '' '' '' ''.add_fcat 'VBUND'   '贸易伙伴' '' '' '' '' '' ''.
*  注释 BY HUANGXMA 20180328
*  ADD_FCAT 'WWA05'   '代运行组织' '' '' '' '' '' ''.
*  ADD_FCAT 'WWA10'   '代运行组' '' '' '' '' '' ''.
*  ADD_FCAT 'WWB05'   '产品' '' '' '' '' '' ''.
*  ADD_FCAT 'WWD05'   '业务单据类别' '' '' '' '' '' ''.
*  ADD_FCAT 'WWD10'   '业务类型' '' '' '' '' '' ''.
*  ADD_FCAT 'WWD20'   '结算来源' '' '' '' '' '' ''.
*  ADD_FCAT 'WWD21'   '结算类型' '' '' '' '' '' ''.
*  ADD_FCAT 'WWD35'   '费目组' '' '' '' '' '' ''.
*  ADD_FCAT 'WWD36'   '费用类别' '' '' '' '' '' ''.
*  ADD_FCAT 'WWD37'   '费用细目' '' '' '' '' '' ''.
*  ADD_FCAT 'WWC10'   '供应商' '' '' '' '' '' ''.
*  ADD_FCAT 'KNDNR'   '客户' '' '' '' '' '' ''.
*  ADD_FCAT 'WWB30'   '产品大类' '' '' '' '' '' ''.add_fcat 'ZLSCH'   '付款方式' '' '' '' '' '' ''.add_fcat 'ZFBDT1'   '到期日' '' '' '' '' '' ''.add_fcat 'WDATE'   '签发日期' '' '' '' '' '' ''.add_fcat 'WNAME'   '收款人' '' '' '' '' '' ''.add_fcat 'WBZOG'   '付款人' '' '' '' '' '' ''.add_fcat 'WBANK'   '指定支付地点' '' '' '' '' '' ''.add_fcat 'WLZBP'   '中央银行位置' '' '' '' '' '' ''.gs_layo-cwidth_opt = 'X' .gs_layo-excp_fname = 'LIGHT' .CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program       = sy-repidi_callback_pf_status_set = 'PF_STATUS_SET'i_callback_user_command  = 'USER_COMMAND'is_layout_lvc            = gs_layoit_fieldcat_lvc          = gt_fcati_default                = 'X'i_save                   = 'A'TABLESt_outtab                 = gt_show.ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  INITIALIZATION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM initialization .DATA: ls_dyntxt TYPE smp_dyntxt .ls_dyntxt-icon_id = icon_export.ls_dyntxt-quickinfo  = '模板下载'.ls_dyntxt-icon_text  = '模板下载'.sscrfields-functxt_01 = ls_dyntxt.SELECT * INTO TABLE gt_tbslFROM tbsl.gt_copa_field-fname = 'WWA05' .APPEND gt_copa_field .gt_copa_field-fname = 'WWA10' .APPEND gt_copa_field .gt_copa_field-fname = 'WWB05' .APPEND gt_copa_field .gt_copa_field-fname = 'WWD05' .APPEND gt_copa_field .gt_copa_field-fname = 'WWD10' .APPEND gt_copa_field .gt_copa_field-fname = 'WWD20' .APPEND gt_copa_field .gt_copa_field-fname = 'WWD21' .APPEND gt_copa_field .gt_copa_field-fname = 'WWD35' .APPEND gt_copa_field .gt_copa_field-fname = 'WWD36' .APPEND gt_copa_field .gt_copa_field-fname = 'WWD37' .APPEND gt_copa_field .gt_copa_field-fname = 'WWC10' .APPEND gt_copa_field .gt_copa_field-fname = 'KNDNR' .APPEND gt_copa_field .gt_copa_field-fname = 'WWB30' .APPEND gt_copa_field .gt_copa_field-fname = 'ZLSCH' .APPEND gt_copa_field .ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  PF_STATUS_SET
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM pf_status_set USING rt_extab TYPE slis_t_extab.SET PF-STATUS 'ALV' EXCLUDING rt_extab .ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucommrs_selfield TYPE slis_selfield.rs_selfield-refresh    = 'X'.rs_selfield-col_stable = 'X'.rs_selfield-row_stable = 'X'.CASE r_ucomm.WHEN 'CHECK'.PERFORM acc_document USING 'X' .WHEN 'POST'.PERFORM acc_document USING space .WHEN '&IC1' .READ TABLE gt_show INDEX rs_selfield-tabindex .rs_selfield-fieldname = to_upper( rs_selfield-fieldname ).CASE rs_selfield-fieldname.WHEN 'LIGHT'.PERFORM c14z_messages_show_as_popupTABLESgt_show-t_msg.WHEN 'BELNR' OR 'GJAHR' OR 'BUKRS'.CHECK gt_show-belnr IS NOT INITIAL .CALL FUNCTION 'TRCA_FI_DOCUMENT_DISPLAY'EXPORTINGcompanycode = gt_show-bukrsdocument    = gt_show-belnryear        = gt_show-gjahr.WHEN OTHERS.ENDCASE.WHEN OTHERS.ENDCASE.ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  ACC_DOCUMENT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM acc_document USING pu_check .DATA: lv_posnr    TYPE  i,lv_obj_type LIKE  bapiache09-obj_type,lv_obj_key  LIKE  bapiache09-obj_key,lv_obj_sys  LIKE  bapiache09-obj_sys,lv_error    TYPE  c,ls_show     TYPE  tt_show.DATA: lv_budat TYPE  budat,lv_bukrs TYPE  bukrs,lv_blart TYPE  blart,lv_bldat TYPE  bldat,lv_monat TYPE  monat,lv_waers TYPE  waers,
*        LV_NUMPG TYPE  J_1ANOPG,lv_bktxt TYPE  bktxt,lv_xblnr TYPE  xblnr.DATA: lt_show TYPE STANDARD TABLE OF tt_show.lt_show = gt_show[].SORT lt_show BY hkont.DELETE ADJACENT DUPLICATES FROM lt_show COMPARING hkont.SELECT bukrs,saknr,xintbFROM skb1FOR ALL ENTRIES IN @lt_showWHERE saknr EQ @lt_show-hkontINTO TABLE @DATA(lt_skb1).IF sy-subrc EQ 0.SORT lt_skb1 BY bukrs saknr.ENDIF.LOOP AT gt_show WHERE belnr IS INITIAL .AT NEW bukrs .SELECT SINGLE * FROM t001 WHERE bukrs EQ gt_show-bukrs .ENDAT .AT NEW id .CLEAR:callbdc, gt_show_bdc[].CLEAR: lv_posnr, gs_documentheader, gs_customercpd,gs_fica_hd,lv_obj_type , lv_obj_key , lv_obj_sys,
*             LV_BUDAT,LV_BUKRS,LV_BLART,LV_BLDAT,LV_MONAT,LV_WAERS,LV_NUMPG,LV_BKTXT,LV_XBLNR.lv_budat,lv_bukrs,lv_blart,lv_bldat,lv_monat,lv_waers,lv_bktxt,lv_xblnr.CLEAR: gt_accountgl,gt_accountreceivable,gt_accountpayable,gt_accounttax,gt_currencyamount,gt_criteria,gt_valuefield,gt_extension1,gt_return,gt_paymentcard,gt_fica_it,gt_extension2,gt_realestate.CLEAR: gt_accountgl[],gt_accountreceivable[],gt_accountpayable[],gt_accounttax[],gt_currencyamount[],gt_criteria[],gt_valuefield[],gt_extension1[],gt_return[],gt_paymentcard[],gt_fica_it[],gt_extension2[],gt_realestate[].REFRESH lt_msg .ENDAT .PERFORM check_item TABLES lt_msg USING gt_show-bukrs '003' CHANGING lv_bukrs ls_msg  ."同一个ID & 下的公司代码必须一致PERFORM check_item TABLES lt_msg USING gt_show-blart '004' CHANGING lv_blart ls_msg  ."同一个ID & 下的凭证类型必须一致PERFORM check_item TABLES lt_msg USING gt_show-bldat '005' CHANGING lv_bldat ls_msg  ."同一个ID & 下的发票日期必须一致PERFORM check_item TABLES lt_msg USING gt_show-monat '006' CHANGING lv_monat ls_msg  ."同一个ID & 下的会计期间必须一致PERFORM check_item TABLES lt_msg USING gt_show-waers '007' CHANGING lv_waers ls_msg  ."同一个ID & 下的货币码必须一致
*    PERFORM CHECK_ITEM TABLES LT_MSG USING GT_SHOW-NUMPG '008' CHANGING LV_NUMPG LS_MSG  ."同一个ID & 下的附件张数必须一致PERFORM check_item TABLES lt_msg USING gt_show-bktxt '009' CHANGING lv_bktxt ls_msg  ."同一个ID & 下的凭证抬头文本必须一致PERFORM check_item TABLES lt_msg USING gt_show-xblnr '010' CHANGING lv_xblnr ls_msg  ."同一个ID & 下的参考必须一致PERFORM check_item TABLES lt_msg USING gt_show-budat '011' CHANGING lv_budat ls_msg  ."同一个ID & 下的过账日期必须一致READ TABLE lt_skb1 ASSIGNING FIELD-SYMBOL(<fs_skb1>)WITH KEY bukrs = gt_show-bukrssaknr = gt_show-hkont BINARY SEARCH.IF sy-subrc EQ 0.IF <fs_skb1>-xintb EQ abap_true.APPEND INITIAL LINE TO lt_msg ASSIGNING FIELD-SYMBOL(<fs_msg>).<fs_msg>-msgid = 'ZDEV'.<fs_msg>-msgty = 'E'.<fs_msg>-msgno = '000'.<fs_msg>-msgv1 = TEXT-001.<fs_msg>-msgv2 = gt_show-hkont.ENDIF.ENDIF.
**begin 20200511 检查********************************************IF gt_show-rstgr IS NOT INITIAL.SELECT SINGLE * INTO @DATA(wa_t053r) FROM t053r WHERE  bukrs = @gt_show-bukrs AND rstgr = @gt_show-rstgr.IF sy-subrc <> 0.APPEND INITIAL LINE TO lt_msg ASSIGNING  <fs_msg> .<fs_msg>-msgid = '00'.<fs_msg>-msgty = 'E'.<fs_msg>-msgno = '058'."MESSAGE E058(00) with GT_SHOW-BUKRS GT_SHOW-RSTGR '' 'T053R' INTO <FS_MSG>-MSGV1." with GT_SHOW-BUKRS GT_SHOW-RSTGR '' 'T053R'MESSAGE ID '00' TYPE 'E' NUMBER '058' INTO <fs_msg>-msgv1WITH  gt_show-bukrs gt_show-rstgr '' 'T053R'.ENDIF.ENDIF.
**end 20200511********************************************gs_documentheader-comp_code  = gt_show-bukrs .gs_documentheader-doc_date   = gt_show-bldat .gs_documentheader-pstng_date = gt_show-budat .gs_documentheader-doc_type   = gt_show-blart .gs_documentheader-username   = sy-uname .gs_documentheader-header_txt = gt_show-bktxt .gs_documentheader-ref_doc_no = gt_show-xblnr .ADD 1 TO lv_posnr .READ TABLE gt_tbsl WITH KEY bschl = gt_show-bschl .CASE gt_tbsl-koart .WHEN 'S' OR 'A' .PERFORM fill_accountgl USING lv_posnr.      "总帐科目行项WHEN 'D' .PERFORM fill_accountar USING lv_posnr.      "客户行项WHEN 'K' .PERFORM fill_accountap USING lv_posnr.      "供应商行项ENDCASE .IF gt_tbsl-shkzg EQ 'H' .gt_show-wrbtr = 0 - gt_show-wrbtr .gt_show-dmbtr = 0 - gt_show-dmbtr .ENDIF .APPEND gt_show TO gt_show_bdc.CLEAR :gt_show_bdc.IF  gt_show-bschl+1(1) = '9' AND  gt_show-umskz IS NOT INITIAL.callbdc = 'X'.ENDIF."特殊总账标识W调用dbcPERFORM fill_currencyamount USING lv_posnr. "货币项目
*    PERFORM FILL_CRITERIA USING LV_POSNR..      "会计记帐:CO-PA 科目分配特性  "注释 BY HUANGXMA 20180328PERFORM fill_extension2 USING lv_posnr.AT END OF id .IF lt_msg[] IS INITIAL .IF pu_check EQ 'X' .CHECK  callbdc = ''.CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'EXPORTINGdocumentheader    = gs_documentheader
*             CUSTOMERCPD       = CUSTOMERCPD
*             CONTRACTHEADER    = CONTRACTHEADERTABLESaccountgl         = gt_accountglaccountreceivable = gt_accountreceivableaccountpayable    = gt_accountpayableaccounttax        = gt_accounttaxcurrencyamount    = gt_currencyamount
*             CRITERIA          = GT_CRITERIA       "注释 BY HUANGXMA 20180328
*             VALUEFIELD        =
*             EXTENSION1        =return            = gt_return
*             PAYMENTCARD       =
*             CONTRACTITEM      =extension2        = gt_extension2
*             REALESTATE        =
*             ACCOUNTWT         =.ELSE .IF  callbdc = 'X'.DATA :belnr TYPE belnr_d,gjahr TYPE gjahr.CLEAR:belnr,gjahr.CALL FUNCTION 'ZDOCUMENT_DBC'IMPORTINGbelnr = belnrgjahr = gjahr..REFRESH lt_msg .IF belnr  IS INITIAL  .CLEAR ls_msg .PERFORM convert_to_esp1_msg USING 'ZDEV''E''000''过账失败'''''''CHANGING ls_msg .APPEND ls_msg TO lt_msg .ls_show-light = '1' .ls_show-t_msg =  lt_msg .MODIFY gt_show FROM ls_show TRANSPORTING light t_msgWHERE id = gt_show-id .ELSE .ls_show-belnr = belnr .ls_show-gjahr = gjahr.ls_show-light = '3' .MODIFY gt_show FROM ls_show TRANSPORTING light belnr gjahrWHERE id = gt_show-id .ENDIF .ENDIF.CHECK   callbdc = ''.CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'EXPORTINGdocumentheader    = gs_documentheader
*             CUSTOMERCPD       = CUSTOMERCPD
*             CONTRACTHEADER    = CONTRACTHEADERIMPORTINGobj_type          = lv_obj_typeobj_key           = lv_obj_keyobj_sys           = lv_obj_sysTABLESaccountgl         = gt_accountglaccountreceivable = gt_accountreceivableaccountpayable    = gt_accountpayableaccounttax        = gt_accounttaxcurrencyamount    = gt_currencyamount
*             CRITERIA          = GT_CRITERIA
*             VALUEFIELD        =
*             EXTENSION1        =return            = gt_return
*             PAYMENTCARD       =
*             CONTRACTITEM      =extension2        = gt_extension2
*             REALESTATE        =
*             ACCOUNTWT         =.ENDIF .REFRESH lt_msg .CLEAR: lv_error .LOOP AT gt_return WHERE type NE 'W' .IF gt_return-type EQ 'E' OR gt_return-type EQ 'A' .lv_error = 'X' .ENDIF .CLEAR ls_msg .PERFORM convert_to_esp1_msg USING gt_return-idgt_return-typegt_return-numbergt_return-message_v1gt_return-message_v2gt_return-message_v3gt_return-message_v4CHANGING ls_msg .APPEND ls_msg TO lt_msg .ENDLOOP .ELSE .lv_error = 'X' .ENDIF .IF lv_error EQ 'X' .CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.DELETE lt_msg WHERE msgty EQ 'S' .ls_show-light = '1' .ls_show-t_msg = lt_msg[] .MODIFY gt_show FROM ls_show TRANSPORTING light t_msgWHERE id = gt_show-id .ELSE .IF pu_check IS INITIAL .CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.ls_show-belnr = lv_obj_key(10) .ls_show-gjahr = lv_obj_key+14(4) .ELSE .ENDIF .ls_show-light = '3' .MODIFY gt_show FROM ls_show TRANSPORTING light belnr gjahrWHERE id = gt_show-id .ENDIF .ENDAT .ENDLOOP .IF sy-subrc EQ 0.MESSAGE '请查看处理状态!' TYPE 'S'.ELSE.MESSAGE '凭证已创建!' TYPE 'E'.ENDIF.ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FILL_ACCOUNTGL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fill_accountgl USING pu_posnr .DATA:ls_show     TYPE  tt_show.DATA:ps_msg LIKE ls_msg.
**  IF     GT_SHOW-HKONT(4) = '2221' AND GT_TBSL-KOART EQ 'S'."税务项目 2221010100 2221010500 GT_SHOW-XMWST = 'X'
**    PERFORM FILL_ACCOUNTTAX USING PU_POSNR.
**  ELSE.
*  IF
*   GT_SHOW-HKONT = '2221010100' OR
*   GT_SHOW-HKONT = '2221010600'
*    OR GT_SHOW-HKONT = '2221011100' OR GT_SHOW-HKONT = '2221050000'.
*
*    PERFORM FILL_ACCOUNTTAX USING PU_POSNR.*  ELSE.CLEAR gt_accountgl.gt_accountgl-itemno_acc       = pu_posnr .gt_accountgl-acct_type        =  gt_tbsl-koart .IF gt_tbsl-koart EQ 'S' .gt_accountgl-gl_account     = gt_show-hkont."总账科目
*&----------ADD BY HXM 20180201---------------------&*
*      当科目编码(HKONT)=1407000000/6401010000/6401020000时,物料编码(MATNR)字段必输,如果没有必输,那么直接报错。IF  gt_show-hkont = '1407000000' OR gt_show-hkont = '6401010000' OR gt_show-hkont = '6401020000' .IF  gt_show-matnr IS INITIAL .PERFORM convert_to_esp1_msg USING 'ZDEV' 'E' '000' '物料编号字段必输' space space space CHANGING ps_msg.ls_show-light = '1' .COLLECT ps_msg INTO lt_msg .ls_show-t_msg = lt_msg[] .MODIFY gt_show FROM ls_show TRANSPORTING light t_msgWHERE id = gt_show-id .ENDIF.ENDIF.gt_accountgl-material = gt_show-matnr.gt_accountgl-material_long = gt_show-matnr. "CHANGE BY HUANGXMA 20190104扩展物料编码的长度18->40
*&---------END BY HXM 20180201---------------------&*ELSEIF gt_tbsl-koart EQ 'A' .gt_accountgl-asset_no       = gt_show-anln1."固定资产gt_accountgl-sub_number     = gt_show-anln2.SELECT SINGLE ktansw INTO gt_accountgl-gl_accountFROM anla AS a INNER JOIN t095 AS bON a~ktogr EQ b~ktogrWHERE a~bukrs = gt_show-bukrsAND a~anln1 = gt_show-anln1AND a~anln2 = gt_show-anln2AND b~ktopl = '1000' ."乾照光电集团会计科目表ENDIF .*    GT_ACCOUNTGL-COMP_CODE  = GT_SHOW-BUKRS.gt_accountgl-tax_code       = gt_show-mwskz .
*  gt_accountgl-bus_area       = gt_show-gsber .gt_accountgl-alloc_nmbr     = gt_show-zuonr."分配gt_accountgl-item_text      = gt_show-sgtxt."文本
*    IF gt_show-hkont(4) = '6001' OR gt_show-hkont(4) = '6401' .
*    ELSE .gt_accountgl-profit_ctr     = gt_show-prctr."利润中心
*    ENDIF .gt_accountgl-costcenter       = gt_show-kostl."成本中心gt_accountgl-func_area        = gt_show-fkber."功能范围IF gt_show-aufnr IS NOT INITIAL.gt_accountgl-orderid        = gt_show-aufnr."订单ENDIF.IF gt_show-wbs_element IS NOT INITIAL.gt_accountgl-wbs_element      = gt_show-wbs_element."订单ENDIF.gt_accountgl-trade_id         = gt_show-vbund ."贸易伙伴gt_accountgl-asval_date       = gt_show-bzdat ."ADD BY HUANGXMA 20190111 资产起息日gt_accountgl-po_number       = gt_show-ebeln ."采购凭证gt_accountgl-po_item         = gt_show-ebelp ."采购凭证项目APPEND gt_accountgl.
*  ENDIF.ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FILL_ACCOUNTAR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fill_accountar USING pu_posnr.IF gt_show-kunnr IS NOT INITIAL.
*    SELECT COUNT(*) FROM knb1
*      WHERE kunnr = gt_show-kunnr
*      AND   bukrs = gt_show-bukrs
*      AND   akont IN ( '1122010100','1122010200' ).
*    IF sy-subrc EQ 0.gt_accountreceivable-gl_account = gt_show-hkont.
*   ENDIF.gt_accountreceivable-itemno_acc = pu_posnr.gt_accountreceivable-customer   = gt_show-kunnr."客户gt_accountreceivable-pmnttrms   = gt_show-zterm."付款条件代码gt_accountreceivable-item_text  = gt_show-sgtxt.gt_accountreceivable-bline_date = gt_show-zfbdt.gt_accountreceivable-tax_code   = gt_show-mwskz ."gt_accountreceivable-bus_area   = gt_show-gsber .gt_accountreceivable-alloc_nmbr = gt_show-zuonr ."分配gt_accountreceivable-pymt_meth      = gt_show-zlsch ."付款方式gt_accountreceivable-ref_key_1      = gt_show-ref_key_1 ."付款参考 ADD 20210901 BY XJC 新增付款参考字段APPEND gt_accountreceivable.ENDIF.ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FILL_ACCOUNTAP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fill_accountap USING pu_posnr.IF gt_show-lifnr IS NOT INITIAL.
*    SELECT COUNT(*) FROM lfb1
*       WHERE lifnr = gt_show-lifnr
*       AND   bukrs = gt_show-bukrs
*       AND   akont IN ( '2202010100','2202010200' ).
*    IF sy-subrc EQ 0.gt_accountpayable-gl_account = gt_show-hkont.
*    ENDIF.gt_accountpayable-itemno_acc = pu_posnr.gt_accountpayable-vendor_no  = gt_show-lifnr."供应商gt_accountpayable-item_text  = gt_show-sgtxt.gt_accountpayable-bline_date = gt_show-zfbdt."gt_accountpayable-pmnttrms   = gt_show-zterm."gt_accountpayable-profit_ctr = gt_show-prctr."gt_accountpayable-tax_code   = gt_show-mwskz ."gt_accountpayable-bus_area   = gt_show-gsber .gt_accountpayable-pymt_meth  = gt_show-zlsch ."付款方式gt_accountpayable-alloc_nmbr = gt_show-zuonr ."分配APPEND gt_accountpayable.ENDIF.ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FILL_CURRENCYAMOUNT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fill_currencyamount USING pu_posnr.DATA: lv_amt_base TYPE dmbtr.**  IF GT_SHOW-HKONT(4) = '2221'  AND GT_TBSL-KOART EQ 'S'."税务项目  GT_SHOW-XMWST = 'X'
**    PERFORM GET_AMT_BASE CHANGING LV_AMT_BASE.
**    GT_CURRENCYAMOUNT-AMT_BASE = LV_AMT_BASE."基本金额
**  ENDIF .CLEAR gt_currencyamount.
*  IF GT_SHOW-HKONT = '2221010100'  OR GT_SHOW-HKONT = '2221010600'
*    OR GT_SHOW-HKONT = '2221011100' OR GT_SHOW-HKONT = '2221050000'.
*
*    PERFORM GET_AMT_BASE CHANGING LV_AMT_BASE.
*
*    GT_CURRENCYAMOUNT-AMT_BASE =  LV_AMT_BASE.
*
*
*  ENDIF.gt_currencyamount-itemno_acc = pu_posnr.gt_currencyamount-currency = gt_show-waers.gt_currencyamount-amt_doccur = gt_show-wrbtr  ."金额*  GT_CURRENCYAMOUNT-DISC_BASE = GT_SHOW-SKFBT  ."可用来计算现金折扣的符合条件金额(以凭证货币形式)APPEND gt_currencyamount.IF gt_show-waers NE t001-waers AND gt_show-dmbtr IS NOT INITIAL .
*   外币gt_currencyamount-itemno_acc = pu_posnr.gt_currencyamount-curr_type = '10' .gt_currencyamount-currency = t001-waers .gt_currencyamount-amt_doccur = gt_show-dmbtr ."金额APPEND gt_currencyamount.CLEAR gt_currencyamount.ENDIF .ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FILL_ACCOUNTTAX
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fill_accounttax USING pu_posnr.CLEAR gt_accounttax.gt_accounttax-itemno_acc = pu_posnr.gt_accounttax-gl_account = gt_show-hkont.gt_accounttax-tax_code   = gt_show-mwskz.gt_accounttax-direct_tax = 'X'.APPEND gt_accounttax.ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FILL_EXTENSION2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fill_extension2 USING pu_posnr .DATA ls_00021 TYPE zacc_document.
*ls_00021-posnr = pu_posnr. "凭证行项目ls_00021-bschl = gt_show-bschl. "记账码ls_00021-umskz = gt_show-umskz. "特殊总账标示
*  LS_00021-NUMPG = GT_SHOW-NUMPG .ls_00021-rstgr = gt_show-rstgr .ls_00021-anbwa = gt_show-newbw .ls_00021-xmwst = gt_show-xmwst .ls_00021-xnegp = gt_show-neg_postng .TRANSLATE ls_00021-xnegp TO UPPER CASE.gt_extension2-structure  = 'ZACC_DOCUMENT'.gt_extension2-valuepart1 = ls_00021.APPEND gt_extension2.ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FILL_CRITERIA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fill_criteria USING pu_posnr .FIELD-SYMBOLS: <copa> .IF gt_show-hkont(4) EQ '6001' OR gt_show-hkont(4) EQ '6004'OR gt_show-hkont(4) EQ '6051' OR gt_show-hkont(4) EQ '6402'.LOOP AT gt_copa_field .ASSIGN COMPONENT gt_copa_field-fname OF STRUCTURE gt_show TO <copa> .IF sy-subrc EQ 0 AND <copa> IS NOT INITIAL .gt_criteria-itemno_acc = pu_posnr .gt_criteria-fieldname = gt_copa_field-fname .gt_criteria-character = <copa>  .APPEND gt_criteria .ENDIF .ENDLOOP .gt_criteria-itemno_acc = pu_posnr .gt_criteria-fieldname = 'PRCTR'.gt_criteria-character = gt_show-prctr  .APPEND gt_criteria .ENDIF .
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  CHECK_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check_data .DATA: lv_err TYPE c,ls_msg TYPE esp1_message_wa_type.AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'ID 'BUKRS' FIELD gt_show-bukrsID 'ACTVT' FIELD '03'.IF sy-subrc <> 0.ls_msg-msgid = '00' .ls_msg-msgty = 'E' .ls_msg-msgno = '001' .ls_msg-msgv1 =  '你没有选择这个公司代码' && gt_show-bukrs && '的权限'.APPEND ls_msg TO gt_show-t_msg .ENDIF.IF lv_msg_total IS NOT INITIAL.ls_msg-msgid = '00' .ls_msg-msgty = 'E' .ls_msg-msgno = '001' .ls_msg-msgv1 = lv_msg_total .APPEND ls_msg TO gt_show-t_msg .ENDIF.CLEAR: lv_msg_total.IF gt_show-bukrs IS INITIAL .ls_msg-msgid = '00' .ls_msg-msgty = 'E' .ls_msg-msgno = '001' .ls_msg-msgv1 = '公司代码为空' .APPEND ls_msg TO gt_show-t_msg .ENDIF .IF gt_show-blart IS INITIAL .ls_msg-msgid = '00' .ls_msg-msgty = 'E' .ls_msg-msgno = '001' .ls_msg-msgv1 = '凭证类型为空' .APPEND ls_msg TO gt_show-t_msg .ENDIF .IF gt_show-bldat IS INITIAL .ls_msg-msgid = '00' .ls_msg-msgty = 'E' .ls_msg-msgno = '001' .ls_msg-msgv1 = '发票日期为空' .APPEND ls_msg TO gt_show-t_msg .ENDIF .IF gt_show-budat IS INITIAL .ls_msg-msgid = '00' .ls_msg-msgty = 'E' .ls_msg-msgno = '001' .ls_msg-msgv1 = '过帐日期为空' .APPEND ls_msg TO gt_show-t_msg .ENDIF .IF gt_show-waers IS INITIAL .ls_msg-msgid = '00' .ls_msg-msgty = 'E' .ls_msg-msgno = '001' .ls_msg-msgv1 = '货币码为空' .APPEND ls_msg TO gt_show-t_msg .ENDIF .IF gt_show-bktxt IS INITIAL .ls_msg-msgid = '00' .ls_msg-msgty = 'E' .ls_msg-msgno = '001' .ls_msg-msgv1 = '凭证抬头文本为空' .APPEND ls_msg TO gt_show-t_msg .ENDIF .IF gt_show-bschl IS INITIAL .ls_msg-msgid = '00' .ls_msg-msgty = 'E' .ls_msg-msgno = '001' .ls_msg-msgv1 = '过账码为空' .APPEND ls_msg TO gt_show-t_msg .ENDIF .IF gt_show-wrbtr IS INITIAL .ls_msg-msgid = '00' .ls_msg-msgty = 'E' .ls_msg-msgno = '001' .ls_msg-msgv1 = '金额为空' .APPEND ls_msg TO gt_show-t_msg .ENDIF .READ TABLE gt_tbsl WITH KEY bschl = gt_show-bschl .CASE gt_tbsl-koart .WHEN 'S' .IF gt_show-hkont IS INITIAL .ls_msg-msgid = '00' .ls_msg-msgty = 'E' .ls_msg-msgno = '001' .ls_msg-msgv1 = '科目编码为空' .APPEND ls_msg TO gt_show-t_msg .ENDIF .WHEN 'D'.IF gt_show-kunnr IS INITIAL .ls_msg-msgid = '00' .ls_msg-msgty = 'E' .ls_msg-msgno = '001' .ls_msg-msgv1 = '客户编码为空' .APPEND ls_msg TO gt_show-t_msg .ENDIF .IF gt_show-zterm IS NOT INITIAL ."付款条件校验 just d && kSELECT COUNT(*) FROM t052WHERE zterm = gt_show-ztermAND   zterm LIKE 'Z%'.IF sy-subrc NE 0.ls_msg-msgid = '00' .ls_msg-msgty = 'E' .ls_msg-msgno = '001' .ls_msg-msgv1 = '付款条件输入有误' .APPEND ls_msg TO gt_show-t_msg .ENDIF.ENDIF.WHEN 'K' .IF gt_show-lifnr IS INITIAL .ls_msg-msgid = '00' .ls_msg-msgty = 'E' .ls_msg-msgno = '001' .ls_msg-msgv1 = '科目编码为空' .APPEND ls_msg TO gt_show-t_msg .ENDIF .IF gt_show-zterm IS NOT INITIAL ."付款条件校验SELECT COUNT(*) FROM t052WHERE zterm = gt_show-ztermAND   zterm LIKE 'Y%'.IF sy-subrc NE 0.ls_msg-msgid = '00' .ls_msg-msgty = 'E' .ls_msg-msgno = '001' .ls_msg-msgv1 = '付款条件输入有误' .APPEND ls_msg TO gt_show-t_msg .ENDIF.ENDIF.WHEN 'A' .WHEN 'M' .ENDCASE .FIELD-SYMBOLS:  <copa> .
*注释 BY HUANGXMA 20180328
*  IF GT_SHOW-HKONT(4) EQ '6001' OR GT_SHOW-HKONT(4) EQ '6004'
*    OR GT_SHOW-HKONT(4) EQ '6051' OR GT_SHOW-HKONT(4) EQ '6402'.
*    LV_ERR = 'X' .
*    LOOP AT GT_COPA_FIELD .
*
*      ASSIGN COMPONENT GT_COPA_FIELD-FNAME OF STRUCTURE GT_SHOW TO <COPA> .
*      IF SY-SUBRC EQ 0 .
*        IF <COPA> IS NOT INITIAL .
*          CLEAR LV_ERR .
*        ENDIF .
*      ENDIF .
*
*    ENDLOOP .
*
*    IF LV_ERR EQ 'X' .
*      LS_MSG-MSGID = '00' .
*      LS_MSG-MSGTY = 'E' .
*      LS_MSG-MSGNO = '001' .
*      LS_MSG-MSGV1 = 'COPA特性值为空' .
*      COLLECT LS_MSG INTO GT_SHOW-T_MSG .
*    ENDIF .
*  ENDIF .ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  CONVERSION_EXIT_ALPHA_INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM conversion_exit_alpha_input CHANGING pc_alpha .CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput  = pc_alphaIMPORTINGoutput = pc_alpha.ENDFORM.
FORM conversion_exit_alpha_input2 CHANGING pc_alpha .CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'EXPORTINGinput  = pc_alphaIMPORTINGoutput = pc_alpha
*    EXCEPTIONS
*     LENGTH_ERROR       = 1
*     OTHERS = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  CHECK_ITEM
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GT_SHOW_BUDAT  text
*      <--P_LV_BUDAT  text
*      <--P_LS_MSG  text
*----------------------------------------------------------------------*
FORM check_item  TABLES  pt_msg LIKE lt_msgUSING p1 p_numberCHANGING p2  ps_msg LIKE ls_msg.IF p2 IS INITIAL .p2 = p1 .ELSE .IF p2 NE p1 .CLEAR ps_msg .PERFORM convert_to_esp1_msg USING 'ZDEV' 'E' p_number gt_show-id space space space CHANGING ps_msg .COLLECT ps_msg INTO pt_msg .ENDIF .ENDIF .
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  CONVERT_TO_ESP1_MSG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM  convert_to_esp1_msg USING pu_msgid pu_msgty pu_msgnopu_msgv1 pu_msgv2 pu_msgv3 pu_msgv4CHANGING pc_msg TYPE esp1_message_wa_type .CLEAR pc_msg .pc_msg-msgid = pu_msgid .pc_msg-msgty = pu_msgty.pc_msg-msgno = pu_msgno.pc_msg-msgv1 = pu_msgv1.pc_msg-msgv2 = pu_msgv2.pc_msg-msgv3 = pu_msgv3.pc_msg-msgv4 = pu_msgv4.ENDFORM.                   " CONVERT_TO_ESP1_MSG*&---------------------------------------------------------------------*
*&      Form  C14Z_MESSAGES_SHOW_AS_POPUP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM c14z_messages_show_as_popup TABLES it_msg TYPE esp1_message_tab_type .CHECK it_msg[] IS NOT INITIAL .CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
*   EXPORTING
*     I_MSGID             =
*     I_MSGTY             =
*     I_MSGNO             =
*     I_MSGV1             =
*     I_MSGV2             =
*     I_MSGV3             =
*     I_MSGV4             =
*     I_LINENO            =TABLESi_message_tab = it_msg.ENDFORM.                    " C14Z_MESSAGES_SHOW_AS_POPUP*&---------------------------------------------------------------------*
*&      Form  DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM download_template USING pu_filename pu_objid.
*& 下载模版DATA: ls_objdata LIKE wwwdatatab.DATA: lv_filename TYPE string,lv_fullpath TYPE string  VALUE 'C:\',lv_path     TYPE  string VALUE 'C:\'.DATA: lv_errtxt TYPE string.DATA: lv_destination LIKE rlgrap-filename.DATA: lv_rc LIKE sy-subrc.DATA: lv_fileup LIKE rlgrap-filename.lv_filename = pu_filename .
*& 调用保存对话框CALL METHOD cl_gui_frontend_services=>file_save_dialogEXPORTINGdefault_extension    = 'xls'default_file_name    = lv_filenameinitial_directory    = 'C:\'CHANGINGfilename             = lv_filenamepath                 = lv_pathfullpath             = lv_fullpathEXCEPTIONScntl_error           = 1error_no_gui         = 2not_supported_by_gui = 3OTHERS               = 4.IF sy-subrc NE 0.MESSAGE '不能打开EXCEL' TYPE 'E'.ENDIF.CHECK lv_fullpath IS NOT INITIAL .lv_fileup = lv_fullpath.ls_objdata-relid = 'MI' .ls_objdata-objid = pu_objid .lv_destination = lv_fullpath .CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'EXPORTINGkey         = ls_objdatadestination = lv_destinationIMPORTINGrc          = lv_rc.IF lv_rc NE 0.CONCATENATE '模板文件:' ls_objdata-objid '下载失败' INTO lv_errtxt.MESSAGE lv_errtxt TYPE 'E'.ELSE.MESSAGE '模版下载成功' TYPE 'S'.ENDIF.ENDFORM.                    " DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
*& Form GET_AMT_BASE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*      <--P_LV_AMT_BASE  text
*&---------------------------------------------------------------------*
FORM get_amt_base  CHANGING pv_amt_base TYPE dmbtr.CLEAR: pv_amt_base.
** Get condition recordSELECT SINGLE knumhFROM a003INTO @DATA(lv_knumh)WHERE kappl = 'TX'AND aland = 'CN'AND mwskz = @gt_show-mwskz.IF sy-subrc = 0.
** Get condition record valueSELECT SINGLE kbetrINTO @DATA(lv_kbetr)FROM konpWHERE knumh = @lv_knumh.IF lv_kbetr > 0.pv_amt_base = gt_show-wrbtr / lv_kbetr * 1000.ENDIF.ENDIF.ENDFORM.

增强部分:

1 ZACC_DOCUMENT

POSNR 1 类型 POSNR NUMC 6 0 0 销售和分销凭证的项目号
BSCHL 1 类型 BSCHL CHAR 2 0 0 过账代码
UMSKZ 1 类型 UMSKZ CHAR 1 0 0 特殊总账标识
RSTGR 1 类型 RSTGR CHAR 3 0 0 付款原因代码
NUMPG 1 类型 J_1ANOPG NUMC 3 0 0 发票的页数 
ZZXJLLM 1 类型 ZEXJLLM CHAR 3 0 0 现金流量码 
ANBWA 1 类型 ANBWA CHAR 3 0 0 资产交易类型
XMWST 1 类型 XMWST CHAR 1 0 0 自动计算税金
XNEGP 1 类型 XNEGP CHAR 1 0 0 标识:负过账
WBZOG 1 类型 WBZOG CHAR 30 0 0 汇票付款人 

2 BADI:ACC_DOCUMENT

 

  METHOD if_ex_acc_document~change.DATA: wa_extension   TYPE bapiparex,ext_value(960) TYPE c,wa_accit       TYPE accit,l_ref          TYPE REF TO data.FIELD-SYMBOLS: <l_struc> TYPE any,<l_field> TYPE any.SORT c_extension2 BY structure.LOOP AT c_extension2 INTO wa_extension.AT NEW structure.CREATE DATA l_ref TYPE (wa_extension-structure).ASSIGN l_ref->* TO <l_struc>.ENDAT.CONCATENATE wa_extension-valuepart1 wa_extension-valuepart2wa_extension-valuepart3 wa_extension-valuepart4INTO ext_value.MOVE ext_value TO <l_struc>.ASSIGN COMPONENT 'POSNR' OF STRUCTURE <l_struc> TO <l_field>.READ TABLE c_accit WITH KEY posnr = <l_field>       INTO wa_accit.IF sy-subrc IS INITIAL.MOVE-CORRESPONDING <l_struc> TO wa_accit.MODIFY c_accit FROM wa_accit INDEX sy-tabix.ENDIF.ENDLOOP.*    DATA:it_item TYPE TABLE OF zsfi_fk_itm2.
*
*    IMPORT var1 to it_item FROM MEMORY ID 'ZFI_FK_POST'.
*if it_item[] is NOT INITIAL .
*  endif.ENDMETHOD.

三 批导模板

https://download.csdn.net/download/java_zhong1990/88466460

SAP_ABAP_FI_BAPI清单案例教程——采购付款/销售收款_BAPI_ACC_DOCUMENT_POST_F-02相关推荐

  1. 金蝶K3案例教程采购管理前台操作

    目录 新增供应商 新增采购单价资料 查询采购申请 生成采购订单 查询采购订单 变更采购订单 生成收料通知单 查询收料通知单 新增供应商 案例 erplabs整机公司以下供应商,在ERP新增供应商资料 ...

  2. 金蝶K3案例教程采购管理后台配置

    目录 采购系统选项 采购业务流程设计 单据设置 打印控制 采购价格参数设置 付款条件 采购系统选项 案例 erplabs整机公司要求采购订单数量不能超过采购申请数量:要求采购订单入库数量不允许超过订单 ...

  3. 用友U8案例教程采购报表

    采购成本分析 用户可根据发票,对某段日期范围内的存货结算成本与参考成本.计划价进行对比分析. 路径:供应链-采购管理-报表-分析表--采购成本分析 点确定,进入下一界面 如上图,可看到采购发票数量和金 ...

  4. 用友U8案例教程采购管理后台配置

    目录 采购系统选项 采购业务流程 收发类别 采购类型 单据类型与收发类别对照表 采购期初暂估科目录入 采购期初记账 库存期初结存对账 采购系统选项 案例 erplabs整机公司要求采购订单下单时自动带 ...

  5. SAP MTO按销售订单生产核算案例教程目录

    目录 第1章 MTO实验案例介绍 *1.1 实验环境 *1.2 案例背景 *1.3 案例组织结构 *1.4 案例 MM组织结构图 *1.5 案例PP组织结构图 *1.6 案例SD组织结构图 *1.7 ...

  6. SAP案例教程STO公司间采购前台操作

    目录 新建公司间物料(部件公司) 新建公司间供应商(整机公司) 新创建公司间客户(部件公司) 创建STO公司间采购订单(整机公司) 部件公司计划相关操作 运行MRP (部件公司) 集中显示MRP清单 ...

  7. Odoo进销存(采购、销售、仓库)入门教程 - 下

    2. 进销存实务 2.1 销售产品 李逍遥接到客户苏州美尚邻里超市购买10只乐扣乐扣拉杆箱的请求后,登录系统,点击菜单 [销售->销售->报价单],点击新建,将客户设为"苏州美尚 ...

  8. 金蝶K3采购不良退货案例教程

    目录 案例介绍 显示退货前采购订单 红字外购入库单 显示退货后采购订单 后台控制设置 案例介绍 采购退货是比较常见的退回业务,其涉及采购.仓库.财务人员,包括物流和财务流两个流程. 物流主要是把在库不 ...

  9. SAP 采购合同案例教程案例介绍

    案例背景 SAP系统中框架协议(Outline Agreement)分为合同(Contract)和计划协议(Schedule agreement),合同和计划协议不但是MM模块功能也是SD销售模块的功 ...

  10. SAP 采购合同案例教程后台配置

    目录 定义编号范围 定义凭证类型 定义系统消息的属性 编辑特性 编辑类 定义批准组 定义批准代码 定义发布标识 定义批准策略 定义编号范围 路 径:IMG  ->物料管理 -> 采购-&g ...

最新文章

  1. Java生成html为pdf
  2. 详解Java反射机制
  3. C 语言和C++语言的 struct对比
  4. android 电源管理 wakelock 唤醒锁机制
  5. 模拟 hihoCoder 1177 顺子
  6. 顺序线性表 ---- ArrayList 源码解析及实现原理分析
  7. 一次频繁Full GC问题排查过程分享
  8. php 加密解密算法
  9. mobi电子书如何用Windows电脑阅读?
  10. 收银员使用的条码扫描枪如何判断好坏?
  11. 拯救阿拉德大陆--竞码编程H-20‘
  12. (白帽生存法则)常见的网站攻击方式
  13. 数学速算法_小学初中高中 数学奥数教材及习题讲解(共42册PDF)
  14. R语言计算logistic回归C指数,最详细的基于R语言的Logistic Regression(Logistic回归)源码,包括拟合优度,Recall,Precision的计算...
  15. Android仿京东、淘宝商品详情页上拉查看更多详情
  16. 电影推荐系统Sparrow Recsys源码解读
  17. 将整型数据存入字符型数据
  18. JS正则表达式断言和贪婪
  19. 使用el upload标签上传文件的几种常见使用场景(前台+后台)
  20. 强化学习(Reinforcement Learning)之策略梯度(Policy Gradient)的一点点理解以及代码的对应解释

热门文章

  1. Android学习资料下载地址
  2. 关于因数个数求解问题
  3. 如何在cocos2d里面使用动画和spritesheet 3.0 C++版
  4. 虚拟机安装Windows 8开发者预览版完全攻略
  5. 20170910_拼凑钱币_DP
  6. SpringBoot项目启动出现required a bean of type ‘XXX‘ that could not be found
  7. LeeCode_055 Jump Game
  8. 齐次定理与叠加定理(电路分析基础)
  9. 存储器加速模块MAM
  10. python字典导出到excel_Python导出postgresql的数据字典为excel