Problem bei Zähler

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
57 Beiträge • Vorherige Seite 3 von 4 (current) Nächste
57 Beiträge Vorherige Seite 3 von 4 (current) Nächste

Re: Problem bei Zähler

Beitrag von JHM (Top Expert / 1214 / 2 / 202 ) »
patlau hat geschrieben:Nun aber noch das andere Problem, das dies so nur klappt wenn ein Objekt ausgelassen worden ist,
Du hast es immer noch nicht geschaft das "Problem" mal näher zu beschreiben. Was macht dein Code aktuell wenn mehrere Zähler fehlen...
Wird dann gar nichts ausgegeben, wird die erste Fehlstelle ausgeben oder die letzte?
Wird die WHILE-Schleife durchlaufen? Wann wird die Schleife verlassen?

Fragen über Fragen, die du nur durch Debugging klären kannst.


Zwei Hinweise:
- Dein gezeigtes Coding hat mMn eine falsche Schachtelung. Die WHILE-Schleife darf nur dann durchlaufen werden, wenn der erste READ TABLE funktioniert hat. (Wobei du dann eine Endlosschleife bekommen solltest, das gezeigte Coding scheint also nicht 1zu1 kopiert worden zu sein).
- Schau dir im Debugger mal beide Werte in der WHILE-Bedingung an. Sind hier beide Zahlen gleich dargestellt (führende Null?). Durch den Offsetzugriff kann es zu Problem beim ADD 1 kommen, da SAP dann die führende Null entfernt.
Gruß Hendrik

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


Re: Problem bei Zähler

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
Okay, das Problem hat sich gelöst, bekomme alle fehlenden angezeigt.
neues Problem :cry: jedoch nur bis 09. Habe die Objekte erstellt:
XXXXXX01,XXXXXX02,XXXXXX05,XXXXXX08, XXXXXX10
angezeigt wird mir
XXXXXX03,XXXXXX04,XXXXXX06,XXXXXX07 es fehlt allerdings die 09 der versteht das mit der 10 wohl nicht ...

Code is gleich geblieben.

Re: Problem bei Zähler

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
dann schau dir doch mal deine OFFSET Angaben an. Die beziehen sich ja nur auf 1 Zeichen. Sobald du die 10 und höher mit prüfen willst, musst du ja mehr als 1 Zeichen prüfen. ;)
Gruß,
der Matze

Re: Problem bei Zähler

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
das Problem ist aber das ich dann eine Stelle vorher brauch oder?
im Normal fall prüft er ob 01 also die 1 kleiner als 02 also die 2 ist.
falls es aber 08 und 10 ist, prüft er ja ob 8 kleiner 0 ist. wie kann ich das dann richtig angeben ?

Re: Problem bei Zähler

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
Na du hast dir die Lösung doch quasi schon selbst genannt. ;)
Du darfst eben nicht die 8 gegen die 0 prüfen sondern die 08 gegen die 10. also musst du deinen OFFSET dementsprechend anpassen.
Gruß,
der Matze

Re: Problem bei Zähler

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
ja habe das Problem ja verstanden aber bekomme es nicht hin das dies geschieht :D.

Hätte gedacht man muss dann +6(2) nehmen aber da bekomme ich kein Ergebnis.

Namen sieht ja so aus dass an 6 Stelle 2 Stellen lang der Zähler kommt....

Im debugger sieht man, dass bei +6(2) lediglich eine 1 zu der ersten Stelle addiert wird...wie sorge ich dafür dass es praktisch beiden Stellen zugerechnet wird und nicht nur der ersten. Hatte überlegt ADD 01 zu schreiben bringt aber nichts.

Re: Problem bei Zähler

Beitrag von JHM (Top Expert / 1214 / 2 / 202 ) »
patlau hat geschrieben:Im debugger sieht man, dass bei +6(2) lediglich eine 1 zu der ersten Stelle addiert wird...wie sorge ich dafür dass es praktisch beiden Stellen zugerechnet wird und nicht nur der ersten. Hatte überlegt ADD 01 zu schreiben bringt aber nichts.
Mit implizierter Typumwandlung kommst du hier nicht weiter (hatte ich dir auch schon geschrieben). Entweder du machst eine expliziete Typumwandlung in ein gescheites Format oder fummelst dir die Null wieder dazu, wenn Sie fehlt.

um deiner Frage zu vor zu kommen:

Code: Alles auswählen.

REPORT  ztest.
TYPES: BEGIN OF ts_data,
         obj TYPE rsdodsobject,
       END   OF ts_data.

DATA: gt_data     TYPE TABLE OF ts_data,
      gs_data     TYPE          ts_data,
      gs_data_tmp TYPE          ts_data,

      gv_line_cnt TYPE        i,
      gv_dlh      TYPE        n LENGTH 2.

START-OF-SELECTION.

  gs_data-obj = 'XXXXXX01'. APPEND gs_data TO gt_data.
  gs_data-obj = 'XXXXXX02'. APPEND gs_data TO gt_data.
  gs_data-obj = 'XXXXXX08'. APPEND gs_data TO gt_data.
  gs_data-obj = 'XXXXXX10'. APPEND gs_data TO gt_data.


  SORT gt_data DESCENDING BY obj.

  DESCRIBE TABLE gt_data LINES gv_line_cnt.
  DO.
    CLEAR: gs_data, gs_data_tmp.

    READ TABLE gt_data INTO gs_data INDEX gv_line_cnt.

    IF sy-subrc EQ 0.
      SUBTRACT 1 FROM gv_line_cnt.
      READ TABLE gt_data INTO gs_data_tmp INDEX gv_line_cnt.

*     expliziete Typumwandlung
      gv_dlh = gs_data-obj+6(2).
      ADD 1 TO gv_dlh.
      WRITE gv_dlh TO gs_data-obj+6(2).

      WHILE gs_data-obj+6(2) LT gs_data_tmp-obj+6(2).
        WRITE: /01 'Ausgelassenes Objekt, welches zuerst erstellt werden muss: ', gs_data-obj.

*       gefummelte Lösung
        ADD 1 TO gs_data-obj+6(2).
        SHIFT gs_data-obj+6(2) RIGHT DELETING TRAILING space.
        TRANSLATE gs_data+6(2) USING ' 0'.
      ENDWHILE.
    ENDIF.

    IF gs_data-obj IS INITIAL.
      EXIT.
    ENDIF.
  ENDDO.
Schau dir beide Lösung im Debugger an (oder kopier halt ohne es zu verstehen)!
Gruß Hendrik

Re: Problem bei Zähler

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
Wenn ich es richtig verstanden habe, is es notwendig in dieser Lösung zu wissen, welche Objekte existieren oder?
Hab dies ehrlich gesagt nicht verstanden, was genau davon ist für mich relevant. Steig nich tmehr durch... :cry:

Re: Problem bei Zähler

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
Na entweder du benutzt die explizite Typumwandlung oder die gefummelte Lösung. JHM hat dir da ja alles vorgegeben was du brauchst. Du wandelst den Teil den du nutzen möchtest auf dein Programm um (wandelst als die Variablen an deine Bedingungen) und gut is. Da is kein Punkt zum Aussteigen.

OFFTOPIC: Ich glaube was dir hier grad das größte Problem bereitet ist das gezielte Lesen von Quelltexten und die für dich relevanten Informationen raussuchen, oder?
Gruß,
der Matze

Re: Problem bei Zähler

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
Sorry antworte teilweise etwas vorschnell, habe es übernommen und auch verstanden.
Habe gerade allerdings noch ein PRoblem mit der Sortierung bei den Infoobjekten. Hier habe ich lediglich einen Zähler also nur 1,2,3 und wenn ich das Objekt mit 10 habe erkennt er nur die 1, wie löse ich das Problem?

Re: Problem bei Zähler

Beitrag von JHM (Top Expert / 1214 / 2 / 202 ) »
patlau hat geschrieben:Wenn ich es richtig verstanden habe, is es notwendig in dieser Lösung zu wissen, welche Objekte existieren oder?
Hast du das Programm mal als Testprogramm bei dir im System angelegt (simples copy&past)?
Wenn ja, kannst du es im Debugger ausführen und dir die einzelnen Schritte anschauen. Dann siehst du auch was wie funktioniert.

Das Demoprogramm zeigt dir eigentlich nur den Algorythmus ansich, ohne Beiwerk (keine DB-Selekts, SelScreens,...). Am Anfang werden ein paar ObjektIDs hardverdrahtet (XXXXXX01; XXXXXX02; etc..) mit geben und dann die Lücken in diesen ObjektIDs ermittelt und ausgegeben.

Wichtig sind die beiden Stellen mit den Komentaren, denn dort wird dein Problem gelöst. Dein Problem ist die impliziete Umwandlung bei der Addition. SAP wandelt deine CHAR-Variable mit dem Inhalt 01 vor der Addition automatisch in eine INT-Variable um. INT-Variablen haben aber keine führenden Nullen, also wird aus 01 eine 1. Dann die Addition macht 2. Jetzt wandelt SAP die INT-Variable wieder zurück in eine CHAR-Variable. INT 2 wird dabei zu CAHR 2. Die führende Null fehlt nach der Rückwandlung, da CHAR-Variablen von links an gefüllt werden und es ebenfalls automatisch keine führende Null gibt. Macht man die Addition für CHAR 11, kommt am Ende richtigerweise CHAR 12 an, da bei der Umwandlung von CHAR nach INT und zurück keine führende Null verloren geht.

Da SAP es nicht automatisch kann, mußt du dafür sorgen, dass die führende Null nicht verloren geht.
Dies kann man entweder dadurch erreichen, dass man die Konvertierung selber vornimmt (expliziet). Dafür eignet sich eine NUM-Variable der Länge zwei, da NUM-Variablen von rechts gefüllt werden und dann mit führenden Nullen aufgefüllt werden (So bleibt die führende Null bei der Addition erhalten).

Code: Alles auswählen.

DATA: gv_dlh      TYPE        n LENGTH 2.   "dirty littel helper für die Konvertierung

gv_dlh = gs_data-obj+6(2).     "aus dem CHAR ein NUM machen
ADD 1 TO gv_dlh. "rechnen
WRITE gv_dlh TO gs_data-obj+6(2). "aus dem NUM wieder ein CHAR machen
Oder aber man "fummelt" die Null wieder in den String:

Code: Alles auswählen.

ADD 1 TO gs_data-obj+6(2).
SHIFT gs_data-obj+6(2) RIGHT DELETING TRAILING space.  "die neue Zahl solange nach rechts schieben, bis es keine Leerzeichen mehr gibt
TRANSLATE gs_data+6(2) USING ' 0'. "wenn die Zahl geschoben wurde dann fehlt eine führende Null (statt dessen gibt es ein Leerzeichen), aus dem Leerzeichen eine Null machen
Schau es dir im Debugger an.

Folgende Benutzer bedankten sich beim Autor JHM für den Beitrag:
patlau

Gruß Hendrik

Re: Problem bei Zähler

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
Vielen Dank, das hAbe ich jetzt verstanden Klasse Erklärung.

Re: Problem bei Zähler

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
Vielen Dank, das hAbe ich jetzt verstanden Klasse Erklärung.#
Nun nur noch die Sortierung bei einstelliger Zählerzahl..
also es gibt solch eine Sortierung aus
4
2
10
1... und ich hätte gerne

10
4
2
1

Re: Problem bei Zähler

Beitrag von JHM (Top Expert / 1214 / 2 / 202 ) »
patlau hat geschrieben:und ich hätte gerne
10
4
2
1

geht mWn nicht mit den einfachen SORT.

Wenn dann muss der Zähler richtig gefüllt sein (führende Null). Wenn es ein must have ist, dann definier dir in der internen Tabellen eine Hilfspalte mit TYPE N LENGTH 2 und fülle die Felder entsprechend. Dann den Sort auf das Hilfsfeld.
Gruß Hendrik

Re: Problem bei Zähler

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
Danke , habe das jetzt so hinzugefügt

Code: Alles auswählen.

 BEGIN OF ty_rsdiobj,
         iobjnm TYPE rsdiobj-iobjnm,
         objname TYPE n LENGTH 2  
Wie sorge ich nun dafür, dass objname die letzten beiden Stellen des iobjnm annimmt?

Bitte um Hilfe..

Vergleichbare Themen

3
Antw.
2631
Views
Group by Zähler
von gs3rr4 » 16.07.2015 10:42 • Verfasst in ABAP® für Anfänger
5
Antw.
1939
Views
BAPI_ACC_DOCUMENT_CHECK - Zähler Positionen
von Rabea1103 » 27.09.2019 11:50 • Verfasst in ABAP® für Anfänger
10
Antw.
5385
Views
Zähler nebem Überschrifm FB 'REUSE_ALV_GRID_DISPLAY'
von managero » 02.07.2008 16:09 • Verfasst in Dialogprogrammierung
1
Antw.
13786
Views
Zähler für das Zählen von Reportaufrufen im Portal
von kaim77 » 01.03.2012 09:49 • Verfasst in Enterprise Portal
25
Antw.
4892
Views
Ausgabe für letztes erstelltes Objekt durch Zähler
von patlau » 14.05.2013 11:33 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

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.