Chacun de nous a essayer l'ancienne méthode pour lire les données depuis SKC1A en croyant que c'était une table mais non comme en sait et comme je l'ai cité avant dans un des précédent article que SKC1A dans SAP est une structure et pour récupérer des données on utilise jamais SELECT * FROM SKC1A car c'est faux.
pour récupérer les données ou lire à partir SKC1A on utilise la fonction READ_SKC1A , et pour trouver cette fonction:
Aller dans SE80 bien évidement:
- Sélectionner Groupes de Fonctions au lieu Programmes.
- Rechercher F009 ( Lecture directe tables BD Comptes généraux).
- Dans modules fonction vous trouvez READ_SKC1A
Ci dessous le code source de la fonction:
FUNCTION READ_SKC1A.
*"----------------------------------------------------------------------
*"Lokale Schnittstelle:
*" IMPORTING
*" XBUKRS LIKE SKC1A-BUKRS
*" XGJAHR LIKE SKC1A-GJAHR
*" XGSBER LIKE SKC1A-GSBER
*" XSAKNR LIKE SKC1A-SAKNR
*" EXPORTING
*" XSKC1A LIKE SKC1A STRUCTURE SKC1A
*" EXCEPTIONS
*" KEY_INCOMPLETE
*" NOT_AUTHORIZED
*" NOT_FOUND
*"----------------------------------------------------------------------
* Werte aus der Schnittstelle ( X - Felder ) nach
* interne Felder ( Y-Felder ) übernehmen.
*-------------------------------------------------
* YSKC1A initialisieren
CLEAR YSKC1A.
REFRESH YSKC1A.
* Sachkontonummer
* ---------------
YSAKNR = XSAKNR.
* Buchungskreis
* -------------
YBUKRS = XBUKRS.
* CLEAR YBUKRS.
* REFRESH YBUKRS.
* YBUKRS-SIGN = 'I'.
* YBUKRS-OPTION = 'EQ'.
* YBUKRS-LOW = XBUKRS.
* APPEND YBUKRS.
* Geschäftsbereich
* ----------------
CLEAR YGSBER.
REFRESH YGSBER.
YGSBER-SIGN = 'I'.
YGSBER-OPTION = 'EQ'.
YGSBER-LOW = XGSBER.
APPEND YGSBER.
* Geschäftsjahr
* -------------
CLEAR YGJAHR.
REFRESH YGJAHR.
YGJAHR-SIGN = 'I'.
YGJAHR-OPTION = 'EQ'.
YGJAHR-LOW = XGJAHR.
APPEND YGJAHR.
* Prüfung des Schlüssels auf Vollständigkeit
* -----------------------------------------
IF YSAKNR IS INITIAL
OR YSAKNR LE SPACE.
* or ysaknr co '0'. Konto '0' nun möglich. Frank Westendorf
RAISE KEY_INCOMPLETE.
ENDIF.
IF YBUKRS IS INITIAL.
RAISE KEY_INCOMPLETE.
ENDIF.
* IF XGSBER CO '0'.
* RAISE KEY_INCOMPLETE.
* ENDIF.
IF XGJAHR IS INITIAL
OR XGJAHR LE SPACE
OR XGJAHR CO '0'.
RAISE KEY_INCOMPLETE.
ENDIF.
* Berechtigungsprüfung Kontoart Sachkonten.
* -----------------------------------------
AUTHORITY-CHECK OBJECT 'F_BKPF_KOA'
ID 'KOART' FIELD 'S'
ID 'ACTVT' FIELD '03'.
IF SY-SUBRC <> 0.
* Wenn nicht berechtigt -> Rücksprung
* -----------------------------------
RAISE NOT_AUTHORIZED.
ENDIF.
* Berechtigungsprüfung für Buchungskreis durchführen
* --------------------------------------------------
AUTHORITY-CHECK OBJECT 'F_SKA1_BUK'
ID 'BUKRS' FIELD XBUKRS
ID 'ACTVT' FIELD '03'.
IF SY-SUBRC NE 0.
* Wenn nicht berechtigt -> Rücksprung
* -----------------------------------
RAISE NOT_AUTHORIZED.
ENDIF.
* Berechtigungsprüfung für Sachkonto durchführen
* ----------------------------------------------
* SELECT SINGLE * FROM SKB1 INTO YSKB1
* WHERE BUKRS = YBUKRS
* AND SAKNR = YSAKNR.
* IF SY-SUBRC NE 0.
* Wenn nicht gefunden -> Rücksprung
* ---------------------------------
* RAISE NOT_FOUND.
* ENDIF.
* Berechtigungsprüfung für Sachkontenberechtigungsgruppe durchf.
* ---------------------------------------------------------------
* IF NOT ( YSKB1-BEGRU IS INITIAL ).
* AUTHORITY-CHECK OBJECT 'F_SKA1_BES'
* ID 'BRGRU' FIELD YSKB1-BEGRU
* ID 'ACTVT' FIELD '03'.
* IF SY-SUBRC NE 0.
* Wenn nicht berechtigt -> Rücksprung
* -----------------------------------
* RAISE NOT_AUTHORIZED.
* ENDIF.
* ENDIF.
* ENDSELECT.
* Hauswaehrungsschluessel besorgen
* --------------------------------
SELECT SINGLE * FROM T001
WHERE BUKRS = YBUKRS.
IF SY-SUBRC NE 0.
* WENN NICHT GEFUNDEN -> RÜCKSPRUNG
* ---------------------------------
RAISE NOT_FOUND.
ENDIF.
* SAVE_WAERS = T001-WAERS.
* Währungsschlüssel
* -----------------
* Für die Hauswährungsbearbeitung darf nicht auf einen bestimmten
* Währungsschlüssel abgegrenzt werden.
CLEAR YRTCUR.
REFRESH YRTCUR.
* Schluessel zum Lesen GLT0 aufbauen
* ----------------------------------
PERFORM GLKEY_AUFBAUEN.
* Sollbuchungen (UM01S - UM16S)
* Habenbuchungen (UM01H - UM16H)
* -------------------------------
MOVE 'SKC1A' TO TABLE.
PERFORM GLT0_LESEN.
MOVE SPACE TO TABLE.
* Saldo des Monats (UM01O - UM16O)
* ---------------------------------
PERFORM SALDO_DES_MONATS_SKC1A.
* Saldo zum GM-Ende (UM01K - UM16K) (WM01K - WM16K)
* --------------------------------------------------
PERFORM SALDO_ZUM_GM_ENDE_SKC1A.
* Übergabe der Sachkontenverkehrszahlen an das rufende Programm
* -------------------------------------------------------------
READ TABLE YSKC1A INDEX 1.
XSKC1A = YSKC1A.
ENDFUNCTION.
*"----------------------------------------------------------------------
*"Lokale Schnittstelle:
*" IMPORTING
*" XBUKRS LIKE SKC1A-BUKRS
*" XGJAHR LIKE SKC1A-GJAHR
*" XGSBER LIKE SKC1A-GSBER
*" XSAKNR LIKE SKC1A-SAKNR
*" EXPORTING
*" XSKC1A LIKE SKC1A STRUCTURE SKC1A
*" EXCEPTIONS
*" KEY_INCOMPLETE
*" NOT_AUTHORIZED
*" NOT_FOUND
*"----------------------------------------------------------------------
* Werte aus der Schnittstelle ( X - Felder ) nach
* interne Felder ( Y-Felder ) übernehmen.
*-------------------------------------------------
* YSKC1A initialisieren
CLEAR YSKC1A.
REFRESH YSKC1A.
* Sachkontonummer
* ---------------
YSAKNR = XSAKNR.
* Buchungskreis
* -------------
YBUKRS = XBUKRS.
* CLEAR YBUKRS.
* REFRESH YBUKRS.
* YBUKRS-SIGN = 'I'.
* YBUKRS-OPTION = 'EQ'.
* YBUKRS-LOW = XBUKRS.
* APPEND YBUKRS.
* Geschäftsbereich
* ----------------
CLEAR YGSBER.
REFRESH YGSBER.
YGSBER-SIGN = 'I'.
YGSBER-OPTION = 'EQ'.
YGSBER-LOW = XGSBER.
APPEND YGSBER.
* Geschäftsjahr
* -------------
CLEAR YGJAHR.
REFRESH YGJAHR.
YGJAHR-SIGN = 'I'.
YGJAHR-OPTION = 'EQ'.
YGJAHR-LOW = XGJAHR.
APPEND YGJAHR.
* Prüfung des Schlüssels auf Vollständigkeit
* -----------------------------------------
IF YSAKNR IS INITIAL
OR YSAKNR LE SPACE.
* or ysaknr co '0'. Konto '0' nun möglich. Frank Westendorf
RAISE KEY_INCOMPLETE.
ENDIF.
IF YBUKRS IS INITIAL.
RAISE KEY_INCOMPLETE.
ENDIF.
* IF XGSBER CO '0'.
* RAISE KEY_INCOMPLETE.
* ENDIF.
IF XGJAHR IS INITIAL
OR XGJAHR LE SPACE
OR XGJAHR CO '0'.
RAISE KEY_INCOMPLETE.
ENDIF.
* Berechtigungsprüfung Kontoart Sachkonten.
* -----------------------------------------
AUTHORITY-CHECK OBJECT 'F_BKPF_KOA'
ID 'KOART' FIELD 'S'
ID 'ACTVT' FIELD '03'.
IF SY-SUBRC <> 0.
* Wenn nicht berechtigt -> Rücksprung
* -----------------------------------
RAISE NOT_AUTHORIZED.
ENDIF.
* Berechtigungsprüfung für Buchungskreis durchführen
* --------------------------------------------------
AUTHORITY-CHECK OBJECT 'F_SKA1_BUK'
ID 'BUKRS' FIELD XBUKRS
ID 'ACTVT' FIELD '03'.
IF SY-SUBRC NE 0.
* Wenn nicht berechtigt -> Rücksprung
* -----------------------------------
RAISE NOT_AUTHORIZED.
ENDIF.
* Berechtigungsprüfung für Sachkonto durchführen
* ----------------------------------------------
* SELECT SINGLE * FROM SKB1 INTO YSKB1
* WHERE BUKRS = YBUKRS
* AND SAKNR = YSAKNR.
* IF SY-SUBRC NE 0.
* Wenn nicht gefunden -> Rücksprung
* ---------------------------------
* RAISE NOT_FOUND.
* ENDIF.
* Berechtigungsprüfung für Sachkontenberechtigungsgruppe durchf.
* ---------------------------------------------------------------
* IF NOT ( YSKB1-BEGRU IS INITIAL ).
* AUTHORITY-CHECK OBJECT 'F_SKA1_BES'
* ID 'BRGRU' FIELD YSKB1-BEGRU
* ID 'ACTVT' FIELD '03'.
* IF SY-SUBRC NE 0.
* Wenn nicht berechtigt -> Rücksprung
* -----------------------------------
* RAISE NOT_AUTHORIZED.
* ENDIF.
* ENDIF.
* ENDSELECT.
* Hauswaehrungsschluessel besorgen
* --------------------------------
SELECT SINGLE * FROM T001
WHERE BUKRS = YBUKRS.
IF SY-SUBRC NE 0.
* WENN NICHT GEFUNDEN -> RÜCKSPRUNG
* ---------------------------------
RAISE NOT_FOUND.
ENDIF.
* SAVE_WAERS = T001-WAERS.
* Währungsschlüssel
* -----------------
* Für die Hauswährungsbearbeitung darf nicht auf einen bestimmten
* Währungsschlüssel abgegrenzt werden.
CLEAR YRTCUR.
REFRESH YRTCUR.
* Schluessel zum Lesen GLT0 aufbauen
* ----------------------------------
PERFORM GLKEY_AUFBAUEN.
* Sollbuchungen (UM01S - UM16S)
* Habenbuchungen (UM01H - UM16H)
* -------------------------------
MOVE 'SKC1A' TO TABLE.
PERFORM GLT0_LESEN.
MOVE SPACE TO TABLE.
* Saldo des Monats (UM01O - UM16O)
* ---------------------------------
PERFORM SALDO_DES_MONATS_SKC1A.
* Saldo zum GM-Ende (UM01K - UM16K) (WM01K - WM16K)
* --------------------------------------------------
PERFORM SALDO_ZUM_GM_ENDE_SKC1A.
* Übergabe der Sachkontenverkehrszahlen an das rufende Programm
* -------------------------------------------------------------
READ TABLE YSKC1A INDEX 1.
XSKC1A = YSKC1A.
ENDFUNCTION.