leere Werkseinträge löschen

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
5 Beiträge • Seite 1 von 1
5 Beiträge Seite 1 von 1

leere Werkseinträge löschen

Beitrag von BabsiCSC (ForumUser / 86 / 0 / 0 ) »
Hallo,
Ich sitze derzeit offensichtlich auf der Leitung .. :?
-> In meinem BatchInput und Direct Input - Programm geht es um Werksstücklistenzuordnung.
Da habe ich unter anderem eine Abfrage dabei, wo ich nachsehe, ob es zu der jeweiligen Materialnummer schon eine Werkszuordnung gibt oder nicht.
Und wenn es schon eine Zuordnung gibt, dann soll dieser Datensatz aus der it_marc bereinigt werden.
..

Code: Alles auswählen.

 
.....  
* Werksdaten zum Material
  SELECT * FROM marc INTO TABLE it_marc
    WHERE matnr IN so_matnr
      AND werks IN so_werks
      AND lvorm = ''.

  SELECT * FROM mast INTO TABLE it_mast
    WHERE matnr IN so_matnr
      AND ( werks IN so_werks
       OR werks = '' )
      AND stlan = pa_stlan.

END-OF-SELECTION.

  SORT it_mast BY matnr.
* Schauen, ob Zuordnung schon vorhanden ist oder nicht
  LOOP AT it_marc INTO wa_marc.

    g_tabix = sy-tabix.

    READ TABLE it_mast
      WITH KEY matnr = wa_marc-matnr werks = wa_marc-werks
      TRANSPORTING NO FIELDS.

    IF sy-subrc = 0.
*     Die gefundenen Datensätze müssen bereinigt werden
      DELETE it_marc INDEX g_tabix.
    ENDIF.

 AT NEW matnr.

      g_tabix = sy-tabix.

      READ TABLE it_mast
        WITH KEY matnr = wa_marc-matnr werks = ''
        TRANSPORTING NO FIELDS.

      IF sy-subrc = 0.
*       Die gefundenen Datensätze müssen bereinigt werden
        DELETE it_marc INDEX g_tabix.
      ENDIF.

    ENDAT.

  ENDLOOP.
....  
--> Nun möchte ich zusätzlich noch eine Abfrage machen, dass all die Datensätze auch noch gelöscht werden sollen (bzw. dann in dem Fall gar nicht zugewiesen werden sollen), bei denen es kein Werk gibt, bzw. wo das Feld Werk den Eintrag blank enthält.
Nur: Ich bin mir nicht ganz so sicher, ob das `so einfach´ geht wie ich es mir vorstelle? Oder ob ich es mir nicht zu leicht mache!?!! :(
READ TABLE it_mast
WITH KEY matnr = wa_marc-matnr werks = ''
TRANSPORTING NO FIELDS.
Weil beim READ TABLE kann man bei den Feldern (with key...) kein blank abfragen! Oder? (zumindest bekomme ich dort einen Dump :( )

Bitte um Hilfe!
Danke!!

lg



[/code]

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von Matthias.Selle (ForumUser / 69 / 1 / 0 ) »
Hallo Babsi,

nimm doch statt des Read einen Loop.

loop at it_mast where matnr = wa_marc-matnr
and werks = '' .
* mach hier irgendetwas
exit. " ????
endloop.

Gruß
Matthias

Beitrag von BabsiCSC (ForumUser / 86 / 0 / 0 ) »
Hallo,
Danke für die Antwort!

Ich habe das jetzt mal diesbez. so geändert (mit loop) und auch das delete wäre dann in dem Fall anders!?
Ist das richtig?
Man bedenke -> Ich möchte nur die Materialnummern aus der it_marc rauslöschen, die schon bereits auf Werksstückliste umgeändert wurden (die brauch' ich dann ja nicht mehr mittels BI oder DI umändern!),
und die beim Werk keinen Eintrag haben (in dem Fall blank).
Dieses delete DELETE TABLE it_marc FROM wa_marc. ist dann in dem Fall nicht ganz richtig. Oder?
Bzw. erspar' ich mir ja dann das mit at new matnr?
Stimmt das?

SORT it_mast BY matnr.
* Schauen, ob Zuordnung schon vorhanden ist oder nicht
LOOP AT it_marc INTO wa_marc.

g_tabix = sy-tabix.

READ TABLE it_mast
WITH KEY matnr = wa_marc-matnr werks = wa_marc-werks
TRANSPORTING NO FIELDS.

IF sy-subrc = 0.
* Die gefundenen Datensätze müssen bereinigt werden
DELETE it_marc INDEX g_tabix.
ENDIF.

AT NEW matnr.

LOOP AT it_mast INTO wa_mast
WHERE matnr = wa_marc-matnr AND werks = '' .

DELETE TABLE it_marc FROM wa_marc.
ENDLOOP.
* g_tabix = sy-tabix.
*
* READ TABLE it_mast
* WITH KEY matnr = wa_marc-matnr werks = ''
* TRANSPORTING NO FIELDS.
*
* IF sy-subrc = 0.
** Die gefundenen Datensätze müssen bereinigt werden
* DELETE it_marc INDEX g_tabix.
* ENDIF.

ENDAT.

ENDLOOP.

Bitte um Hilfe!!
Danke!!
lg

Der ganze Code sieht bis jetzt so aus:

Code: Alles auswählen.

REPORT zka_werkszuordnung NO STANDARD PAGE HEADING LINE-SIZE 255.


*** I N C L U D E S ****************************************************
*INCLUDE bdcrecx1.

*** D A T E N D E K L A R A T I O N ************************************
DATA:
  it_marc TYPE TABLE OF marc,
  wa_marc TYPE marc,
  it_mast TYPE TABLE OF mast,
  wa_mast TYPE mast,

  g_mapnam TYPE apqi-groupid,
  zaehler  TYPE i,
  g_tabix  TYPE sy-tabix,
  g_group_opened TYPE c.

DATA:
  anzzeilen TYPE i.

*Batchinputdata of single transaction
DATA:
      bdcdata LIKE bdcdata    OCCURS 0 WITH HEADER LINE.
*messages of call transaction
DATA:
      messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.

*CALL TRANSACTION Einstellungen
DATA:
      ctumode LIKE ctu_params-dismode,
      cupdate LIKE ctu_params-updmode.

ctumode = 'N'.            " Abspielmodus
*                                A: show all dynpros
*                                E: show dynpro on error only
*                                N: do not display dynpro
*                                P: dunkel + debug
cupdate = 'L'.            " Verbuchungsmodus
*                                S: synchronously
*                                A: asynchronously
*                                L: local

*** S E L E K T I O N S B I L D ****************************************
*AT SELECTION-SCREEN.

SELECTION-SCREEN BEGIN OF BLOCK selektion WITH FRAME TITLE text-001.
SELECT-OPTIONS:
  so_matnr FOR wa_marc-matnr OBLIGATORY,
  so_werks FOR wa_marc-werks.
PARAMETER:
  pa_stlan LIKE t416-stlan DEFAULT '5' OBLIGATORY.
*Radiobuttons zum Wählen, ob man die BI-Verarbeitung
*oder die DI-Verarbeitung haben möchte
PARAMETER:
  pa_bi TYPE c RADIOBUTTON GROUP radi,
  pa_di TYPE c RADIOBUTTON GROUP radi.
SELECTION-SCREEN END OF BLOCK selektion.

*** H A U P T V E R A R B E I T U N G **********************************
START-OF-SELECTION.

* Werksdaten zum Material
  SELECT * FROM marc INTO TABLE it_marc
    WHERE matnr IN so_matnr
      AND werks IN so_werks
      AND lvorm = ''.

  SELECT * FROM mast INTO TABLE it_mast
    WHERE matnr IN so_matnr
      AND ( werks IN so_werks
       OR werks = '' )
      AND stlan = pa_stlan.

END-OF-SELECTION.

  SORT it_mast BY matnr.
* Schauen, ob Zuordnung schon vorhanden ist oder nicht
  LOOP AT it_marc INTO wa_marc.

    g_tabix = sy-tabix.

    READ TABLE it_mast
      WITH KEY matnr = wa_marc-matnr werks = wa_marc-werks
      TRANSPORTING NO FIELDS.

    IF sy-subrc = 0.
*     Die gefundenen Datensätze müssen bereinigt werden
      DELETE it_marc INDEX g_tabix.
    ENDIF.

    AT NEW matnr.

      LOOP AT it_mast INTO wa_mast
        WHERE matnr = wa_marc-matnr AND werks = '' .

        DELETE TABLE it_marc FROM wa_marc.
      ENDLOOP.
*      g_tabix = sy-tabix.
*
*      READ TABLE it_mast
*        WITH KEY matnr = wa_marc-matnr werks = ''
*        TRANSPORTING NO FIELDS.
*
*      IF sy-subrc = 0.
**       Die gefundenen Datensätze müssen bereinigt werden
*        DELETE it_marc INDEX g_tabix.
*      ENDIF.

    ENDAT.

  ENDLOOP.

  DESCRIBE TABLE it_marc LINES anzzeilen.

*  IF anzzeilen = 0 and pa_di = 'X'.
*    WRITE: 'test'.
*  ENDIF.

  IF anzzeilen > 0 AND pa_bi = 'X'.

*   Mappenbenamsung
    g_mapnam = 'ZMATWERKCS07'.

*   BI auf Transaktion CS07
*   Erstellen der BI-Mappe
    PERFORM open_group.

  ENDIF.

  LOOP AT it_marc INTO wa_marc.

    REFRESH bdcdata.

*   Übergabe von Programmname und Dynpronummer
    PERFORM bdc_dynpro      USING 'SAPLCSAL' '0100'.
*   Befüllen des Feldes Materialnummer
    PERFORM bdc_field       USING 'BDC_CURSOR'
                                  'RC29N-ZWERK'.
    PERFORM bdc_field       USING 'BDC_OKCODE'
                                  '/00'.
    PERFORM bdc_field       USING 'RC29N-MATNR' wa_marc-matnr.
    PERFORM bdc_field       USING 'RC29N-ZWERK' wa_marc-werks.
    PERFORM bdc_field       USING 'RC29N-STLAN' '5'.
*   neuer Bildschirm
    PERFORM bdc_dynpro      USING 'SAPLCSAL' '0120'.
    PERFORM bdc_field       USING 'BDC_OKCODE'
                                  '=FCBU'.
    PERFORM bdc_field       USING 'BDC_CURSOR'
                                  'RC29K-STLNR'.
*   Übergabe der Daten und des Transaktionscodes an die Mappe
    PERFORM bdc_transaction USING 'CS07'.

  ENDLOOP.

* Schließen der Mappe
  PERFORM close_group.

*----------------------------------------------------------------------*
*   create batchinput session                                          *
*   (not for call transaction using...)                                *
*----------------------------------------------------------------------*
FORM open_group.

* open batchinput group
  CALL FUNCTION 'BDC_OPEN_GROUP'
   EXPORTING
     client                    = sy-mandt
*   DEST                      = FILLER8
     group                     = g_mapnam
*   HOLDDATE                  = FILLER8
   keep                      = 'X'
     user                      = sy-uname
*   RECORD                    = FILLER1
*   PROG                      = SY-CPROG
*   DCPFM                     = '%'
*   DATFM                     = '%'
* IMPORTING
*   QID                       =
   EXCEPTIONS
     client_invalid            = 1
     destination_invalid       = 2
     group_invalid             = 3
     group_is_locked           = 4
     holddate_invalid          = 5
     internal_error            = 6
     queue_error               = 7
     running                   = 8
     system_lock_error         = 9
     user_invalid              = 10
     OTHERS                    = 11
            .
  IF sy-subrc = 0.
    g_group_opened = 'X'.
  ENDIF.

ENDFORM.                    "OPEN_GROUP
*----------------------------------------------------------------------*
*   end batchinput session                                             *
*   (call transaction using...: error session)                         *
*----------------------------------------------------------------------*
FORM close_group.

  IF pa_bi = 'X' AND g_group_opened = 'X'.
*   close batchinput group
    CALL FUNCTION 'BDC_CLOSE_GROUP'.
    ULINE.
    FORMAT COLOR 5.
    WRITE: 1 g_mapnam, 'wurde erstellt!'(i07).
    FORMAT COLOR OFF.
    WRITE: /.
*   Zeitpunkt d. Ausführens, Datum
    WRITE: 1 sy-datum,
*   Zeitpunkt d. Ausführens, Zeit
    20 sy-uzeit,
*   Von welchem User wird der BI ausgeführt
    40 sy-uname.
    WRITE: /.
    ULINE.
  ELSE.
    IF pa_di = 'X' AND g_group_opened = 'X'.
      ULINE.
      FORMAT COLOR 6.
      WRITE: 'Fehlermappe ',g_mapnam,' wurde erzeugt'(i06).
      FORMAT COLOR OFF.
      WRITE: /.
*     Zeitpunkt d. Ausführens, Datum
      WRITE: 1 sy-datum,
*     Zeitpunkt d. Ausführens, Zeit
      20 sy-uzeit,
*     Von welchem User wird der DI ausgeführt
      40 sy-uname.
      WRITE: /.
      ULINE.
      CALL FUNCTION 'BDC_CLOSE_GROUP'.
    ENDIF.
  ENDIF.

ENDFORM.                    "CLOSE_GROUP
*----------------------------------------------------------------------*
*        Start new transaction according to parameters                 *
*----------------------------------------------------------------------*
FORM bdc_transaction USING tcode.
  DATA: l_mstring(480).
  DATA: l_subrc LIKE sy-subrc.

* batch input session
  IF pa_bi = 'X' AND g_group_opened = 'X'.
    CALL FUNCTION 'BDC_INSERT'
     EXPORTING
       tcode                  = tcode
*   POST_LOCAL             = NOVBLOCAL
*   PRINTING               = NOPRINT
*   SIMUBATCH              = ' '
*   CTUPARAMS              = ' '
      TABLES
        dynprotab              = bdcdata
     EXCEPTIONS
       internal_error         = 1
       not_open               = 2
       queue_error            = 3
       tcode_invalid          = 4
       printing_invalid       = 5
       posting_invalid        = 6
       OTHERS                 = 7
              .
    IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

* call transaction using
  ELSE.
    IF pa_di = 'X' AND g_group_opened = 'X'.
      REFRESH messtab.
      CALL TRANSACTION tcode USING bdcdata
                       MODE   ctumode
                       UPDATE cupdate
                       MESSAGES INTO messtab.
      l_subrc = sy-subrc.
** Erzeugen fehlermappe ************************************************
      IF l_subrc <> 0.
        IF g_group_opened IS INITIAL.
          g_mapnam = 'ZERROR_CS07'.
          PERFORM open_group.
        ELSE.
          CALL FUNCTION 'BDC_INSERT'
            EXPORTING
              tcode     = tcode
            TABLES
              dynprotab = bdcdata.
        ENDIF.

      ENDIF.
    ENDIF.
  ENDIF.

ENDFORM.                    "BDC_TRANSACTION
*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
  CLEAR bdcdata.
  bdcdata-program  = program.
  bdcdata-dynpro   = dynpro.
  bdcdata-dynbegin = 'X'.
  APPEND bdcdata.
ENDFORM.                    "BDC_DYNPRO
*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
  CLEAR bdcdata.
  bdcdata-fnam = fnam.
  bdcdata-fval = fval.
  APPEND bdcdata.
ENDFORM.                    "BDC_FIELD

Beitrag von Matthias.Selle (ForumUser / 69 / 1 / 0 ) »
Hallo Babsi,

dass mit dem at-new ist meiner Meinung nach keine gute Idee.
Was passiert, wenn Du mehrere MARC-Sätze zu einem Material hast? Wenn Du einen MAST-Satz mit initialem Werk hast, löscht Du den ersten MARC-Satz, die anderen aber nicht!!!!
Willst Du das wirklich?

Gruß Matthias

Beitrag von BabsiCSC (ForumUser / 86 / 0 / 0 ) »
hhmmmm, hast recht ...
thx

Seite 1 von 1

Vergleichbare Themen

3
Antw.
2820
Views
leere ALV-Liste als Job
von Mr. ABAP » 09.08.2006 16:19 • Verfasst in SAP - Allgemeines
19
Antw.
7181
Views
Leere Spalte in ALV einbinden
von MarkusW » 06.06.2008 10:56 • Verfasst in ABAP® für Anfänger
0
Antw.
1144
Views
'Leere' und '0'-Tabelleneinträge - wie unterscheiden?
von burggen » 19.04.2013 12:24 • Verfasst in ABAP® Core
0
Antw.
1939
Views
Leere ITEMs in der saplogon.ini
von YFishbone » 18.01.2007 13:55 • Verfasst in SAP - Allgemeines
8
Antw.
2702
Views
VALUE CHECK der leere Eingabe ignoriert
von Preacha » 17.08.2006 15:23 • Verfasst in ABAP® Core

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

FUBA 'HR_INFOTYPES_OPERATION'
vor 8 Stunden von Bright4.5 1 / 29
RFC vs. ODATA
vor 11 Stunden von rob_abc 7 / 335
Frage zur redefinierten Methode
vor 13 Stunden von ralf.wenzel 12 / 518

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

FUBA 'HR_INFOTYPES_OPERATION'
vor 8 Stunden von Bright4.5 1 / 29
RFC vs. ODATA
vor 11 Stunden von rob_abc 7 / 335
Frage zur redefinierten Methode
vor 13 Stunden von ralf.wenzel 12 / 518