您的位置:首页 > 其它

通过RFC创建某种类型的物料的会计视图-----通过MMZ1来实现

2010-05-06 10:07 441 查看
目标: 通过定时程序调用RFC自动创建半成品物料的会计视图:

程序名字 : Z_RFC_CCH_SPRICE

输入的参数 :

P_MATNR TYPE MARA-MATNR 物料号
P_WERKS TYPE MARC-WERKS 工厂
P_PRICE TYPE CHAR18 标准价格

输出的参数 :

ERROR_TYPE TYPE CHAR1 Error type
MSG TYPE CHAR70 Error message

FUNCTION z_rfc_cch_sprice.
*"----------------------------------------------------------------------
*"*"Global interface:
*" IMPORTING
*" VALUE(P_MATNR) TYPE MARA-MATNR
*" VALUE(P_WERKS) TYPE MARC-WERKS
*" VALUE(P_PRICE) TYPE CHAR18
*" EXPORTING
*" VALUE(ERROR_TYPE) TYPE CHAR1
*" VALUE(MSG) TYPE CHAR70
*"----------------------------------------------------------------------

DATA: l_exist TYPE c.
DATA: l_stprs LIKE mbew-stprs. "Standard price from mbew
DATA: l_mtart LIKE mara-mtart. "Mateial type
data: l_werks like t001w-werks. "Plant
DATA: l_BKLAS LIKE MBEW-BKLAS. "评估类 yangyz add 20051227
DATA: l_MATKL LIKE MARA-MATKL. "物料组

tables: t001w.
* Initilizaition itab table
CLEAR: itab_bdcdata, itab_msgtab.
REFRESH: itab_bdcdata, itab_msgtab.
* Convert material number to internal format
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = p_matnr
IMPORTING
output = p_matnr.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Convert material number to Upper casse
TRANSLATE p_matnr TO UPPER CASE.
SELECT SINGLE *
FROM T001W
WHERE WERKS = P_WERKS.
IF SY-SUBRC NE 0.
ERROR_TYPE = 'E'.
CONCATENATE p_werks '工厂不存在!' into msg.
exit.
ENDIF.
* Check plant 1100
if P_WERKS = '1101'.
ERROR_TYPE = 'E'.
MSG = '1101工厂标准价不允许维护'.
exit.
endif.

* Check material type
SELECT SINGLE mtart
FROM mara
INTO l_mtart
WHERE matnr = p_matnr.
if sy-subrc ne 0.
error_type = 'E'.
msg = '物料不存在'.
CLEAR: p_matnr, p_werks, p_price.
EXIT.
endif.
IF l_mtart NE 'FERT' AND l_mtart NE 'BANC'.
error_type = 'E'.
msg = '物料类型不是成品也不是半成品'.
CLEAR: p_matnr, p_werks, p_price.
EXIT.
ENDIF.
* Check for plant
select single werks
into l_werks
from t001w
where werks = p_werks.
if sy-subrc ne 0.
error_type = 'E'.
msg = '工厂不存在'.
CLEAR: p_matnr, p_werks, p_price.
EXIT.
endif.
* Check standard price does exist or not
SELECT SINGLE stprs
FROM mbew
INTO l_stprs
WHERE matnr = p_matnr
AND bwkey = p_werks.
IF NOT l_stprs IS INITIAL.
l_exist = 'Y'. "Yes
ELSE.
l_exist = 'N'. "No
ENDIF.
IF l_exist = 'N'.
* 确定评估类 yangyz add 20051227
select SINGLE MATKL from mara into l_MATKL where matnr = p_matnr.

PERFORM OK_BKLAS USING L_MATKL CHANGING L_BKLAS.
IF L_BKLAS NE SPACE . "确定了评估类才CALL
* Do the standard price does not exist,do mmz1 extended material view
PERFORM call_mmz1 USING p_matnr p_werks p_price l_bklas l_mtart.
CLEAR: p_matnr, p_werks, p_price.
ELSE.
error_type = 'E'.
msg = '无法确定评估类,可能是物料组错误.'.
CLEAR: p_matnr, p_werks, p_price.
EXIT.
ENDIF.
ELSE.
* Do the standard price exist
* Do MR21 Modifiy standard price
PERFORM call_mr21 USING p_matnr p_werks p_price.
CLEAR: p_matnr, p_werks, p_price.
ENDIF.

ENDFUNCTION.

此函数所在的函数组ZCOITF002里面增加以下代码.

*----------------------------------------------------------------------*
***INCLUDE LZCOITF002F01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form call_mm01
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM call_mmz1 USING t_matnr LIKE mara-matnr
t_werks LIKE marc-werks
t_price TYPE char18
t_bklas LIKE mbew-bklas
t_mtart LIKE MARA-mtart.

* Fill bdc table
DATA: l_fval TYPE bdc_fval.
PERFORM bdc_dynpro_set_rtn USING 'SAPMM03M' '0060'.
l_fval = t_matnr.
PERFORM bdc_field_set_rtn USING 'RM03M-MATNR' l_fval.
l_fval = t_mtart.
PERFORM bdc_field_set_rtn USING 'RM03M-MTART' l_fval.
PERFORM bdc_field_set_rtn USING 'BDC_OKCODE' '/00'.

PERFORM bdc_dynpro_set_rtn USING 'SAPMM03M' '0070'.
PERFORM bdc_field_set_rtn USING 'BDC_CURSOR' 'RM03M-KZAU1(11)'.
PERFORM bdc_field_set_rtn USING 'RM03M-KZAU1(11)' 'X'.
PERFORM bdc_field_set_rtn USING 'BDC_OKCODE' '=ENTR'.

PERFORM bdc_dynpro_set_rtn USING 'SAPMM03M' '0080'.
l_fval = t_werks.
PERFORM bdc_field_set_rtn USING 'RM03M-WERKS' l_fval.
PERFORM bdc_field_set_rtn USING 'BDC_OKCODE' '/00'.

PERFORM bdc_dynpro_set_rtn USING 'SAPMM03M' '0280'.
l_fval = t_bklas.
PERFORM bdc_field_set_rtn USING 'MBEW-BKLAS' l_fval.
*&------------------------------------------------------------------*
* Begin modify by DEV880830 on 2004-12-05
*&------------------------------------------------------------------*
* PERFORM bdc_field_set_rtn USING 'MBEW-VPRSV' 'S'.
*&------------------------------------------------------------------*
* End modify by DEV880830 on 2004-12-05
*&------------------------------------------------------------------*
PERFORM bdc_field_set_rtn USING 'MBEW-PEINH' '1'.
l_fval = t_price.
PERFORM bdc_field_set_rtn USING 'MBEW-STPRS' l_fval.
PERFORM bdc_field_set_rtn USING 'BDC_OKCODE' '/00'.

PERFORM bdc_dynpro_set_rtn USING 'SAPLSPO1' '0300'.
PERFORM bdc_field_set_rtn USING 'BDC_OKCODE' '=YES'.
* Call transaction MMZ1
CALL TRANSACTION c_mmz1 USING itab_bdcdata MODE t_mode
UPDATE t_update
MESSAGES INTO itab_msgtab.
* 检查Call transaction MMZ1是否成功
READ TABLE itab_msgtab WITH KEY msgtyp = 'S'
msgid = 'M3'
msgnr = '800'.
IF sy-subrc = 0.
* Call successfully
error_type = 'S'.
MESSAGE ID itab_msgtab-msgid
TYPE itab_msgtab-msgtyp
NUMBER itab_msgtab-msgnr
WITH itab_msgtab-msgv1
itab_msgtab-msgv2 INTO msg.
ELSE.
* Call unsuccessfully
error_type = 'E'.
READ TABLE itab_msgtab WITH KEY msgtyp = 'E'.
IF sy-subrc = 0.
MESSAGE ID itab_msgtab-msgid
TYPE itab_msgtab-msgtyp
NUMBER itab_msgtab-msgnr
WITH itab_msgtab-msgv1
itab_msgtab-msgv2 INTO msg.
ENDIF.
ENDIF.
ENDFORM. " call_mm01
*&---------------------------------------------------------------------*
*& Form call_mr21
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM call_mr21 USING t_matnr LIKE mara-matnr
t_werks LIKE marc-werks
t_price TYPE char18.
DATA: l_fval TYPE bdc_fval.

DATA: l_lfgja LIKE MARV-LFGJA,
l_lfmon LIKE MARV-LFMON,
l_gjamon(6) TYPE C.
* Fill bdc table
PERFORM bdc_dynpro_set_rtn USING 'SAPRCKM_MR21' '0201'.
***********************************************************************
* Begin of modify on 2004-12-22
***********************************************************************
SELECT SINGLE LFGJA LFMON
INTO (l_lfgja,l_lfmon)
FROM MARV
WHERE BUKRS = t_werks.
IF sy-subrc = 0.
CONCATENATE l_lfgja l_lfmon INTO l_gjamon.
ENDIF.

IF SY-DATUM(6) <> l_gjamon.
CONCATENATE l_gjamon '01' INTO l_fval.
PERFORM bdc_field_set_rtn USING 'MR21HEAD-BUDAT' l_fval.
ENDIF.
***********************************************************************
* Begin of modify on 2004-12-22
***********************************************************************
l_fval = t_werks.
PERFORM bdc_field_set_rtn USING 'MR21HEAD-WERKS' l_fval.
l_fval = 'SAPRCKM_MR21 0250MR21_SUB'.
PERFORM bdc_field_set_rtn USING 'BDC_SUBSCR' l_fval.
l_fval = 'MR21_LAGERMATERIAL_0250'.
PERFORM bdc_field_set_rtn USING 'MR21HEAD-SCREEN_VARIANT' l_fval.
PERFORM bdc_field_set_rtn USING 'BDC_OKCODE' '=ENTR'.

PERFORM bdc_dynpro_set_rtn USING 'SAPRCKM_MR21' '0201'.
l_fval = 'SAPRCKM_MR21 0250MR21_SUB'.
PERFORM bdc_field_set_rtn USING 'BDC_SUBSCR' l_fval.
l_fval = 'MR21_LAGERMATERIAL_BWKEY_0250'.
PERFORM bdc_field_set_rtn USING 'MR21HEAD-SCREEN_VARIANT' l_fval.
l_fval = t_matnr.
PERFORM bdc_field_set_rtn USING 'CKI_MR21_0250-MATNR(01)' l_fval.
l_fval = t_price.
PERFORM bdc_field_set_rtn USING 'CKI_MR21_0250-NEWVALPR(01)' l_fval.
PERFORM bdc_field_set_rtn USING 'BDC_OKCODE' '=SAVE'.
* Call transaction MR21
CALL TRANSACTION c_mr21 USING itab_bdcdata MODE t_mode
UPDATE t_update
MESSAGES INTO itab_msgtab.
* 检查Call transaction MMZ1是否成功
READ TABLE itab_msgtab WITH KEY msgtyp = 'S'.
IF sy-subrc = 0.
* Call successfully
error_type = 'S'.
MESSAGE ID itab_msgtab-msgid
TYPE itab_msgtab-msgtyp
NUMBER itab_msgtab-msgnr
WITH itab_msgtab-msgv1
itab_msgtab-msgv2 INTO msg.
ELSE.
* Call unsuccessfully
READ TABLE itab_msgtab WITH KEY msgtyp = 'E'.
IF sy-subrc = 0.
error_type = 'E'.
MESSAGE ID itab_msgtab-msgid
TYPE itab_msgtab-msgtyp
NUMBER itab_msgtab-msgnr
WITH itab_msgtab-msgv1
itab_msgtab-msgv2 INTO msg.
ELSE.
* Never changed
READ TABLE itab_msgtab WITH KEY msgtyp = 'I'.
CHECK sy-subrc = 0.
error_type = 'I'.
MESSAGE ID itab_msgtab-msgid
TYPE itab_msgtab-msgtyp
NUMBER itab_msgtab-msgnr
WITH itab_msgtab-msgv1
itab_msgtab-msgv2 INTO msg.
ENDIF.
ENDIF.

ENDFORM. " call_mr21

*&---------------------------------------------------------------------*
* BDCDATA PROGRAM DYNPRO DYNBEGIN
*----------------------------------------------------------------------*
* -->P_WRK_PROGRAM BDC Program Name
* -->P_WRK_DYNPRO BDC Dynpro No
*----------------------------------------------------------------------*
FORM bdc_dynpro_set_rtn USING p_wrk_program TYPE bdc_prog
p_wrk_dynpro TYPE bdc_dynr.
CLEAR: itab_bdcdata.
itab_bdcdata-program = p_wrk_program.
itab_bdcdata-dynpro = p_wrk_dynpro.
itab_bdcdata-dynbegin = 'X'.
APPEND itab_bdcdata.
ENDFORM. " BDC_DYNPRO_SET_RTN

*&---------------------------------------------------------------------*
*& Form BDC_FIELD_SET_RTN
*&---------------------------------------------------------------------*
* BDCDATA FNAM FVAL
*----------------------------------------------------------------------*
* -->P_WRK_FNAM BDC Field Name
* -->P_WRK_FVAL BDC Field Value
*----------------------------------------------------------------------*
FORM bdc_field_set_rtn USING p_wrk_fnam TYPE fnam_____4
p_wrk_fval TYPE bdc_fval.
CLEAR: itab_bdcdata.
itab_bdcdata-fnam = p_wrk_fnam.
itab_bdcdata-fval = p_wrk_fval.
APPEND itab_bdcdata.
ENDFORM. "BDC_FIELD_SET_RTN
*&---------------------------------------------------------------------*
*& Form OK_BKLAS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_L_MATKL text
* <--P_L_BKLAS text
*----------------------------------------------------------------------*
FORM OK_BKLAS USING P_MATKL
CHANGING P_BKLAS.
* IF P_MATKL = '700010' . "4寸WAFER
* P_BKLAS = '7940'.
* ENDIF.
* IF P_MATKL = '700020' . "5寸WAFER
* P_BKLAS = '7930'.
* ENDIF.
* IF P_MATKL = '700030' . "6寸WAFER
* P_BKLAS = '7920'.
* ENDIF.
* IF P_MATKL = '600010' . "4寸EPI
* P_BKLAS = '6020'.
* ENDIF.
* IF P_MATKL = '600020' . "5寸EPI
* P_BKLAS = '6010'.
* ENDIF.
* IF P_MATKL = '600030' . "6寸EPI
* P_BKLAS = '6000'.
* ENDIF.

IF P_MATKL = SPACE . "空 则默认评估类为7920 6寸成品
P_BKLAS = '7920'.
else.
select BKLAS into P_BKLAS from zmm014 where MATKL = p_matkl.
endselect.
ENDIF.
ENDFORM. " OK_BKLAS
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐