博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ABAP 函数编写

Posted on 2010-03-05 11:39  海岛  阅读(882)  评论(0编辑  收藏  举报

MM模块写了不少报表,发现有很多地方都需要根据物料号和批次获取坯料或者铝箔成品的规格型号,代码很多地方都是重复,并且总体显示代码段偏长不直观,于是决定编写一个函数Z_GET_SPEC_FROM_BATCH.

1、创建一个和数组Z_MM_GROUP,开发类为ZMM;

2、创建函数Z_GET_SPEC_FROM_BATCH,代码如下:

  FUNCTION Z_GET_SPEC_FROM_BATCH.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     REFERENCE(P_MATNR) TYPE  MATNR
*"     REFERENCE(P_CHARG) TYPE  CHARG_D
*"  EXPORTING
*"     REFERENCE(P_SPEC) TYPE  C
*"----------------------------------------------------------------------
  data:
      S_VAL_NUM TYPE TABLE OF BAPI1003_ALLOC_VALUES_NUM,
      VAL_NUM LIKE BAPI1003_ALLOC_VALUES_NUM,
      S_VAL_CHAR TYPE TABLE OF BAPI1003_ALLOC_VALUES_CHAR.

  call function 'Z_FIG001_GET_CHAR_FROM_BATCH'
        exporting
          P_MATNR           = P_MATNR
          P_CHARG           = P_CHARG
        TABLES
          P_VAL_NUM         = S_VAL_NUM
          P_VAL_CHAR        = S_VAL_CHAR
        exceptions
          no_form            = 1
          no_function_module = 2
          others             = 3.
    if sy-subrc <> 0.
        P_SPEC = ''.
    else.
        datam(16type c,
              n(16type c.
        loop at S_VAL_NUM into VAL_NUM.
            if VAL_NUM-CHARACT eq 'P0015'.    "宽度
                CALL FUNCTION 'QSS0_FLTP_TO_CHAR_CONVERSION'
                EXPORTING
                  I_NUMBER_OF_DIGITS = '2'
                  I_FLTP_VALUE       = VAL_NUM-VALUE_FROM
                IMPORTING
                  E_CHAR_FIELD       = m.
            elseif VAL_NUM-CHARACT eq 'P0016'.   "厚度
                CALL FUNCTION 'QSS0_FLTP_TO_CHAR_CONVERSION'
                EXPORTING
                  I_NUMBER_OF_DIGITS = '2'
                  I_FLTP_VALUE       = VAL_NUM-VALUE_FROM
                IMPORTING
                  E_CHAR_FIELD       = n.
            endif.
        endloop.
        CONDENSE m.
        CONDENSE n.
        CONCATENATE n '*' m INTO P_SPEC.
    endif.
ENDFUNCTION.