SAP-MM采购申请批导程序-BAPI_PR_CREATE
使用的函数是BAPI_PR_CREATE没使用PI_REQUISITION_CREATE。
界面

excel

整理好excel模板,使用SMW0进行模板上传

代码如下
*&---------------------------------------------------------------------* *& Report ZMMR114 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT ZMMR114. TABLES:SSCRFIELDS. TYPE-POOLS: ICON, SLIS. TYPES:BEGIN OF TY_DATA, ZHZDH TYPE CHAR5, "汇总单号 HEAD_TXT TYPE DF32S-TEXT, "抬头注释 BSART TYPE EBAN-BSART, "采购申请类型 KNTTP TYPE EBAN-KNTTP, "科目分配类别 PSTYP TYPE EBAN-PSTYP, "项目分配类别 MATNR TYPE EBAN-MATNR, "物料编码 TXZ01 TYPE EBAN-TXZ01, "短文本 MENGE TYPE EBAN-MENGE, "申请数量 MEINS TYPE EBAN-MEINS, "单位 BADAT TYPE EBAN-BADAT, "交货日期 MATKL TYPE EBAN-MATKL, "物料组 WERKS TYPE EBAN-WERKS, "工厂 LGORT TYPE EBAN-LGORT, "存储地点 EKGRP TYPE EBAN-EKGRP, "采购组 AFNAM TYPE EBAN-AFNAM, "申请人 ITEM_TXT TYPE DF32S-TEXT, "项目文本 LIFNR TYPE EBAN-LIFNR, "所需供应商 SAKTO TYPE EBKN-SAKTO, "总账科目 KOSTL TYPE EBKN-KOSTL, "成本中心 ANLN1 TYPE EBKN-ANLN1, "固定资产 AUFNR TYPE EBKN-AUFNR, "内部订单 ZPURDEP TYPE EBAN-ZPURDEP, "采购部门 ZOADJBH TYPE EBAN-ZOADJBH, "OA单据编号 BANFN TYPE EBAN-BANFN, "采购申请编号 BNFPO TYPE EBAN-BNFPO, "采购申请的项目编号 ICON TYPE ICON_D, TYPE TYPE BAPI_MTYPE, MESSAGE TYPE CHAR255, END OF TY_DATA. DATA:GT_DATA TYPE TABLE OF TY_DATA, WA_DATA TYPE TY_DATA. DATA GT_MSG TYPE BAPIRETTAB WITH HEADER LINE. ""消息框内表 DATA: C TYPE MARD-LABST. * ALV定义 DATA: WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV, IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, G_LAYOUT TYPE SLIS_LAYOUT_ALV, G_TITLE TYPE LVC_TITLE, POS TYPE I, L_FIELD TYPE SLIS_FIELDCAT_ALV, "字段列结构 L_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, "字段列内表 L_STATUS_01 TYPE SLIS_FORMNAME VALUE 'L_STATUS_01'. DEFINE ADD_COL. CLEAR wa_fieldcat. ADD 1 TO pos. wa_fieldcat-col_pos = pos. wa_fieldcat-fieldname = &1. wa_fieldcat-ref_fieldname = &2. wa_fieldcat-ref_tabname = &3. wa_fieldcat-seltext_m = &4. wa_fieldcat-tabname = &5. wa_fieldcat-do_sum = &6. wa_fieldcat-input = &7. wa_fieldcat-edit = &8. wa_fieldcat-checkbox = &9. APPEND wa_fieldcat TO it_fieldcat. END-OF-DEFINITION. "选择屏幕" SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001. PARAMETERS: P_FILE TYPE RLGRAP-FILENAME. SELECTION-SCREEN END OF BLOCK BLK1. SELECTION-SCREEN FUNCTION KEY 1. "下载模板按钮 INITIALIZATION. MOVE '下载上传模板' TO SSCRFIELDS-FUNCTXT_01. "给按钮文本赋值 AT SELECTION-SCREEN. CASE SSCRFIELDS-UCOMM. WHEN 'FC01'. PERFORM FRM_DOWN_TEMPLATE."下载导入模板 ENDCASE. AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE. PERFORM FRM_UP_TEMPLATE."上传模板 AT SELECTION-SCREEN OUTPUT. START-OF-SELECTION. CALL FUNCTION 'ZIT001'. IF NOT P_FILE IS INITIAL. PERFORM GET_XLS_DATA TABLES GT_DATA USING P_FILE. "获取XLS文件数据到内表 PERFORM FRM_CHECKDATA. PERFORM FRM_DISPLAY. ENDIF. FORM FRM_DOWN_TEMPLATE."下载导入模板 CALL METHOD ZCL_BC_EXCEL=>DOWNLOAD_TEMPLATE EXPORTING NAME_OF_TEMPLATE = '期初采购申请导入模板' IV_RELID = 'MI' IV_OBJID = 'ZMMR114' * IMPORTING * RV_FILEPATH = * EXCEPTIONS * DOWNLOAD_ERROR = 1 * OTHERS = 2 . IF SY-SUBRC <> 0. * Implement suitable error handling here ENDIF. ENDFORM. FORM FRM_UP_TEMPLATE . CALL FUNCTION 'WS_FILENAME_GET' EXPORTING DEF_FILENAME = P_FILE MASK = ',*.xlsx,*.XLSX,*.xls,*.XLS,*.txt,*.TXT' *'',*.xls,*.XLS.'如果读入txt文件,在后边就需要用函数 MODE = 'O' TITLE = 'File Name' IMPORTING FILENAME = P_FILE EXCEPTIONS INV_WINSYS = 1 NO_BATCH = 2 SELECTION_CANCEL = 3 SELECTION_ERROR = 4 OTHERS = 5. ENDFORM. FORM GET_XLS_DATA TABLES P_DATA USING P_FILE1 TYPE RLGRAP-FILENAME. DATA:IT_RAW TYPE TRUXS_T_TEXT_DATA. CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP' EXPORTING I_LINE_HEADER = 'X' "X表示带抬头行的EXCEL的抬头行不传进内表,否则EXCEL不要带抬头 I_TAB_RAW_DATA = IT_RAW " WORK TABLE I_FILENAME = P_FILE1 TABLES I_TAB_CONVERTED_DATA = P_DATA[] "ACTUAL DATA EXCEPTIONS CONVERSION_FAILED = 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. LOOP AT GT_DATA INTO WA_DATA. WA_DATA-ICON = ICON_LIGHT_OUT. MODIFY GT_DATA FROM WA_DATA. CLEAR:WA_DATA. ENDLOOP. SORT GT_DATA BY ZHZDH . IF GT_DATA[] IS INITIAL. MESSAGE '上传文件为空' TYPE 'S'. STOP. ENDIF. ENDFORM. " GET_XLS_DATA FORM FRM_CHECKDATA. CLEAR: WA_DATA. LOOP AT GT_DATA INTO WA_DATA. IF WA_DATA-KNTTP IS INITIAL. IF WA_DATA-MATNR IS INITIAL. WA_DATA-ICON = ICON_RED_LIGHT. WA_DATA-MESSAGE = '物料编码必填'. MODIFY GT_DATA FROM WA_DATA. CONTINUE. ENDIF. ENDIF. IF WA_DATA-MENGE IS INITIAL. WA_DATA-ICON = ICON_RED_LIGHT. WA_DATA-MESSAGE = '需求数量必填'. MODIFY GT_DATA FROM WA_DATA. CONTINUE. ENDIF. IF WA_DATA-BADAT < '19000101'. WA_DATA-ICON = ICON_RED_LIGHT. WA_DATA-MESSAGE = '交货日期必填'. MODIFY GT_DATA FROM WA_DATA. CONTINUE. ENDIF. IF WA_DATA-WERKS IS INITIAL. WA_DATA-ICON = ICON_RED_LIGHT. WA_DATA-MESSAGE = '工厂必填'. MODIFY GT_DATA FROM WA_DATA. CONTINUE. ENDIF. IF WA_DATA-ZPURDEP IS INITIAL. WA_DATA-ICON = ICON_RED_LIGHT. WA_DATA-MESSAGE = '申请部门必填'. MODIFY GT_DATA FROM WA_DATA. CONTINUE. ENDIF. IF WA_DATA-ZOADJBH IS INITIAL. WA_DATA-ICON = ICON_RED_LIGHT. WA_DATA-MESSAGE = 'OA单据编号必填'. MODIFY GT_DATA FROM WA_DATA. CONTINUE. ENDIF. "物料代码工厂下是否存在 IF WA_DATA-MATNR IS NOT INITIAL. CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' EXPORTING INPUT = WA_DATA-MATNR IMPORTING OUTPUT = WA_DATA-MATNR EXCEPTIONS LENGTH_ERROR = 1 OTHERS = 2. IF SY-SUBRC <> 0. ENDIF. SELECT SINGLE MATNR,WERKS FROM MARC INTO @DATA(LS_MARC) WHERE MATNR = @WA_DATA-MATNR AND WERKS = @WA_DATA-WERKS. IF SY-SUBRC <> 0. WA_DATA-ICON = ICON_RED_LIGHT. WA_DATA-MESSAGE = | 物料代码{ WA_DATA-MATNR }在工厂{ WA_DATA-WERKS }下不存在!| . MODIFY GT_DATA FROM WA_DATA. CONTINUE. ENDIF. ENDIF. IF WA_DATA-KNTTP = 'K' . IF WA_DATA-SAKTO IS INITIAL. WA_DATA-MESSAGE = |科目分配类别为K时总账科目必填!| . CONTINUE. ENDIF. ENDIF. IF WA_DATA-AFNAM IS INITIAL. WA_DATA-ICON = ICON_RED_LIGHT. WA_DATA-MESSAGE = '申请人必填'. MODIFY GT_DATA FROM WA_DATA. CONTINUE. ENDIF. IF WA_DATA-EKGRP IS INITIAL. WA_DATA-ICON = ICON_RED_LIGHT. WA_DATA-MESSAGE = '采购组织必填'. MODIFY GT_DATA FROM WA_DATA. CONTINUE. ENDIF. IF WA_DATA-MEINS IS INITIAL. WA_DATA-ICON = ICON_RED_LIGHT. WA_DATA-MESSAGE = '单位必填'. MODIFY GT_DATA FROM WA_DATA. CONTINUE. ENDIF. IF WA_DATA-ZHZDH IS INITIAL. WA_DATA-ICON = ICON_RED_LIGHT. WA_DATA-MESSAGE = '申请分隔号必填'. MODIFY GT_DATA FROM WA_DATA. CONTINUE. ENDIF. CLEAR:WA_DATA. ENDLOOP. ENDFORM. FORM FRM_DISPLAY . CLEAR: IT_FIELDCAT, WA_FIELDCAT. CLEAR G_LAYOUT. ADD_COL 'ICON' SPACE SPACE '状态' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'MESSAGE' SPACE SPACE '处理消息' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'BANFN' SPACE SPACE '采购申请号' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'ZHZDH' SPACE SPACE '汇总单号' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'BSART' SPACE SPACE '采购申请类型' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'KNTTP' SPACE SPACE '科目分配类别' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'PSTYP' SPACE SPACE '项目分配类别' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'MATNR' SPACE SPACE '物料编码' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'TXZ01' SPACE SPACE '物料描述' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'MENGE' SPACE SPACE '申请数量' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'MEINS' SPACE SPACE '单位' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'BADAT' SPACE SPACE '交货日期' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'WERKS' SPACE SPACE '工厂' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'LGORT' SPACE SPACE '存储地点' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'EKGRP' SPACE SPACE '采购组' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'AFNAM' SPACE SPACE '申请人' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'ITEM_TXT' SPACE SPACE '项目文本' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'LIFNR' SPACE SPACE '所需供应商' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'SAKTO' SPACE SPACE '总账科目' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'KOSTL' SPACE SPACE '成本中心' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'ANLN1' SPACE SPACE '固定资产' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'AUFNR' SPACE SPACE '内部订单' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'MATKL' SPACE SPACE '物料组' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'ZPURDEP' SPACE SPACE '采购部门' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'ZOADJBH' SPACE SPACE 'OA单据编号' 'GT_DATA' SPACE SPACE SPACE SPACE. ADD_COL 'BNFPO' SPACE SPACE '行号' 'GT_DATA' SPACE SPACE SPACE SPACE. G_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. G_LAYOUT-ZEBRA = 'X'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_CALLBACK_PROGRAM = SY-REPID I_CALLBACK_PF_STATUS_SET = 'L_STATUS100' I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND' IS_LAYOUT = G_LAYOUT IT_FIELDCAT = IT_FIELDCAT TABLES T_OUTTAB = GT_DATA EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. IF SY-SUBRC <> 0. ENDIF. ENDFORM. " FRM_DISPLAY FORM L_STATUS100 USING EXTAB TYPE SLIS_T_EXTAB. SET PF-STATUS 'STANDARD_099'. ENDFORM. "L_STATUS100 "ALV处理事件 FORM FRM_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM RS_SELFIELD TYPE SLIS_SELFIELD. DATA: REF TYPE REF TO CL_GUI_ALV_GRID. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING E_GRID = REF. CALL METHOD REF->CHECK_CHANGED_DATA. "响应事件 CASE R_UCOMM. * WHEN '&IC1'. * READ TABLE GT_DATA INTO WA_DATA INDEX RS_SELFIELD-TABINDEX. * "单击时触发 * IF RS_SELFIELD-FIELDNAME = 'SEL'. * * IF WA_DATA-SEL = 'X'. * WA_DATA-SEL = ''. * ELSE. * WA_DATA-SEL = 'X'. * ENDIF. * MODIFY GT_DATA FROM WA_DATA. * ENDIF. * WHEN 'ALL'. * LOOP AT GT_DATA INTO WA_DATA WHERE SEL = ''. * WA_DATA-SEL = 'X'. * MODIFY GT_DATA FROM WA_DATA. * CLEAR WA_DATA. * ENDLOOP. * WHEN 'NOALL'. * LOOP AT GT_DATA INTO WA_DATA WHERE SEL = 'X'. * WA_DATA-SEL = ''. * MODIFY GT_DATA FROM WA_DATA. * CLEAR WA_DATA. * ENDLOOP. WHEN 'SCRAP'. PERFORM SAVE_DATA. ENDCASE. RS_SELFIELD-REFRESH = 'X'. ENDFORM."FRM_USER_COMMAND FORM SAVE_DATA. READ TABLE GT_DATA INTO WA_DATA WITH KEY ICON = ICON_RED_LIGHT. IF SY-SUBRC = 0. MESSAGE | 导入数据中存在不完整,请检查数据!| TYPE 'S' DISPLAY LIKE 'E'. RETURN. ENDIF. *-- 定义 DATA:LS_MESSAGE TYPE ZTCMS008-ZMESSAGE. DATA: LT_EXT TYPE TABLE OF BAPIPAREX, LS_EXT TYPE BAPIPAREX, LS_TE TYPE BAPI_TE_MEREQITEM. "<— 增强结构 DATA:LT_EXTX TYPE TABLE OF BAPIPAREX, LS_EXTX TYPE BAPIPAREX, LS_TEX TYPE BAPI_TE_MEREQITEMX. "<— 增强结构更新 DATA: C_MATERIAL TYPE BAPIEBANC-MATERIAL. DATA: C_LIFNR TYPE BAPIEBANC-DES_VENDOR. DATA: I_COUNT TYPE I VALUE 10. DATA: I_COUNT_KM TYPE I VALUE 1. DATA:L_ERROR TYPE REF TO CX_SY_OPEN_SQL_DB. DATA:LV_MSEHI TYPE T006A-MSEHI. DATA:LV_BANFN TYPE EBAN-BANFN. "定义变量 DATA:LV_BNFPO TYPE EBAN-BNFPO. "定义变量 DATA:LS_PRITEM TYPE BAPIMEREQITEMIMP. "定义工作区 DATA:LS_PRITEMX TYPE BAPIMEREQITEMX. "定义工作区 DATA:LT_PRITEM TYPE TABLE OF BAPIMEREQITEMIMP. "定义内表 DATA:LT_PRITEMX TYPE TABLE OF BAPIMEREQITEMX. "定义内表 DATA:LS_PRITEMTEXT TYPE BAPIMEREQITEMTEXT. "行文本定义内表 DATA:LS_PRHEADERTEXT TYPE BAPIMEREQHEADTEXT. "行文本定义内表 DATA:LT_PRITEMTEXT TYPE TABLE OF BAPIMEREQITEMTEXT. "定义内表 DATA:LT_PRHEADERTEXT TYPE TABLE OF BAPIMEREQHEADTEXT. "定义内表 DATA:LS_HEAD TYPE BAPIMEREQHEADER. "定义工作区 DATA:LS_HEADX TYPE BAPIMEREQHEADERX. "定义工作区 DATA:LT_RETURN TYPE TABLE OF BAPIRET2 WITH HEADER LINE. "定义内表 DATA:LS_PRACCOUNT TYPE BAPIMEREQACCOUNT. "定义工作区 DATA:LS_PRACCOUNTX TYPE BAPIMEREQACCOUNTX. "定义工作区 DATA:LT_PRACCOUNT TYPE TABLE OF BAPIMEREQACCOUNT. "定义内表 DATA:LT_PRACCOUNTX TYPE TABLE OF BAPIMEREQACCOUNTX. "定义内表 DATA:LV_STRING TYPE STRING. DATA:LV_MESSAGE TYPE STRING. DESCRIBE TABLE GT_DATA LINES DATA(LV_LINES). LOOP AT GT_DATA ASSIGNING FIELD-SYMBOL(<FS01>) GROUP BY ( ZHZDH = <FS01>-ZHZDH ). *-- 显示导入进度 LV_STRING = '导入进度' && SY-TABIX && '/' && LV_LINES. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING PERCENTAGE = SY-TABIX TEXT = LV_STRING. LOOP AT GT_DATA ASSIGNING FIELD-SYMBOL(<GRP01>) WHERE ZHZDH = <FS01>-ZHZDH .
I_COUNT = I_COUNT + 10. "抬头数据 LS_HEAD-PR_TYPE = <GRP01>-BSART. "直接给BAPI入参赋值-采购申请类型 LS_HEADX-PR_TYPE = 'X'. "直接给BAPI入参赋值-采购申请类型-标记 " 明细行项目数据 LS_PRITEM-PREQ_ITEM = I_COUNT. "直接给BAPI入参赋值-采购申请类型行项目号 * IF WA_ZTCMS008-ERNAM IS NOT INITIAL. * LS_PRITEM-PREQ_NAME = WA_ZTCMS008-ERNAM. "直接给BAPI入参赋值-采购申请创建人取系统ID * ENDIF. LS_PRITEM-PREQ_NAME = <GRP01>-AFNAM. "申请人 IF <GRP01>-MATNR IS NOT INITIAL. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = <GRP01>-MATNR IMPORTING OUTPUT = C_MATERIAL. LS_PRITEM-MATERIAL = C_MATERIAL. "物料 ELSE. LS_PRITEM-MATERIAL = ''. ENDIF. IF <GRP01>-WERKS IS NOT INITIAL. LS_PRITEM-PLANT = <GRP01>-WERKS. ELSE. LS_PRITEM-PLANT = <GRP01>-WERKS. "直接给BAPI入参赋值-工厂 ENDIF. LS_PRITEM-STORE_LOC = <GRP01>-LGORT."存储地点 LS_PRITEM-QUANTITY = <GRP01>-MENGE. "数量 "单位内外码转换 CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT' EXPORTING INPUT = <GRP01>-MEINS "外码 LANGUAGE = SY-LANGU IMPORTING OUTPUT = LV_MSEHI. "内码 LS_PRITEM-UNIT = LV_MSEHI. "单位 LS_PRITEM-DELIV_DATE = <GRP01>-BADAT. "交货日期 * LS_PRITEM-PREQ_DATE = <GRP01>-ERDAT. "需求日期 LS_PRITEM-SHORT_TEXT = <GRP01>-TXZ01. "文本 LS_PRITEM-PUR_GROUP = <GRP01>-EKGRP. "直接给BAPI入参赋值-采购组 LS_PRITEM-MATL_GROUP = <GRP01>-MATKL. "物料组 LS_PRITEM-DEL_DATCAT_EXT = 'D'. "交货日期种类 LS_PRITEM-ACCTASSCAT = <GRP01>-KNTTP. "直接给BAPI入参赋值-科目分配类别 LS_PRITEM-ITEM_CAT = <GRP01>-PSTYP."项目分配类别 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = <GRP01>-LIFNR IMPORTING OUTPUT = C_LIFNR. LS_PRITEM-DES_VENDOR = C_LIFNR."所需供应商 APPEND LS_PRITEM TO LT_PRITEM. "将工作区ls_pritem赋值给内表lt_pritem LS_PRITEMX-PREQ_ITEM = I_COUNT. "直接给BAPI入参赋值-标记 * LS_PRITEMX-ERNAM = 'X'. "直接给BAPI入参赋值-标记 LS_PRITEMX-MATERIAL = 'X'. "直接给BAPI入参赋值-标记 LS_PRITEMX-PREQ_NAME = 'X'. "直接给BAPI入参赋值-标记 LS_PRITEMX-PLANT = 'X'. "直接给BAPI入参赋值-标记 LS_PRITEMX-STORE_LOC = 'X'. "直接给BAPI入参赋值-标记 LS_PRITEMX-QUANTITY = 'X'. "直接给BAPI入参赋值-标记 LS_PRITEMX-UNIT = 'X'. "直接给BAPI入参赋值-标记 LS_PRITEMX-DELIV_DATE = 'X'. "直接给BAPI入参赋值-标记 LS_PRITEMX-SHORT_TEXT = 'X'. "直接给BAPI入参赋值-标记 LS_PRITEMX-PUR_GROUP = 'X'. "直接给BAPI入参赋值-标记 LS_PRITEMX-MATL_GROUP = 'X'. "直接给BAPI入参赋值-标记 LS_PRITEMX-DEL_DATCAT_EXT = 'X'. "直接给BAPI入参赋值-标记 LS_PRITEMX-ACCTASSCAT = 'X'. "直接给BAPI入参赋值-标记 LS_PRITEMX-ITEM_CAT = 'X'. "直接给BAPI入参赋值-标记 LS_PRITEMX-DES_VENDOR = 'X'. "直接给BAPI入参赋值-标记 APPEND LS_PRITEMX TO LT_PRITEMX. "将工作区ls_pritemx赋值给内表lt_pritemx "行项目文本 LS_PRITEMTEXT-PREQ_ITEM = I_COUNT. LS_PRITEMTEXT-TEXT_ID = 'B01'. LS_PRITEMTEXT-TEXT_LINE = <GRP01>-ITEM_TXT. APPEND LS_PRITEMTEXT TO LT_PRITEMTEXT. "科目分配 LS_PRACCOUNT-PREQ_ITEM = I_COUNT. "直接给BAPI入参赋值-采购申请类型行项目号 LS_PRACCOUNT-SERIAL_NO = I_COUNT_KM. "直接给BAPI入参赋值-科目分配的序号 LS_PRACCOUNT-GL_ACCOUNT = |{ <GRP01>-SAKTO ALPHA = IN }|. LS_PRACCOUNT-COSTCENTER = |{ <GRP01>-KOSTL ALPHA = IN }|. "直接给BAPI入参赋值-成本中心 SPLIT <GRP01>-ANLN1 AT '-' INTO <GRP01>-ANLN1 DATA(A). "根据OA报文,资产自带-0,需要截取 LS_PRACCOUNT-ASSET_NO = |{ <GRP01>-ANLN1 ALPHA = IN }|. "直接给BAPI入参赋值-资产编号 LS_PRACCOUNT-ORDERID = |{ <GRP01>-AUFNR ALPHA = IN }|. "直接给BAPI入参赋值-订单编号 APPEND LS_PRACCOUNT TO LT_PRACCOUNT. "将工作区ls_pracccount赋值给内表lt_praccount LS_PRACCOUNTX-PREQ_ITEM = I_COUNT. "直接给BAPI入参赋值-采购申请类型行项目号 LS_PRACCOUNTX-SERIAL_NO = I_COUNT_KM. "直接给BAPI入参赋值-科目分配的序号 LS_PRACCOUNTX-GL_ACCOUNT = 'X'. "直接给BAPI入参赋值-科目编号 LS_PRACCOUNTX-COSTCENTER = 'X'. "直接给BAPI入参赋值-成本中心 LS_PRACCOUNTX-ASSET_NO = 'X'. "直接给BAPI入参赋值-资产编号 LS_PRACCOUNTX-ORDERID = 'X'. "直接给BAPI入参赋值-订单编号 APPEND LS_PRACCOUNTX TO LT_PRACCOUNTX. "将工作区ls_praccountx赋值给内表lt_accountx " 增强字段赋值 LS_TE-PREQ_ITEM = I_COUNT. LS_TE-ZOADJBH = <GRP01>-ZOADJBH. "<— 自定义字段 * LS_TE-ZOAHEADERID = <GRP01>-ZOAHEADERID. "<— 自定义字段 * LS_TE-ZOAITEMID = <GRP01>-ZOAITEMID. "<— 自定义字段 LS_TE-ZPURDEP = <GRP01>-ZPURDEP. "<— 自定义字段 * LS_EXT-STRUCTURE = 'BAPI_TE_REQUISITION_ITEM'. "BAPI_REQUISITION_CREATE用的这个 LS_EXT-STRUCTURE = 'BAPI_TE_MEREQITEM'."BAPI_PR_CREATE用到的是这个 LS_EXT-VALUEPART1 = LS_TE. APPEND LS_EXT TO LT_EXT. " 增强字段赋值更新 LS_TEX-PREQ_ITEM = I_COUNT. LS_TEX-ZOADJBH = 'X'. "<— 自定义字段 * LS_TEX-ZOAHEADERID = 'X'. "<— 自定义字段 * LS_TEX-ZOAITEMID = 'X'. "<— 自定义字段 LS_TEX-ZPURDEP = 'X'. "<— 自定义字段 LS_EXT-STRUCTURE = 'BAPI_TE_MEREQITEMX'."BAPI_PR_CREATE用到的是这个 LS_EXT-VALUEPART1 = LS_TEX. APPEND LS_EXT TO LT_EXT. <GRP01>-BNFPO = I_COUNT. CLEAR:LS_PRITEM,LS_PRITEMX,LS_PRACCOUNT,LS_PRACCOUNTX,LS_TE,LS_EXT,LS_TEX. ENDLOOP. "-------------------------------------------------- " 调用 BAPI "-------------------------------------------------- CALL FUNCTION 'BAPI_PR_CREATE' EXPORTING "BAPI入参 PRHEADER = LS_HEAD PRHEADERX = LS_HEADX IMPORTING "BAPI出参 NUMBER = LV_BANFN TABLES "表参数(入参) RETURN = LT_RETURN PRITEM = LT_PRITEM PRITEMX = LT_PRITEMX PRACCOUNT = LT_PRACCOUNT PRACCOUNTX = LT_PRACCOUNTX PRITEMTEXT = LT_PRITEMTEXT EXTENSIONIN = LT_EXT EXTENSIONOUT = LT_EXTX. LOOP AT LT_RETURN WHERE TYPE = 'E' OR TYPE = 'A'. CONCATENATE LT_RETURN-MESSAGE LV_MESSAGE INTO LV_MESSAGE SEPARATED BY ';'. ENDLOOP. IF SY-SUBRC = 0. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. <FS01>-TYPE = 'E'. <FS01>-ICON = ICON_LED_RED. <FS01>-MESSAGE = LV_MESSAGE. ELSE. IF LV_BANFN IS NOT INITIAL. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING WAIT = 'X'. <FS01>-TYPE = 'S'. <FS01>-ICON = ICON_LED_GREEN. <FS01>-BANFN = LV_BANFN. <FS01>-MESSAGE = '导入成功'. "抬头文本写入 PERFORM FRM_GET_TEXT CHANGING <FS01>. <FS01>-BANFN = |{ <FS01>-BANFN ALPHA = OUT }|. <FS01>-MATNR = |{ <FS01>-MATNR ALPHA = OUT }|. ENDIF. ENDIF. CLEAR:LV_BANFN,LS_HEAD,LS_HEADX,LT_RETURN,LT_RETURN[],LT_PRITEM,LT_PRITEMX,LT_PRACCOUNT,LT_PRACCOUNTX,LT_PRITEMTEXT,LT_EXT,LT_EXTX,LV_MESSAGE,LV_STRING. ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& Form frm_get_text *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& <-- <FS01> *&---------------------------------------------------------------------* FORM FRM_GET_TEXT CHANGING C_DATA TYPE TY_DATA. ""文本定义 DATA:LS_HEAD_TXT TYPE THEAD, LT_TEXT TYPE TABLE OF TLINE WITH HEADER LINE, LV_TEXT TYPE STRING. LS_HEAD_TXT-TDID = 'B01'. LS_HEAD_TXT-TDNAME = C_DATA-BANFN. LS_HEAD_TXT-TDOBJECT = 'EBANH'. LS_HEAD_TXT-TDSPRAS = SY-LANGU. LV_TEXT = C_DATA-HEAD_TXT. DO . IF STRLEN( LV_TEXT ) > 132. LT_TEXT-TDFORMAT = '*'. LT_TEXT-TDLINE = LV_TEXT+0(132). APPEND LT_TEXT. CLEAR LT_TEXT. SHIFT LV_TEXT BY 132 PLACES LEFT. ELSE. LT_TEXT-TDLINE = LV_TEXT . LT_TEXT-TDFORMAT = '*'. APPEND LT_TEXT. CLEAR LT_TEXT. EXIT. ENDIF. ENDDO. "补充采购申请抬头文本 CALL FUNCTION 'SAVE_TEXT' EXPORTING HEADER = LS_HEAD_TXT SAVEMODE_DIRECT = 'X' TABLES LINES = LT_TEXT EXCEPTIONS ID = 1 LANGUAGE = 2 NAME = 3 OBJECT = 4 OTHERS = 5. IF SY-SUBRC <> 0. C_DATA-TYPE = 'E'. C_DATA-ICON = ICON_LED_RED. C_DATA-MESSAGE = ';但抬头文本导入失败!'. ELSE. COMMIT WORK AND WAIT. ENDIF. ENDFORM.
结果

点击导入


浙公网安备 33010602011771号