SHDB 录屏

  1. DATA: BEGIN OF ls_data,
  2. matnr TYPE mara-matnr, " 物料
  3. werks TYPE marc-werks, " 工厂
  4. verid TYPE mkal-verid, " 生产版本
  5. adatu TYPE mkal-adatu, " 有效期自
  6. bdatu TYPE mkal-bdatu, " 有效期至
  7. stlal TYPE mkal-stlal, " 最小批量大小
  8. stlan TYPE mkal-stlan, " 最大批量大小
  9. END OF ls_data.
  10. ls_data = VALUE #(
  11. matnr = 'EODJ30556-A01'
  12. werks = '1000'
  13. verid = '010'
  14. adatu = '20220614'
  15. bdatu = '20220615'
  16. stlal = '10'
  17. stlan = '5'
  18. ).
  19. " BDC 创建生产版本
  20. DATA: lt_bdcdata TYPE TABLE OF bdcdata, " BDC执行内表
  21. lt_msgtab TYPE TABLE OF bdcmsgcoll, " BDC返回信息表
  22. lv_message TYPE string.
  23. DATA: lc_mode TYPE c VALUE 'A'. " BDC运行模式
  24. " SHDB 录屏
  25. " bdc_dynpro
  26. APPEND VALUE #( program = 'SAPLCMFV' dynpro = '1000' dynbegin = 'X' ) TO lt_bdcdata.
  27. " bdc field
  28. APPEND VALUE #( fnam = 'MKAL-WERKS' fval = |{ ls_data-matnr }| ) TO lt_bdcdata. " 工厂
  29. APPEND VALUE #( fnam = 'MKAL-MATNR' fval = |{ ls_data-werks }| ) TO lt_bdcdata. " 物料
  30. APPEND VALUE #( fnam = 'MKAL_ADMIN-STTAG' fval = |{ sy-datum }| ) TO lt_bdcdata.
  31. APPEND VALUE #( fnam = 'BDC_OKCODE' fval = '=ENTE' ) TO lt_bdcdata.
  32. APPEND VALUE #( program = 'SAPLCMFV' dynpro = '1000' dynbegin = 'X' ) TO lt_bdcdata.
  33. APPEND VALUE #( fnam = 'MKAL_EXPAND-MATNR(01)' fval = |{ ls_data-matnr }| ) TO lt_bdcdata. " 物料
  34. APPEND VALUE #( fnam = 'MKAL_EXPAND-VERID(01)' fval = |{ ls_data-verid }| ) TO lt_bdcdata. " 生产版本
  35. APPEND VALUE #( fnam = 'MKAL_EXPAND-TEXT1(01)' fval = |Generated Version| ) TO lt_bdcdata.
  36. APPEND VALUE #( fnam = 'MKAL_EXPAND-ADATU(01)' fval = |{ ls_data-adatu }| ) TO lt_bdcdata. " 有效期自
  37. APPEND VALUE #( fnam = 'MKAL_EXPAND-BDATU(01)' fval = |{ ls_data-bdatu }| ) TO lt_bdcdata. " 有效期至
  38. APPEND VALUE #( fnam = 'MKAL_EXPAND-STLAL(01)' fval = |{ ls_data-stlal }| ) TO lt_bdcdata. " 最小批量大小
  39. APPEND VALUE #( fnam = 'MKAL_EXPAND-STLAN(01)' fval = |{ ls_data-stlan }| ) TO lt_bdcdata. " 最大批量大小
  40. APPEND VALUE #( fnam = 'BDC_OKCODE' fval = '=ENTE' ) TO lt_bdcdata.
  41. APPEND VALUE #( program = 'SAPLCMFV' dynpro = '1000' dynbegin = 'X' ) TO lt_bdcdata.
  42. APPEND VALUE #( fnam = 'BDC_OKCODE' fval = '=SAVE' ) TO lt_bdcdata.
  43. CALL TRANSACTION 'C223' " BDC调用的事务码
  44. USING lt_bdcdata " BDC执行内表
  45. MODE lc_mode " BDC运行模式
  46. MESSAGES INTO lt_msgtab " BDC返回信息表
  47. UPDATE 'S'. " 批导更新模式(A = '异步',S = '同步')
  48. LOOP AT lt_msgtab INTO DATA(ls_msgtab) WHERE msgtyp = 'E' OR msgtyp = 'A'.
  49. EXIT.
  50. ENDLOOP.
  51. IF sy-subrc = 0.
  52. WRITE / 'ERROR' COLOR COL_NEGATIVE.
  53. ELSE.
  54. WRITE / 'SUCCESS' COLOR COL_POSITIVE.
  55. ENDIF.
  56. WRITE /.
  57. LOOP AT lt_msgtab INTO ls_msgtab.
  58. MESSAGE ID ls_msgtab-msgid TYPE ls_msgtab-msgtyp NUMBER ls_msgtab-msgnr
  59. WITH ls_msgtab-msgv1 ls_msgtab-msgv2 ls_msgtab-msgv3 ls_msgtab-msgv4 INTO lv_message.
  60. WRITE / lv_message .
  61. ENDLOOP.

FUNCTION 函数

  1. *&---------------------------------------------------------------------*
  2. *& Report ZSLTEST02
  3. *&---------------------------------------------------------------------*
  4. *&
  5. *&---------------------------------------------------------------------*
  6. REPORT zsltest02.
  7. DATA: BEGIN OF ls_data,
  8. matnr TYPE mara-matnr, " 物料
  9. werks TYPE marc-werks, " 工厂
  10. verid TYPE mkal-verid, " 生产版本
  11. adatu TYPE mkal-adatu, " 有效期自
  12. bdatu TYPE mkal-bdatu, " 有效期至
  13. stlal TYPE mkal-stlal, " 最小批量大小
  14. stlan TYPE mkal-stlan, " 最大批量大小
  15. END OF ls_data.
  16. ls_data = VALUE #(
  17. matnr = 'EODJ30556-A01'
  18. werks = '1000'
  19. verid = '010'
  20. adatu = '20220614'
  21. bdatu = '20220615'
  22. stlal = '10'
  23. stlan = '5'
  24. ).
  25. SELECT SINGLE
  26. rc~matnr,
  27. rc~werks,
  28. rc~dismm,
  29. ra~disst
  30. FROM marc AS rc
  31. LEFT JOIN mara AS ra ON ra~matnr = rc~matnr
  32. WHERE rc~matnr = @ls_data-matnr
  33. AND rc~werks = @ls_data-werks
  34. INTO @DATA(ls_more).
  35. DATA: ls_mkal TYPE mkal,
  36. lt_mkal TYPE TABLE OF mkal.
  37. DATA: lt_check_result TYPE TABLE OF mkal_result_tab.
  38. ls_mkal-matnr = ls_data-matnr.
  39. ls_mkal-werks = ls_data-werks.
  40. ls_mkal-verid = ls_data-verid.
  41. ls_mkal-text1 = 'Generated Version'.
  42. ls_mkal-adatu = ls_data-adatu.
  43. ls_mkal-bdatu = ls_data-bdatu.
  44. ls_mkal-stlal = ls_data-stlal.
  45. ls_mkal-stlan = ls_data-stlan.
  46. " ... 其他字段略
  47. ls_mkal-prfg_f = ls_data-stlal. " 任务清单 1:绿灯
  48. ls_mkal-prfg_s = ls_data-stlan. " 物料清单 1:绿灯
  49. ls_mkal-prdat = sy-datum.
  50. CALL FUNCTION 'CM_FV_MKAL_CONSISTENCY_CHECK'
  51. EXPORTING
  52. mkal_imp = ls_mkal
  53. TABLES
  54. result_tab = lt_check_result
  55. EXCEPTIONS
  56. mkal_err = 1
  57. plko_err = 2
  58. stko_err = 3
  59. other_err = 4
  60. OTHERS = 5.
  61. LOOP AT lt_check_result INTO DATA(ls_check_result).
  62. IF ls_check_result-object_status NE space AND ls_check_result-object = 'S'.
  63. WRITE / 'SUCCESS' COLOR COL_POSITIVE.
  64. ENDIF.
  65. IF ls_check_result-object_status NE space AND ls_check_result-object = 'F'.
  66. WRITE / 'ERROR' COLOR COL_NEGATIVE.
  67. STOP.
  68. ENDIF.
  69. ENDLOOP.
  70. APPEND ls_mkal TO lt_mkal.
  71. CLEAR ls_mkal.
  72. CALL FUNCTION 'MKAL_SAVE'
  73. EXPORTING
  74. dismm = ls_more-dismm
  75. disst = ls_more-disst
  76. flgmkal_exi = ''
  77. matnr = ls_data-matnr
  78. werks = ls_data-werks
  79. TABLES
  80. vmkal = lt_mkal
  81. EXCEPTIONS
  82. mkal_delete_error = 1
  83. mkal_insert_error = 2
  84. OTHERS = 3.
  85. IF sy-subrc <> 0.
  86. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  87. MESSAGE 'SUCCESS' TYPE 'S' DISPLAY LIKE 'E'.
  88. ELSE.
  89. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
  90. EXPORTING
  91. wait = 'X'.
  92. MESSAGE 'SUCCESS' TYPE 'S'.
  93. ENDIF.