Code: Alles auswählen.
* Materialtdaten lesen ----------------------------------------------- *
PERFORM read_mara.
* Preise lesen ------------------------------------------------------- *
PERFORM read_a006.
PERFORM read_konp.
* Ausgabe ------------------------------------------------------------ *
LOOP AT i_mara.
CLEAR i_a006.
CLEAR i_konp.
READ TABLE i_a006 WITH KEY matnr = i_mara-matnr BINARY SEARCH.
READ TABLE i_konp WITH KEY knumh = i_a006-knumh BINARY SEARCH.
....
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form read_mara
*&---------------------------------------------------------------------*
FORM read_mara.
* Initialisieren ----------------------------------------------------- *
CLEAR: i_mara.
REFRESH: i_mara.
* MARA lesen --------------------------------------------------------- *
SELECT * INTO TABLE i_mara
FROM mara
WHERE matnr IN i_matnr.
* SORT i_mara BY matnr.
IF i_mara[] IS INITIAL.
MESSAGE s001.
EXIT.
ENDIF.
ENDFORM. " read_mara
*&---------------------------------------------------------------------*
*& Form read_a006
*&---------------------------------------------------------------------*
FORM read_a006.
* Initialisieren ----------------------------------------------------- *
CLEAR: i_a006.
REFRESH: i_a006.
* A006 lesen --------------------------------------------------------- *
SELECT * INTO TABLE i_a006
FROM a006
FOR ALL ENTRIES IN i_mara
WHERE matnr = i_mara-matnr
AND pltyp IN i_pltyp
AND waerk = 'EUR'
AND datbi >= sy-datum
AND datab =< sy-datum.
ENDFORM. " read_a006
*&---------------------------------------------------------------------*
*& Form read_konp
*&---------------------------------------------------------------------*
FORM read_konp.
* Initialisieren ----------------------------------------------------- *
CLEAR: i_konp.
REFRESH: i_konp.
* KONP lesen --------------------------------------------------------- *
SELECT * INTO TABLE i_konp
FROM konp
FOR ALL ENTRIES IN i_a006
WHERE knumh = i_a006-knumh
AND konwa = 'EUR'
AND loevm_ko = ''.
ENDFORM. " read_konp
Code: Alles auswählen.
LOOP AT i_mara.
CLEAR i_a006.
CLEAR i_konp.
SELECT SINGLE knumh FROM a006
INTO i_a006-knumh
WHERE matnr = i_mara-matnr
AND pltyp IN i_pltyp
AND waerk = 'EUR'
AND datbi >= sy-datum
AND datab =< sy-datum.
SELECT single * from konp INTO i_konp
WHERE knumh = i_a006-knumh
AND konwa = 'EUR'
AND loevm_ko = ''.
....
ENDLOOP.
Code: Alles auswählen.
FORM read_a006.
* Initialisieren ----------------------------------------------------- *
CLEAR: i_a006.
REFRESH: i_a006.
* A006 lesen --------------------------------------------------------- *
SELECT * INTO TABLE i_a006
FROM a006
FOR ALL ENTRIES IN i_mara
WHERE matnr = i_mara-matnr
AND pltyp IN i_pltyp
AND waerk = 'EUR'
AND datbi >= sy-datum
AND datab =< sy-datum
ORDER BY PRIMARY KEY. "Sortierung nach Schlüssel erzwingen
ENDFORM. " read_a006
Code: Alles auswählen.
IF p_price = 'X'.
CHECK i_konp-kbetr NE ''.
ENDIF.
Code: Alles auswählen.
IF p_price = 'X'.
CHECK sy-subrc = '0'.
ENDIF.
Code: Alles auswählen.
* Materialtdaten lesen ----------------------------------------------- *
PERFORM read_mara.
* Preise lesen ------------------------------------------------------- *
PERFORM read_a006.
PERFORM read_konp.
* Ausgabe ------------------------------------------------------------ *
LOOP AT i_mara.
CLEAR i_a006.
CLEAR i_konp.
READ TABLE i_a006 WITH KEY matnr = i_mara-matnr BINARY SEARCH.
CHECK sy-subrc EQ 0. "sonst, weiter mit nächstem Satz
READ TABLE i_konp WITH KEY knumh = i_a006-knumh BINARY SEARCH.
CHECK sy-subrc EQ 0. "sonst, weiter mit nächstem Satz
IF p_price EQ 'X'. "oder IF p_price NOT IS INITIAL. ;)
CHECK i_konp-kbtre NE 0.
ENDIF.
....
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form read_mara
*&---------------------------------------------------------------------*
Code: Alles auswählen.
IF sy-subrc NE 0. "nicht gleich !!!
CONTINUE. "weiter mit nächsten Satz
ENDIF.
Code: Alles auswählen.
IF p_price EQ abap_true.
Code: Alles auswählen.
TYPE-POOLS: abap
*ups*, da scheint jemand kein Mittag zu machen bzw. machen zu dürfen *s*.ereglam hat geschrieben:Selber Mahlzeit...![]()
Hier isser .. so wie ich mich kenne hängt's sicherlich an irgendeiner anderen Stelle. Aber wer Zeit und Lust hat, kann den Code gerne mal auseinander pflücken und mir sagen, was er/sie anders /besser machen würde. Würde mir enorm weiterhelfen!häng mal das ganze Coding rein. Ich versteh' das nicht...
Code: Alles auswählen.
REPORT z_meiner.
*******************************************************************
* DEKLARATIONEN
*******************************************************************
* TYPE POOLS ---------------------------------------------------- *
TYPE-POOLS: abap.
* TABLES -------------------------------------------------------- *
tables: mara, "Materialstamm
konp, "Konditionen (Position)
a006, "Preislistentyp/Währung/Material
t189. "Konditionen: Preislistentypen
* INTERNE TABELLEN ---------------------------------------------- *
DATA: i_mara LIKE STANDARD TABLE OF mara WITH HEADER LINE,
i_konp LIKE STANDARD TABLE OF konp WITH HEADER LINE,
i_a006 LIKE STANDARD TABLE OF a006 WITH HEADER LINE.
DATA: i_vtexte TYPE STANDARD TABLE OF tline WITH HEADER LINE.
* HILFSFELDER --------------------------------------------------- *
DATA: vtext(100). "Vertriebstext
DATA: count(2). "Zähler
*******************************************************************
* SELECTION-SCREEN
*******************************************************************
* Info-Block ---------------------------------------------------- *
SELECTION-SCREEN BEGIN OF BLOCK info
WITH FRAME TITLE text-001.
SELECTION-SCREEN SKIP 2.
SELECTION-SCREEN COMMENT 1(79) text-002.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN END OF BLOCK info.
* Selektions Block ---------------------------------------------- *
SELECTION-SCREEN BEGIN OF BLOCK selection
WITH FRAME TITLE text-003.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS i_matnr FOR mara-matnr.
PARAMETERS p_spras TYPE thead-tdspras DEFAULT sy-langu.
SELECT-OPTIONS i_pltyp FOR t189-pltyp DEFAULT '01' NO INTERVALS
NO-EXTENSION.
SELECTION-SCREEN SKIP.
PARAMETERS p_price AS CHECKBOX.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN END OF BLOCK selection.
*******************************************************************
* INITIALIZATION
*******************************************************************
INITIALIZATION.
*******************************************************************
* START-OF-SELECTION
*******************************************************************
START-OF-SELECTION.
* Fehlermeldung, wenn Selektion nicht eingeschränkt wurde ------------ *
IF i_matnr[] IS INITIAL.
MESSAGE s009.
EXIT.
ENDIF.
* Materialtdaten lesen ----------------------------------------------- *
PERFORM read_mara.
* Preise lesen ------------------------------------------------------- *
PERFORM read_a006.
PERFORM read_konp.
************************************************************************
* END-OF-SELECTION
************************************************************************
END-OF-SELECTION.
* Ausgabe auf Bildschirm --------------------------------------------- *
PERFORM ausgabe_screen.
*&---------------------------------------------------------------------*
*& Form read_mara
*&---------------------------------------------------------------------*
FORM read_mara.
* Initialisieren ----------------------------------------------------- *
CLEAR: i_mara.
REFRESH: i_mara.
* MARA lesen --------------------------------------------------------- *
SELECT * INTO TABLE i_mara
FROM mara
WHERE matnr IN i_matnr.
SORT i_mara BY matnr.
IF i_mara[] IS INITIAL.
MESSAGE s001.
EXIT.
ENDIF.
ENDFORM. " read_mara
*&---------------------------------------------------------------------*
*& Form ausgabe_screen
*&---------------------------------------------------------------------*
FORM ausgabe_screen.
LOOP AT i_mara.
CLEAR i_a006.
CLEAR i_konp.
CLEAR i_vtexte.
CLEAR count.
CLEAR vtext.
READ TABLE i_a006 WITH KEY matnr = i_mara-matnr BINARY SEARCH.
IF sy-subrc NE 0.
CONTINUE. "weiter mit nächsten Satz
ENDIF.
READ TABLE i_konp WITH KEY knumh = i_a006-knumh BINARY SEARCH.
IF sy-subrc NE 0.
CONTINUE.
ENDIF.
* IF p_price EQ abap_true.
IF p_price EQ 'X'. "oder IF p_price NOT IS INITIAL.
CHECK i_konp-kbetr NE 0.
ENDIF.
*
* SELECT SINGLE knumh FROM a006
* INTO i_a006-knumh
* WHERE matnr = i_mara-matnr
* AND pltyp IN i_pltyp
* AND waerk = 'EUR'
* AND datbi >= sy-datum
* AND datab =< sy-datum.
*
* SELECT single * from konp INTO i_konp
* WHERE knumh = i_a006-knumh
* AND konwa = 'EUR'
* AND loevm_ko = ''.
IF p_price = 'X'.
CHECK i_konp-kbetr NE ''.
ENDIF.
LOOP AT i_vtexte WHERE tdformat = '*'.
count = count + 2.
ENDLOOP.
RESERVE count LINES.
SKIP.
WRITE AT 001 i_mara-matnr.
WRITE AT 127 i_mara-spart.
IF i_konp-kbetr = ''.
WRITE: AT 95 'Kein Preis!' COLOR 6 INVERSE INTENSIFIED.
ELSE.
WRITE AT 90 i_konp-kbetr.
ENDIF.
WRITE AT 113 i_konp-kznep.
NEW-LINE.
* Vertriebstexte lesen ----------------------------------------------- *
PERFORM vtext_lesen USING i_mara-matnr.
IF sy-subrc = 4.
NEW-LINE.
WRITE: AT 21 'Kein Text vorhanden!' COLOR 6 INVERSE INTENSIFIED.
ELSE.
LOOP AT i_vtexte.
IF i_vtexte-tdformat = '*' OR i_vtexte-tdformat = '/'
AND sy-tabix > 1.
WRITE: AT 20 vtext, / ' '.
CLEAR vtext.
ENDIF.
CONCATENATE vtext i_vtexte-tdline INTO vtext SEPARATED BY space
.
ENDLOOP.
IF NOT vtext IS INITIAL.
WRITE: AT 20 vtext.
CLEAR vtext.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " ausgabe_screen
*&---------------------------------------------------------------------*
*& Form read_a006
*&---------------------------------------------------------------------*
FORM read_a006.
* Initialisieren ----------------------------------------------------- *
CLEAR: i_a006.
REFRESH: i_a006.
* A006 lesen --------------------------------------------------------- *
SELECT * INTO TABLE i_a006
FROM a006
FOR ALL ENTRIES IN i_mara
WHERE matnr = i_mara-matnr
AND pltyp IN i_pltyp
AND waerk = 'EUR'
AND datbi >= sy-datum
AND datab =< sy-datum
ORDER BY PRIMARY KEY.
* SORT i_a006 BY knumh.
ENDFORM. " read_a006
*&---------------------------------------------------------------------*
*& Form read_konp
*&---------------------------------------------------------------------*
FORM read_konp.
* Initialisieren ----------------------------------------------------- *
CLEAR: i_konp.
REFRESH: i_konp.
* KONP lesen --------------------------------------------------------- *
SELECT * INTO TABLE i_konp
FROM konp
FOR ALL ENTRIES IN i_a006
WHERE knumh = i_a006-knumh
AND konwa = 'EUR'
AND loevm_ko = ''.
APPEND i_konp.
ENDFORM. " read_konp
*&---------------------------------------------------------------------*
*& Form vtext_lesen
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_I_MARA_MATNR Materialnummer
*----------------------------------------------------------------------*
FORM vtext_lesen USING p_i_mara_matnr.
DATA: name TYPE thead-tdname.
MOVE p_i_mara_matnr TO name.
MOVE '10' TO name+18.
MOVE '10' TO name+22.
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id = '0001'
language = p_spras "sy-langu
name = name
object = 'MVKE'
TABLES
lines = i_vtexte
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
ENDFORM. " vtext_lesen