Selektion von mehreren Belegarten


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

Selektion von mehreren Belegarten

Beitragvon kisa » 16.05.2012, 12:40

Hallo,

ich habe eine Frage.

Mein Selektionsbildschirm soll so aussehen:

PARAMETERS: PA_BUKRS LIKE BKPF-BUKRS OBLIGATORY.
SELECT-OPTIONS:
SO_WRBTR FOR BSIK-WRBTR,
SO_MANST FOR BSIK-MANST,
SO_BUDAT FOR BSIK-BUDAT,
SO_BELNR FOR BSIK-BELNR,
SO_VBELN FOR VBUK-VBELN,
SO_KUNNR FOR BSID-KUNNR,
SO_LIFNR FOR BSIK-LIFNR.
PARAMETERS: P_DEB RADIOBUTTON GROUP FUNK,
P_KRED DEFAULT 'X' RADIOBUTTON GROUP FUNK.

Das klappt ja auch ganz gut. Nur mein Problem ist jetzt:
Wenn ich Debitor anklicke, ohne Belnr oder Vbeln auszufüllen, soll er mir beide Belege anzeigen, und bei Kreditor ebenso.
Wie schaffe ich es aber, nur belnr rauszukriegen, wenn ich in meinem Selektionsbildschirm belnr eingebe oder vbeln.

Ich habe es mit If und loop at probiert, es will aber nicht so, wie ich es gerne hätte :(
Kann mir da einer weiterhelfen?
kisa
ForumUser
 
Beiträge: 18
Registriert: 16.05.2012, 12:30
Dank erhalten: 0 mal
Ich bin: Berater/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: Selektion von mehreren Belegarten

Beitragvon Germi22 » 16.05.2012, 12:56

Poste doch einfach deinen Code dann kann man ihn anschauen.
Germi22
ForumUser
 
Beiträge: 9
Registriert: 16.05.2012, 10:28
Dank erhalten: 0 mal
Ich bin: Student/in

Re: Selektion von mehreren Belegarten

Beitragvon kisa » 16.05.2012, 13:00

Ok, also so siehts bei mir aus:

TYPE-POOLS: SLIS.

TYPES: TY_LFA1 LIKE TABLE OF LFA1,
TY_KNA1 LIKE TABLE OF KNA1,
TY_BSIK LIKE TABLE OF BSIK,
TY_BSID LIKE TABLE OF BSID,
TY_VBUK LIKE TABLE OF VBUK,
TY_FAEDE LIKE TABLE OF FAEDE.

TABLES: BSID, BSIK, LFA1, KNA1, FAEDE, VBUK.

DATA: IT_H_LFA1 TYPE TY_LFA1,
IT_H_KNA1 TYPE TY_KNA1,
IT_H_BSIK TYPE TY_BSIK,
IT_H_BSID TYPE TY_BSID,
IT_H_VBUK TYPE TY_VBUK,
LS_VBUK TYPE VBUK,
LS_LFA1 TYPE LFA1,
LS_KNA1 TYPE KNA1,
LT_VBUK TYPE VBUK.
DATA: ITAB TYPE STANDARD TABLE OF ZKISA_OP_ANALYSE,
WA TYPE ZKISA_OP_ANALYSE.
DATA: NF TYPE ZKISA_OP_ANALYSE-NF,
F TYPE ZKISA_OP_ANALYSE-F,
UEBF TYPE ZKISA_OP_ANALYSE-UEBF,
T_UEBF TYPE ZKISA_OP_ANALYSE-T_UEBF.
DATA: VERZN TYPE I.




SELECTION-SCREEN BEGIN OF BLOCK BLOCK1 WITH FRAME.
SELECTION-SCREEN SKIP.
PARAMETERS: PA_BUKRS LIKE BKPF-BUKRS OBLIGATORY.
SELECT-OPTIONS:
SO_WRBTR FOR BSIK-WRBTR,
SO_MANST FOR BSIK-MANST,
SO_BUDAT FOR BSIK-BUDAT,
SO_BELNR FOR BSIK-BELNR,
SO_VBELN FOR VBUK-VBELN,
SO_KUNNR FOR BSID-KUNNR,
SO_LIFNR FOR BSIK-LIFNR.
PARAMETERS: P_DEB RADIOBUTTON GROUP FUNK,
P_KRED DEFAULT 'X' RADIOBUTTON GROUP FUNK.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN END OF BLOCK BLOCK1.



START-OF-SELECTION.

IF P_KRED = 'X'.
REFRESH ITAB.
SELECT *
FROM BSID JOIN BSIK ON BSIK~BELNR = BSID~BELNR
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE BSID~BELNR IN SO_BELNR.
SELECT *
FROM KNA1 JOIN LFA1 ON KNA1~LIFNR = LFA1~LIFNR
INTO CORRESPONDING FIELDS OF TABLE IT_H_LFA1
WHERE KNA1~LIFNR IN SO_LIFNR.
SELECT *
FROM BSIK
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE BUKRS = PA_BUKRS
AND WRBTR IN SO_WRBTR
AND MANST IN SO_MANST
AND BUDAT IN SO_BUDAT
AND BELNR IN SO_BELNR
AND LIFNR IN SO_LIFNR.

LOOP AT ITAB INTO WA.
READ TABLE IT_H_LFA1 INTO LS_LFA1 WITH KEY LIFNR = WA-LIFNR.
IF SY-SUBRC = 0.
MOVE LS_LFA1-NAME1 TO WA-NAME1.
MODIFY ITAB FROM WA.
ENDIF.
CLEAR WA.
ENDLOOP.

LOOP AT ITAB INTO WA.
IF SY-SUBRC = 0.
PERFORM VERZN.
ENDIF.
MODIFY ITAB FROM WA.
CLEAR WA.
ENDLOOP.

ELSEIF P_DEB = 'X'.
SELECT *
FROM BSIK JOIN BSID ON BSID~BELNR = BSIK~BELNR
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE BSIK~BELNR IN SO_BELNR.
SELECT *
FROM LFA1 JOIN KNA1 ON LFA1~KUNNR = KNA1~KUNNR
INTO CORRESPONDING FIELDS OF TABLE IT_H_KNA1
WHERE LFA1~KUNNR IN SO_KUNNR.
SELECT *
FROM BSID
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE BUKRS = PA_BUKRS
AND WRBTR IN SO_WRBTR
AND MANST IN SO_MANST
AND BUDAT IN SO_BUDAT
AND BELNR IN SO_BELNR
AND KUNNR IN SO_KUNNR.


LOOP AT ITAB INTO WA.
READ TABLE IT_H_KNA1 INTO LS_KNA1 WITH KEY KUNNR = WA-KUNNR.
IF SY-SUBRC = 0.
MOVE LS_KNA1-NAME1 TO WA-NAME1.
MODIFY ITAB FROM WA.
ENDIF.
CLEAR WA.
ENDLOOP.

LOOP AT ITAB INTO WA.
IF SY-SUBRC = 0.
PERFORM VERZN.
ENDIF.
MODIFY ITAB FROM WA.
CLEAR WA.
ENDLOOP.



ELSEIF P_KRED = 'X' AND SO_BELNR IS INITIAL.

REFRESH ITAB.
SELECT *
FROM BSID JOIN BSIK ON BSIK~BELNR = BSID~BELNR
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE BSID~BELNR IN SO_BELNR.
SELECT *
FROM KNA1 JOIN LFA1 ON KNA1~LIFNR = LFA1~LIFNR
INTO CORRESPONDING FIELDS OF TABLE IT_H_LFA1
WHERE KNA1~LIFNR IN SO_LIFNR.
SELECT *
FROM BSIK
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE BUKRS = PA_BUKRS
AND WRBTR IN SO_WRBTR
AND MANST IN SO_MANST
AND BUDAT IN SO_BUDAT
AND BELNR = SO_BELNR
AND LIFNR IN SO_LIFNR.

LOOP AT ITAB INTO WA.
READ TABLE IT_H_LFA1 INTO LS_LFA1 WITH KEY LIFNR = WA-LIFNR.
IF SY-SUBRC = 0.
MOVE LS_LFA1-NAME1 TO WA-NAME1.
MODIFY ITAB FROM WA.
ENDIF.
CLEAR WA.
ENDLOOP.

LOOP AT ITAB INTO WA.
IF SY-SUBRC = 0.
PERFORM VERZN.
ENDIF.
MODIFY ITAB FROM WA.
CLEAR WA.
ENDLOOP.



ELSEIF P_DEB = 'X' AND SO_BELNR IS INITIAL.
REFRESH ITAB.
SELECT *
FROM BSIK JOIN BSID ON BSID~BELNR = BSIK~BELNR
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE BSIK~BELNR IN SO_BELNR.
SELECT *
FROM LFA1 JOIN KNA1 ON LFA1~KUNNR = KNA1~KUNNR
INTO CORRESPONDING FIELDS OF TABLE IT_H_KNA1
WHERE LFA1~KUNNR IN SO_KUNNR.
SELECT *
FROM BSID
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE BUKRS = PA_BUKRS
AND WRBTR IN SO_WRBTR
AND MANST IN SO_MANST
AND BUDAT IN SO_BUDAT
AND BELNR = SO_BELNR
AND KUNNR IN SO_KUNNR.


LOOP AT ITAB INTO WA.
READ TABLE IT_H_KNA1 INTO LS_KNA1 WITH KEY KUNNR = WA-KUNNR.
IF SY-SUBRC = 0.
MOVE LS_KNA1-NAME1 TO WA-NAME1.
MODIFY ITAB FROM WA.
ENDIF.
CLEAR WA.
ENDLOOP.

LOOP AT ITAB INTO WA.
IF SY-SUBRC = 0.
PERFORM VERZN.
ENDIF.
MODIFY ITAB FROM WA.
CLEAR WA.
ENDLOOP.



ELSEIF P_KRED = 'X' AND SO_VBELN IS INITIAL.
REFRESH ITAB.
* SELECT *
* FROM BSIK JOIN BSID ON BSID~BELNR = BSIK~BELNR
* INTO CORRESPONDING FIELDS OF TABLE ITAB
* WHERE BSIK~BELNR IN SO_BELNR.
SELECT *
FROM VBUK
INTO CORRESPONDING FIELDS OF TABLE IT_H_VBUK
WHERE VBUK~VBELN IN SO_VBELN.

SELECT *
FROM KNA1 JOIN LFA1 ON KNA1~LIFNR = LFA1~LIFNR
INTO CORRESPONDING FIELDS OF TABLE IT_H_LFA1
WHERE KNA1~LIFNR IN SO_LIFNR.
SELECT *
FROM BSIK
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE BUKRS = PA_BUKRS
AND WRBTR IN SO_WRBTR
AND MANST IN SO_MANST
AND BUDAT IN SO_BUDAT
AND LIFNR IN SO_LIFNR.

LOOP AT ITAB INTO WA WHERE VBELN = SO_VBELN.
READ TABLE IT_H_VBUK INTO LS_VBUK WITH KEY VBELN = so_VBELN.
IF SY-SUBRC = 0.
MOVE LS_VBUK-VBELN TO WA-VBELN.
MODIFY ITAB FROM WA.
ENDIF.
CLEAR WA.
ENDLOOP.


LOOP AT ITAB INTO WA.
READ TABLE IT_H_LFA1 INTO LS_LFA1 WITH KEY LIFNR = WA-LIFNR.
IF SY-SUBRC = 0.
MOVE LS_LFA1-NAME1 TO WA-NAME1.
MODIFY ITAB FROM WA.
ENDIF.
CLEAR WA.
ENDLOOP.

LOOP AT ITAB INTO WA.
IF SY-SUBRC = 0.
PERFORM VERZN.
ENDIF.
MODIFY ITAB FROM WA.
CLEAR WA.
ENDLOOP.

ELSEIF P_DEB = 'X' AND SO_VBELN IS INITIAL.
REFRESH ITAB.
* SELECT *
* FROM BSIK JOIN BSID ON BSID~BELNR = BSIK~BELNR
* INTO CORRESPONDING FIELDS OF TABLE ITAB
* WHERE BSIK~BELNR IN SO_BELNR.
SELECT *
FROM VBUK
INTO CORRESPONDING FIELDS OF TABLE IT_H_VBUK
WHERE VBUK~VBELN IN SO_VBELN.
SELECT *
FROM LFA1 JOIN KNA1 ON LFA1~KUNNR = KNA1~KUNNR
INTO CORRESPONDING FIELDS OF TABLE IT_H_KNA1
WHERE LFA1~KUNNR IN SO_KUNNR.
SELECT *
FROM BSID
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE BUKRS = PA_BUKRS
AND WRBTR IN SO_WRBTR
AND MANST IN SO_MANST
AND BUDAT IN SO_BUDAT
AND KUNNR IN SO_KUNNR.

LOOP AT ITAB INTO WA WHERE VBELN = SO_VBELN.
READ TABLE IT_H_VBUK INTO LS_VBUK WITH KEY VBELN = so_VBELN.
IF SY-SUBRC = 0.
MOVE LS_VBUK-VBELN TO WA-VBELN.
MODIFY ITAB FROM WA.
ENDIF.
CLEAR WA.
ENDLOOP.


LOOP AT ITAB INTO WA.
READ TABLE IT_H_KNA1 INTO LS_KNA1 WITH KEY KUNNR = WA-KUNNR.
IF SY-SUBRC = 0.
MOVE LS_KNA1-NAME1 TO WA-NAME1.
MODIFY ITAB FROM WA.
ENDIF.
CLEAR WA.
ENDLOOP.

LOOP AT ITAB INTO WA.
IF SY-SUBRC = 0.
PERFORM VERZN.
ENDIF.
MODIFY ITAB FROM WA.
CLEAR WA.
ENDLOOP.

ELSE.

ENDIF.
kisa
ForumUser
 
Beiträge: 18
Registriert: 16.05.2012, 12:30
Dank erhalten: 0 mal
Ich bin: Berater/in

Re: Selektion von mehreren Belegarten

Beitragvon Alexander D. » 16.05.2012, 15:08

hallo kisa,

irgendwie verstehe ich dein Ziel nicht. Die Zweige ELSEIF p_deb = 'X' und ELSEIF p_deb = 'X' AND so_belnr IS INITIAL sind in deinem Beispiel nahezu identisch, bis auf die Bedingung AND belnr = so_belnr, was aber falsch ist. Hier müsste es AND belnr IN so_belnr heissen.

Kannst du vielleicht das was das Programm leisten soll noch ein mal mit anderen Worten beschreiben?

noch etwas was mir aufgefallen ist:

Code: Alles auswählen
      ELSEIF p_deb = 'X' AND so_belnr IS INITIAL.
        REFRESH itab. "<-- überflüssig, itab ist an dieser Stelle leer
        SELECT *
        FROM bsik JOIN bsid ON bsid~belnr = bsik~belnr
        INTO CORRESPONDING FIELDS OF TABLE itab
        WHERE bsik~belnr IN so_belnr. "<-- überflüssig, da hier so_belnr IS INITIAL
 


und an dieser Stelle könntest du auch noch optimieren:
Code: Alles auswählen
        LOOP AT itab INTO wa.
          READ TABLE it_h_kna1 INTO ls_kna1 WITH KEY kunnr = wa-kunnr.
          IF sy-subrc = 0.
            MOVE ls_kna1-name1 TO wa-name1.
            MODIFY itab FROM wa.
          ENDIF.
          CLEAR wa.
        ENDLOOP.

        LOOP AT itab INTO wa.
          IF sy-subrc = 0. "<--überflüssig. wenn du hier angekommen bist, so hat itab mindestens einen Eintrag
            PERFORM verzn.
          ENDIF.
          MODIFY itab FROM wa.
          CLEAR wa.
        ENDLOOP.
 


beide Loops lassen sich zu einem loop verbinden. Weitere Performance gewinnst du, wenn du mit Feldsymbolen arbeitest. Statt MODIFY also ein LOOP AT itab ASSIGNING <itab>.

Gruss
Alexander
schöne Grüße
Alexander
Alexander D.
Expert
 
Beiträge: 648
Registriert: 17.02.2006, 11:28
Wohnort: Bockenem
Dank erhalten: 79 mal
Ich bin: Entwickler/in

Re: Selektion von mehreren Belegarten

Beitragvon kisa » 16.05.2012, 15:43

Hallo Alexander,

ich hab vorher nie programmiert, und jetzt darf ich diese ABAP-Aufgabe lösen.

Was ich will ist:
Das ist ja mein Selektionsbildschirm:
PARAMETERS: PA_BUKRS LIKE BKPF-BUKRS OBLIGATORY.
SELECT-OPTIONS:
SO_WRBTR FOR BSIK-WRBTR,
SO_MANST FOR BSIK-MANST,
SO_BUDAT FOR BSIK-BUDAT,
SO_BELNR FOR BSIK-BELNR,
SO_VBELN FOR VBUK-VBELN,
SO_KUNNR FOR BSID-KUNNR,
SO_LIFNR FOR BSIK-LIFNR.
PARAMETERS: P_DEB RADIOBUTTON GROUP FUNK,
P_KRED DEFAULT 'X' RADIOBUTTON GROUP FUNK.

Es soll mir zeigen:

wenn p_kred angeklickt ist, soll er mir sowohl FI Belegnummer (belnr) als auch SD Belegnummer (vbeln) anzeigen, aber nur von Kreditoren.
Genauso auch wenn ich p_deb anklicke.

So, jetzt kommt hinzu:

wenn ich p_kred anklicke UND eine Selektion angebe (z. B. zeig mir nur FI Belegnummer von bis), dann soll er mir FI Belegnummer der Kreditoren anzeigen (also SD soll man gar nicht sehen können).

Genauso auch bei einer Selektion von SD Belegnummern.

Ich glaube, ich habe hier irgendwo ein Fehler:

ELSEIF P_KRED = 'X' AND SO_VBELN IS INITIAL.
REFRESH ITAB.
* SELECT *
* FROM BSIK JOIN BSID ON BSID~BELNR = BSIK~BELNR
* INTO CORRESPONDING FIELDS OF TABLE ITAB
* WHERE BSIK~BELNR IN SO_BELNR.
SELECT *
FROM VBUK
INTO CORRESPONDING FIELDS OF TABLE IT_H_VBUK
WHERE VBUK~VBELN IN SO_VBELN.
SELECT *
FROM KNA1 JOIN LFA1 ON KNA1~LIFNR = LFA1~LIFNR
INTO CORRESPONDING FIELDS OF TABLE IT_H_LFA1
WHERE KNA1~LIFNR IN SO_LIFNR.
SELECT *
FROM BSIK
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE BUKRS = PA_BUKRS
AND WRBTR IN SO_WRBTR
AND MANST IN SO_MANST
AND BUDAT IN SO_BUDAT
AND LIFNR IN SO_LIFNR.
LOOP AT ITAB INTO WA WHERE VBELN = SO_VBELN.
READ TABLE IT_H_VBUK INTO LS_VBUK WITH KEY VBELN = WA-VBELN.
IF SY-SUBRC = 0.
MOVE LS_VBUK-VBELN TO WA-VBELN.
MODIFY ITAB FROM WA.
ENDIF.
CLEAR WA.
ENDLOOP.
LOOP AT ITAB INTO WA.
READ TABLE IT_H_LFA1 INTO LS_LFA1 WITH KEY LIFNR = WA-LIFNR.
IF SY-SUBRC = 0.
MOVE LS_LFA1-NAME1 TO WA-NAME1.
MODIFY ITAB FROM WA.
ENDIF.
CLEAR WA.
ENDLOOP.
LOOP AT ITAB INTO WA.
IF SY-SUBRC = 0.
PERFORM VERZN.
ENDIF.
MODIFY ITAB FROM WA.
CLEAR WA.
ENDLOOP.

Ich habe gar keine Erfahrung mit ABAP, also ich verstehe die Sprache noch nicht. Und ich kann nicht nachvollziehen, wo der Fehler liegt...
kisa
ForumUser
 
Beiträge: 18
Registriert: 16.05.2012, 12:30
Dank erhalten: 0 mal
Ich bin: Berater/in

Re: Selektion von mehreren Belegarten

Beitragvon Alexander D. » 17.05.2012, 12:29

hallo kisa,

ich glaube du denkst hier viel zu kompliziert... Ich habe versucht das Programm bei mir nachzuvollziehen, es klappt aber nicht ganz, da ich nicht weiss, wie bei euch die Tabelle ZKISA_OP_ANALYSE aussieht. Könntest du noch mal die Tabellendefinition posten?

Eine weitere Frage: wie soll die Ausgabe im Programm stattfinden, ich habe es in deinem Beispielcode nicht gesehen. Soll es eine einfache Liste werden, erstellt mit dem WRITE-Befehl? Oder etwa in Form einer ALV-Tabelle?

schöne Grüße
Alexander
schöne Grüße
Alexander
Alexander D.
Expert
 
Beiträge: 648
Registriert: 17.02.2006, 11:28
Wohnort: Bockenem
Dank erhalten: 79 mal
Ich bin: Entwickler/in

Re: Selektion von mehreren Belegarten

Beitragvon kisa » 18.05.2012, 09:59

Hallo Alexander,
meine Zkisa_op_Analyse-Tabelle sieht wie folgt aus:

MARK MARK CHAR 1 0 Kennzeichen: Buchungszeile markiert?
BUKRS BUKRS CHAR 4 0 Buchungskreis
BELNR BELNR_D CHAR 10 0 Belegnummer eines Buchhaltungsbeleges
VBELN VBELN CHAR 10 0 Vertriebsbelegnummer
GJAHR GJAHR NUMC 4 0 Geschäftsjahr
LIFNR LIFNR CHAR 10 0 Kontonummer des Lieferanten bzw. Kreditors
KUNNR KUNNR CHAR 10 0 Debitorennummer 1
NAME1 NAME1_GP CHAR 35 0 Name 1
BUDAT BUDAT DATS 8 0 Buchungsdatum im Beleg
BLDAT BLDAT DATS 8 0 Belegdatum im Beleg
XBLNR XBLNR1 CHAR 16 0 Referenz-Belegnummer
WRBTR WRBTR CURR 13 2 Betrag in Belegwährung
WAERS WAERS CUKY 5 0 Währungsschlüssel
MANST MAHNS_D NUMC 1 0 Mahnstufe
F ZF CHAR 1 0 Fällig
NF ZNF CHAR 1 0 Nicht fällig
UEBF ZUEBF CHAR 1 0 Überfällig
T_UEBF ZT_UEBF NUMC 5 0 Tage Überfällig
KOART KOART CHAR 1 0 Kontoart
SHKZG SHKZG CHAR 1 0 Soll-/Haben-Kennzeichen

Die Ausgabe soll in Form einer ALV-Tabelle erfolgen. Dies sieht bei mir folgendermaßen aus:
FORM ALV.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
I_STRUCTURE_NAME = 'ZKISA_OP_ANALYSE'
"I_BUFFER_ACTIVE =
"I_CLIENT_NEVER_DISPLAY = 'X'
"I_BYPASSING_BUFFER =
"I_INTERNAL_TABNAME =
CHANGING
CT_FIELDCAT = IT_FIELDCAT.
"EXCEPTIONS
"INCONSISTENT_INTERFACE = 1
"PROGRAM_ERROR = 2
"OTHERS = 3
IF SY-SUBRC <> 0.
"MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
" WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.



PERFORM BUILD_FIELDCATALOG.
PERFORM LAYOUT_ALLG_BUILD.



CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
"I_INTERFACE_CHECK = ' '
"I_BYPASSING_BUFFER =
"I_BUFFER_ACTIVE =
I_CALLBACK_PROGRAM = SY-REPID
"I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
"I_CALLBACK_TOP_OF_PAGE = ' '
"I_CALLBACK_HTML_TOP_OF_PAGE = ' '
"I_CALLBACK_HTML_END_OF_LIST = ' '
"I_STRUCTURE_NAME =
"I_BACKGROUND_ID = ' '
"I_GRID_TITLE =
"I_GRID_SETTINGS =
IS_LAYOUT_LVC = GD_LAYOUT
IT_FIELDCAT_LVC = IT_FIELDCAT
"IT_EXCLUDING =
"IT_SPECIAL_GROUPS_LVC =
"IT_SORT_LVC =
"IT_FILTER_LVC =
"IT_HYPERLINK =
"IS_SEL_HIDE =
"I_DEFAULT = 'X'
I_SAVE = 'X'
IS_VARIANT = WA_VARIANT
"IT_EVENTS =
"IT_EVENT_EXIT =
"IS_PRINT_LVC =
"IS_REPREP_ID_LVC =
"I_SCREEN_START_COLUMN = 0
"I_SCREEN_START_LINE = 0
"I_SCREEN_END_COLUMN = 0
"I_SCREEN_END_LINE = 0
"I_HTML_HEIGHT_TOP =
"I_HTML_HEIGHT_END =
"IT_ALV_GRAPHICS =
"IT_EXCEPT_QINFO_LVC =
"IR_SALV_FULLSCREEN_ADAPTER =
"IMPORTING
"E_EXIT_CAUSED_BY_CALLER =
"ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = ITAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.

IF SY-SUBRC <> 0.
ENDIF.

ENDFORM. "alv


Ich hatte es nicht gepostet, weil die Liste zu lang wurde.
Was mach ich denn falsch? :(
kisa
ForumUser
 
Beiträge: 18
Registriert: 16.05.2012, 12:30
Dank erhalten: 0 mal
Ich bin: Berater/in

Re: Selektion von mehreren Belegarten

Beitragvon JHM » 18.05.2012, 10:21

kisa hat geschrieben:Was mach ich denn falsch? :(


Erst einmal können deine IFs nicht funktionieren, da die Reihenfolge nicht stimmt:

Code: Alles auswählen
IF P_KRED = 'X'.
ELSEIF P_DEB = 'X'.
ELSEIF P_KRED = 'X' AND SO_BELNR IS INITIAL. "wird nie erreicht
ELSEIF P_DEB = 'X' AND SO_BELNR IS INITIAL. "wird nie erreicht
ELSEIF P_KRED = 'X' AND SO_VBELN IS INITIAL. "wird nie erreicht
ELSEIF P_DEB = 'X' AND SO_VBELN IS INITIAL. "wird nie erreicht
ELSE.
ENDIF.
 


Bei der aktuellen Programmierung ist immer der erste oder der zweite IF-Zweig erfüllt. Die Abfrage auf SO_BELNR bzw. SO_VBELN wird also nie erreicht und somit nie ausgeführt.
Auch die Abfrage auf IS INITAL ist unglücklich. Was machst du wenn SO_BELNR und SO_VBELN beide gefüllt sind?

Diese beiden Selects sind gefährlich:
Code: Alles auswählen
SELECT *
FROM KNA1 JOIN LFA1 ON KNA1~LIFNR = LFA1~LIFNR
INTO CORRESPONDING FIELDS OF TABLE IT_H_LFA1
WHERE KNA1~LIFNR IN SO_LIFNR.

SELECT *
FROM LFA1 JOIN KNA1 ON LFA1~KUNNR = KNA1~KUNNR
INTO CORRESPONDING FIELDS OF TABLE IT_H_KNA1
WHERE LFA1~KUNNR IN SO_KUNNR.
 


Wenn SO_LIFNR bzw. SO_KUNNR initial sind, liest du viel zu viele Daten ein (die ganzen Tabellen), du brauchst aber nicht alle Daten. entweder du Joinst die Daten direkt beim ersten Select dazu oder du arbeitest mit dem Zusatz FOR ALL ENTRIES (mehr dazu in der Doku).


Leider kenne ich mich ansonsten zu wenig mit den BSIG/BSAK aus um dir direkt zu helfen. Evtl. poste ich nachher noch was dazu.
Gruß Hendrik
JHM
Expert
 
Beiträge: 828
Registriert: 15.02.2006, 12:39
Wohnort: Aachen
Dank erhalten: 85 mal

Re: Selektion von mehreren Belegarten

Beitragvon kisa » 18.05.2012, 11:14

Hallo,

also, ich hab jetzt mal folgendes ausprobiert:
habe die ganzen IFs gelöscht. Bei mir steht nur noch:

IF P_KRED = 'X'.
ELSEIF P_DEB = 'X'.

Meine Ausgabe habe ich durch fieldcatalog definiert. Nämlich:

IF P_KRED = 'X' AND SO_BELNR IS INITIAL AND SO_VBELN IS INITIAL.
ELSEIF P_DEB = 'X' AND SO_BELNR IS INITIAL AND SO_VBELN IS INITIAL.
ELSEIF P_KRED = 'X' AND not SO_BELNR IS INITIAL AND SO_VBELN IS INITIAL.
ELSEIF P_DEB = 'X' AND not SO_BELNR IS INITIAL AND SO_VBELN IS INITIAL.
ELSEIF P_KRED = 'X' AND NOT SO_VBELN IS INITIAL AND SO_BELNR IS INITIAL.
ELSEIF P_DEB = 'X' AND NOT SO_VBELN IS INITIAL AND SO_BELNR IS INITIAL.

Wenn ich keine Belegnummer oder nur belnr angebe, bekomme ich die richtige Ausgabe. Aber bei vbeln habe ich Probleme.
Habe ich vielleicht in Loop ein Fehler?

SELECT *
FROM BSIK JOIN BSID ON BSID~BELNR = BSIK~BELNR
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE BSIK~BELNR IN SO_BELNR.
SELECT *
FROM LFA1 JOIN KNA1 ON LFA1~KUNNR = KNA1~KUNNR
INTO CORRESPONDING FIELDS OF TABLE IT_H_KNA1
WHERE LFA1~KUNNR IN SO_KUNNR.
SELECT *
FROM BSID
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE BUKRS = PA_BUKRS
AND WRBTR IN SO_WRBTR
AND MANST IN SO_MANST
AND BUDAT IN SO_BUDAT
AND BELNR IN SO_BELNR
AND KUNNR IN SO_KUNNR.

LOOP AT ITAB INTO WA WHERE VBELN = SO_VBELN.
READ TABLE IT_H_VBUK INTO LS_VBUK WITH KEY VBELN = WA-VBELN.
IF SY-SUBRC = 0.
MOVE LS_VBUK-VBELN TO WA-VBELN.
MODIFY ITAB FROM WA.
ENDIF.
CLEAR WA.
ENDLOOP.

LOOP AT ITAB INTO WA.
READ TABLE IT_H_KNA1 INTO LS_KNA1 WITH KEY KUNNR = WA-KUNNR.
IF SY-SUBRC = 0.
MOVE LS_KNA1-NAME1 TO WA-NAME1.
MODIFY ITAB FROM WA.
ENDIF.
CLEAR WA.
ENDLOOP.

Hiiilfe :(
kisa
ForumUser
 
Beiträge: 18
Registriert: 16.05.2012, 12:30
Dank erhalten: 0 mal
Ich bin: Berater/in

Re: Selektion von mehreren Belegarten

Beitragvon JHM » 18.05.2012, 16:04

kisa hat geschrieben:Habe ich vielleicht in Loop ein Fehler?


Ich glaube eher du hast einen Logik-Fehler bei den Belegen bzw. den Tabellen und ihren Verknüpfungen. Mein FI-Wissen reicht auch nicht sehr weit, deshalb sind das hier eher Vermutungen.
Ein Buchhaltungsbeleg ist doch entweder für den Debitor erstellt worden oder für den Kreditor (vgl. BKPF-BLART Belegart (RV/KR). Es gibt zum. hier keinen Beleg der gegen Debitor und Kreditor gebucht wurde.

Ein Join wie hier:
Code: Alles auswählen
SELECT *
FROM BSIK JOIN BSID ON BSID~BELNR = BSIK~BELNR
INTO CORRESPONDING FIELDS OF TABLE ITAB
 

macht demnach keinen Sinn:
a) wird nicht mit dem vollem Belegkey (BUKRS, BELNR, GJAHR vgl. BKPF) verknüpft. Wenn die Belegnummer mehrfach in unterschiedlichen BUKRS bzw. GJAHR verwendet wird, bekommt man ein falsches Ergebnis, da zwei unterschiedliche Belege verknüpft werden.
b) Es gibt sowohl in der Tabelle BSIK wie auch in der Tabelle BSID gleichnamige Felder. Durch das INTO CORRESPONDING kann man nicht sicher sagen welche Werte aus welcher Tabelle übernommen werden.
c) Wie oben schon festgestellt, sollte es nur in einer von beiden Tabellen einen Eintrag geben, da der Beleg entweder gegen Debitor oder gegen Kreditor gebucht wurde.


So ganz schlau werde ich nicht aus deiner Anforderung:
kisa hat geschrieben:wenn p_kred angeklickt ist, soll er mir sowohl FI Belegnummer (belnr) als auch SD Belegnummer (vbeln) anzeigen, aber nur von Kreditoren.


Gegen einen Kreditor werden nur Eingangsrechnungen als Buchhaltungsbeleg erfasst, aber der Lieferant wird nicht im SD verwendet.

Dieser Select:
Code: Alles auswählen
  SELECT *
      INTO CORRESPONDING FIELDS OF TABLE it_h_kna1
      FROM lfa1
      JOIN kna1
        ON lfa1~kunnr = kna1~kunnr
      WHERE lfa1~kunnr IN so_kunnr.
 

deutet darauf hin, dass ihr den Kreditoren Debitoren zu geordnet habt.

Ist die Interpretation richtig:
Selektiere alle Buchhaltungsbelege für den Kreditor und alle Buchhaltungsbelege des Debitors, der dem Kreditor zu geordnet ist?

Dann sähe das in etwa so aus:
Code: Alles auswählen
 IF p_kred = 'X'. "Einstieg über Kreditor
*  Alle Belege der Kreditoren:
    SELECT *
      INTO CORRESPONDING FIELDS OF TABLE itab
      FROM bsik
      WHERE bukrs = pa_bukrs
        AND wrbtr IN so_wrbtr
        AND manst IN so_manst
        AND budat IN so_budat
        AND belnr IN so_belnr
        AND lifnr IN so_lifnr.

*  Alle Belege der Debitoren, die den Kreditoren zugeordnet sind
    SELECT *
      APPENDING CORRESPONDING FIELDS OF TABLE itab "an die Tabelle anhängen!
      FROM bsid                                    
      JOIN lfa1                                    "Debitoren zu den Kreditoren ermitteln
        ON lfa1~kunnr = bsid~kunnr
      WHERE bukrs = pa_bukrs
        AND wrbtr IN so_wrbtr
        AND manst IN so_manst
        AND budat IN so_budat
        AND vbeln IN so_vbeln
        AND lifnr IN so_lifnr.
ENDIF.
 



Dann kommt:
kisa hat geschrieben:wenn ich p_kred anklicke UND eine Selektion angebe (z. B. zeig mir nur FI Belegnummer von bis), dann soll er mir FI Belegnummer der Kreditoren anzeigen (also SD soll man gar nicht sehen können).
Genauso auch bei einer Selektion von SD Belegnummern.


Das kann man mit zwei Abfragen einbauen:
Code: Alles auswählen
  IF p_kred = 'X'. "Einstieg über Kreditor
*  Alle Belege der Kreditoren:
    IF so_vbeln IS INITIAL. "Aber nur wenn nicht nach SD-Belegen gefragt wurde!
      SELECT *
        INTO CORRESPONDING FIELDS OF TABLE itab
        FROM bsik
        WHERE bukrs = pa_bukrs
          AND wrbtr IN so_wrbtr
          AND manst IN so_manst
          AND budat IN so_budat
          AND belnr IN so_belnr
          AND lifnr IN so_lifnr.
    ENDIF.
*   Alle Belege der Debitoren, die den Kreditoren zugeordnet sind
    IF so_belnr IS INITIAL. "Aber nur wenn nicht nach BELNR gefragt wurde!
      SELECT *
        APPENDING CORRESPONDING FIELDS OF TABLE itab "an die Tabelle anhängen!
        FROM bsid
        JOIN lfa1                                    "Debitoren zu den Kreditoren ermitteln
          ON lfa1~kunnr = bsid~kunnr
        WHERE bukrs = pa_bukrs
          AND wrbtr IN so_wrbtr
          AND manst IN so_manst
          AND budat IN so_budat
          AND vbeln IN so_vbeln
          AND lifnr IN so_lifnr.
    ENDIF.
  ENDIF.
 


Wobei dann gar nicht selektiert würde, wenn SO_VBELN und SO_BELNR gefüllt wurde.

Für den Debitor ist das ganze dann analog anzuwenden.
Die gezeigte Lösung hat noch das oben angesprochene Problem mit dem SELECT * und CORRESPONDING FIELDS. Die Fehlerquelle sollte nicht unterschätzt werden. Es ist auch von Seite der Performance besser, wenn man durch Angabe der einzelnen Felder die zu selektierende Datenmenge klein hält, in dem nur die Daten gelesen werden, die man auch wirklich braucht.
Gruß Hendrik
JHM
Expert
 
Beiträge: 828
Registriert: 15.02.2006, 12:39
Wohnort: Aachen
Dank erhalten: 85 mal

Re: Selektion von mehreren Belegarten

Beitragvon kisa » 01.06.2012, 10:58

Sorry,
hab Mist gebaut. Eigentlich wollte ich sagen:


"Alle Belege (FI und SD) der Kreditoren
IF P_KRED = 'X' AND SO_BELNR IS INITIAL AND SO_VBELN IS INITIAL.
REFRESH ITAB.
SELECT *
FROM VBRK
INTO CORRESPONDING FIELDS OF TABLE IT_H_VBRK
WHERE VBRK~VBELN IN SO_VBELN.
SELECT *
FROM LFA1
INNER JOIN BSIK ON LFA1~LIFNR = BSIK~LIFNR
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE LFA1~LIFNR IN SO_LIFNR
AND BUKRS = PA_BUKRS
AND WRBTR IN SO_WRBTR
AND MANST IN SO_MANST
AND BUDAT IN SO_BUDAT
AND BELNR IN SO_BELNR.


"Bestimmte FI Belegnummer der Kreditoren
ELSEIF P_KRED = 'X' AND NOT SO_BELNR IS INITIAL AND SO_VBELN IS INITIAL.
REFRESH ITAB.
SELECT *
FROM LFA1
INNER JOIN BSIK ON LFA1~LIFNR = BSIK~LIFNR
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE LFA1~LIFNR IN SO_LIFNR
AND BUKRS = PA_BUKRS
AND WRBTR IN SO_WRBTR
AND MANST IN SO_MANST
AND BUDAT IN SO_BUDAT
AND BELNR IN SO_BELNR.

"Nur bestimmte SD Belegnummer der Kreditoren
ELSEIF P_KRED = 'X' AND NOT SO_VBELN IS INITIAL.
REFRESH ITAB.
SELECT *
FROM LFA1
INNER JOIN BSIK ON LFA1~LIFNR = BSIK~LIFNR
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE LFA1~LIFNR IN SO_LIFNR
AND BUKRS = PA_BUKRS
AND WRBTR IN SO_WRBTR
AND MANST IN SO_MANST
AND BUDAT IN SO_BUDAT.
SELECT *
FROM VBRK
INTO CORRESPONDING FIELDS OF TABLE IT_H_VBRK
WHERE VBRK~VBELN in SO_VBELN.

LOOP AT ITAB INTO WA.
READ TABLE IT_H_VBRK INTO LS_VBRK WITH KEY VBELN = wa-VBELN.
IF SY-SUBRC = 0.
MOVE LS_VBRK-VBELN TO WA-VBELN.
MODIFY ITAB FROM WA.
ENDIF.
ENDLOOP.





"Alle Belegnummer (FI und SD) der Debitoren
ELSEIF P_DEB = 'X' AND SO_BELNR IS INITIAL AND SO_VBELN IS INITIAL.
REFRESH ITAB.
SELECT *
FROM VBRK
INTO CORRESPONDING FIELDS OF TABLE IT_H_VBRK
WHERE VBRK~VBELN IN SO_VBELN.
SELECT *
FROM KNA1
INNER JOIN BSID ON KNA1~KUNNR = BSID~KUNNR
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE KNA1~KUNNR IN SO_KUNNR
AND BUKRS = PA_BUKRS
AND WRBTR IN SO_WRBTR
AND MANST IN SO_MANST
AND BUDAT IN SO_BUDAT
AND BELNR IN SO_BELNR.

LOOP AT ITAB INTO WA.
READ TABLE IT_H_VBRK INTO LS_VBRK WITH KEY VBELN = WA-VBELN.
IF SY-SUBRC = 0.
MOVE LS_VBRK-VBELN TO WA-VBELN.
MODIFY ITAB FROM WA.
ENDIF.
ENDLOOP.



"Nur bestimmte FI Belegnummer der Debitoren
ELSEIF P_DEB = 'X' AND NOT SO_BELNR IS INITIAL AND SO_VBELN IS INITIAL.
REFRESH ITAB.
SELECT *
FROM KNA1
INNER JOIN BSID ON KNA1~KUNNR = BSID~KUNNR
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE KNA1~KUNNR IN SO_KUNNR
AND BUKRS = PA_BUKRS
AND WRBTR IN SO_WRBTR
AND MANST IN SO_MANST
AND BUDAT IN SO_BUDAT
AND BELNR IN SO_BELNR.


"Nur bestimmte SD Belegnummer der Debitoren
ELSEIF P_DEB = 'X' AND NOT SO_VBELN IS INITIAL.
REFRESH ITAB.
SELECT *
FROM VBRK
INTO CORRESPONDING FIELDS OF TABLE IT_H_VBRK
WHERE VBRK~VBELN IN SO_VBELN.
SELECT *
FROM KNA1
INNER JOIN BSID ON KNA1~KUNNR = BSID~KUNNR
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE KNA1~KUNNR IN SO_KUNNR
AND BUKRS = PA_BUKRS
AND WRBTR IN SO_WRBTR
AND MANST IN SO_MANST
AND BUDAT IN SO_BUDAT.

LOOP AT ITAB INTO WA.
READ TABLE it_h_VBRK INTO LS_VBRK WITH KEY VBELN = SO_VBELN.
IF SY-SUBRC = 0.
MOVE LS_VBRK-VBELN TO WA-VBELN.
MODIFY ITAB FROM WA.
ENDIF.
ENDLOOP.


ELSE.

ENDIF.





Das Problem:
Meine SD Belegnummern selektiert er immer noch nicht, er gibt mir wieder alles raus :(
kisa
ForumUser
 
Beiträge: 18
Registriert: 16.05.2012, 12:30
Dank erhalten: 0 mal
Ich bin: Berater/in

Re: Selektion von mehreren Belegarten

Beitragvon kisa » 01.06.2012, 11:53

NOCHMAL GEÄNDERT:

*KREDITORENBELEGE:
IF P_KRED = 'X'.

"NUR FI-BELEGNUMMER:
IF SO_VBELN IS INITIAL.
SELECT *
FROM LFA1
INNER JOIN BSIK ON LFA1~LIFNR = BSIK~LIFNR
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE BUKRS = PA_BUKRS
AND WRBTR IN SO_WRBTR
AND MANST IN SO_MANST
AND BUDAT IN SO_BUDAT
AND BELNR IN SO_BELNR
AND LFA1~LIFNR IN SO_LIFNR.

"NUR SD-BELEGNUMMER:
IF SO_BELNR IS INITIAL.
SELECT *
FROM LFA1
INNER JOIN BSIK ON LFA1~LIFNR = BSIK~LIFNR
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE BUKRS = PA_BUKRS
AND WRBTR IN SO_WRBTR
AND MANST IN SO_MANST
AND BUDAT IN SO_BUDAT
AND LFA1~LIFNR IN SO_LIFNR.
SELECT *
FROM VBRK
INTO CORRESPONDING FIELDS OF TABLE IT_H_VBRK
WHERE VBRK~VBELN IN SO_VBELN.

LOOP AT ITAB INTO WA.
READ TABLE IT_H_VBRK INTO LS_VBRK WITH KEY VBELN = WA-VBELN.
IF SY-SUBRC = 0.
MOVE LS_VBRK-VBELN TO WA-VBELN.
MODIFY ITAB FROM WA.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.




*DEBITORENBELEGE
IF P_DEB = 'X'.

"NUR FI-BELEGNUMMER:
IF SO_VBELN IS INITIAL.
SELECT *
FROM KNA1
INNER JOIN BSID ON KNA1~KUNNR = BSID~KUNNR
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE BUKRS = PA_BUKRS
AND WRBTR IN SO_WRBTR
AND MANST IN SO_MANST
AND BUDAT IN SO_BUDAT
AND BELNR IN SO_BELNR
AND KNA1~KUNNR IN SO_KUNNR.
ENDIF.

"NUR SD-BELEGNUMMER:
IF SO_BELNR IS INITIAL.
SELECT *
FROM KNA1
INNER JOIN BSID ON KNA1~KUNNR = BSID~KUNNR
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE BUKRS = PA_BUKRS
AND WRBTR IN SO_WRBTR
AND MANST IN SO_MANST
AND BUDAT IN SO_BUDAT
AND KNA1~KUNNR IN SO_KUNNR.
SELECT *
FROM VBRK
INTO CORRESPONDING FIELDS OF TABLE IT_H_VBRK
WHERE VBRK~VBELN IN SO_VBELN.

LOOP AT ITAB INTO WA.
READ TABLE IT_H_VBRK INTO LS_VBRK WITH KEY VBELN = WA-VBELN.
IF SY-SUBRC = 0.
MOVE LS_VBRK-VBELN TO WA-VBELN.
MODIFY ITAB FROM WA.
ENDIF.
ENDLOOP.

ENDIF.
ENDIF.

ABER WIEDER DAS SELBE PROBLEM. DIE SELEKTION, DIE ICH IN SD VORNEHME, WIRD NICHT BERÜCKSICHTIGT. ES GIBT MIR ALLE SD-BELEGNUMMERN RAUS.
kisa
ForumUser
 
Beiträge: 18
Registriert: 16.05.2012, 12:30
Dank erhalten: 0 mal
Ich bin: Berater/in

Re: Selektion von mehreren Belegarten

Beitragvon Alexander D. » 01.06.2012, 12:30

hi kisa,

kisa hat geschrieben:ABER WIEDER DAS SELBE PROBLEM. DIE SELEKTION, DIE ICH IN SD VORNEHME, WIRD NICHT BERÜCKSICHTIGT. ES GIBT MIR ALLE SD-BELEGNUMMERN RAUS.


bitte beschreibe es konkreter. Welche Selektionsfelder sind bei dir gefüllt, SO_VBELN, SO_BELNR, beider oder keins? Was heisst es gibt die alle SD-Belegnummern raus? Welche hätten denn rauskommen müssen? Ein (Zahlen)Beispiel zum Nachvollziehen wäre sehr hilfreich
schöne Grüße
Alexander
Alexander D.
Expert
 
Beiträge: 648
Registriert: 17.02.2006, 11:28
Wohnort: Bockenem
Dank erhalten: 79 mal
Ich bin: Entwickler/in

Re: Selektion von mehreren Belegarten

Beitragvon kisa » 01.06.2012, 13:10

Hallo Alexander,

mein Selektionsbildschirm sieht so aus:

PARAMETERS: PA_BUKRS LIKE BKPF-BUKRS OBLIGATORY.
SELECT-OPTIONS:
SO_WRBTR FOR BSIK-WRBTR,
SO_MANST FOR BSIK-MANST,
SO_BUDAT FOR BSIK-BUDAT,
SO_BELNR FOR BSIK-BELNR,
SO_VBELN FOR VBRK-VBELN,
SO_KUNNR FOR BSID-KUNNR,
SO_LIFNR FOR BSIK-LIFNR.
PARAMETERS: P_DEB RADIOBUTTON GROUP FUNK,
P_KRED DEFAULT 'X' RADIOBUTTON GROUP FUNK.

Also auf dem Selektionsbildschirm klicke ich P_DEB an, Buchungskreis muss ich angeben, dann gebe ich noch bei SD Belegnummer 60 - 100 an. Der gibt mir dann aber trotzdem alle Belegnummern von 1 - 999999 an. Ich möchte aber nur die Belege von 60 bis 100 sehen. Irgendwie funktioniert die Selektion nicht.
kisa
ForumUser
 
Beiträge: 18
Registriert: 16.05.2012, 12:30
Dank erhalten: 0 mal
Ich bin: Berater/in

Re: Selektion von mehreren Belegarten

Beitragvon kisa » 01.06.2012, 13:11

Bei belnr (FI Belegnummer) klappt es ohne Probleme, aber bei vbeln (SD Belegnummer) hab ich immer das Problem, wie oben beschrieben. Genauso auch, wenn ich Kreditor anklicke...
kisa
ForumUser
 
Beiträge: 18
Registriert: 16.05.2012, 12:30
Dank erhalten: 0 mal
Ich bin: Berater/in

Nächste

Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
Perth
vor einer Stunde von AsWenoarrorce 0 Antw.
Bestellstatus abfragen
vor 16 Minuten von Thomas17 3 Antw.
ITS - Handgerät will Website runterladen statt darstellen
vor 5 Stunden von TanteAbap 0 Antw.
ActiveX Objekt Java
vor 7 Stunden von Adrian 0 Antw.
Sortieren einer multiplen Struktur
vor 5 Stunden von Tgut 3 Antw.

  Ähnliche Beiträge beta
Selektion aus mehreren Tabellen
06.10.2011, 12:21 von black_adept 41 Antw.
Selektion aus Tabelle
02.09.2003, 14:17 von tom 3 Antw.
SM30 selektion
19.09.2008, 13:04 von babap 7 Antw.
Selektion von Entwicklungsobjekten
12.06.2011, 11:09 von maxreeb 0 Antw.
prüfung der selektion-option.
25.07.2007, 13:47 von khb 8 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: Google Adsense [Bot]

Feedback ...?

Was können wir verbessern? Hinterlasse deine Kontaktdaten, wenn du eine direkte Antwort möchtest.

... Absenden!