SAP MM BAPI MATERIAL

From SapWiki
*----------------------------------------------------------------------*
***INCLUDE 
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  SEARCH
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SEARCH .
 data lt_stpo type TABLE OF stpo.
 data ls_stpo like LINE OF lt_stpo.
 data ld_f.
 data ld_l type i.

 clear: mast,
        knmt,
        kna1-name1,
        makt,
        gd_maktx,
        t001w.

 select single * from kna1 where KUNNR = kna1-kunnr.

 select SINGLE * from t001w where werks = marc-werks.

 loop at gt_comp into gs_comp where matnr is NOT INITIAL.
   SELECT    * APPENDING TABLE lt_stpo FROM  STPO
          WHERE  IDNRK  = gs_comp-MATNR
          AND    MENGE  = gs_comp-menge.
   if sy-subrc <> 0.
* debe encontrarse para todos los comp
     ld_f = co_yes.
     exit.
   endif.

 ENDLOOP.

 case ld_f.
   when co_yes.

   when co_no.
     sort lt_stpo by STLNR.
     delete ADJACENT DUPLICATES FROM lt_stpo COMPARING STLNR.

     ld_l = lines( lt_stpo ).
     if ld_l = 1.
       read TABLE lt_stpo into ls_stpo index 1.
       select single * from mast where stlnr = ls_stpo-stlnr
                           and werks  = marc-werks.
       if sy-subrc = 0.
         select SINGLE * from makt where matnr = mast-matnr
                                     and spras = sy-langu.

         select single * from KNMT where matnr = mast-matnr
                                       and kunnr = kna1-kunnr.
         if sy-subrc = 0.
           select SINGLE maktx into gd_maktx from makt where matnr = knmt-matnr
                         and spras = sy-langu.
         endif.
       endif.

     endif.

 ENDCASE.

ENDFORM.                    " SEARCH
*&---------------------------------------------------------------------*
*&      Form  UPDATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM UPDATE .

 select single * from kna1 where KUNNR = kna1-kunnr.
 select SINGLE * from t001w where werks = marc-werks.

 loop at gt_comp into gs_comp where matnr is NOT INITIAL.
   gd_tabix = sy-tabix.
   select SINGLE maktx into gs_comp-maktx from makt
                       where matnr = gs_comp-matnr
                          and spras = sy-langu.
   if sy-subrc = 0.
     modify gt_comp from gs_comp INDEX gd_tabix.
   endif.

 ENDLOOP.

ENDFORM.                    " UPDATE

*&---------------------------------------------------------------------*
*&      Form  f_crear_material
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM f_crear_material .

 PERFORM fill_data.

 CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
 EXPORTING
   headdata             = wa_headdata
   clientdata             = wa_clientdata_new
   clientdatax          = wa_clientdatax
   SALESDATA            = wa_salesdata_new
   SALESDATAx           = wa_salesdatax
 IMPORTING
   RETURN               = wa_return
 TABLES
   materialdescription  = gt_bapi_makt
   taxclassifications   = gt_mlan          "Tax Data
   unitsofmeasure       = gt_bapi_marm     "Units of measure
   unitsofmeasurex      = gt_bapi_marmx    "Checkbox for Units of measure
   returnmessages       = gt_returnmessages
*      materiallongtext     = it_bapi_mltx
   .

*  if p_test <> 'X'.
 IF wa_return-type <> 'E'.
   CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*      EXPORTING
*        wait   = abap_on
     IMPORTING
       return = wa_return_commit.
 ENDIF.
* endif.

ENDFORM.                    " crear_material

*&---------------------------------------------------------------------*
*&      Form  get_matnr
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->O_MATNR    text
*----------------------------------------------------------------------*
form get_matnr CHANGING o_matnr.
 data: gv_bapireturn1 type bapireturn1,
       gt_bapimatnr like table of BAPIMATINR,
       gs_bapimatnr LIKE LINE OF  gt_bapimatnr.

 CALL FUNCTION 'BAPI_MATERIAL_GETINTNUMBER'
   EXPORTING
     material_type    = '1'
     industry_sector  = 'HAWA'
     required_numbers = 1
   IMPORTING
     return           = gv_bapireturn1
   TABLES
     material_number  = gt_bapimatnr.
 IF gv_bapireturn1-type EQ 'S'.
   READ TABLE gt_bapimatnr INTO gs_bapimatnr INDEX 1.
   IF sy-subrc EQ 0.
     o_matnr = gs_bapimatnr-material.
   ENDIF.
 ENDIF.
ENDFORM.                    "get_matnr
*&---------------------------------------------------------------------*
*&      Form  fill_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
form fill_data.
 data gs_bapi_makt like LINE OF gt_bapi_makt.
 data gs_bapi_marm like LINE OF gt_bapi_marm.
 data gs_bapi_marmx like LINE OF gt_bapi_marmx.
 data gs_mlan like LINE OF gt_mlan.

 clear: wa_headdata,
        wa_clientdata_new,
        wa_clientdatax,
        wa_salesdata_new,
        wa_salesdatax,
        gt_bapi_makt[],
        gt_bapi_marm[],
        gt_bapi_marmx[],
        gt_mlan[].

 perform get_matnr CHANGING  wa_headdata-material .
 wa_headdata-ind_sector         =  '1'.
 wa_headdata-matl_type          =  'HAWA'.

 wa_headdata-basic_view         =  co_yes.
 wa_headdata-sales_view         =  co_yes.
 wa_headdata-purchase_view      =  co_yes.
 wa_headdata-mrp_view            =  co_yes.
 wa_headdata-forecast_view      =  co_yes.
*  wa_headdata-work_sched_view    =  abap_on.
*  wa_headdata-prt_view           =  abap_on.
 wa_headdata-storage_view       =  co_yes.    "!
**  wa_headdata-warehouse_view     =  abap_on.
*   wa_headdata-quality_view       =  abap_on.
 wa_headdata-account_view       =  co_yes.
*  wa_headdata-cost_view          =  abap_on.
**  wa_headdata-material_external  =  wa_clientdata-material_external.
**  wa_headdata-material_guid      =  wa_clientdata-material_guid.
**  wa_headdata-material_version   =  wa_clientdata-material_version.

 wa_clientdata_new-MATL_GROUP  = '001'.
 wa_clientdata_new-OLD_MAT_NO  = 'MDF'.
 wa_clientdata_new-BASE_UOM    = 'UN'.
 wa_clientdata_new-NET_WEIGHT  = '1,000'.
 wa_clientdata_new-UNIT_OF_WT  = 'KG'.
 wa_clientdata_new-DIVISION    = '01'.
 wa_clientdata_new-PROD_HIER   = '0001300003'.
 wa_clientdata_new-BATCH_MGMT  = 'X'.
 wa_clientdata_new-PVALIDFROM   = SY-DATUM.
 wa_clientdata_new-ITEM_CAT     = 'NORM'.

 wa_clientdatax-MATL_GROUP  = co_yes.
 wa_clientdatax-OLD_MAT_NO  = co_yes.
 wa_clientdatax-BASE_UOM    = co_yes.
 wa_clientdatax-NET_WEIGHT  = co_yes.
 wa_clientdatax-UNIT_OF_WT  = co_yes.
 wa_clientdatax-DIVISION    = co_yes.
 wa_clientdatax-PROD_HIER   = co_yes .
 wa_clientdatax-BATCH_MGMT  = co_yes .
 wa_clientdatax-PVALIDFROM   = co_yes.
 wa_clientdatax-ITEM_CAT     = co_yes.

 wa_salesdata_new-SALES_ORG   = '01'.
 wa_salesdata_new-DISTR_CHAN  = 'Z2'.
 wa_salesdata_new-MATL_STATS  = '1'.
 wa_salesdata_new-ITEM_CAT    = 'ZMDF'  .
 wa_salesdata_new-ACCT_ASSGT  = '01'.

 wa_salesdatax-SALES_ORG   = '01'.
 wa_salesdatax-DISTR_CHAN  = 'Z2'.
 wa_salesdatax-MATL_STATS  = co_yes.
 wa_salesdatax-ITEM_CAT    = co_yes  .
 wa_salesdatax-ACCT_ASSGT  = co_yes.


 gs_bapi_makt-LANGU   = 'ES'.
 gs_bapi_makt-MATL_DESC  = 'Campo9'.
 append gs_bapi_makt to gt_bapi_makt.

 gs_bapi_marm-ALT_UNIT  = 'UN'.
 gs_bapi_marm-GROSS_WT  = '1,000'.
 append gs_bapi_marm to gt_bapi_marm.

 gs_bapi_marmx-ALT_UNIT  = 'UN'.
 gs_bapi_marmx-GROSS_WT  = co_yes.
 append gs_bapi_marmx to gt_bapi_marmx.


 gs_mlan-DEPCOUNTRY  = 'CL'.
 gs_mlan-TAX_TYPE_1  = 'ZIVA'.
 gs_mlan-TAXCLASS_1  = '1'.
 append gs_mlan to gt_mlan.

ENDFORM.                    "fill_data