SAP 物料主数据 PRD覆盖QAS实现-BOM同步

DATA: LL_LINES(10),"行数
        LL_TABIX(10),"循环标号
        LL_PECNT     TYPE P LENGTH 6 DECIMALS 2, "百分比
        LL_PECET(6),"百分数
        LL_TEXT(40)."消息
  CLEAR: LL_LINES,LL_TABIX,LL_PECNT,LL_PECET,LL_TEXT.

  DATA: LEN            TYPE        I, "发送报文长度
        LEN_STRING     TYPE        STRING,
        URL            TYPE        STRING, "接口地址
        SQLSTR         TYPE STRING,
        LV_SERVER_NAME TYPE ZE_SERVER_NAME,
        POST_STRING    TYPE        STRING,
        RESULT         TYPE        STRING,
        LTIMEEND       TYPE STRING, "时间戳结束
        LTIMEST        TYPE STRING. "时间戳开始
  DATA: L_JSON_ROOT_OBJECT TYPE REF TO ZCL_MDP_JSON_NODE.
  DATA: L_ERRORTYPE_OBJECT TYPE REF TO ZCL_MDP_JSON_NODE.
  DATA: L_SAP_TEST_OBJECT TYPE REF TO ZCL_MDP_JSON_NODE.
  DATA: L_ERRORNO_OBJECT TYPE REF TO ZCL_MDP_JSON_NODE.
  DATA: L_SAP_TEST_ROW1_OBJECT TYPE REF TO ZCL_MDP_JSON_NODE.
  DATA: L_SAP_TEST_FUNC_ID_OBJECT TYPE REF TO ZCL_MDP_JSON_NODE.
  DATA: LTAR TYPE TABLE OF ZCL_MDP_JSON_NODE=>TYP_ARRAY_CHILDREN.
  DATA: LMATNR TYPE MAST-MATNR.
  DATA: LWERKS TYPE MAST-WERKS.

  DATA:
    L_SANKA       TYPE STPO-SANKA,
    L_MATERIAL    TYPE  CSAP_MBOM-MATNR,
    L_PLANT       TYPE  CSAP_MBOM-WERKS,
    L_BOM_USAGE   TYPE  CSAP_MBOM-STLAN,
    L_ALTERNATIVE TYPE  CSAP_MBOM-STLAL,
    L_VALID_FROM  TYPE  CSAP_MBOM-DATUV,
    L_BOM_NO      TYPE  STKO_API02-BOM_NO,
    LS_STKO       TYPE  STKO_API01,
    LT_STPO       TYPE TABLE OF STPO_API01,
    LS_STPO       TYPE STPO_API01,
    L_WARNING     TYPE CAPIFLAG-FLWARNING,
    L_MESSAGE     TYPE CHAR100.

  CLEAR: L_MATERIAL, L_PLANT, L_BOM_USAGE, L_ALTERNATIVE, L_VALID_FROM, L_BOM_NO.
  CLEAR: LS_STKO, LT_STPO[].

  IF S_MSTMAT IS  INITIAL AND S_MSTWRK IS INITIAL.
    SQLSTR = 'SELECT MATNR,WERKS,STLAN,STLNR,STLAL FROM MAST WHERE MANDT = 800'.
  ELSE.
    SQLSTR = 'SELECT MATNR,WERKS,STLAN,STLNR,STLAL FROM MAST WHERE MANDT = 800'.
    IF S_MSTMAT IS NOT INITIAL AND S_MSTWRK IS INITIAL.
      IF S_MATNR-HIGH  IS INITIAL.
        S_MATNR-HIGH = S_MATNR-LOW.
      ENDIF.
      SQLSTR = SQLSTR  && ' AND MATNR BETWEEN ''' && S_MATNR-LOW && ''' AND ''' && S_MATNR-HIGH && ''''.
    ELSEIF S_MSTMAT IS  INITIAL AND S_MSTWRK IS NOT INITIAL.
      IF S_MSTWRK-HIGH  IS INITIAL.
        S_MSTWRK-HIGH = S_MSTWRK-LOW.
      ENDIF.
      SQLSTR = SQLSTR  && ' AND WERKS BETWEEN ''' && S_MSTWRK-LOW && ''' AND ''' && S_MSTWRK-HIGH && ''''.
    ELSE.
      IF S_MATNR-HIGH  IS INITIAL.
        S_MATNR-HIGH = S_MATNR-LOW.
      ENDIF.
      IF S_MSTWRK-HIGH  IS INITIAL.
        S_MSTWRK-HIGH = S_MSTWRK-LOW.
      ENDIF.
      SQLSTR = SQLSTR  && ' AND MATNR BETWEEN ''' && S_MATNR-LOW && ''' AND ''' && S_MATNR-HIGH && '''' &&
                ' AND WERKS BETWEEN ''' && S_MSTWRK-LOW && ''' AND ''' && S_MSTWRK-HIGH && ''''.
    ENDIF.
  ENDIF.
  PERFORM FRM_SYNOBJ(ZABAP_COMMON_PROGRAM) USING LV_URL_STR SQLSTR CHANGING L_JSON_ROOT_OBJECT.
  DATA: L_STRING TYPE STRING.
  DATA:CNT TYPE I.
  DATA:PINDX TYPE I.
  L_ERRORTYPE_OBJECT = L_JSON_ROOT_OBJECT->OBJECT_GET_CHILD_NODE( KEY = 'RESULT').
  LTAR  = L_ERRORTYPE_OBJECT->ARRAY_CHILDREN().
  DESCRIBE TABLE LTAR LINES CNT.
  LOOP AT LTAR INTO DATA(LSAR).
    PINDX = SY-TABIX.
    L_SAP_TEST_OBJECT = LSAR-NODE.
    L_SAP_TEST_FUNC_ID_OBJECT  =  L_SAP_TEST_OBJECT->OBJECT_GET_CHILD_NODE( KEY = 'MATNR' ).
    LMATNR = L_SAP_TEST_FUNC_ID_OBJECT->VALUE.
    L_SAP_TEST_FUNC_ID_OBJECT  =  L_SAP_TEST_OBJECT->OBJECT_GET_CHILD_NODE( KEY = 'WERKS' ).
    LWERKS = L_SAP_TEST_FUNC_ID_OBJECT->VALUE.
    SELECT * FROM MAST WHERE MATNR = @LMATNR AND WERKS = @LWERKS INTO TABLE @DATA(LTMAST) .
    IF SY-SUBRC = 0."已经存在跳过
      CONTINUE.
    ENDIF.
    TRY.
        L_SAP_TEST_FUNC_ID_OBJECT  =  L_SAP_TEST_OBJECT->OBJECT_GET_CHILD_NODE( KEY = 'STLAN' ).
        L_BOM_USAGE = L_SAP_TEST_FUNC_ID_OBJECT->VALUE.
        L_SAP_TEST_FUNC_ID_OBJECT  =  L_SAP_TEST_OBJECT->OBJECT_GET_CHILD_NODE( KEY = 'STLAL' ).
        L_ALTERNATIVE = L_SAP_TEST_FUNC_ID_OBJECT->VALUE.

        L_SAP_TEST_FUNC_ID_OBJECT  =  L_SAP_TEST_OBJECT->OBJECT_GET_CHILD_NODE( KEY = 'STLNR' ).
        L_BOM_NO = L_SAP_TEST_FUNC_ID_OBJECT->VALUE.

        L_VALID_FROM = SY-DATUM.
        L_MATERIAL = LMATNR.
        L_PLANT = LWERKS.
        PERFORM GETSTKO USING LV_URL_STR L_BOM_NO CHANGING LS_STKO.
        PERFORM GETSTPO USING LV_URL_STR L_BOM_NO LWERKS CHANGING LT_STPO.
        CALL FUNCTION 'CSAP_MAT_BOM_CREATE'
          EXPORTING
            MATERIAL           = L_MATERIAL
            PLANT              = L_PLANT
            BOM_USAGE          = L_BOM_USAGE
            ALTERNATIVE        = L_ALTERNATIVE
            VALID_FROM         = L_VALID_FROM
            I_STKO             = LS_STKO
            FL_COMMIT_AND_WAIT = 'X'
*    IMPORTING
*           FL_WARNING         =
*           bom_no             = l_bom_no
          TABLES
            T_STPO             = LT_STPO[]
          EXCEPTIONS
            ERROR              = 1
            OTHERS             = 2.

        IF SY-SUBRC = 0.
          WRITE:/ PINDX && '/' && CNT && '物料' && L_MATERIAL && 'BOM保存成功'.
        ELSE.
          MESSAGE ID SY-MSGID
          TYPE SY-MSGTY
          NUMBER SY-MSGNO
          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
          INTO L_MESSAGE.
          WRITE:/ PINDX && '/' && CNT && '物料' && L_MATERIAL && 'BOM维护有问题,参考' &&  L_MESSAGE.
        ENDIF.
      CATCH CX_ROOT INTO DATA(LSEROR).
        WRITE:/ '物料' && L_MATERIAL && 'BOM同步报错' .
    ENDTRY.
  ENDLOOP.
ENDFORM.

FORM GETSTKO USING PURL TYPE STRING PBOMNO TYPE STKO_API02-BOM_NO CHANGING  PTSKO TYPE STKO_API01 .
  DATA: LS_STPO TYPE STPO_API01.
  DATA:SQLSTR TYPE STRING.
  DATA: L_JSON_ROOT_OBJECT TYPE REF TO ZCL_MDP_JSON_NODE.
  DATA: L_ERRORTYPE_OBJECT TYPE REF TO ZCL_MDP_JSON_NODE.
  DATA: LTAR TYPE TABLE OF ZCL_MDP_JSON_NODE=>TYP_ARRAY_CHILDREN.
  DATA: L_SAP_ROW_OBJECT TYPE REF TO ZCL_MDP_JSON_NODE.
  DATA: L_SAP_COL_OBJECT TYPE REF TO ZCL_MDP_JSON_NODE.
  DATA: LPPSTAT TYPE MARA-PSTAT.

  SQLSTR = 'SELECT STLST,STKTX,BMENG from stko where MANDT = 800 AND STLTY = ''M'' AND STLNR = ''' && PBOMNO && ''''.
  PERFORM FRM_SYNOBJ(ZABAP_COMMON_PROGRAM) USING PURL SQLSTR CHANGING L_JSON_ROOT_OBJECT.
  L_ERRORTYPE_OBJECT = L_JSON_ROOT_OBJECT->OBJECT_GET_CHILD_NODE( KEY = 'RESULT').
  LTAR  = L_ERRORTYPE_OBJECT->ARRAY_CHILDREN().
  LOOP AT LTAR INTO DATA(LSAR).
    CLEAR PTSKO.
    L_SAP_ROW_OBJECT = LSAR-NODE.
    L_SAP_COL_OBJECT =  L_SAP_ROW_OBJECT->OBJECT_GET_CHILD_NODE( KEY = 'STLST' ).
    PTSKO-BOM_STATUS = L_SAP_COL_OBJECT->VALUE."行项目类别
    L_SAP_COL_OBJECT =  L_SAP_ROW_OBJECT->OBJECT_GET_CHILD_NODE( KEY = 'STKTX' ).
    PTSKO-ALT_TEXT = L_SAP_COL_OBJECT->VALUE."行项目类别
    L_SAP_COL_OBJECT =  L_SAP_ROW_OBJECT->OBJECT_GET_CHILD_NODE( KEY = 'BMENG' ).
    PTSKO-BASE_QUAN = L_SAP_COL_OBJECT->VALUE."行项目类别

  ENDLOOP.
ENDFORM.


FORM GETSTPO USING PURL TYPE STRING PBOMNO TYPE STKO_API02-BOM_NO  PWERKS TYPE WERKS_D CHANGING  LT_STPO TYPE STANDARD TABLE.
  DATA: LS_STPO TYPE STPO_API01.
  DATA:SQLSTR TYPE STRING.
  DATA: L_JSON_ROOT_OBJECT TYPE REF TO ZCL_MDP_JSON_NODE.
  DATA: L_ERRORTYPE_OBJECT TYPE REF TO ZCL_MDP_JSON_NODE.
  DATA: LTAR TYPE TABLE OF ZCL_MDP_JSON_NODE=>TYP_ARRAY_CHILDREN.
  DATA: L_SAP_ROW_OBJECT TYPE REF TO ZCL_MDP_JSON_NODE.
  DATA: L_SAP_COL_OBJECT TYPE REF TO ZCL_MDP_JSON_NODE.
  DATA: LPPSTAT TYPE MARA-PSTAT.

  SQLSTR = 'SELECT STPO.* FROM STPO WHERE  STPO.MANDT = 800 AND STLTY = ''M'' AND STPO.STLNR = ''' && PBOMNO && ''''.
  PERFORM FRM_SYNOBJ(ZABAP_COMMON_PROGRAM) USING PURL SQLSTR CHANGING L_JSON_ROOT_OBJECT.
  L_ERRORTYPE_OBJECT = L_JSON_ROOT_OBJECT->OBJECT_GET_CHILD_NODE( KEY = 'RESULT').
  LTAR  = L_ERRORTYPE_OBJECT->ARRAY_CHILDREN().
  LOOP AT LTAR INTO DATA(LSAR).
    CLEAR LS_STPO.
    L_SAP_ROW_OBJECT = LSAR-NODE.
    L_SAP_COL_OBJECT =  L_SAP_ROW_OBJECT->OBJECT_GET_CHILD_NODE( KEY = 'STLTY' ).
    LS_STPO-ITEM_CATEG = L_SAP_COL_OBJECT->VALUE."行项目类别
    L_SAP_COL_OBJECT =  L_SAP_ROW_OBJECT->OBJECT_GET_CHILD_NODE( KEY = 'STLKN' ).
    LS_STPO-ITEM_NO    = L_SAP_COL_OBJECT->VALUE."行项目号
    L_SAP_COL_OBJECT =  L_SAP_ROW_OBJECT->OBJECT_GET_CHILD_NODE( KEY = 'IDNRK' ).
    LS_STPO-COMPONENT  = L_SAP_COL_OBJECT->VALUE."BOM组件物料编码
    L_SAP_COL_OBJECT =  L_SAP_ROW_OBJECT->OBJECT_GET_CHILD_NODE( KEY = 'MENGE' ).
    LS_STPO-COMP_QTY = L_SAP_COL_OBJECT->VALUE.
    L_SAP_COL_OBJECT =  L_SAP_ROW_OBJECT->OBJECT_GET_CHILD_NODE( KEY = 'SANKA' ).
    LS_STPO-REL_COST = L_SAP_COL_OBJECT->VALUE.

    L_SAP_COL_OBJECT =  L_SAP_ROW_OBJECT->OBJECT_GET_CHILD_NODE( KEY = 'SORTF' ).
    LS_STPO-SORTSTRING = L_SAP_COL_OBJECT->VALUE."排序字符串
    L_SAP_COL_OBJECT =  L_SAP_ROW_OBJECT->OBJECT_GET_CHILD_NODE( KEY = 'POTX1' ).
    LS_STPO-ITEM_TEXT1 = L_SAP_COL_OBJECT->VALUE."排序字符串
    L_SAP_COL_OBJECT =  L_SAP_ROW_OBJECT->OBJECT_GET_CHILD_NODE( KEY = 'POTX2' ).
    LS_STPO-ITEM_TEXT2 = L_SAP_COL_OBJECT->VALUE."子项文本2
    L_SAP_COL_OBJECT =  L_SAP_ROW_OBJECT->OBJECT_GET_CHILD_NODE( KEY = 'ITSOB' ).
    LS_STPO-SPPROCTYPE = L_SAP_COL_OBJECT->VALUE."特殊获取
    L_SAP_COL_OBJECT =  L_SAP_ROW_OBJECT->OBJECT_GET_CHILD_NODE( KEY = 'RFPNT' ).
    LS_STPO-REFPOINT   = L_SAP_COL_OBJECT->VALUE."参考点
    L_SAP_COL_OBJECT =  L_SAP_ROW_OBJECT->OBJECT_GET_CHILD_NODE( KEY = 'LGORT' ).
    LS_STPO-ISSUE_LOC  = L_SAP_COL_OBJECT->VALUE."库存地点
    L_SAP_COL_OBJECT =  L_SAP_ROW_OBJECT->OBJECT_GET_CHILD_NODE( KEY = 'FMENG' ).
    LS_STPO-FIXED_QTY  = L_SAP_COL_OBJECT->VALUE."库存地点
    APPEND LS_STPO TO LT_STPO.
  ENDLOOP.
ENDFORM.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gavin_gxh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值