SAP ABAP BAPI_PR_CREATE 科目分配PRACCOUNT

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.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值