Hallo,
Ich möchte Daten über mehrere Tabellen (mittels INNER JOIN ?) selektieren und ausgeben.
(siehe code)
Nur derzeit ist es so, dass ich immer eine leere Ausgabe habe, bzw. keine Datensätze gefunden werden.
--> Ist mein select falsch?
--> Oder liegt es an der internen Tab. it_data?
thx
lg
REPORT zlobtest03 LINE-SIZE 500 NO STANDARD PAGE HEADING MESSAGE-ID zpkt.
*Deklaration der zu verwendeten Tabellen
*Für die Datenbanktabelle wird eine gleichnamige Struktur - der Tabellenarbeitsbereich - angelegt
*Die Struktur des Tabellenarbeitsbereichs entspricht genau der Zeilenstruktur der Datenbanktabelle
TABLES:
zzt_pkt_status,
pa0001,
zzt_pkt_versns.
DATA: BEGIN OF it_data OCCURS 0,
sozver LIKE zzt_pkt_versns-sozver,
pernr LIKE zzt_pkt_versns-pernr,
tstmp LIKE zzt_pkt_status-tstmp,
zz_pkt_status LIKE zzt_pkt_status-zz_pkt_status,
endda LIKE pa0001-endda,
begda LIKE pa0001-begda,
vdsk1 LIKE pa0001-vdsk1,
END OF it_data.
*Datendeklaration - Datum und Uhrzeit wird für die Konvertierung des timestamp benötigt
DATA:
datum LIKE sy-datum,
zeit LIKE sy-uzeit,
tag LIKE sy-datum.
* it_status TYPE TABLE OF zzt_pkt_status WITH HEADER LINE,
* wa_status TYPE zzt_pkt_status,
* it_pa0001 TYPE TABLE OF pa0001 WITH HEADER LINE,
* wa_pa0001 TYPE pa0001.
*Selektionsblock für die Eingabe des timestamp
SELECTION-SCREEN BEGIN OF BLOCK auswahl WITH FRAME.
*Selektionsbildschirm
PARAMETERS: p_tstmp LIKE zzt_pkt_status-tstmp.
SELECT-OPTIONS: s_vdsk1 FOR pa0001-vdsk1.
PARAMETERS: p_tag LIKE sy-datum.
SELECTION-SCREEN END OF BLOCK auswahl.
*Hauptverarbeitung
START-OF-SELECTION.
* SELECT * FROM zzt_pkt_status
* INTO TABLE it_status.
*
* SELECT * FROM pa0001
* INTO TABLE it_pa0001.
IF p_tag IS INITIAL.
p_tag = sy-datum.
ENDIF.
IF s_vdsk1 IS NOT INITIAL.
p_tag = sy-datum.
ENDIF.
* zzt_pkt_status-zz_pkt_status = 'BMLV-HVBCH'.
* INSERT 'BMLV-HVBCHECK' INTO zzt_pkt_status VALUES wa_status.
* wa_status-zz_pkt_status = 'BMLV-HVBCHECK'.
* INSERT INTO zzt_pkt_status VALUES wa_status.
IF sy-subrc NE 0.
WRITE: / 'Der technische Status konnte nicht eingefügt werden.'.
ENDIF.
SELECT zzt_pkt_status~sozver zzt_pkt_status~tstmp zzt_pkt_status~zz_pkt_status
pa0001~endda pa0001~begda pa0001~vdsk1 pa0001~pernr
zzt_pkt_versns~sozver zzt_pkt_versns~pernr
* INTO (it_status-sozver, it_status-tstmp,
* it_pa0001-endda, it_pa0001-begda, it_pa0001-vdsk1)
FROM zzt_pkt_versns INNER JOIN zzt_pkt_status
ON zzt_pkt_versns~sozver = zzt_pkt_status~sozver
INNER JOIN pa0001
ON zzt_pkt_versns~pernr = pa0001~pernr
INTO CORRESPONDING FIELDS OF TABLE it_data
WHERE zzt_pkt_status~tstmp >= p_tstmp
AND zzt_pkt_status~zz_pkt_status EQ 'HVB_RECEIV'
AND pa0001~vdsk1 IN s_vdsk1
AND pa0001~begda <= p_tag
AND pa0001~endda >= p_tag
ORDER BY zzt_pkt_status~tstmp.
*Wenn Datensätze gefunden wurden
IF sy-subrc EQ 0.
*Konvertiere den timestamp unter Berücksichtigung der Zeitzone in Datum und Zeit
CONVERT TIME STAMP it_data-tstmp TIME ZONE sy-zonlo INTO DATE datum TIME zeit.
*Ausgabe der Sozialversicherungsnummern, timestamp und timestamp konvertiert
WRITE: / 'SV-Nummer:',it_data-sozver,',' ,'Timestamp:',it_data-tstmp,','.
WRITE: 'Timestamp konvertiert:',datum, zeit,','.
WRITE: 'Org.schluessel:',it_data-vdsk1,',' ,'Stichtag:',p_tag.
ENDIF.
*Wenn kein Datensatz gefunden wurde
IF sy-subrc NE 0.
*Dann wird eine dementsprechende Meldung ausgegeben
WRITE: / 'Es wurden keine Datensätze gefunden.'.
ENDIF.
**Funktionsbaustein zum reinschreiben des technischen Status
* CALL FUNCTION 'Z_PKT_WRITE_TECH_STATUS'
**Unter EXPORTING werden Felder, Feldleisten oder interne Tabellen an den Funktionsbaustein übergeben
* EXPORTING
* sozver = zzt_pkt_status-sozver
**Der techn. Status wurde mit dem Namen HVB_RECEIV angelegt
* status = 'HVB-RECEIV'
** TEXT1 =
** TEXT2 =
** TIMESTAMP =
** WRITE_TO_DB = 'X'
**Unter EXCEPTIONS werden die Ausnahmen aufgeführt, die das Programm behandeln möchte
* EXCEPTIONS
* invalid_sozvers = 1
* invalid_status = 2
**Mit OTHERS kann auf alle verbleibenden Ausnahmen Bezug genommen werden
* OTHERS = 3
* .
**Tritt eine der aufgeführten Ausnahmen ein, wird SY-SUBRC auf den zugeordneten Wert rc gesetzt
**SY-SUBRC wird im Falle der Ausnahme auf einen Wert ungleich 0 gesetzt
* IF sy-subrc <> 0.
* MESSAGE x000 WITH 'Z_PKT_WRITE_TECH_STATUS' sy-subrc.
* ENDIF.
END-OF-SELECTION.