Code: Alles auswählen.
SELECT * FROM lagp INTO gt_lagp
WHERE anzqu > '1'.
SELECT * FROM lqua INTO gt_lqua
WHERE lgpla = gt_lagp-lgpla.
SELECT * FROM lagp INTO gt_lagp WHERE lgpla = wa_lgpla.
ENDSELECT.
WRITE: / gt_lagp-lgpla,
gt_lqua-lqnum,
gt_lqua-matnr,
gt_lagp-anzqu.
ENDSELECT.
ENDSELECT.
Code: Alles auswählen.
TYPES: BEGIN OF t_lqua,
matnr LIKE lqua-matnr,
lgnum LIKE lagp-lgnum,
lgtyp LIKE lagp-lgtyp,
lgpla LIKE lagp-lgpla,
anzqu LIKE lagp-anzqu,
lqnum LIKE lqua-lqnum,
END OF t_lqua.
DATA: gt_lqua TYPE SORTED TABLE OF t_lqua
WITH UNIQUE KEY matnr lgnum lgtyp lgpla lqnum,
wa_lqua LIKE LINE OF gt_lqua.
SELECT lqua~matnr lagp~lgnum lagp~lgtyp lagp~lgpla lagp~anzqu lqua~lqnum
FROM lagp JOIN lqua ON lagp~lgtyp = lqua~lgtyp
AND lagp~lgpla = lqua~lgpla
APPENDING table gt_lqua
WHERE anzqu > '1'.
Folgende Benutzer bedankten sich beim Autor Alexander D. für den Beitrag:
commolus
Code: Alles auswählen.
TYPES: BEGIN OF t_lqua,
matnr LIKE lqua-matnr,
lgnum LIKE lagp-lgnum,
lgtyp LIKE lagp-lgtyp,
lgpla LIKE lagp-lgpla,
anzqu LIKE lagp-anzqu,
lqnum LIKE lqua-lqnum,
END OF t_lqua.
DATA: gt_lqua TYPE SORTED TABLE OF t_lqua
WITH UNIQUE KEY matnr lgnum lgtyp lgpla lqnum,
wa_lqua LIKE LINE OF gt_lqua,
l_count TYPE p LENGTH 5.
SELECT lqua~matnr lagp~lgnum lagp~lgtyp lagp~lgpla lagp~anzqu lqua~lqnum
FROM lagp JOIN lqua ON lagp~lgtyp = lqua~lgtyp
AND lagp~lgpla = lqua~lgpla
APPENDING table gt_lqua
WHERE anzqu > '1'.
LOOP AT gt_lqua INTO wa_lqua.
AT NEW matnr.
CLEAR l_count.
ENDAT.
l_count = l_count + 1.
AT END OF matnr.
IF l_count > 1.
WRITE: wa_lqua-matnr, l_count.
NEW-LINE.
ENDIF.
ENDAT.
ENDLOOP.
Folgende Benutzer bedankten sich beim Autor Alexander D. für den Beitrag:
commolus
dann probier es doch nach deinen Bedürfnissen umzuschreiben. Wenn es irgendwo nicht weiter gehen sollte, so melde dich einfach noch ein malcommolus hat geschrieben:Es wäre nicht schlecht wenn die Materialnummer, der Lagerplatz und die Quantennummer ausgegeben würden, damit unsere Lagermitarbeiter eine korrigierte Buchung durchführen können.
Aber sonst sieht das Programm nicht schlecht aus.
Lg
Folgende Benutzer bedankten sich beim Autor Alexander D. für den Beitrag:
commolus
Code: Alles auswählen.
LOOP AT gt_lqua INTO wa_lqua.
AT NEW matnr.
CLEAR l_count.
ENDAT.
l_count = l_count + 1.
AT END OF matnr.
IF l_count > 1.
" WRITE: wa_lqua-matnr, l_count.
WRITE: wa_lqua-matnr, l_count, wa_lqua-lgpla.
NEW-LINE.
ENDIF.
ENDAT.
ENDLOOP.
Ist Standardverhalten bei AT und Workarea. Am einfachsten mit Fieldsymbols zu umgehen:commolus hat geschrieben:Lagerplatznummer verschwindet und durch Sterne ersetzt wird. Nach diesen beiden Anweisungen erscheint die Lagerplatznummer wieder.
Code: Alles auswählen.
FIELD-SYMBOLS: <gs_lqua> TYPE lqua.
LOOP AT gt_lqua ASSIGING <gs_lqua>.
ENDLOOP.
Code: Alles auswählen.
LOOP AT gt_lqua INTO wa_lqua.
AT NEW matnr.
CLEAR l_count.
ENDAT.
l_count = l_count + 1.
AT END OF matnr.
IF l_count > 1. "Material ist auf mehreren Quants gelagert, also alle Quants zu diesem Material ausgeben
LOOP AT gt_lqua INTO wa_lqua_tmp WHERE matnr = wa_lqua-matnr.
WRITE: / wa_lqua_tmp-matnr, l_count, wa_lqua_tmp-lgpla.
ENDLOOP.
ENDIF.
ENDAT.
ENDLOOP.
Code: Alles auswählen.
*&---------------------------------------------------------------------*
*& Report Z_BW_TEST_ALLG
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
INCLUDE z_bw_test_allg_top.
TYPES: BEGIN OF t_lqua,
matnr LIKE lqua-matnr,
lgnum LIKE lagp-lgnum,
lgtyp LIKE lagp-lgtyp,
"lgpla LIKE lqua-lgpla,
lgpla LIKE lagp-lgpla,
anzqu LIKE lagp-anzqu,
lqnum LIKE lqua-lqnum,
END OF t_lqua.
DATA: gt_lqua TYPE SORTED TABLE OF t_lqua
WITH UNIQUE KEY matnr lgnum lgtyp lgpla lqnum,
wa_lqua LIKE LINE OF gt_lqua,
l_count TYPE p LENGTH 5.
SELECT lqua~matnr lagp~lgnum lagp~lgtyp lagp~lgpla lagp~anzqu lqua~lqnum
FROM lagp JOIN lqua ON lagp~lgtyp = lqua~lgtyp
AND lagp~lgpla = lqua~lgpla
APPENDING table gt_lqua
WHERE anzqu > '1'.
LOOP AT gt_lqua INTO wa_lqua.
AT NEW matnr.
CLEAR l_count.
ENDAT.
l_count = l_count + 1.
AT END OF matnr.
TYPE-POOLS line.
IF l_count > 1. "Material ist auf mehreren Quants gelagert, also alle Quants zu diesem Material ausgeben
LOOP AT gt_lqua INTO wa_lqua WHERE matnr = wa_lqua-matnr AND lgpla = wa_lqua-lgpla. "ne 'SAMMLER'.
WRITE: / wa_lqua-matnr,
wa_lqua-lgpla,
wa_lqua-lqnum. "line_vertical_line AS LINE.
ENDLOOP.
ULINE.
ENDIF.
ENDAT.
ENDLOOP.
IF l_count < 2.
WRITE: / 'Keine doppelten Datensätze mehr gefunden'.
ENDIF.Code: Alles auswählen.
"GT_LQUA - Tabelle mit sämtlichen Beständen
TYPES: BEGIN OF t_lqua,
matnr LIKE lqua-matnr,
lgnum LIKE lagp-lgnum,
lgtyp LIKE lagp-lgtyp,
"lgpla LIKE lqua-lgpla,
lgpla LIKE lagp-lgpla,
anzqu LIKE lagp-anzqu,
lqnum LIKE lqua-lqnum,
END OF t_lqua.
DATA: gt_lqua TYPE SORTED TABLE OF t_lqua
WITH UNIQUE KEY matnr lgnum lgtyp lgpla lqnum,
wa_lqua LIKE LINE OF gt_lqua.
"GT_MAT - Material auf unterschiedlichen Lagerplätzen
TYPES: BEGIN OF t_mat,
matnr LIKE lqua-matnr,
lgnum LIKE lagp-lgnum,
lgtyp LIKE lagp-lgtyp,
lgpla LIKE lagp-lgpla,
count type i,
END OF t_mat.
DATA: gt_mat TYPE SORTED TABLE OF t_mat
WITH UNIQUE KEY matnr lgnum lgtyp lgpla,
wa_mat LIKE LINE OF gt_mat.
*--------------------------------------------------------------------*
"Bestände lesen --> GT_LQUA
*--------------------------------------------------------------------*
SELECT lqua~matnr lagp~lgnum lagp~lgtyp lagp~lgpla lagp~anzqu lqua~lqnum
FROM lagp JOIN lqua ON lagp~lgtyp = lqua~lgtyp
AND lagp~lgpla = lqua~lgpla
APPENDING table gt_lqua
WHERE anzqu > '1'.
*--------------------------------------------------------------------*
"Bestände aus GT_LQUA nach Material/Lagerplatz verdichten --> GT_MAT
*--------------------------------------------------------------------*
LOOP AT gt_lqua INTO wa_lqua.
MOVE-CORRESPONDING wa_lqua TO wa_mat.
wa_mat-count = 1.
COLLECT wa_mat INTO gt_mat.
ENDLOOP.
"nur die Materialnummern behalten welche mehr als nur 1 Mal vorkommen
delete gt_mat WHERE count = 1.
Wieso das denn so umständlichAlexander D. hat geschrieben:verdichtest anschliessend die Kombination Material + Lagerplatz in einer zweiten Tabelle
Code: Alles auswählen.
TYPES: BEGIN OF t_lqua,
matnr LIKE lqua-matnr,
lgpla LIKE lagp-lgpla, "Feld muss für die Gruppenstufenverarbeitung vorne stehen
lgnum LIKE lagp-lgnum,
lgtyp LIKE lagp-lgtyp,
anzqu LIKE lagp-anzqu,
lqnum LIKE lqua-lqnum,
END OF t_lqua.
*** Feldreihenfolge beim Select anpassen:
SELECT lqua~matnr lagp~lgpla lagp~lgnum lagp~lgtyp lagp~anzqu lqua~lqnum
FROM lagp JOIN lqua ON lagp~lgtyp = lqua~lgtyp
AND lagp~lgpla = lqua~lgpla
APPENDING TABLE gt_lqua
WHERE anzqu > '1'.
*** Tabelle sortieren:
SORT gt_lqua BY matnr lgpl.
*** Loop anpassen:
LOOP AT gt_lqua INTO wa_lqua.
AT NEW lgpla. "Wenn sich das Material oder der Lagerplatz ändert
CLEAR l_count.
ENDAT.
l_count = l_count + 1.
AT END OF lgpla. "auch hier: Material ODER Lagerplatz ende
IF l_count > 1. "Material ist auf mehreren Quants gelagert, also alle Quants zu diesem Material ausgeben
LOOP AT gt_lqua INTO wa_lqua WHERE matnr = wa_lqua-matnr AND lgpla = wa_lqua-lgpla. "das wurde ja bereits angepasst
WRITE: / wa_lqua-matnr,
wa_lqua-lgpla,
wa_lqua-lqnum.
ENDLOOP.
ULINE.
ENDIF.
ENDAT.
ENDLOOP.
Code: Alles auswählen.
*&---------------------------------------------------------------------*
*& Report Z_BW_TEST_ALLG
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
"INCLUDE z_bw_test_allg_top.
Report Z_BW_TEST_ALLG.
*--------------------------------------------------------------------*
"GT_LQUA - Tabelle mit sämtlichen Beständen
*--------------------------------------------------------------------*
TYPES: BEGIN OF t_lqua,
matnr LIKE lqua-matnr,
lgnum LIKE lagp-lgnum,
lgtyp LIKE lagp-lgtyp,
lgpla LIKE lagp-lgpla,
anzqu LIKE lagp-anzqu,
lqnum LIKE lqua-lqnum,
END OF t_lqua.
DATA: gt_lqua TYPE SORTED TABLE OF t_lqua
WITH UNIQUE KEY matnr lgnum lgtyp lgpla lqnum,
wa_lqua LIKE LINE OF gt_lqua,
l_count TYPE p LENGTH 5.
" Eingefügt 08.05.2012 ********************************* BW Anfang
*--------------------------------------------------------------------*
"GT_MAT - Material auf unterschiedlichen Lagerplätzen
*--------------------------------------------------------------------*
TYPES: BEGIN OF t_mat,
matnr LIKE lqua-matnr,
lgnum LIKE lagp-lgnum,
lgtyp LIKE lagp-lgtyp,
lgpla LIKE lagp-lgpla,
" lqnum LIKE lqua-lqnum, "eingefügt um die Lagerquanten auszugeben
count TYPE i,
END OF t_mat.
DATA: gt_mat TYPE SORTED TABLE OF t_mat
WITH UNIQUE KEY matnr lgnum lgtyp lgpla,
wa_mat LIKE LINE OF gt_mat.
"Eingefügt**************************************** BW 08.05.12 ENDE
*--------------------------------------------------------------------*
"Bestände lesen --> GT_LQUA
*--------------------------------------------------------------------*
SELECT lqua~matnr lagp~lgnum lagp~lgtyp lagp~lgpla lagp~anzqu lqua~lqnum
FROM lagp JOIN lqua ON lagp~lgtyp = lqua~lgtyp
AND lagp~lgpla = lqua~lgpla
APPENDING table gt_lqua
WHERE anzqu > '1'.
*--------------------------------------------------------------------*
"Bestände aus GT_LQUA nach Material/Lagerplatz verdichten --> GT_MAT
*--------------------------------------------------------------------*
LOOP AT gt_lqua INTO wa_lqua.
MOVE-CORRESPONDING wa_lqua TO wa_mat.
wa_mat-count = 1.
COLLECT wa_mat INTO gt_mat.
ENDLOOP.
*--------------------------------------------------------------------*
"nur die Materialnummern behalten welche mehr als nur 1 Mal vorkommen
*--------------------------------------------------------------------*
DELETE gt_mat WHERE count = 1.
LOOP AT gt_mat INTO wa_mat.
AT NEW matnr.
CLEAR l_count.
ENDAT.
l_count = l_count + 1.
AT END OF matnr.
TYPE-POOLS line.
IF l_count >= 1.
TYPE-POOLS line.
IF l_count >= 1. "Material ist auf mehreren Quants gelagert, also alle Quants zu diesem Material ausgeben
LOOP AT gt_mat INTO wa_mat WHERE matnr = wa_mat-matnr AND lgpla NE 'DUMMY' AND lgpla NE 'U-ZONE'
AND lgpla NE 'IN-ZONE' AND lgpla NE 'DUMMY-1' AND lgpla NE 'UML-ZONE'.
LOOP AT gt_lqua INTO wa_lqua WHERE matnr = wa_mat-matnr.
WRITE: / wa_mat-matnr,
wa_lqua-lgpla,
wa_lqua-lqnum.
ENDLOOP.
ULINE.
ENDLOOP.
ENDIF.
ENDIF.
ENDAT.
ENDLOOP.