FUNCTION ZFM_INT_PR_CREATE.
*"----------------------------------------------------------------------
*"*"Local interface:
*" TABLES
*" IT_INOFS STRUCTURE ZMMS_OA_PR_CREATE_REQUEST OPTIONAL
*" ET_RETURN STRUCTURE ZMMS_OA_PR_CREATE_RESPONSE OPTIONAL
*"----------------------------------------------------------------------
DATA:LS_INFOS TYPE ZMMS_OA_PR_CREATE_REQUEST .
DATA:LS_RESPO TYPE ZMMS_OA_PR_CREATE_RESPONSE .
DATA:
LT_RETURN TYPE TABLE OF BAPIRET2,
LT_PRITEM TYPE TABLE OF BAPIMEREQITEMIMP,
LS_RETURN TYPE BAPIRET2,
LS_PRITEM TYPE BAPIMEREQITEMIMP,
LT_PRITEMX TYPE TABLE OF BAPIMEREQITEMX,
LS_PRITEMX TYPE BAPIMEREQITEMX.
DATA:LV_BNFPO TYPE BNFPO .
DATA:
LS_PRHEADER TYPE BAPIMEREQHEADER,
LS_PRHEADERX TYPE BAPIMEREQHEADERX.
DATA:LV_NUMBER TYPE BAPIMEREQHEADER-PREQ_NO .
DATA:LV_MESSAGE TYPE STRING.
DATA:LV_ALL_MESSAGE TYPE STRING.
DATA:LV_FLAG TYPE CHAR01.
DATA:LT_PRACCOUNT TYPE TABLE OF BAPIMEREQACCOUNT,
LS_PRACCOUNT TYPE BAPIMEREQACCOUNT.
DATA:LT_PRACCOUNTX TYPE TABLE OF BAPIMEREQACCOUNTX,
LS_PRACCOUNTX TYPE BAPIMEREQACCOUNTX.
DATA:LT_PRITEMTEXT TYPE TABLE OF BAPIMEREQITEMTEXT ,
LS_PRITEMTEXT TYPE BAPIMEREQITEMTEXT .
DATA:LS_LOG_TAB TYPE ZCAT_LOG_INFO.
DATA:JSON_REQUEST TYPE STRING ,
JSON_RESPONSE TYPE STRING .
DATA:LV_CHECK TYPE CHAR01 .
DATA:
LV_NR_RANGE_NR TYPE INRI-NRRANGENR,
LV_OBJECT TYPE INRI-OBJECT.
DATA:LV_JSON TYPE STRING .
DATA:LT_TEMP TYPE TABLE OF ZMMS_OA_PR_CREATE_REQUEST ,
LS_TEMP TYPE ZMMS_OA_PR_CREATE_REQUEST .
LT_TEMP[] = IT_INOFS[] .
SORT LT_TEMP BY ZOAH .
DELETE ADJACENT DUPLICATES FROM LT_TEMP COMPARING ZOAH .
*写入日志信息。
LV_OBJECT = 'ZMMNR0001'.
LV_NR_RANGE_NR = '01'.
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
NR_RANGE_NR = LV_NR_RANGE_NR
OBJECT = LV_OBJECT
QUANTITY = '1'
* SUBOBJECT = ' '
* TOYEAR = '0000'
* IGNORE_BUFFER = ' '
IMPORTING
NUMBER = LS_LOG_TAB-ZLOGN "日志编号。
* QUANTITY =
* RETURNCODE =
EXCEPTIONS
INTERVAL_NOT_FOUND = 1
NUMBER_RANGE_NOT_INTERN = 2
OBJECT_NOT_FOUND = 3
QUANTITY_IS_0 = 4
QUANTITY_IS_NOT_1 = 5
INTERVAL_OVERFLOW = 6
BUFFER_OVERFLOW = 7
OTHERS = 8.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ELSE .
ENDIF.
CALL TRANSFORMATION ID
SOURCE
IT_INOFS = IT_INOFS[]
RESULT XML JSON_REQUEST
OPTIONS XML_HEADER = 'no'.
CONCATENATE '<?xml version="1.0" encoding="UTF-8"?>' JSON_REQUEST+1 INTO JSON_REQUEST.
*记录日志。
LS_LOG_TAB-ZSYSS = 'OA' .
LS_LOG_TAB-FUNCO = 'ZFM_INT_PR_CREATE'.
LS_LOG_TAB-INTERN = 'OA采购申请(科目分配)创建接口' .
LS_LOG_TAB-ERNAM = SY-UNAME .
LS_LOG_TAB-ERDAT = SY-DATUM .
LS_LOG_TAB-ERTIM = SY-UZEIT .
LS_LOG_TAB-FTYPE = 'RFC' .
LS_LOG_TAB-REQUE = JSON_REQUEST .
* LS_LOG_TAB-OUTID = IS_HEAD-ZOAH .
MODIFY ZCAT_LOG_INFO FROM LS_LOG_TAB .
COMMIT WORK AND WAIT .
LOOP AT LT_TEMP INTO LS_TEMP .
*准备行项目数据。
CLEAR: LT_PRITEM ,LT_PRITEMX,LT_RETURN,LT_PRACCOUNT,LT_PRACCOUNTX ,LS_PRHEADER ,LS_PRHEADERX .
CLEAR: LV_ALL_MESSAGE,LV_MESSAGE,LV_FLAG,LV_NUMBER ,LV_BNFPO .
CLEAR LT_PRITEMTEXT .
LS_PRHEADER-PR_TYPE = 'NB' ."采购申请类型。
LS_PRHEADERX-PR_TYPE = 'X'.
LOOP AT IT_INOFS INTO LS_INFOS WHERE ZOAH = LS_TEMP-ZOAH ..
*准备行项目数据。
CLEAR LS_PRITEM .
CLEAR LS_PRITEMX .
LV_BNFPO = LV_BNFPO + 10 .
LS_PRITEM-PREQ_ITEM = LV_BNFPO .
LS_PRITEMX-PREQ_ITEM = LV_BNFPO .
*准备行项目数据。
*物料编码。
* IF LS_INFOS-MATNR IS NOT INITIAL .
* CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
* EXPORTING
* INPUT = LS_INFOS-MATNR
* IMPORTING
* OUTPUT = LS_PRITEM-MATERIAL
* EXCEPTIONS
* LENGTH_ERROR = 1
* OTHERS = 2.
* IF SY-SUBRC <> 0.
** Implement suitable error handling here
* ENDIF.
* LS_PRITEMX-MATERIAL = 'X' .
* ENDIF .
CASE LS_INFOS-KNTTP .
WHEN 'K' ."成本中心采购申请;
LS_PRITEM-SHORT_TEXT = LS_INFOS-TXZ01 .
LS_PRITEMX-SHORT_TEXT = 'X' .
LS_PRITEM-ACCTASSCAT = 'K' . "账户分配类别
LS_PRITEMX-ACCTASSCAT = 'X' .
*账户科目分配数据。
CLEAR LS_PRACCOUNT .
LS_PRACCOUNT-PREQ_ITEM = LV_BNFPO .
LS_PRACCOUNTX-PREQ_ITEM = LV_BNFPO .
LS_PRACCOUNTX-PREQ_ITEMX = 'X' .
IF LS_INFOS-KOSTL IS NOT INITIAL .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LS_INFOS-KOSTL
IMPORTING
OUTPUT = LS_PRACCOUNT-COSTCENTER.
LS_PRACCOUNTX-COSTCENTER = 'X' .
ENDIF .
IF LS_INFOS-SAKTO IS NOT INITIAL .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LS_INFOS-SAKTO
IMPORTING
OUTPUT = LS_PRACCOUNT-GL_ACCOUNT.
LS_PRACCOUNTX-GL_ACCOUNT = 'X' .
ENDIF .
LS_PRACCOUNT-QUANTITY = LS_INFOS-MENGE .
LS_PRACCOUNTX-QUANTITY = 'X' .
LS_PRACCOUNT-SERIAL_NO = 01 .
LS_PRACCOUNTX-SERIAL_NO = 01 .
LS_PRACCOUNTX-SERIAL_NOX = 'X' .
APPEND LS_PRACCOUNT TO LT_PRACCOUNT .
APPEND LS_PRACCOUNTX TO LT_PRACCOUNTX .
WHEN 'F' ."内部订单。
LS_PRITEM-SHORT_TEXT = LS_INFOS-TXZ01 .
LS_PRITEMX-SHORT_TEXT = 'X' .
LS_PRITEM-ACCTASSCAT = 'F' . "账户分配类别
LS_PRITEMX-ACCTASSCAT = 'X' .
*账户科目分配数据。
CLEAR LS_PRACCOUNT .
LS_PRACCOUNT-PREQ_ITEM = LV_BNFPO .
LS_PRACCOUNTX-PREQ_ITEM = LV_BNFPO .
LS_PRACCOUNTX-PREQ_ITEMX = 'X' .
IF LS_INFOS-AUFNR IS NOT INITIAL .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LS_INFOS-AUFNR
IMPORTING
OUTPUT = LS_PRACCOUNT-ORDERID.
LS_PRACCOUNTX-ORDERID = 'X' .
ENDIF .
IF LS_INFOS-SAKTO IS NOT INITIAL .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LS_INFOS-SAKTO
IMPORTING
OUTPUT = LS_PRACCOUNT-GL_ACCOUNT.
LS_PRACCOUNTX-GL_ACCOUNT = 'X' .
ENDIF .
LS_PRACCOUNT-QUANTITY = LS_INFOS-MENGE .
LS_PRACCOUNTX-QUANTITY = 'X' .
LS_PRACCOUNT-SERIAL_NO = 01 .
LS_PRACCOUNTX-SERIAL_NO = 01 .
LS_PRACCOUNTX-SERIAL_NOX = 'X' .
APPEND LS_PRACCOUNT TO LT_PRACCOUNT .
APPEND LS_PRACCOUNTX TO LT_PRACCOUNTX .
WHEN 'A' .
LS_PRITEM-SHORT_TEXT = LS_INFOS-TXZ01 .
LS_PRITEMX-SHORT_TEXT = 'X' .
*账户分配信息。
LS_PRITEM-ACCTASSCAT = 'A' . "账户分配类别
LS_PRITEMX-ACCTASSCAT = 'X' .
*账户科目分配数据。
CLEAR LS_PRACCOUNT .
LS_PRACCOUNT-PREQ_ITEM = LV_BNFPO .
LS_PRACCOUNTX-PREQ_ITEM = LV_BNFPO .
LS_PRACCOUNTX-PREQ_ITEMX = 'X' .
IF LS_INFOS-ANLN1 IS NOT INITIAL ..
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LS_INFOS-ANLN1
IMPORTING
OUTPUT = LS_PRACCOUNT-ASSET_NO.
LS_PRACCOUNTX-ASSET_NO = 'X' .
ENDIF .
LS_PRACCOUNT-SUB_NUMBER = '0000'.
LS_PRACCOUNTX-SUB_NUMBER = 'X' .
LS_PRACCOUNT-QUANTITY = LS_INFOS-MENGE .
LS_PRACCOUNTX-QUANTITY = 'X' .
LS_PRACCOUNT-SERIAL_NO = 01 .
LS_PRACCOUNTX-SERIAL_NO = 01 .
LS_PRACCOUNTX-SERIAL_NOX = 'X' .
APPEND LS_PRACCOUNT TO LT_PRACCOUNT .
APPEND LS_PRACCOUNTX TO LT_PRACCOUNTX .
ENDCASE .
*采购数量。
LS_PRITEM-QUANTITY = LS_INFOS-MENGE .
LS_PRITEMX-QUANTITY = 'X' .
*计量单位。
IF LS_PRITEM-MATERIAL IS NOT INITIAL .
SELECT
SINGLE
MEINS INTO
LS_PRITEM-UNIT
FROM MARA
WHERE MATNR EQ LS_PRITEM-MATERIAL .
LS_PRITEMX-UNIT = 'X' .
ELSE .
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
INPUT = LS_INFOS-MEINS
* LANGUAGE = SY-LANGU
IMPORTING
OUTPUT = LS_PRITEM-UNIT
* EXCEPTIONS
* UNIT_NOT_FOUND = 1
* OTHERS = 2
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
LS_PRITEMX-UNIT = 'X' .
ENDIF .
*物料组。
LS_PRITEM-MATL_GROUP = LS_INFOS-MATKL.
LS_PRITEMX-MATL_GROUP = 'X'.
*工厂。
LS_PRITEM-PLANT = LS_INFOS-WERKS.
LS_PRITEMX-PLANT = 'X' .
*库存地点。
* LS_PRITEM-STORE_LOC = LS_INFOS-LGORT.
* LS_PRITEMX-STORE_LOC = 'X' .
*采购组。
LS_PRITEM-PUR_GROUP = LS_INFOS-EKGRP.
LS_PRITEMX-PUR_GROUP = 'X' .
*申请者。
LS_PRITEM-PREQ_NAME = LS_INFOS-AFNAM .
LS_PRITEMX-PREQ_NAME = 'X' .
*单价
LS_PRITEM-PREQ_PRICE = LS_INFOS-PREIS .
LS_PRITEMX-PREQ_PRICE = 'X' .
*价格单位。
IF LS_INFOS-PEINH IS NOT INITIAL .
LS_PRITEM-PRICE_UNIT = LS_INFOS-PEINH .
ELSE .
LS_PRITEM-PRICE_UNIT = 1 .
ENDIF .
LS_PRITEMX-PRICE_UNIT = 'X' .
*交货日期。
if LS_INFOS-LFDAT is not INITIAL .
LS_PRITEM-DELIV_DATE = LS_INFOS-LFDAT .
else .
LS_PRITEM-DELIV_DATE = SY-DATUM .
endif .
LS_PRITEMX-DELIV_DATE = 'X' .
*固定供应商。 改为需求跟踪号 modify by runjiang 20201111
* IF LS_INFOS-FLIEF IS NOT INITIAL .
** CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
** EXPORTING
** INPUT = LS_INFOS-FLIEF
** IMPORTING
** OUTPUT = LS_PRITEM-FIXED_VEND.
** LS_PRITEMX-FIXED_VEND = 'X'.
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
* EXPORTING
* INPUT = LS_INFOS-FLIEF
* IMPORTING
* OUTPUT = LS_PRITEM-TRACKINGNO.
* LS_PRITEMX-TRACKINGNO = 'X'.
* ENDIF .
* IF LS_PRITEM-FIXED_VEND IS NOT INITIAL .
* LS_PRITEM-PURCH_ORG = '1000' .
* LS_PRITEMX-PURCH_ORG = 'X' .
* ENDIF .
if LS_INFOS-BEDNR is not INITIAL .
LS_PRITEM-TRACKINGNO = LS_INFOS-BEDNR .
LS_PRITEMX-TRACKINGNO = 'X'.
endif .
APPEND LS_PRITEM TO LT_PRITEM .
APPEND LS_PRITEMX TO LT_PRITEMX .
CLEAR LS_PRITEMTEXT .
IF LS_INFOS-SGTXT IS NOT INITIAL .
LS_PRITEMTEXT-PREQ_ITEM = LV_BNFPO .
LS_PRITEMTEXT-TEXT_ID = 'B01' .
LS_PRITEMTEXT-TEXT_LINE = LS_INFOS-SGTXT .
APPEND LS_PRITEMTEXT TO LT_PRITEMTEXT .
ENDIF .
ENDLOOP .
CALL FUNCTION 'BAPI_PR_CREATE'
EXPORTING
PRHEADER = LS_PRHEADER
PRHEADERX = LS_PRHEADERX
* TESTRUN =
IMPORTING
NUMBER = LV_NUMBER
* PRHEADEREXP =
TABLES
RETURN = LT_RETURN
PRITEM = LT_PRITEM
PRITEMX = LT_PRITEMX
* PRITEMEXP =
* PRITEMSOURCE =
PRACCOUNT = LT_PRACCOUNT
* PRACCOUNTPROITSEGMENT =
PRACCOUNTX = LT_PRACCOUNTX
* PRADDRDELIVERY =
PRITEMTEXT = LT_PRITEMTEXT
* PRHEADERTEXT =
* EXTENSIONIN =
* EXTENSIONOUT =
* PRVERSION =
* PRVERSIONX =
* ALLVERSIONS =
* PRCOMPONENTS =
* PRCOMPONENTSX =
* SERVICEOUTLINE =
* SERVICEOUTLINEX =
* SERVICELINES =
* SERVICELINESX =
* SERVICELIMIT =
* SERVICELIMITX =
* SERVICECONTRACTLIMITS =
* SERVICECONTRACTLIMITSX =
* SERVICEACCOUNT =
* SERVICEACCOUNTX =
* SERVICELONGTEXTS =
* SERIALNUMBER =
* SERIALNUMBERX =
.
LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE CA 'EAX'.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = LS_RETURN-ID
MSGNR = LS_RETURN-NUMBER
MSGV1 = LS_RETURN-MESSAGE_V1
MSGV2 = LS_RETURN-MESSAGE_V2
MSGV3 = LS_RETURN-MESSAGE_V3
MSGV4 = LS_RETURN-MESSAGE_V4
IMPORTING
MESSAGE_TEXT_OUTPUT = LV_MESSAGE.
CONCATENATE LV_ALL_MESSAGE LV_MESSAGE INTO LV_ALL_MESSAGE.
LV_FLAG = 'X'.
ENDLOOP.
CLEAR LS_RESPO .
LS_RESPO-ZOAH = LS_TEMP-ZOAH .
IF LV_FLAG IS INITIAL .
LS_RESPO-BANFN = LV_NUMBER .
LS_RESPO-MSGTY = 'S' .
LS_RESPO-MSGTX = '采购申请创建成功' .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'
* IMPORTING
* RETURN =
.
CONCATENATE LS_LOG_TAB-INNID LV_NUMBER INTO LS_LOG_TAB-INNID SEPARATED BY '/' .
ELSE.
LS_RESPO-BANFN = SPACE .
LS_RESPO-MSGTY = 'E' .
LS_RESPO-MSGTX = LV_ALL_MESSAGE .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* IMPORTING
* RETURN =
.
ENDIF .
APPEND LS_RESPO TO ET_RETURN .
ENDLOOP .
CONDENSE LS_LOG_TAB-INNID .
REPLACE FIRST OCCURRENCE OF '/' in LS_LOG_TAB-INNID with SPACE .
CONDENSE LS_LOG_TAB-INNID .
CALL TRANSFORMATION ID
SOURCE
ET_RETURN = ET_RETURN[]
RESULT XML JSON_REQUEST
OPTIONS XML_HEADER = 'no'.
CONCATENATE '<?xml version="1.0" encoding="UTF-8"?>' JSON_REQUEST+1 INTO JSON_RESPONSE.
*记录日志。
LS_LOG_TAB-RESPO = JSON_RESPONSE .
CONDENSE LS_LOG_TAB-INNID .
UPDATE ZCAT_LOG_INFO
SET RESPO = LS_LOG_TAB-RESPO
INNID = LS_LOG_TAB-INNID
* IFMSG =
* STATUS = LS_RESPONSE-STATUS
WHERE ZLOGN = LS_LOG_TAB-ZLOGN.
IF SY-SUBRC = 0 .
COMMIT WORK AND WAIT .
ENDIF .
ENDFUNCTION.
SAP ABAP BAPI_PR_CREATE 科目分配PRACCOUNT
最新推荐文章于 2024-04-29 13:39:55 发布