Autor Tema: Busco función para explosionar materiales  (Leído 13252 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Carlos

  • Usuario Sr.
  • ****
  • Mensajes: 177
    • Ver Perfil
Busco función para explosionar materiales
« en: 04 de Diciembre de 2007, 11:35:32 am »
Hola, exactamente lo que estoy buscando es una función que me de algo así:

Un material A consume un material B y este a su vez consume un material C...

Saludosss

Desconectado Nuria

  • Usuario Completo
  • ***
  • Mensajes: 90
    • Ver Perfil
Re: Busco función para explosionar materiales
« Respuesta #1 en: 04 de Diciembre de 2007, 03:40:20 pm »
Puedes utilizar la siguiente función: CS_BOM_EXPL_MAT_V2

Te mando un ejemplo de un programa que te saca un listado con lo que pides.
Código: [Seleccionar]

REPORT  z_bom.
TABLES: mard,stpo,stko,tc04,t024d,marc,ekbe,mara,ekko,makt.

DATA : capid LIKE tc04-capid,
       datuv LIKE stko-datuv,
       emeng LIKE stko-bmeng,
       mehrs LIKE csdata-xfeld,
       mtnrv LIKE mara-matnr,
       stlal LIKE stko-stlal,
       stpst LIKE stpox-stufe,
       werks LIKE marc-werks.
DATA : istb LIKE stpox OCCURS 0 WITH HEADER LINE.

DATA : BEGIN OF ibod OCCURS 0,
stufe LIKE stpox-stufe,
idnrk LIKE stpox-idnrk,
bismt LIKE mara-bismt,
ojtxp LIKE stpox-ojtxp,
menge LIKE stpox-menge,
meins LIKE stpox-meins,
mnglg LIKE stpox-mnglg,
meins1 LIKE stpox-meins,
*lgort LIKE mard-lgort,
*labst LIKE mard-labst,
*insme LIKE mard-insme,
*umlme LIKE mard-umlme,
wesbs LIKE ekbe-wesbs,
dispo LIKE marc-dispo,
dsnam LIKE t024d-dsnam,
END OF ibod.


DATA : BEGIN OF imara OCCURS 0,
       matnr LIKE mara-matnr,
       bismt LIKE mara-bismt,
       meins LIKE mara-meins,
       END OF imara.

DATA: BEGIN OF idis OCCURS 0,
      matnr LIKE marc-matnr,
      dispo LIKE marc-dispo,
      dsnam LIKE t024d-dsnam,
      END OF idis.

DATA: BEGIN OF xtab2 OCCURS 10,
         werks LIKE ekpo-werks,
         matnr LIKE ekpo-matnr,
         ebeln LIKE ekpo-ebeln,
         ebelp LIKE ekpo-ebelp,
         wesbs LIKE ekbe-wesbs,
         wesb2 LIKE ekbe-wesbs,
         meinh LIKE ekpo-meins,
       END OF xtab2.
DATA : total LIKE ekbe-wesbs.
*data: begin of i_werks occurs 0,
*      werks like marc-werks,
*      end of i_werks.

RANGES : i_werks FOR marc-werks.

DATA : BEGIN OF imard OCCURS 0,
         matnr LIKE mard-matnr,
         werks LIKE mard-werks,
         lgort LIKE mard-lgort,
         labst LIKE mard-labst,
         insme LIKE mard-insme,
         umlme LIKE mard-umlme,
         END OF imard.

DATA : labst LIKE mard-labst,
       insme LIKE mard-insme,
       umlme LIKE mard-umlme.



SELECTION-SCREEN BEGIN OF BLOCK v1 WITH FRAME TITLE text-001.
PARAMETERS : p_werks LIKE marc-werks OBLIGATORY,
             p_mtnrv LIKE mara-matnr OBLIGATORY,
             p_stlal LIKE stko-stlal OBLIGATORY,
             p_emeng LIKE stko-bmeng OBLIGATORY,
             p_stpst LIKE stpox-stufe.
SELECTION-SCREEN END OF BLOCK v1.

capid = 'PP01'.
datuv = sy-datum.
emeng = p_emeng.
mehrs = 'X'.
mtnrv = p_mtnrv.
stlal = p_stlal.
stpst = p_stpst.
werks = p_werks.
i_werks-low = werks.
i_werks-sign = 'I'.
i_werks-option = 'EQ'.
APPEND i_werks.
CLEAR i_werks.
*skip.
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
 EXPORTING
*   FTREL                       = ' '
*   ALEKZ                       = ' '
*   ALTVO                       = ' '
*   AUFSW                       = ' '
*   AUMGB                       = ' '
*   AUMNG                       = 0
*   AUSKZ                       = ' '
*   AMIND                       = ' '
*   BAGRP                       = ' '
*   BEIKZ                       = ' '
*   BESSL                       = ' '
*   BGIXO                       = ' '
*   BREMS                       = ' '
   capid                       = capid
*   CHLST                       = ' '
*   COSPR                       = ' '
*   CUOBJ                       = 000000000000000
*   CUOVS                       = 0
*   CUOLS                       = ' '
   datuv                       = datuv
*   DELNL                       = ' '
*   DRLDT                       = ' '
*   EHNDL                       = ' '
   emeng                       = emeng
*   ERSKZ                       = ' '
*   ERSSL                       = ' '
*   FBSTP                       = ' '
*   KNFBA                       = ' '
*   KSBVO                       = ' '
*   MBWLS                       = ' '
*   MKTLS                       = 'X'
*   MDMPS                       = ' '
   mehrs                       = mehrs
*   MKMAT                       = ' '
*   MMAPS                       = ' '
*   SALWW                       = ' '
*   SPLWW                       = ' '
*   MMORY                       = ' '
   mtnrv                       = mtnrv
*   NLINK                       = ' '
*   POSTP                       = ' '
*   RNDKZ                       = ' '
*   RVREL                       = ' '
*   SANFR                       = ' '
*   SANIN                       = ' '
*   SANKA                       = ' '
*   SANKO                       = ' '
*   SANVS                       = ' '
*   SCHGT                       = ' '
*   STKKZ                       = ' '
   stlal                       = stlal
*   STLAN                       = ' '
   stpst                       = stpst
*   SVWVO                       = 'X'
   werks                       = werks
*   NORVL                       = ' '
*   MDNOT                       = ' '
*   PANOT                       = ' '
*   QVERW                       = ' '
*   VERID                       = ' '
*   VRSVO                       = 'X'
* IMPORTING
*   TOPMAT                      =
*   DSTST                       =
  TABLES
    stb                         = istb
*   MATCAT                      =
* 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
*   CONVERSION_ERROR            = 8
*   OTHERS                      = 9
          .
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.


LOOP AT istb.
  IF istb-postp = 'L'.
    ibod-stufe = istb-stufe.
    ibod-idnrk = istb-idnrk.
    ibod-ojtxp = istb-ojtxp.
    ibod-menge = istb-menge.
    ibod-meins = istb-meins.
    ibod-mnglg = istb-mnglg.
    APPEND ibod.
    CLEAR ibod.
  ENDIF.
ENDLOOP.

SELECT matnr bismt meins INTO TABLE imara FROM mara FOR ALL ENTRIES IN ibod
                                            WHERE matnr = ibod-idnrk.
SELECT a~matnr a~dispo b~dsnam INTO TABLE idis FROM marc AS a INNER JOIN t024d AS b
ON a~dispo = b~dispo  FOR ALL ENTRIES IN ibod WHERE matnr = ibod-idnrk.

SELECT matnr werks lgort labst insme umlme  INTO TABLE imard FROM mard
FOR ALL ENTRIES IN ibod WHERE matnr = ibod-idnrk AND werks EQ p_werks
.
LOOP AT ibod.
  READ TABLE imara WITH KEY matnr = ibod-idnrk.
  IF sy-subrc EQ 0.
    ibod-bismt = imara-bismt.
    ibod-meins1 = imara-meins.
  ENDIF.
  READ TABLE idis WITH KEY matnr = ibod-idnrk.
  IF sy-subrc EQ 0.
    ibod-dispo = idis-dispo.
    ibod-dsnam = idis-dsnam.
  ENDIF.
  CALL FUNCTION 'MB_SELECT_GR_BLOCKED_STOCK'
  EXPORTING
*   X_KZVBR       = ' '
    x_matnr       =  ibod-idnrk
    x_meins       =  ibod-meins
*   X_KZWSO       = ' '
*   X_NOVBR       = ' '
  TABLES
    xtab2         = xtab2
    xwerks        = i_werks
          .

  LOOP AT xtab2.
    total = total + xtab2-wesbs.
  ENDLOOP.

  ibod-wesbs = total.
  CLEAR xtab2[].
  MODIFY ibod.
  CLEAR : ibod,imara,idis,total,xtab2.
ENDLOOP.

CLEAR imard.
LOOP AT ibod.
  WRITE :/03  sy-tabix LEFT-JUSTIFIED,12 ibod-stufe LEFT-JUSTIFIED,
   18 ibod-idnrk LEFT-JUSTIFIED,37 ibod-bismt LEFT-JUSTIFIED ,57 ibod-ojtxp ,
   99 ibod-menge LEFT-JUSTIFIED ,118 ibod-meins, 123 ibod-mnglg LEFT-JUSTIFIED,
   142 ibod-meins1, 149 ibod-dispo, 157 ibod-dsnam.
*
  WRITE :/10  sy-uline(90) .
  WRITE :/10 '|',11 'Stg Loc',18 '|', 19 'Unres Use Stk',37 '|',39 'QAI Stk ',58 '|', 59 'Trans Loc Stk',
  78 '|',79 'GR Blck Stk' , 99 '|'.
  WRITE :/10  sy-uline(90) .
  LOOP AT imard WHERE matnr EQ ibod-idnrk.
    IF imard-labst GT 0 OR imard-insme GT 0 OR imard-umlme GT 0.
      WRITE :/10 '|', 11 imard-lgort,18 '|', 19 imard-labst LEFT-JUSTIFIED ,37 '|',
              39 imard-insme LEFT-JUSTIFIED,58 '|', 59 imard-umlme LEFT-JUSTIFIED,78 '|', 99 '|'.
    ENDIF.
    labst = labst + imard-labst.
    insme = insme + imard-insme.
    umlme = umlme + imard-umlme.
  ENDLOOP.
  WRITE :/10  sy-uline(90) .
  WRITE :/10 '|', 11 'Total',18 '|', 19 labst LEFT-JUSTIFIED ,37 '|',39 insme LEFT-JUSTIFIED,
  58 '|', 59 umlme LEFT-JUSTIFIED,78 '|',79 ibod-wesbs LEFT-JUSTIFIED, 99 '|'.
  CLEAR: labst,insme,umlme,ibod-wesbs.
  WRITE :/10  sy-uline(90) .
*
ENDLOOP.
ULINE.

TOP-OF-PAGE.
  SELECT SINGLE maktx FROM makt INTO makt-maktx WHERE matnr EQ p_mtnrv.
  WRITE :/40 'Bill Of Material - Stock Position'.
  WRITE :/40 '*********************************'.
  WRITE:/.
  WRITE:/01 'Product Code : ', mtnrv,30 '(',makt-maktx,')', 'Plant : ',werks, 100 'Alternative BOM : ',stlal,125 'Req Qty : ',
             emeng,160 'Level : ' ,  stpst.
  ULINE.
  WRITE:/ '|', 'Sl.No',9 '|',11 'Level','|', 23 'Item Code',36 '|',41 'Old Code',56 '|' ,
  70 'Description',98 '|',104 'BOM Qty ',117 '|', 118 'UOM', 122 '|', 127 'Need Qty', 140 '|',
  141 'UOM' ,146 '|',147 'MRP Code' ,156 '|', 160 'MRP Con Name',175 '|'.


Un saludo.

Desconectado Carlos

  • Usuario Sr.
  • ****
  • Mensajes: 177
    • Ver Perfil
Re: Busco función para explosionar materiales
« Respuesta #2 en: 19 de Diciembre de 2007, 05:05:48 pm »
Hasta el día de hoy la función que me dijiste me fue de maravilla. Pero por causas desconocidas con un material no me funcionaba correctamente.

Y después de buscar y buscar encontré esta otra función: CSAP_MAT_BOM_READ

Por ahora me va bien, de todas formas por si a alguien le viene bien he podido ver que las tablas que guardan las explosiones de los materiales se encuentran en las siguientes...

Código: [Seleccionar]
MAST.   " Enlace material - lista de materiales
STKO.   " Cabecera de lista de materiales
STPO.   " Posición de lista de materiales

Saludos.  ;)

Desconectado cabor

  • Novato
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Busco función para explosionar materiales
« Respuesta #3 en: 20 de Diciembre de 2007, 12:21:03 pm »
hay algun campo en la bapi CS_BOM_EXPL_MAT_V2 para poder pedir que salga hasta el nivel 2 o 3, se que existe uno para que te muestre el primer nivel de explosion o todos (mehrs), el que busco es uno para que salga hasta el nivel n (elegido por el usuario).

GRACIAS

Desconectado Nuria

  • Usuario Completo
  • ***
  • Mensajes: 90
    • Ver Perfil
Re: Busco función para explosionar materiales
« Respuesta #4 en: 20 de Diciembre de 2007, 01:06:54 pm »
Hola.

El campo que buscas es STPST

Código: [Seleccionar]
STPST LIKE  STPOX-STUFE.   " Nivel (en explosiones de listas materiales a varios niveles)
Un saludo.