SAP MM ABAP

From SapWiki
Revision as of 22:29, 24 June 2026 by WikiSysop (talk | contribs) (Created page with "==Leer vistas de Material== <nowiki> FORM asignar_campos_mara. ********************************************************************** * DATA ld_pstat LIKE t134-pstat. DAT...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Leer vistas de Material

FORM asignar_campos_mara.
**********************************************************************

*  DATA ld_pstat LIKE t134-pstat.
  DATA lt_bildtab TYPE TABLE OF  mbildtab.
  DATA ls_bildtab LIKE LINE OF lt_bildtab.

  CALL FUNCTION 'Z_MMMF_OBTENER_VISTAS'
   EXPORTING
     i_tcode              = 'MM01'
     i_matnr              =  gs_mara-matnr
*   I_MTART              =
    TABLES
      et_bildtab          = lt_bildtab
            .

  LOOP AT lt_bildtab INTO ls_bildtab.
* ver tablas t133a & t133b

    IF ls_bildtab-auswg = '07'.
      gs_material-xeik1 = 'X'.    "&# 5 Basic data
    ENDIF.

    IF ls_bildtab-auswg = '21'.
      gs_material-xeib1 = 'X'.   "&# 6 Accounting
    ENDIF.

    IF ls_bildtab-auswg = '34'.
      gs_material-xeig1 = 'X'.   "&# 7 Costing
    ENDIF.

    IF ls_bildtab-auswg = '30'.
      gs_material-xeip1 = 'X'.  "&# 8 Forecasting
    ENDIF.

    IF ls_bildtab-auswg = '12'.
      gs_material-xeive = 'X'.  "&# 9 Foreign Trade Export
    ENDIF.

    IF  ls_bildtab-auswg = '26' .
      gs_material-xeid1 = 'X'.                              "&# 10 MRP
    ENDIF.

    IF ls_bildtab-auswg = '18'.
      gs_material-xeil1 = 'X'.  "&# 11 Storage
    ENDIF.

    IF ls_bildtab-auswg = '14'.
      gs_material-xeie1 = 'X'.  "&# 12 Purchasing
    ENDIF.

    IF ls_bildtab-auswg = '20'.
      gs_material-xeiq1 = 'X'.   "&# 13 Quality
    ENDIF.

    IF ls_bildtab-auswg = '11'.
      gs_material-xeiv4 = 'X'.  "&# 14 Sales/Plant
    ENDIF.

    IF ls_bildtab-auswg = '09'.
      gs_material-xeiv1 = 'X'.  "&# 15 Sales Org
    ENDIF.

    IF  ( ls_bildtab-auswg = '32' OR ls_bildtab-auswg = '33' ).
      gs_material-xeis1 = 'X'.  "&# 16 Warehouse
    ENDIF.

    IF ls_bildtab-auswg = '31'.
      gs_material-xeia1 = 'X'.  "&# 17 Work Sch
    ENDIF.

  ENDLOOP.

*  MOVE-CORRESPONDING gs_mara TO gs_material.
  gs_material-mtpos_mara  = gs_mara-mtpos_mara.             "&# 31
  gs_material-matnr = gs_mara-matnr.                        "&# 1
  gs_material-mbrsh = gs_mara-mbrsh.                        "&# 2
  gs_material-mtart = gs_mara-mtart.
  gs_material-meins = gs_mara-meins.                        "&# 28
  gs_material-matkl = gs_mara-matkl.                        "&# 29
  gs_material-bismt = gs_mara-bismt.                        "&# 30
  gs_material-gewei = gs_mara-gewei.                        "&# 55
  gs_material-kosch = gs_mara-kosch.                        "&# 56
  gs_material-magrv = gs_mara-magrv.                        "&# 57
  gs_material-ntgew = gs_mara-ntgew.                        "&# 58
  gs_material-prdha = gs_mara-prdha.                        "&# 59
  gs_material-rmatp = gs_mara-rmatp.                        "&# 60
  gs_material-spart = gs_mara-spart.                        "&# 61
  gs_material-profl = gs_mara-profl."&# 76 <-- 63
  gs_material-kzumw = gs_mara-kzumw.                        "&# 77
  gs_material-behvo = gs_mara-behvo.
  gs_material-stoff = gs_mara-stoff.
  gs_material-etifo = gs_mara-etifo.
  gs_material-etiar = gs_mara-etiar.
  gs_material-raube = gs_mara-raube.
  gs_material-tempb = gs_mara-tempb.
  gs_material-mhdrz = gs_mara-mhdrz.
  gs_material-iprkz = gs_mara-iprkz.
  gs_material-rdmhd = gs_mara-rdmhd.
  gs_material-mhdlp = gs_mara-mhdlp.
  gs_material-mhdhb = gs_mara-mhdhb.
  gs_material-bstme = gs_mara-bstme.
  gs_material-vabme = gs_mara-vabme.
  gs_material-mfrnr = gs_mara-mfrnr.
  gs_material-mfrpn = gs_mara-mfrpn.
  gs_material-ekwsl = gs_mara-ekwsl.
  gs_material-qmpur = gs_mara-qmpur.
  gs_material-rbnrm = gs_mara-rbnrm.
  gs_material-tragr = gs_mara-tragr.
  gs_material-mstav = gs_mara-mstav.
  gs_material-mstdv = gs_mara-mstdv.

  gs_material-group = gd_group.

ENDFORM.                    "asignar_campos_mara

FUNCTION z_mmmf_obtener_vistas.
*"----------------------------------------------------------------------
*"*"Interfase local
*"  IMPORTING
*"     VALUE(I_TCODE) LIKE  SY-TCODE DEFAULT 'MM01'
*"     VALUE(I_MATNR) LIKE  MARA-MATNR OPTIONAL
*"     VALUE(I_MTART) LIKE  MARA-MTART OPTIONAL
*"  TABLES
*"      ET_BILDTAB STRUCTURE  MBILDTAB
*"  EXCEPTIONS
*"      FUNCTION_ERROR
*"----------------------------------------------------------------------

  DATA:
    ls_mara      LIKE mara,
    ls_t130m     LIKE t130m,         " Transaction control: mat.master
    l_tkstatus   LIKE t130m-pstat,   " SAP Transaction status
    l_anzgstatus LIKE t130m-pstat,   " Summary Display status
    l_bilds      LIKE t133a-bilds,   " Screen sequence
    l_pstat      LIKE t134-pstat.    " Material maintenance status

  REFRESH et_bildtab.

* 1. Obtengo parámetros de control de transacción en actualización
*    de maestro de materiales
  CALL FUNCTION 'MATERIAL_INIT'
    EXPORTING
      tcode                     = i_tcode
      kz_berprf                 = c_true
    IMPORTING
      it130m                    = ls_t130m
      tkstatus                  = l_tkstatus
    EXCEPTIONS
      no_authority              = 1
      wrong_call                = 2
      kstatus_empty             = 3
      tkstatus_empty            = 4
      aktyp_tcode_mismatch      = 5
      tcode_not_found           = 6
      material_article_mismatch = 7
      OTHERS                    = 8.
  IF sy-subrc NE 0.
    MESSAGE e000(38) WITH 'Error' sy-subrc 'en función MATERIAL_INIT'
      RAISING function_error.
  ENDIF.

* 2. Obtengo datos del maestro de materiales
  CALL FUNCTION 'MARA_SINGLE_READ'
    EXPORTING
      matnr             = i_matnr
      kzrfb             = c_true
    IMPORTING
      wmara             = ls_mara
    EXCEPTIONS
      lock_on_material  = 1
      lock_system_error = 2
      wrong_call        = 3
      not_found         = 4
      OTHERS            = 5.
  IF sy-subrc NE 0.
    IF ls_t130m-aktyp NE 'H'.
      MESSAGE e000(38) WITH 'No existe el material' i_matnr
        RAISING function_error.
    ENDIF.
  ENDIF.

  IF ls_mara-mtart IS INITIAL.
    ls_mara-mtart = i_mtart.
  ENDIF.

  IF ls_t130m-aktyp NE 'H'.
    CALL FUNCTION 'MARA_DUMMY_STATUS'
      EXPORTING
        wmara_in  = ls_mara
      IMPORTING
        wmara_out = ls_mara.
  ENDIF.

* 3. Obtengo grupos de vistas asociadas al tipo de material
  SELECT SINGLE pstat FROM t134 INTO l_pstat
    WHERE mtart = ls_mara-mtart.
  IF sy-subrc NE 0.
    MESSAGE e000(38) WITH 'No existe el tipo de material' ls_mara-mtart
      RAISING function_error.
  ENDIF.

* 4. Obtengo secuencia de pantallas para Transacción/Tipo de material
  CALL FUNCTION 'BILDSEQUENZ_IDENTIFY'
    EXPORTING
      materialart = ls_mara-mtart
      tcode_ref   = ls_t130m-trref
    IMPORTING
      bildsequenz = l_bilds
    EXCEPTIONS
      wrong_call  = 1
      not_found   = 2
      OTHERS      = 3.
  IF sy-subrc NE 0.
    MESSAGE e000(38) WITH 'Error' sy-subrc
                          'en función BILDSEQUENZ_IDENTIFY'
      RAISING function_error.
  ENDIF.

* 5. Obtener estados de mantenimiento
* (Transaccion+Material+Tipo de Material)
  CALL FUNCTION 'ANZGSTATUS_SETZEN'
    EXPORTING
      aktyp            = ls_t130m-aktyp
      marastatus       = ls_mara-vpsta
      t134status       = l_pstat
      tkstatus         = l_tkstatus
    IMPORTING
      anzgstatus       = l_anzgstatus
    EXCEPTIONS
      anzgstatus_empty = 1
      wrong_call       = 2
      OTHERS           = 3.
  IF sy-subrc NE 0.
    MESSAGE e000(38) WITH 'Error' sy-subrc
                          'en función ANZGSTATUS_SETZEN'
      RAISING function_error.
  ENDIF.

* 6. Obtener vistas de mantenimiento
  CALL FUNCTION 'SELECTION_VIEWS_FIND'
    EXPORTING
      bildsequenz     = l_bilds
      pflegestatus    = l_anzgstatus
    TABLES
      bildtab         = et_bildtab
    EXCEPTIONS
      call_wrong      = 1
      empty_selection = 2
      OTHERS          = 3.
  IF sy-subrc NE 0.
    MESSAGE e000(38) WITH 'Error' sy-subrc
                          'en función SELECTION_VIEWS_FIND'
      RAISING function_error.
  ENDIF.

ENDFUNCTION.


*Messages
*----------------------------------------------------------
*
* Message class: 38
*000   & & & &
*
* Message class: BDCMSG-MSGID
*BDC