SAP Jobsuche bei DV-Treff
shkelzen.aliu@eridea.de
vor 11 Jahre
Hallo zusammen,

ich habe die Selektionsfelder:

WERK

ARBEITSPLATZ

AUFTRAGSART

FERTIGUNGSSTEUERER

DISPONENT

SEGMENT

und soll Vorgänge von Fertigungsaufträgen, welche an den selektierten Arbeitsplätzen liegen ermitteln.

Über folgenden Selektion erhalte ich auch alle Fertigungsaufträge mit allen Vorgängen zu einem Arbeitsplatz.

SELECT a~zelle a~linie b~arbpl

b~ktext d~aufnr d~auart

c~vornr c~steus c~ltxa1 d~fevor

INTO CORRESPONDING FIELDS OF TABLE gt_auftraege

FROM zpp_wc_zuordnung AS a INNER JOIN crhd_v1 AS b

ON a~werks = b~werks

AND a~arbpl = b~arbpl

INNER JOIN afvc AS c

ON b~objid = c~arbid

INNER JOIN caufv AS d

ON c~aufpl = d~aufpl

WHERE a~zelle IN s_zelle

AND a~linie IN s_linie

AND b~werks IN s_werks

AND b~arbpl IN s_arbpl

AND b~objty = 'A'

AND b~spras = 'DE'

AND d~auart IN s_auart

AND d~fevor IN s_fevor

AND d~dispo IN s_dispo.

Ich brauche aber nur die Vorgänge die noch nicht Endrückgemeldet wurden also != Status RÜCK und einschließlich TRÜC wo die AFRU-GMNGA < der rückzumeldenden Menge darstellt.

Weiterhin soll ich überprüfen ob der vorherige Vorgang rückgemeldet wurde(Status RÜCK) und ob der vorherige Vorgang teilrückgemeldet wurde(Status TRÜC).

Ich bin seit Tagen verzweifelt und finde einfach keinen Lösungsweg 😢

.fetox
vor 11 Jahre
Hallo,

die Statusobjekte werden über die Tabellen JSTO (Statusobjekt), JEST (Aktive und Inaktive Status zum Statusobjekt) und irgendeine Tnnn Tabelle im SAP abgebildet (Im Zweifel mal im Repository die Tabellen zum Paket BSV anschauen) verwaltet und in den Tabellen der korrespondierenden Objekte über eine Statusobjektnummer referenziert. Diese in einen (bei dir ja eh schon sehr großen) Join aufzunehmen ist ziemlich anstrengend, da die Statustexte ja eben auch noch mehrsprachig in dieser Tnnn Tabelle liegen.. Das macht die Sache auch nicht wirklich performant diesen Join dermaßen aufzublähen.

Ich würde mir mal die Funktionsbausteine 'STATUS_CHECK', 'STATUS_CHECK_EXTENDED_MULTI' und 'STATUS_CHECK_MULTI' anschauen, bzw. was Du sonst noch so in denen von Paket BSV findest. Ich mache das üblicherweise einfach mit ner Loop nach der eigentlichen Selektion über die gesamten Daten und prüfe die einzeln mit 'STATUS_CHECK' und schmeiss die unerwünschten raus.

Grüße,

Olli

shkelzen.aliu@eridea.de
vor 11 Jahre
Vielen Dank für die Antwort.

Über den FuBa STATUS_READ erhalte ich alle Status zu einem Fertigungsauftrag. Ich weiß aber nicht wie ich von hier weiter machen soll, wie lösche ich die Fertigungsaufträge deren Vorgänge die oben erwähnten Kriterien nicht erfüllen.

.fetox
vor 11 Jahre
STATUS_CHECK, nicht STATUS_READ.. Über STATUS_CHECK kannst Du gezielt einen Status abfragen. Die Statusnummer musst Du Dir entweder vorher raussuchen wenn fest verdrahtet oder aus der Tnnn Tabelle selektieren, oder vllt. gibts da auch einen Funktionsbaustein. Ich schreib gleich noch mal einen Pseudocodeschnipsel weil das Löschen wärend der Loop ja auch nicht funktioniert, deswegen muss man die entweder nur markieren in der Loop und hinterher löschen, bzw. in eine zweite baugleiche Tabelle umkopieren.. Für die Vorgängerstatus muss man dann noch bisschen Tricksen über Flags oder so..
.fetox
vor 11 Jahre
" Ermitteln der Statusnummer für 'RÜCK' und 'TRÜC'..

LOOP AT it_ergebnis_vom_select.

" Ermitteln der Statusobjektnummer vom Arbeitsgang

CALL FUNCTION 'STATUS_CHECK'. " mit Statusnummer von 'RÜCK'.

IF SY-SUBRC <> 0. Status nicht gesetzt (Vorsicht, besser genau auf den richtigen SUBRC prüfen)

CALL FUNCTION 'STATUS_CHECK'. " mit Statusnummer von 'TRÜC'.

IF SY-SUBRC = 0. " Status gesetzt..

MOVE it_ergebnis_vom_select INTO CORRESPONDING FIELDS OF it_finales_ergebnis. " Wegschreiben

APPEND it_finales_ergebnis.

ENDIF. " Test auf <> 'TRÜC'

ENDIF. " Test auf = 'RÜCK'

ENDLOOP.

" it_finales_ergebnis enthält nun die gefilterten Arbeitsgänge

.fetox
vor 11 Jahre
Wie gesagt, nur Pseudocode, ich programmiere zu viele verschiedene Sprachen als das ich blind ABAP tippen könnte, aber grobe Prinzip müsste klar sein. Für die Bedingung das vorgelagerte Arbeitsgänge mit in die Betrachtung einfliessen sollen müsste die Tabelle wirklich sauber geordnet sein, es müssen ggf. Arbeitsplanfolgen und die Meilensteinlogik berücksichtigt werden, wenn das alles sauber für jedes beliebige SAP laufen soll würde ich den Arbeitsplan initial schon gar nicht mehr mit nem SELECT lesen sondern auch per Funktionsbaustein, weil nur dann sichergestellt ist das auch so kleine Stolperfallen wie ggf. vorhandene Gültigkeitsdaten und Löschkennzeichen berücksichtigt werden. Wenn das alles keine Rolle spielt dann müsste man sich in der Loop noch ein kleines Flag einbauen das sich den Zustand des vorheringen Arbeitsganges merkt irgendwie, da muss man kreativ werden :)

Viel Spass beim weitertüfteln,

Olli

shkelzen.aliu@eridea.de
vor 11 Jahre
Zitat von: .fetox 

Wie gesagt, nur Pseudocode, ich programmiere zu viele verschiedene Sprachen als das ich blind ABAP tippen könnte, aber grobe Prinzip müsste klar sein. Für die Bedingung das vorgelagerte Arbeitsgänge mit in die Betrachtung einfliessen sollen müsste die Tabelle wirklich sauber geordnet sein, es müssen ggf. Arbeitsplanfolgen und die Meilensteinlogik berücksichtigt werden, wenn das alles sauber für jedes beliebige SAP laufen soll würde ich den Arbeitsplan initial schon gar nicht mehr mit nem SELECT lesen sondern auch per Funktionsbaustein, weil nur dann sichergestellt ist das auch so kleine Stolperfallen wie ggf. vorhandene Gültigkeitsdaten und Löschkennzeichen berücksichtigt werden. Wenn das alles keine Rolle spielt dann müsste man sich in der Loop noch ein kleines Flag einbauen das sich den Zustand des vorheringen Arbeitsganges merkt irgendwie, da muss man kreativ werden :)

Viel Spass beim weitertüfteln,

Olli

Vielen Dank das hilft mir auf jeden Fall schon weiter 😁