取BOM的相关信息报表。

 
REPORT  ztestbom.
*----------------------------------------------------------------------------*
* Tables Declare
*----------------------------------------------------------------------------*
TABLES:
  mast,
  stko,
  stpo,
  makt,
  mara,
  ekko,
  mbew,
  ekpo,
  eine,
  eina,
  marc.

*----------------------------------------------------------------------------*
* Import Package
*----------------------------------------------------------------------------*
TYPE-POOLS: slis.

*----------------------------------------------------------------------------*
* Table defination
*----------------------------------------------------------------------------*
DATABEGIN OF i_tab OCCURS 0,
     matnr LIKE mast-matnr,                  "Material Number
     stlnr LIKE mast-stlnr,                  "Bill of material
     werks LIKE mast-werks,                  "Plant
     ekorg LIKE ekko-ekorg,                  "Purchasing Organization
     meins LIKE mara-meins,                  "Base Unit of Measure
     netpr LIKE eine-netpr,                  "Net Price
     waers LIKE eine-waers,                  "Currency
     maktx LIKE makt-maktx,                  "Material Description
     ispackage(3TYPE c,                    "Is Package
      END OF i_tab.

DATA: i_tab1 LIKE TABLE OF i_tab WITH HEADER LINE.
DATA: i_tab2 LIKE TABLE OF i_tab WITH HEADER LINE.

DATA: netpr_hkd LIKE eine-netpr.
DATA: netpr_sum LIKE eine-netpr.


REFRESH: i_tab.

"Get  with 
SELECT mast~matnr mast~stlnr marc~werks makt~maktx mara~meins
      INTO CORRESPONDING FIELDS OF TABLE i_tab FROM mast
      INNER JOIN marc ON mast~matnr = marc~matnr
      INNER JOIN makt ON mast~matnr = makt~matnr
      INNER JOIN mara ON mast~matnr = mara~matnr
      WHERE mast~matnr BETWEEN '000000000000330100' AND '000000000000330166'.

i_tab-ispackage = 'Yes'.
MODIFY i_tab TRANSPORTING ispackage WHERE ispackage IS INITIAL.
i_tab-waers = 'HKD'.
MODIFY i_tab TRANSPORTING waers WHERE waers IS INITIAL.

LOOP AT i_tab.

  netpr_sum = 0.

  "Get All BOM Material item with  in table .
  SELECT mara~matnr stpo~stlnr marc~werks makt~maktx mara~meins
    INTO CORRESPONDING FIELDS OF TABLE i_tab1 FROM stpo
    INNER JOIN marc ON stpo~idnrk = marc~matnr
    INNER JOIN makt ON stpo~idnrk = makt~matnr
    INNER JOIN mara ON stpo~idnrk = mara~matnr
    WHERE stpo~stlnr = i_tab-stlnr.

  i_tab1-ispackage = 'No'.
  MODIFY i_tab1 TRANSPORTING ispackage WHERE ispackage IS INITIAL.

  LOOP AT i_tab1.

    "Get  with 
    SELECT SINGLE * FROM ekpo WHERE matnr = i_tab1-matnr.
    IF sy-subrc = 0.
      SELECT SINGLE * FROM  ekko WHERE ebeln = ekpo-ebeln.
      IF sy-subrc = 0.
        i_tab1-ekorg = ekko-ekorg.
      ENDIF.
    ENDIF.

    "Get , with 
    SELECT SINGLE * FROM eina WHERE matnr = i_tab1-matnr.
    IF sy-subrc = 0.
      SELECT SINGLE * FROM  eine WHERE infnr = eina-infnr.
      IF sy-subrc = 0.
        IF eine-waers <> 'HKD'.
          CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
            EXPORTING
              date             = sy-datum
              foreign_amount   = eine-netpr
              foreign_currency = eine-waers
              local_currency   = 'HKD'
              type_of_rate     = 'M'
            IMPORTING
              local_amount     = netpr_hkd
            EXCEPTIONS
              no_rate_found    = 1
              OTHERS           = 2.

          IF eine-waers = 'JPY'.
            netpr_hkd = netpr_hkd / 100.
          ENDIF.

          i_tab1-netpr = netpr_hkd.
        ELSE.
          i_tab1-netpr = eine-netpr.
        ENDIF.
        i_tab1-waers = 'HKD'.
      ENDIF.
    ENDIF.

    netpr_sum =  netpr_sum + i_tab1-netpr.

  ENDLOOP.

  i_tab-netpr = netpr_sum.

  APPEND i_tab TO  i_tab2.
  APPEND LINES OF  i_tab1 TO i_tab2.

 

LOOP AT  i_tab2.

  WRITE /: ''.
  WRITE :'Material Number:', i_tab2-matnr.
  WRITE :'Bill of material:', i_tab2-stlnr.
  WRITE :'Purchasing Organization:', i_tab2-ekorg.
  WRITE :'Net Price:', i_tab2-netpr, i_tab2-waers.
  WRITE :'Ispackage:', i_tab2-ispackage.
  "WRITE /: '-------------'.

ENDLOOP.


ENDLOOP.

你可能感兴趣的:(ABAP,Code)