SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

MATERIAL_MAINTAIN_DARK



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ММ
View previous topic :: View next topic  
Author Message
admin
Администратор
Администратор



Joined: 01 Sep 2007
Posts: 1639

PostPosted: Wed Oct 03, 2007 2:17 pm    Post subject: MATERIAL_MAINTAIN_DARK Reply with quote

Beispielcoding: Funktionsbaustein MATERIAL_MAINTAIN_DARK (kopieren erlaubt aber auf eigene Gefahr Smile)

Ein Lager und/oder Werk mit dem Funktionsbaustein MATERIAL_MAINTAIN_DARK anlegen:

Code:
* <SNIP>
*Die itab_marc enthält die anzulegenden Lagerorte in den Werken.
*itab_marc-matnr
*itab_marc-werks
*itab_marc-lgort
* Sie wird im Vorfeld gefüllt. Nachfolgend nur die wichtigsten
*  Datendeklarationen und das entscheidende Coding

*#############


* Datendeklarationen
TABLES: marc.
DATA:
  BEGIN OF itab_marc OCCURS 0,
    matnr LIKE marc-matnr,
    werks LIKE marc-werks,
    lgfsb LIKE marc-lgfsb,
    lgpro LIKE marc-lgpro,
    lgort LIKE mard-lgort,
    mtart like mara-mtart,
  END OF itab_marc,
  count_itab TYPE i.

* Fehlerauswertung
DATA: BEGIN OF fehler_tab OCCURS 0,  " Tabelle für Fehlermeldungen
        line LIKE sy-lisel,                                 " 255 Char
      END OF fehler_tab,
      returncode(2).

* an den Fubau MATERIAL_MAINTAIN_DARK zu übergebende Daten
DATA:
  amara_ueb LIKE mara_ueb OCCURS 0 WITH HEADER LINE,
  amarc_ueb LIKE marc_ueb OCCURS 0 WITH HEADER LINE,
  amard_ueb LIKE mard_ueb OCCURS 0 WITH HEADER LINE,
  amerrdat  LIKE merrdat  OCCURS 0 WITH HEADER LINE,
* vom Fubau MATERIAL_MAINTAIN_DARK beschriebene Daten
  matnr_last LIKE mara-matnr,
  matnr_last_save LIKE mara-matnr,
  number_errors_transaction LIKE tbist-numerror,
  blank,
  fest_x VALUE 'X',
  fest_e VALUE 'E',
  zaehler LIKE amard_ueb-tranc.   " jede Zeile = ein Material


* <SNIP>

*---------------------------------------------------------------------*
*      Form  lager_anlegen
*---------------------------------------------------------------------*
FORM lager_anlegen.
  LOOP AT itab_marc.

*   erstmal alles löschen
    clear:
      amara_ueb, amarc_ueb, amard_ueb,
      fehler_tab, amerrdat,
      zaehler, matnr_last_save.
    refresh:
      amara_ueb, amarc_ueb, amard_ueb,
      fehler_tab, amerrdat.


    zaehler = zaehler + 1.
    amara_ueb-mandt = sy-mandt.
    amara_ueb-matnr = itab_marc-matnr.
    amara_ueb-tcode = 'MM01'.           " Transaktionscode nicht vergessen!!!
    amara_ueb-tranc = zaehler.          " Zuordnung Zeilen = Material
    APPEND amara_ueb.

    amarc_ueb-mandt = sy-mandt.
    amarc_ueb-matnr = amara_ueb-matnr.
    amarc_ueb-werks = itab_marc-werks.
    amarc_ueb-tranc = zaehler.
*   es muss mindestens ein Feldinhalt geändert werden!!!
*     sonst wird ein weiteres Werk nicht angelegt
    amarc_ueb-KZKRI = 'X'. " Kennzeichen: kritisches Teil
*     das Kennzeichen wird später wieder entfernt!
    APPEND amarc_ueb.

    amard_ueb-mandt = sy-mandt.
    amard_ueb-matnr = amara_ueb-matnr.
    amard_ueb-werks = amarc_ueb-werks.
    amard_ueb-lgort = itab_marc-lgort.
    amard_ueb-tranc = zaehler.
*   es muss mindestens ein Feldinhalt geändert werden!!!
*     sonst wird ein weiteres Lager nicht angelegt
    amard_ueb-LFGJA = '2004'. " Geschäftsjahr der laufenden Periode
    APPEND amard_ueb.

* letze matnr speichern
    matnr_last_save = amara_ueb-matnr.

* Cause I'm TNT. I'm dynamite. [AC/DC TNT 1976]
*break-point.

* Materialstammpflege ohne Bilder
*   Der Funktionsbaustein kann aus jeder beliebigen Anwendung heraus
*   aufgerufen werden.
*   Die Übergabe der zu pflegenden Materialdaten erfolgt mittels der
*   Tabellen AMARA_UEB, AMARC_UEB, ... im internen Format.
* Weiteres in der FUBAU-Doku [ ja, es gibt auch dokumentierte :-)) ]
    CALL FUNCTION 'MATERIAL_MAINTAIN_DARK'
         EXPORTING
             kz_activ_cad      = blank
             flag_muss_pruefen = fest_x
             sperrmodus        = fest_e
             max_errors        = 0      " Anzahl akzeptierte fehler
             p_kz_no_warn      = fest_x
             kz_prf            = blank
             kz_verw           = fest_x
             kz_aend           = fest_x
             kz_dispo          = fest_x
             kz_test           = blank
             kz_mdip           = blank
             kz_mprp           = blank
             kz_ale            = blank
             kz_actv           = blank
        IMPORTING
             matnr_last        = matnr_last " letzte prozessierte MATNR
             number_errors_transaction = number_errors_transaction
         TABLES
             amara_ueb = amara_ueb " Materialstamm: allgemeine Daten
*           AMAKT_UEB = AMAKT_UEB " Materialkurztexte
             amarc_ueb = amarc_ueb " Materialstamm-C-Segment
             amard_ueb = amard_ueb " Materialstamm-Lager/Chargen-Segment
*           AMFHM_UEB =           " FHM-Felder im Materialstamm
*           AMARM_UEB =           " Mengeneinheiten
*           AMEA1_UEB =           " Verwaltung der EANs zum Material:DI
*           AMBEW_UEB = AMBEW_UEB " Materialbewertung
*           ASTEU_UEB =           " für Steuern: Datenübernahme
*           ASTMM_UEB =           "
*           AMLGN_UEB =           " Materialdaten pro Lagernummer
*           AMLGT_UEB =           " Materialdaten pro Lagertyp
*           AMPGD_UEB =           " Änderungsbelegstruktur für Material-
*                                     stamm/Produktgruppe
*           AMPOP_UEB =           " Prognoseparameter
*           AMVEG_UEB =           " Materialstamm: Gesamtsverbräuche
*           AMVEU_UEB =           " Materialstamm: ungeplante Verbräuche
*           AMVKE_UEB = AMVKE_UEB " Materialstamm: Verkaufsdaten
*           ALTX1_UEB =           " Datenübernahme: Datenteil Langtexte
*           AMPRW_UEB =           " Datenübernahme: Prognosewerte
*           AMFIELDRES =          " Felder, die pro Transaktion zu
*                                 "   initialisieren sind
           amerrdat  = amerrdat  " Struktur für Rückgabe von Fehlermeld.
         EXCEPTIONS
              kstatus_empty     = 1
              tkstatus_empty    = 2
              t130m_error       = 3
              internal_error    = 4
              too_many_errors   = 5
              update_error      = 6
              OTHERS            = 7.
*   Auswertung
    IF sy-subrc NE 0.
      MOVE sy-subrc TO returncode.
      CONCATENATE 'MATERIAL_MAINTAIN_DARK:'(004)
          returncode
        INTO fehler_tab-line SEPARATED BY ' '.
      APPEND fehler_tab.
    ELSE.
      COMMIT WORK.
    ENDIF.
    IF NOT matnr_last = matnr_last_save.
*  das darf eigentlich nicht passieren! Dann ganze Verarbeitung fehlerh.
      CONCATENATE 'MATERIAL_MAINTAIN_DARK:'(004)
          'Materialnummern ungleich'(005) itab_marc-matnr
          itab_marc-mtart matnr_last
        INTO fehler_tab-line SEPARATED BY ' '.
      APPEND fehler_tab.
    ELSE. "  NOT matnr_last = matnr_last_save
*     das war also eine erfolgreiche Verbuchung!!!
*     Kennzeichen hart zurücksetzen
*TNT
*break-point.
      SELECT SINGLE * FROM  marc CLIENT SPECIFIED
             WHERE  mandt  = sy-mandt
             AND    matnr  = matnr_last_save
             AND    werks  = itab_marc-werks.
      clear: marc-KZKRI.
      update marc.

    ENDIF. " NOT matnr_last = matnr_last_save
    IF NOT number_errors_transaction IS INITIAL.
      CONCATENATE 'MATERIAL_MAINTAIN_DARK:'(004)
          'Anzahl Fehler:'(007) number_errors_transaction
        INTO fehler_tab-line SEPARATED BY ' '.
      APPEND fehler_tab.
    ENDIF. " number_errors_transaction is initial
    IF NOT amerrdat[] IS INITIAL.
*   Auswertung der Antwort
      CONCATENATE 'MATERIAL_MAINTAIN_DARK:'(004)
          'Meldungsliste'(006)
          itab_marc-matnr itab_marc-werks
          itab_marc-mtart
          itab_marc-lgfsb itab_marc-lgpro
          itab_marc-lgort
        INTO fehler_tab-line SEPARATED BY ' '.
      APPEND fehler_tab.
      DATA: amerrdat_index(3).
      LOOP AT amerrdat.
        MOVE sy-tabix TO amerrdat_index.
*     Fehlermeldung nachschlagen
        CALL FUNCTION 'RPY_MESSAGE_COMPOSE'
            EXPORTING
              language          = sy-langu
              message_id        = amerrdat-msgid
              message_number    = amerrdat-msgno
              message_var1      = amerrdat-msgv1
              message_var2      = amerrdat-msgv2
              message_var3      = amerrdat-msgv3
              message_var4      = amerrdat-msgv4
            IMPORTING
              message_text      = sy-lisel " fehler_tab-line
*         tables
*            longtext          =
           EXCEPTIONS
                message_not_found = 1
                OTHERS            = 2.
        IF sy-subrc = 0.
          CONCATENATE amerrdat_index sy-lisel
            INTO fehler_tab-line SEPARATED BY blank.
          APPEND fehler_tab.
        ELSE.
          CONCATENATE 'RPY_MESSAGE_COMPOSE'(008) amerrdat_index
              amerrdat-msgid amerrdat-msgno amerrdat-msgv1(10)
              amerrdat-msgv2(10) amerrdat-msgv3(10) amerrdat-msgv4(10)
            INTO fehler_tab-line SEPARATED BY ' '.
          APPEND fehler_tab.
        ENDIF.
      ENDLOOP. " at amerrdat
      APPEND INITIAL LINE TO fehler_tab.
    ENDIF. " not amerrdat[] is initial

    LOOP AT fehler_tab.
      WRITE / fehler_tab.
    ENDLOOP.
    uline.

*TNT
*break-point.

  ENDLOOP. " at itab_marc
ENDFORM.                    " lager_anlegen


Code:

*&---------------------------------------------------------------------*
*&      Form  anlegen
*&---------------------------------------------------------------------*
FORM anlegen USING p_daten LIKE LINE OF t_daten.

  DATA: amara_ueb  TYPE STANDARD TABLE OF mara_ueb,
        ambew_ueb  TYPE STANDARD TABLE OF mbew_ueb,
        amfieldres TYPE STANDARD TABLE OF mfieldres,
        amerrdat   TYPE STANDARD TABLE OF merrdat.

  DATA: wa_amara_ueb  TYPE mara_ueb,
        wa_ambew_ueb  TYPE mbew_ueb,
        wa_amfieldres TYPE mfieldres,
        wa_amerrdat   TYPE merrdat.

  wa_amara_ueb-mandt = sy-mandt.
  wa_amara_ueb-matnr = p_daten-matnr.
  wa_amara_ueb-tcode = 'MM01'.
  wa_amara_ueb-tranc = 1.
  wa_amara_ueb-d_ind = 1.

  wa_amara_ueb-vpsta = 'BG'.
  wa_amara_ueb-pstat = wa_amara_ueb-vpsta .
  APPEND wa_amara_ueb TO amara_ueb.

* Buchhaltungssichten
  SELECT SINGLE *
      INTO CORRESPONDING FIELDS OF wa_ambew_ueb
      FROM mbew
      WHERE matnr = p_daten-vorlage
        AND bwkey = p_daten-werks.

  wa_ambew_ueb-matnr = p_daten-matnr.
  wa_ambew_ueb-d_ind = 2.
  wa_ambew_ueb-tranc = wa_amara_ueb-tranc.
  wa_ambew_ueb-pstat = 'BG'.
  APPEND wa_ambew_ueb TO ambew_ueb.

  CALL FUNCTION 'MATERIAL_MAINTAIN_DARK'
    EXPORTING
      p_kz_no_warn                    = 'N'
      kz_prf                          = 'I'
      kz_test                         = testlauf
    TABLES
      amara_ueb                       = amara_ueb
      ambew_ueb                       = ambew_ueb
      amfieldres                      = amfieldres
      amerrdat                        = amerrdat
    EXCEPTIONS
      kstatus_empty                   = 1
      tkstatus_empty                  = 2
      t130m_error                     = 3
      internal_error                  = 4
      too_many_errors                 = 5
      update_error                    = 6
      OTHERS                          = 7.

  IF NOT amara_ueb IS INITIAL.  " Fehler
    LOOP AT amerrdat INTO wa_amerrdat.

      PERFORM message USING wa_amerrdat.

    ENDLOOP.
  ELSE.
    IF sy-binpt = space.
      COMMIT WORK.
      CALL FUNCTION 'DEQUEUE_ALL'.
    ENDIF.
    WRITE 'ok' COLOR 5.
  ENDIF.
  ULINE.

ENDFORM.                    " anlegen

*&---------------------------------------------------------------------*
*&      Form  message
*&---------------------------------------------------------------------*
FORM message USING    p_error TYPE merrdat.
  DATA: text(120).
  CASE p_error-msgty.
    WHEN 'I'.FORMAT COLOR 3 INTENSIFIED OFF.
    WHEN 'E'.FORMAT COLOR 6 INTENSIFIED OFF.
    WHEN 'W'.FORMAT COLOR 7 INTENSIFIED OFF.
    WHEN OTHERS.FORMAT COLOR 1 INTENSIFIED OFF.

  ENDCASE.
  MESSAGE ID p_error-msgid TYPE 'I' NUMBER p_error-msgno
      WITH p_error-msgv1 p_error-msgv2 p_error-msgv3 p_error-msgv4
      INTO text.
  WRITE:/ text.
ENDFORM.                    " message
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ММ All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You cannot download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.