Code20080520 - ooxxvv/MySAPnotes GitHub Wiki

Code20080520

  • 物料主檔的各欄位及相關的 Description。

程式碼

物料主檔 (Material Master)

*-----物料主檔欄位
TYPES:BEGIN OF st_mara,
        matnr   LIKE mara-matnr,
        werks   LIKE marc-werks,
        maktx   LIKE makt-maktx,   "物料說明
        spart   LIKE mara-spart,   "部門
        prctr   LIKE marc-prctr,   "利潤中心
        bklas   LIKE mbew-bklas,   "評價類型
        mtart   LIKE mara-mtart,   "物料類型
        beskz   LIKE marc-beskz,   "採購類型
        sobsl   LIKE marc-sobsl,   "特殊採購
        strgr   LIKE marc-strgr,   "策略群組
        mmsta   LIKE marc-mmsta,   "工廠特定物料狀態
        wrkst   LIKE mara-wrkst,   "Model
        prdha   LIKE mara-prdha,   "產品階層
        ihivi   LIKE mara-ihivi,   "高粘性
        ferth   LIKE mara-ferth,   "生產檢驗通知單
        matkl   LIKE mara-matkl,   "物料群組
        dispo   LIKE marc-dispo,   "MRP控制員
        bstma   LIKE marc-bstma,   "最大批量
        plifz   LIKE marc-plifz,   "計劃交貨時間
        bstmi   LIKE marc-bstmi,   "最小批量
        maabc   LIKE marc-maabc,   "ABC指示
        kzkri   LIKE marc-kzkri,   "關鍵零件
        meins   LIKE mara-meins,   "單位
        labor   LIKE mara-labor,   "實驗室/辦公室
        spvtxt  LIKE tspat-vtext,  "部門名稱
        ktext   LIKE cepct-mctxt,  "利潤中心名稱
        bkbez   LIKE t025t-bkbez,  "評價類別名稱
        mtbez   LIKE t134t-mtbez,  "物料類型名稱
        beskzt  LIKE dd07v-ddtext, "採購類型名稱
        prdha1  LIKE mara-prdha,   "產品階層1
        prdha2  LIKE mara-prdha,   "產品階層2
        prdha3  LIKE mara-prdha,   "產品階層3
        vtext1  LIKE t179t-vtext,  "產品階層1說明
        vtext2  LIKE t179t-vtext,  "產品階層2說明
        vtext3  LIKE t179t-vtext,  "產品階層3說明
        dsnam   LIKE t024d-dsnam,  "MPR控制員名稱
        lbtxt   LIKE t024x-lbtxt,  "實驗室/辦公室 說明
       END OF st_mara,
       hmara TYPE HASHED TABLE OF st_mara WITH UNIQUE KEY matnr werks.

*-----物料主檔 Internal table
DATA : it_mara TYPE hmara.

*-Get data from database
  SELECT a~matnr a~spart a~mtart a~matkl a~meins a~wrkst a~prdha
         a~ihivi a~ferth a~labor
         c~werks c~prctr c~beskz c~sobsl c~strgr c~mmsta c~dispo
         c~bstma c~plifz c~bstmi c~maabc c~kzkri
         t~maktx
         b~bklas
         INTO CORRESPONDING FIELDS OF TABLE it_mara
         FROM marc AS c INNER JOIN mara AS a
                        ON c~matnr = a~matnr
                        INNER JOIN mbew AS b
                        ON c~matnr = b~matnr AND c~werks = b~bwkey
                   LEFT OUTER JOIN makt AS t
                        ON t~matnr = c~matnr AND t~spras = sy-langu
         WHERE a~matnr IN s_matnr
           AND a~mtart IN s_mtart
           AND a~matkl IN s_matkl
           AND a~spart IN s_spart
           AND a~wrkst IN s_wrkst
           AND a~prdha IN s_prdha
           AND c~werks IN s_werks
           AND c~beskz IN s_beskz
           AND c~sobsl IN s_sobsl
           AND c~prctr IN s_prctr.

  IF sy-subrc NE 0.
    MESSAGE e010 INTO g_message.
    append_message.
    EXIT.
  ENDIF.

*-Get text
  SORT it_mara.
  DELETE ADJACENT DUPLICATES FROM it_mara.

  LOOP AT it_mara INTO lw_mara.

*---Split product hierachy
    PERFORM get_product_hierarchy USING lw_mara-prdha
                               CHANGING lw_mara-prdha1
                                        lw_mara-prdha2
                                        lw_mara-prdha3.
*---Get all text
    PERFORM get_matnr_att_name USING  lw_mara-spart  lw_mara-prctr
                                      lw_mara-bklas  lw_mara-mtart
                                      lw_mara-beskz  lw_mara-prdha1
                                      lw_mara-prdha2 lw_mara-prdha3
                                      lw_mara-dispo  lw_mara-werks
                                      lw_mara-labor
                            CHANGING  lw_mara-spvtxt lw_mara-ktext
                                      lw_mara-bkbez  lw_mara-mtbez
                                      lw_mara-beskzt lw_mara-vtext1
                                      lw_mara-vtext2 lw_mara-vtext3
                                      lw_mara-dsnam  lw_mara-lbtxt.

    MODIFY it_mara FROM lw_mara TRANSPORTING prdha1 prdha2 prdha3
                                             spvtxt ktext bkbez mtbez beskzt
                                             vtext1 vtext2 vtext3 dsnam lbtxt
                                WHERE matnr EQ lw_mara-matnr
                                  AND werks EQ lw_mara-werks.
  ENDLOOP.

產品階層分組 (Product Hierarchy)

FORM get_product_hierarchy  USING    p_prdha
                            CHANGING p_prdha1
                                     p_prdha2
                                     p_prdha3.
*-Product hierarchy structure
  DATA: lt_prodh  TYPE dd03p  OCCURS 0 WITH HEADER LINE.

  DATA: l_start   TYPE i,
        l_leng    TYPE i.

  CHECK NOT p_prdha IS INITIAL.

  CLEAR: p_prdha1, p_prdha2, p_prdha3.

  CALL FUNCTION 'RV_PRODUKTHIERARCHIE_INFO'
    TABLES
      fprodhsinfo    = lt_prodh[]
    EXCEPTIONS
      too_many_level = 1
      OTHERS         = 2.

  IF sy-subrc <> 0.
    EXIT.
  ENDIF.

  LOOP AT lt_prodh.
*---Product hierarchy 1
    IF lt_prodh-fieldname = 'PRODH1'.
      l_leng = lt_prodh-leng.
      p_prdha1 = p_prdha+l_start(l_leng).
      l_start = lt_prodh-leng + l_start.
*---Product hierarchy 2
    ELSEIF lt_prodh-fieldname = 'PRODH2'.
      l_leng = lt_prodh-leng.
      p_prdha2 = p_prdha+l_start(l_leng).
      l_start = lt_prodh-leng + l_start.
*---Product hierarchy 3
    ELSEIF lt_prodh-fieldname = 'PRODH3'.
      l_leng = lt_prodh-leng.
      p_prdha3 = p_prdha+l_start(l_leng).
    ELSE.
      l_start = lt_prodh-leng + l_start.
    ENDIF.
  ENDLOOP.

產品階層說明 (Description of Product Hierarchy)

FORM get_prod_hier_desc  USING    p_prdha
                                  p_vtext.
  SELECT SINGLE vtext
    INTO p_vtext
    FROM t179t
    WHERE spras EQ sy-langu
      AND prodh EQ p_prdha.

ENDFORM.                    " GET_PROD_HIER_DESC

說明文字 (Description)

FORM get_matnr_att_name USING p_spart  p_prctr  p_bklas  p_mtart
                              p_beskz  p_prdha1 p_prdha2 p_prdha3
                              p_dispo  p_werks  p_labor
                     CHANGING p_spvtxt p_ktext  p_bkbez  p_mtbez
                              p_beskzt p_vtext1 p_vtext2 p_vtext3
                              p_dsnam  p_lbtxt.
  DATA: l_prdha  LIKE mara-prdha.

*-部門名稱
  SELECT SINGLE vtext
    INTO p_spvtxt
    FROM tspat
    WHERE spras EQ sy-langu
      AND spart EQ p_spart.

*-利潤中心名稱
  SELECT SINGLE ktext
    INTO p_ktext
    FROM cepct
    WHERE spras EQ sy-langu
      AND prctr EQ p_prctr
      AND datbi GE sy-datum
      AND kokrs EQ g_kokrs.

*-評價類型名稱
  SELECT SINGLE bkbez
    INTO p_bkbez
    FROM t025t
    WHERE spras EQ sy-langu
      AND bklas EQ p_bklas.

*-物料類型名稱
  SELECT SINGLE mtbez
    INTO p_mtbez
    FROM t134t
    WHERE spras EQ sy-langu
      AND mtart EQ p_mtart.

*-採購類型名稱
  PERFORM get_domain_text USING 'BESKZ' p_beskz
                       CHANGING p_beskzt.

*-產品階層說明1
  l_prdha = p_prdha1.
  PERFORM get_prod_hier_desc USING l_prdha p_vtext1.

*-產品階層說明2
  CONCATENATE p_prdha1 p_prdha2 INTO l_prdha.
  PERFORM get_prod_hier_desc USING l_prdha p_vtext2.

*-產品階層說明3
  CONCATENATE p_prdha1 p_prdha2 p_prdha3 INTO l_prdha.
  PERFORM get_prod_hier_desc USING l_prdha p_vtext3.

*-MRP控制員名稱
  SELECT SINGLE dsnam
    INTO p_dsnam
    FROM t024d
    WHERE werks EQ p_werks
      AND dispo EQ p_dispo.

*-實驗室/設計辦公室 名稱
  SELECT SINGLE lbtxt
    INTO p_lbtxt
    FROM t024x
    WHERE spras EQ sy-langu
      AND labor EQ p_labor.

ENDFORM.                    " GET_MATNR_ATT_NAME

採購類型 (Get Domain Text)

FORM get_domain_text  USING    p_donam
                               p_doval
                      CHANGING p_dotxt.

  DATA: l_donam LIKE dd07v-domname,
        l_doval LIKE dd07v-domvalue_l.

  MOVE: p_donam TO l_donam,
        p_doval TO l_doval.

  CALL FUNCTION 'DOMAIN_VALUE_GET'
    EXPORTING
      i_domname  = l_donam
      i_domvalue = l_doval
    IMPORTING
      e_ddtext   = p_dotxt
    EXCEPTIONS
      not_exist  = 1
      OTHERS     = 2.

  IF sy-subrc <> 0.
    CLEAR: p_dotxt.
  ENDIF.

ENDFORM.                    " GET_DOMAIN_TEXT