Разузлование спецификаций (пример FM, like CS12)

Автор Паганель, Березень 29, 2011, 01:50:40 ДП

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

Паганель

Пример для http://sapforum.biz/index.php/topic,1505.msg8622.html#msg8622
Данные для примера, в gt_bom - все позиции спецификаций

DATA: BEGIN OF LTAB OCCURS 0.               "table for comp detail
       INCLUDE STRUCTURE STPOX.
DATA: END OF LTAB.

DATA: BEGIN OF MTAB OCCURS 0.               "table for assy detail
       INCLUDE STRUCTURE CSCMAT.
DATA: END OF MTAB.


DATA: BEGIN OF gt_bom OCCURS 0.               "table for comp detail
 INCLUDE STRUCTURE STPOX.
 INCLUDE STRUCTURE CSCMAT as CSCMAT RENAMING WITH SUFFIX cs.
 DATA: MAKTX TYPE MAKTX.
DATA: END OF gt_bom.


форма:

*&---------------------------------------------------------------------*
*&      Form  explode_bom
*&---------------------------------------------------------------------*
*       Разузловании спецификаций
*----------------------------------------------------------------------*

FORM explode_bom
 USING rs_matnr TYPE matnr
       rs_datuv TYPE stpox-datuv
       rs_aumng TYPE stko-bmeng
       rs_werks TYPE werks_d.

 DATA:  rs_stlan LIKE mast-stlan,         "usage
        rs_stlal LIKE mast-stlal,         "alternate
        rs_spras LIKE makt-spras.

 rs_stlan = '1'.
 rs_stlal = '01'.
 rs_spras = sy-langu.


 REFRESH ltab.
 REFRESH mtab.
 CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
   EXPORTING
     ftrel                 = ' '
     aufsw                 = ' '
     brems                 = ' '
     aumng                 = rs_aumng
     capid                 = 'BEST'    "'PP01' "App ID
     datuv                 = rs_datuv
     ehndl                 = '1'
     mbwls                 = ' '
     mktls                 = 'X'
     mehrs                 = 'X'                   " Multi-level
     mtnrv                 = rs_matnr
     stlal                 = rs_stlal
     stlan                 = rs_stlan
     werks                 = rs_werks
   TABLES
     stb                   = ltab
     matcat                = mtab
   EXCEPTIONS
     alt_not_found         = 1
     call_invalid          = 2
     material_not_found    = 3
     missing_authorization = 4
     no_bom_found          = 5
     no_plant_data         = 6
     no_suitable_bom_found = 7
     OTHERS                = 8.

 IF sy-subrc = '7'.
   "WRITE: /1 text-i11, rs_matnr.
   WRITE: /1 ' no_suitable_bom_found', rs_matnr.
 ELSEIF sy-subrc NE 0.
   "WRITE: /1 text-i12, rs_matnr.
   WRITE: /1 'не найдена спецификация', rs_matnr.
 ENDIF.


 CLEAR ltab.
 "CLEAR mtab.

 "LOOP AT mtab .
 LOOP AT ltab.
   SELECT SINGLE * FROM mast WHERE werks EQ ltab-werks AND
                                   stlnr EQ ltab-stlnr AND
                                   stlan EQ ltab-stlan.
   CHECK sy-subrc EQ '0000'.
   SELECT SINGLE * FROM marc WHERE matnr EQ ltab-idnrk AND
                                   werks EQ ltab-werks.
   CHECK sy-subrc EQ '0000'.
   SELECT SINGLE * FROM makt WHERE matnr EQ ltab-idnrk AND
                                   spras EQ rs_spras.
   CHECK sy-subrc EQ '0000'.

   IF ltab-mstae NE '00' .
     FORMAT COLOR 3 INTENSIFIED.
   ELSE.
     FORMAT COLOR 2.
   ENDIF.
   "=
   gt_bom-maktx = makt-maktx.
   "=
   WRITE :/ ltab-stufe,
            mast-matnr , ltab-idnrk , makt-maktx,
                                      marc-ekgrp , ltab-matkl,
            ltab-mstae ,  ltab-mmsta , ltab-dismm ,ltab-sobsl,
            ltab-mschg , ltab-mmein , ltab-mtart, ltab-revlv.
   "HIDE : ltab-idnrk , marc-werks.

   "=
   MOVE-CORRESPONDING mtab TO gt_bom.
   MOVE-CORRESPONDING ltab TO gt_bom.
   APPEND gt_bom.
   "=
 ENDLOOP.



ENDFORM.                    "explode_bom

Думаю, в большинстве случае понятно....