CK11N和CK24_滚算成本和发布成本
一、功能介绍
-
先使用CK11N进行成本滚算
-
再使用CK24发布成本
二、程序代码
-
程序代码:
*&---------------------------------------------------------------------* *& Report ZCOR001 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT zcor001. TYPES: BEGIN OF ty_data , werks TYPE marc-werks, "工厂 matnr TYPE mara-matnr, "物料 maktx TYPE makt-maktx, "物料描述 mtart TYPE mara-mtart, "物料类型 mtbez TYPE t134t-mtbez, "物料类型描述 knumh TYPE a017-knumh, "条件记录号 zcgjg(15) TYPE p DECIMALS 2, "最新采购价格 KONP-KBETR/KONP-KPEIN kschl TYPE a017-kschl, "条件类型 datab TYPE a017-datab, "采购价有效从 datbi TYPE a017-datbi, "采购价有效至 lifnr TYPE a017-lifnr, "供应商 gstrp TYPE afko-gstrp, "生产订单开始日期 zbzj(15) TYPE p DECIMALS 2, "标准价 : MBEW-STPRS/MBEW-PEINH lplpr TYPE mbew-lplpr, "当前计划价格 pdatl TYPE mbew-pdatl, "当前会计年 pprdl TYPE mbew-pprdl, "当前会计期间 aufnr TYPE afko-aufnr, "生产订单 "添加消息字段,用于记录成本估算的 BY HAND YLX 20230213 BEGIN OF flag1 TYPE char1, msage TYPE char50, "添加消息字段,用于记录成本估算的 BY HAND YLX 20230213 END OF END OF ty_data . *最新采购价格 TYPES :BEGIN OF ty_a017, matnr TYPE a017-matnr, "物料 kbetr TYPE konp-kbetr, "最新采购价格 分子 kpein TYPE konp-kpein, "最新采购价格 分母 zcgjg(15) TYPE p DECIMALS 2, "最新采购价格:KONP-KBETR/KONP-KPEIN kschl TYPE a017-kschl, "条件类型 datab TYPE a017-datab, "采购价有效从 datbi TYPE a017-datbi, "采购价有效至 lifnr TYPE a017-lifnr, "供应商 END OF ty_a017 . *物料类型描述 TYPES : BEGIN OF ty_t134t, mtart TYPE t134t-mtart, mtbez TYPE t134t-mtbez, END OF ty_t134t. *标准价 TYPES: BEGIN OF ty_mbew, matnr TYPE mbew-matnr, bwkey TYPE mbew-bwkey, stprs TYPE mbew-stprs, "标准价分子 peinh TYPE mbew-peinh, "标准价分母 zbzj(15) TYPE p DECIMALS 2, "标准价 : MBEW-STPRS/MBEW-PEINH lplpr TYPE mbew-lplpr, "当前计划价格 pdatl TYPE mbew-pdatl, "当前会计年 pprdl TYPE mbew-pprdl, "当前会计期间 END OF ty_mbew. *生产订单日期 TYPES: BEGIN OF ty_afko, plnbez TYPE afko-plnbez, gstrp TYPE afko-gstrp, aufnr TYPE afko-aufnr, END OF ty_afko . DATA: gt_data TYPE TABLE OF ty_data, gt_a017 TYPE TABLE OF ty_a017, gt_t134t TYPE TABLE OF ty_t134t, gt_mbew TYPE TABLE OF ty_mbew, gt_afko TYPE TABLE OF ty_afko, gs_data TYPE ty_data, gs_a017 TYPE ty_a017, gs_t134t TYPE ty_t134t, gs_mbew TYPE ty_mbew, gs_afko TYPE ty_afko . DATA : gv_year TYPE faglflext-ryear, gv_month TYPE bkpf-monat, gv_date LIKE sy-datum. *ALV控制 DATA: gt_fieldcat TYPE TABLE OF lvc_s_fcat, " ALV 控制: 字段目录 gs_fieldcat TYPE lvc_s_fcat, " ALV 控制: 字段目录 gs_layout TYPE lvc_s_layo. " ALV 控制: 字段目录 SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001 . PARAMETERS: p_werks TYPE marc-werks OBLIGATORY, "工厂 p_date TYPE afko-gstrp OBLIGATORY, "日期 g_parts TYPE c RADIOBUTTON GROUP grp1 DEFAULT 'X', "零件 g_comp TYPE c RADIOBUTTON GROUP grp1 "整车 . PARAMETERS :p_a TYPE c AS CHECKBOX. SELECTION-SCREEN END OF BLOCK b1 . START-OF-SELECTION. PERFORM frm_get_date . IF g_parts IS NOT INITIAL . PERFORM frm_parts_get_data . PERFORM frm_parts_edit_data . ELSEIF g_comp IS NOT INITIAL . PERFORM frm_comp_get_data . PERFORM frm_comp_edit_data . ENDIF. IF p_a = 'X'. PERFORM frm_bapi. ENDIF. PERFORM frm_show_data . END-OF-SELECTION. *&---------------------------------------------------------------------* *& Form FRM_GET_DATE *&---------------------------------------------------------------------* *& 初始化起止日期 *&---------------------------------------------------------------------* FORM frm_get_date. gv_year = p_date+0(4). gv_month = ( p_date+4(2) + 1 ) MOD 12 . CONCATENATE gv_year gv_month '01' INTO gv_date . CALL FUNCTION 'BKK_GET_MONTH_LASTDAY' EXPORTING i_date = gv_date IMPORTING e_date = gv_date. ENDFORM . *&---------------------------------------------------------------------* *& Form FRM_GET_PARTS_DATA *&---------------------------------------------------------------------* *& 获取零件的相关数据 *&---------------------------------------------------------------------* FORM frm_parts_get_data . CLEAR : gt_a017,gt_t134t ,gt_mbew,gt_data . SELECT marc~werks, mara~matnr, makt~maktx, mara~mtart INTO CORRESPONDING FIELDS OF TABLE @gt_data FROM marc INNER JOIN mara ON mara~matnr = marc~matnr LEFT JOIN makt ON makt~matnr = marc~matnr WHERE marc~werks = @p_werks AND mara~mtart IN ('Z001','Z002', 'Z006' ,'Z010') AND makt~spras = @sy-langu . IF gt_data IS NOT INITIAL . * 读取物料类型描述 SELECT t134t~mtart, t134t~mtbez INTO TABLE @gt_t134t FROM t134t FOR ALL ENTRIES IN @gt_data WHERE mtart = @gt_data-mtart AND spras = @sy-langu . "按优先级获取 gt_a017 的数据 PERFORM frm_get_a017_data. "读取 MBEW 中的数据 SELECT mbew~matnr, mbew~stprs, mbew~peinh, mbew~lplpr, mbew~pdatl, mbew~pprdl INTO CORRESPONDING FIELDS OF TABLE @gt_mbew FROM mbew FOR ALL ENTRIES IN @gt_data WHERE bwkey = @gt_data-werks AND matnr = @gt_data-matnr . ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_EDIT_PART_DATA *&---------------------------------------------------------------------* *& 零件:编辑获取到的数据 *&---------------------------------------------------------------------* FORM frm_parts_edit_data . "维护最新采购价格 IF gt_a017 IS NOT INITIAL . LOOP AT gt_a017 ASSIGNING FIELD-SYMBOL(<ls_a017>) . IF <ls_a017>-kpein <> 0 . <ls_a017>-zcgjg = <ls_a017>-kbetr / <ls_a017>-kpein. ENDIF. ENDLOOP. "取 最小的 最新采购价格 SORT gt_a017 BY matnr zcgjg . DELETE ADJACENT DUPLICATES FROM gt_a017 COMPARING matnr. ENDIF. "维护 GT_DATA 内的数据 IF gt_data IS INITIAL . EXIT. ELSE. SORT gt_t134t BY mtart . SORT gt_a017 BY matnr . SORT gt_mbew BY matnr. LOOP AT gt_data ASSIGNING FIELD-SYMBOL(<ls_data>). "读取内表 GT_A017 IF gt_a017 IS NOT INITIAL . READ TABLE gt_a017 INTO gs_a017 WITH KEY matnr = <ls_data>-matnr BINARY SEARCH . IF sy-subrc = 0. <ls_data>-zcgjg = gs_a017-zcgjg . <ls_data>-kschl = gs_a017-kschl . <ls_data>-datab = gs_a017-datab . <ls_data>-datbi = gs_a017-datbi . <ls_data>-lifnr = gs_a017-lifnr . ENDIF. "若最新采购订单为 0 则删除该条数据 IF <ls_data>-zcgjg = 0. DELETE gt_data WHERE matnr = <ls_data>-matnr . CONTINUE. ENDIF. ENDIF. "读取内表 GT_MBEW IF gt_mbew IS NOT INITIAL . READ TABLE gt_mbew INTO gs_mbew WITH KEY matnr = <ls_data>-matnr BINARY SEARCH . IF sy-subrc = 0 . IF gs_mbew-peinh <> 0. <ls_data>-zbzj = gs_mbew-stprs / gs_mbew-peinh . ENDIF. <ls_data>-lplpr = gs_mbew-lplpr. <ls_data>-pdatl = gs_mbew-pdatl. <ls_data>-pprdl = gs_mbew-pprdl. ENDIF. "判断最新采购价格时候等于标准价 IF <ls_data>-zcgjg = <ls_data>-zbzj. DELETE gt_data WHERE matnr = <ls_data>-matnr . CONTINUE. ENDIF. ENDIF. "读取内表 GT_T134T IF gt_t134t IS NOT INITIAL . READ TABLE gt_t134t INTO gs_t134t WITH KEY mtart = <ls_data>-mtart BINARY SEARCH . IF sy-subrc = 0 . <ls_data>-mtbez = gs_t134t-mtbez . ENDIF. ENDIF. ENDLOOP. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_GET_A017_DATA *&---------------------------------------------------------------------* *& 按 指定的优先级 读取最新采购价格相关数据 *&---------------------------------------------------------------------* FORM frm_get_a017_data . "读取 a017 的数据 SELECT a017~matnr, konp~kbetr, konp~kpein, a017~kschl, a017~datab, a017~datbi, a017~lifnr INTO CORRESPONDING FIELDS OF TABLE @gt_a017 FROM a017 LEFT JOIN konp ON konp~knumh = a017~knumh FOR ALL ENTRIES IN @gt_data WHERE a017~datab <= @p_date AND a017~datbi >= @p_date AND a017~werks = @gt_data-werks AND matnr = @gt_data-matnr . "读取 a901 的数据 IF gt_a017 IS INITIAL . SELECT a901~matnr, konp~kbetr, konp~kpein, a901~kschl, a901~datab, a901~datbi, a901~lifnr INTO CORRESPONDING FIELDS OF TABLE @gt_a017 FROM a901 LEFT JOIN konp ON konp~knumh = a901~knumh FOR ALL ENTRIES IN @gt_data WHERE a901~datab <= @p_date AND a901~datbi >= @p_date AND a901~werks = @gt_data-werks AND matnr = @gt_data-matnr . "读取 a903 的数据 IF gt_a017 IS INITIAL . SELECT a903~matnr, konp~kbetr, konp~kpein, a903~kschl, a903~datab, a903~datbi, a903~lifnr INTO CORRESPONDING FIELDS OF TABLE @gt_a017 FROM a903 LEFT JOIN konp ON konp~knumh = a903~knumh FOR ALL ENTRIES IN @gt_data WHERE a903~datab <= @p_date AND a903~datbi >= @p_date AND a903~werks = @gt_data-werks AND matnr = @gt_data-matnr . ELSEIF gt_a017 IS INITIAL . MESSAGE '未获取到 最新采购价格 等相关数据!' TYPE 'E'. ENDIF. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_GET_PARTS_DATA *&---------------------------------------------------------------------* *& 获取 整车 的相关数据 *&---------------------------------------------------------------------* FORM frm_comp_get_data . CLEAR: gt_data ,gt_mbew,gt_t134t . "获取基础数据 SELECT marc~werks, marc~matnr, mara~mtart, makt~maktx INTO CORRESPONDING FIELDS OF TABLE @gt_data FROM marc INNER JOIN mara ON mara~matnr = marc~matnr LEFT JOIN makt ON makt~matnr = marc~matnr WHERE mara~mtart IN ( 'Z003' , 'Z004' ) AND marc~werks = @p_werks AND makt~spras = @sy-langu . IF gt_data IS NOT INITIAL . "读取生产订单日期 SELECT afko~plnbez, afko~gstrp, afko~aufnr INTO CORRESPONDING FIELDS OF TABLE @gt_afko FROM afko INNER JOIN aufk ON aufk~aufnr = afko~aufnr FOR ALL ENTRIES IN @gt_data WHERE aufk~werks = @gt_data-werks AND afko~gstrp >= @p_date AND afko~gstrp <= @gv_date AND plnbez = @gt_data-matnr . SORT gt_afko BY plnbez gstrp aufnr . DELETE ADJACENT DUPLICATES FROM gt_afko COMPARING plnbez. "读取物料类型描述 SELECT t134t~mtart, t134t~mtbez INTO CORRESPONDING FIELDS OF TABLE @gt_t134t FROM t134t FOR ALL ENTRIES IN @gt_data WHERE spras = @sy-langu AND mtart = @gt_data-mtart . "读取 MBEW 中的数据 SELECT mbew~matnr, mbew~stprs, mbew~peinh, mbew~lplpr, mbew~pdatl, mbew~pprdl FROM mbew INTO CORRESPONDING FIELDS OF TABLE @gt_mbew FOR ALL ENTRIES IN @gt_data WHERE bwkey = @gt_data-werks AND matnr = @gt_data-matnr . ENDIF. ENDFORM . *&---------------------------------------------------------------------* *& Form FRM_EDIT_PART_DATA *&---------------------------------------------------------------------* *& 整车:编辑获取到的数据 *&---------------------------------------------------------------------* FORM frm_comp_edit_data . IF gt_data IS INITIAL . EXIT. ELSE. SORT gt_afko BY plnbez . SORT gt_t134t BY mtart. SORT gt_mbew BY matnr. LOOP AT gt_data ASSIGNING FIELD-SYMBOL(<ls_data>) . "读取内表 GT_AFKO IF gt_afko IS NOT INITIAL . READ TABLE gt_afko INTO gs_afko WITH KEY plnbez = <ls_data>-matnr BINARY SEARCH . IF sy-subrc = 0 . <ls_data>-gstrp = gs_afko-gstrp. <ls_data>-aufnr = gs_afko-aufnr. ENDIF. ENDIF. "读取内表 GT_T134T IF gt_t134t IS NOT INITIAL . READ TABLE gt_t134t INTO gs_t134t WITH KEY mtart = <ls_data>-mtart BINARY SEARCH. IF sy-subrc = 0. <ls_data>-mtbez = gs_t134t-mtbez. ENDIF. ENDIF. "读取内表 GT_MBEW IF gt_mbew IS NOT INITIAL . READ TABLE gt_mbew INTO gs_mbew WITH KEY matnr = <ls_data>-matnr BINARY SEARCH. IF sy-subrc = 0. IF gs_mbew-peinh <> 0 . <ls_data>-zbzj = gs_mbew-stprs / gs_mbew-peinh. ENDIF. <ls_data>-lplpr = gs_mbew-lplpr. <ls_data>-pdatl = gs_mbew-pdatl. <ls_data>-pprdl = gs_mbew-pprdl. ENDIF. ENDIF. ENDLOOP. * DELETE gt_data WHERE gstrp IS INITIAL . DELETE gt_data WHERE gstrp < p_date OR gstrp > gv_date . ENDIF. ENDFORM . *&---------------------------------------------------------------------* *& Form FRM_SET_LAYOUT *&---------------------------------------------------------------------* *& ALV 样式 *&---------------------------------------------------------------------* FORM frm_set_layout. CLEAR gs_layout. gs_layout-zebra = 'X'. " 斑马线 gs_layout-cwidth_opt = 'X'. " 自动调整ALVL列宽 gs_layout-no_rowmark = 'X'. " ALV 控制: 禁用行选择 ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_SHOW_DATA *&---------------------------------------------------------------------* *& ALV 展示 *&---------------------------------------------------------------------* FORM frm_show_data . IF gt_data IS INITIAL. MESSAGE '无数据!' TYPE 'E'. EXIT . ELSE. PERFORM frm_set_layout. IF g_parts = 'X'. PERFORM frm_parts_set_fields. ELSEIF g_comp = 'X'. PERFORM frm_comp_set_fields . ENDIF. *&---alv 显示函数 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_callback_program = sy-repid " 当前程序 is_layout_lvc = gs_layout " 界面格式 it_fieldcat_lvc = gt_fieldcat " 字段属性 "i_grid_title = title "ALV 标题 TABLES t_outtab = gt_data EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDIF. ENDFORM. FORM frm_parts_set_fields . REFRESH gt_fieldcat. PERFORM frm_set_fieldcat USING : 'WERKS' TEXT-t01 '' '' '', 'MATNR' TEXT-t02 '' '' '', 'MAKTX' TEXT-t03 '' '' '', 'MTART' TEXT-t04 '' '' '', 'MTBEZ' TEXT-t05 '' '' '', 'ZCGJG' TEXT-t06 '' '' '', 'KSCHL' TEXT-t07 '' '' '', 'DATAB' TEXT-t08 '' '' '', 'DATBI' TEXT-t09 '' '' '', 'LIFNR' TEXT-t10 '' '' '', 'ZBZJ' TEXT-t12 '' '' '', 'LPLPR' TEXT-t13 '' '' '', 'PDATL' TEXT-t14 '' '' '', 'PPRDL' TEXT-t15 '' '' ''. IF p_a = 'X'. PERFORM frm_set_fieldcat USING : 'MSAGE' TEXT-t17 '' '' ''. ENDIF. ENDFORM. FORM frm_comp_set_fields . REFRESH gt_fieldcat. PERFORM frm_set_fieldcat USING : 'WERKS' TEXT-t01 '' '' '', 'MATNR' TEXT-t02 '' '' '', 'MAKTX' TEXT-t03 '' '' '', 'MTART' TEXT-t04 '' '' '', 'MTBEZ' TEXT-t05 '' '' '', 'AUFNR' TEXT-t16 '' '' '', 'GSTRP' TEXT-t11 '' '' '', 'ZBZJ' TEXT-t12 '' '' '', 'LPLPR' TEXT-t13 '' '' '', 'PDATL' TEXT-t14 '' '' '', 'PPRDL' TEXT-t15 '' '' ''. IF p_a = 'X'. PERFORM frm_set_fieldcat USING : 'MSAGE' TEXT-t17 '' '' ''. ENDIF. . ENDFORM. FORM frm_set_fieldcat USING pv_fname "字段名 pv_text "列名称 pv_table "参考表 pv_field "参考字段 pv_qfield "参考的单位列 . CLEAR gs_fieldcat. gs_fieldcat-fieldname = pv_fname. gs_fieldcat-scrtext_l = pv_text. gs_fieldcat-scrtext_m = pv_text. gs_fieldcat-scrtext_s = pv_text. gs_fieldcat-ref_table = pv_table. gs_fieldcat-ref_field = pv_field. gs_fieldcat-qfieldname = pv_qfield. APPEND gs_fieldcat TO gt_fieldcat. ENDFORM. *------------------------------append by hand ylx 20230209 新增CK_F_MATERIAL_CALC跑CK11N begin of-----------------------------------------* *&---------------------------------------------------------------------* *& Form FRM_BDC *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_bapi . DATA:lkeko LIKE keko OCCURS 0 WITH HEADER LINE. DATA:lkeph LIKE keph OCCURS 0 WITH HEADER LINE. DATA: it_matnr TYPE STANDARD TABLE OF bapimaterial, is_matnr TYPE bapimaterial, it_plant TYPE STANDARD TABLE OF bapiplant, is_plant TYPE bapiplant, it_bukrs TYPE STANDARD TABLE OF bapicompanycode, is_bukrs TYPE bapicompanycode. DATA:it_out_list_vo TYPE STANDARD TABLE OF bapimarkingoutlist WITH HEADER LINE, it_return_vo TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE, it_out_list_fr TYPE STANDARD TABLE OF bapireleasingoutlist WITH HEADER LINE, it_return_fr TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE, f_valuation TYPE bapivaluation. DATA lv_year TYPE bapireleasing-posting_year. DATA lv_period TYPE bapireleasing-posting_period. lv_year = sy-datum+0(4). lv_period = sy-datum+4(2). LOOP AT gt_data INTO gs_data WHERE zcgjg <> 0 AND zbzj = 0 AND datbi >= sy-datum. "CK11N成本滚算 CALL FUNCTION 'CK_F_MATERIAL_CALC' EXPORTING klvar = 'PPC1' matnr = gs_data-matnr werks = gs_data-werks losgr = '1.0' tvers = '01' kadat = sy-datum bidat = '99991231' aldat = sy-datum bwdat = sy-datum s_dunkel = 'X' s_update = 'S' * s_no_commit = ' ' * s_repetitive = ' ' * s_sngl_lock = 'X' * u_kalsm = ' ' IMPORTING f_keko_exp = lkeko TABLES t_keph_exp = lkeph EXCEPTIONS wrong_call = 1 keph_not_found = 2 locked = 3 OTHERS = 4. IF lkeko-kalnr IS NOT INITIAL. gs_data-msage = '成本估算成功!'. gs_data-flag1 = 'X'. ELSE. gs_data-msage = '成本估算失败!'. gs_data-flag1 = ''. ENDIF. MODIFY gt_data FROM gs_data. CLEAR: gs_data,lkeko,lkeph,lkeko[],lkeph[]. ENDLOOP. "BAPI_COSTESTIMATE_RELEASING LOOP AT gt_data INTO gs_data WHERE flag1 = 'X' AND zcgjg <> 0 AND zbzj = 0 AND datbi >= sy-datum. is_matnr-sign = 'I'. is_matnr-option = 'EQ'. is_matnr-low = gs_data-matnr. APPEND is_matnr TO it_matnr. is_plant-sign = 'I'. is_plant-option = 'EQ'. is_plant-low = gs_data-werks. APPEND is_plant TO it_plant. is_bukrs-sign = 'I'. is_bukrs-option = 'EQ'. is_bukrs-low = '1000'. APPEND is_bukrs TO it_bukrs. f_valuation-legal = 'X'. "CK24标识 CALL FUNCTION 'BAPI_COSTESTIMATE_MARKING' EXPORTING posting_year = lv_year posting_period = lv_period valuation_view = f_valuation TABLES return = it_return_vo out_list = it_out_list_vo in_material = it_matnr in_plant = it_plant in_comp_code = it_bukrs. READ TABLE it_return_vo INTO DATA(is_return_vo) WITH KEY type = 'E'. IF sy-subrc = 0. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. gs_data-msage = gs_data-msage && ',成本发布失败:'. LOOP AT it_return_vo INTO is_return_vo WHERE type = 'E'. gs_data-msage = gs_data-msage && is_return_vo-message && ','. ENDLOOP. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. gs_data-msage = gs_data-msage && ',成本发布成功:'. CALL FUNCTION 'BAPI_COSTESTIMATE_RELEASING' EXPORTING posting_year = lv_year posting_period = lv_period TABLES return = it_return_fr out_list = it_out_list_fr in_material = it_matnr in_plant = it_plant in_comp_code = it_bukrs. READ TABLE it_return_fr INTO DATA(is_return_fr) WITH KEY type = 'E'. IF sy-subrc <> 0. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. READ TABLE it_return_fr INTO is_return_fr INDEX 1. IF sy-subrc = 0. gs_data-msage = gs_data-msage && is_return_fr-message_v1. ENDIF. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. LOOP AT it_return_fr INTO is_return_fr WHERE type = 'E'. gs_data-msage = gs_data-msage && is_return_vo-message && ','. ENDLOOP. ENDIF. ENDIF. MODIFY gt_data FROM gs_data. CLEAR: gs_data,it_out_list_vo,it_return_vo,it_return_fr,it_out_list_fr,f_valuation,is_matnr,it_matnr,it_bukrs,is_bukrs,is_plant,it_plant. ENDLOOP. ENDFORM. "BDC_DYNPRO *------------------------------append by hand ylx 20230209 新增CK_F_MATERIAL_CALC跑CK11N end-----------------------------------------*