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

来源:互联网 发布:c语言continue的流程图 编辑:程序博客网 时间:2024/05/24 07:37

目标: 通过定时程序调用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

原创粉丝点击