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.
SAP 物料主数据 PRD覆盖QAS实现-BOM同步
最新推荐文章于 2025-04-08 16:45:13 发布