Enhance LAND1 into 0VENDOR_TEXT

hi, experts,
i am new to BW. and now i want to add the field LAND1 into 0VENDOR_TEXT.
RSA6  append struture is finished now.
and i need to write code in CMOD.
below is my code, no sytax error.
HOWEVER, when i go to RSA3 to check '0VENDOR_TEXT', field 'LAND1' is still empty.
can anyone please help me solve it?
Thank you so much.
TABLES: LFA1,ROXAX40169.
DATA: L_ROXAX40169 LIKE ROXAX40169.
CASE I_DATASOURCE.
WHEN '0VENDOR_TEXT'.
LOOP AT I_T_DATA INTO L_ROXAX40169.
SELECT SINGLE * FROM LFA1
WHERE LIFNR = L_ROXAX40169-LIFNR.
IF SY-SUBRC EQ 0.
L_ROXAX40169-LAND1 = LFA1-LAND1.
MODIFY I_T_DATA FROM L_ROXAX40169.
ENDIF.
ENDLOOP.
ENDCASE.

RSD1 --> edit mode --> masterdata/texts --> check "WITH TEXTS"
Sorry my bad - i thought you wanted to make a IO text as lang dependent. Never mind
Edited by: voodi on Dec 3, 2010 9:57 AM

Similar Messages

  • Enhancement Point in ABAP code

    Hi ,
    I am working on an upgrade from 4.6 to ECC ,so have a  have a standard FM with an enhancement point , how do i know if there is an implementaion for that or not and can i debugg the code in the enhancement point .
    When i click on the enhancement spot it goes to a class and i can see the code in that methods but cant set a breakpoint in it , kindly suggest what should i do.
    Regards
    Arun

    Hi
    double click on the enhancement point. it will take you to the enhancement spot into which it is defined.
    click on the tab "enhancement implementation". it will show you all the existing implementation. I you find nothing than this point is not implemented yet.
    if it is taking you to a class then it is a BADi implemented via new enhancement framework. to find it is implemented or not, repeat the above steps. to debug it:
    in the left section, expand entries under heading BADi definitions.
    double click on "implementations". you will get the existing entries on right side. double click on this entry. on the left side under heading "BADI definitions" you will get the implementing class.
    double click on it to get the class name.
    go into the class and see the method implemented. u try to hard code the break point into the method,
    activate it and then try to debug it.
    Thanks
    Vishal Kapoor

  • Want to convert Sap standard report  into alvgrid

    HI PLEASE HELP THIS IS CODE BELOW OF SAP STANDARD REPORT CODE  WANT TO CONVERT INTO ALVGRID
    LEAS HELP
    REPORT RFKOPR00
           MESSAGE-ID FR
           LINE-SIZE  132
           NO STANDARD PAGE HEADING.
    TABLES:   B0SG,
              LFA1,                        "Daten auf Mandantenebene
                LFB1,                      "Daten auf Buchungskreisebene
                  LFB5,                    "Mahndaten
                  LFC1,                    "Verkehrszahlen
                  LFC3,                    "Sonderumsätze
                  BSIK,                    "Offend Posten
                  BKPF,
                    BSEG,
                           BSEGA.
    TABLES:
              BHDGD,
              T001,
              T001S,
              *T001S,
              T074T,
              T074U,
              TBSL,
              TBSLT,
              TCURX,
              ADRS,
              RFPDO,
              RFPDO1,
              RFSDO,
              FAEDE.
    FIELD-SYMBOLS: .
    *Hilfsfelder
    *---Prüfung ob mehrere Hauswährungen verarbeitet werden.
    DATA:    CFAKT(3)      TYPE P,
             CHECKSALDO(8) TYPE P,
             CHECKAGOBL(8) TYPE P,
             WAERS LIKE T001-WAERS,
             WFLAG(1) TYPE P VALUE '0',
             WAERS2        LIKE T001-WAERS,
             WFLAG2(1)     TYPE P VALUE '0',
             PH-LINE(132)  TYPE C.
    *---Ermittlung aktuelles Geschäftsjahr über Funktionsbaustein.
    DATA: CURRY LIKE BSIK-GJAHR.
    *-Ermittlung Zahlungseingang bei Zahlungen mit Skontoabzug--
    *ATA: ZVTAGE LIKE KNB4-VZS01, "Verzugstage
        ZVSKONTO(8) TYPE P,     "Zahlungsvolumen bei Zahlung mit Skonto
        ZVNETTO(8)  TYPE P,     "Zahlungsvolumen bei Nettozahlung
        ZVVERZUG(8) TYPE P,     "Verzugstage
        ZVMALVZ(8)  TYPE P,     "Zahlungvolumen * Verzugstage
                                "KNB4-VZSxx)
        ZVTYP(1)    TYPE C,     "Skonto oder Nettozahler
        ZVPER(4)    TYPE C.     "Periode letze Zahlung
    *---Zeilenanzahl fü Adressausgabe -
    DATA: ZEILENANZAHL LIKE ADRS-ANZZL VALUE 7.
    DATA: KSALDO(6)  TYPE P.               "Saldovortrag
        BEABZUG(6) TYPE P,                   "Berechtigte Abzüge
        UBABZUG(6) TYPE P,                   "Unberechtigte Abzüge
        JAHRAUG(6) TYPE P,                   "Kumulierter Jahresausgleich
        KUMZINS(6) TYPE P.                   "Kumulierter Zins
    Ausgabe der Mahndaten pro Buchungskreis.
    DATA: INDEX(2) TYPE P VALUE 0.
    Hilfsfelder
    DATA: HF(1)    TYPE C.
    DATA: TXT_1(78) TYPE C,                "Mahnbereich
          TXT_2(78) TYPE C,                "Mahnart
          TXT_3(78) TYPE C,                "Mahnempfänger
          TXT_4(78) TYPE C,                "Mahndatum
          TXT_5(78) TYPE C,                "Mahnstufe
          TXT_6(78) TYPE C,                "Mahnsperre
          TXT_7(78) TYPE C,                "Mahnverfahren
          TXT_8(78) TYPE C.                "Sachbearbeiter
    DATA: BEGIN OF XMAHN OCCURS 10.
            INCLUDE STRUCTURE LFB5.
    DATA: END OF XMAHN.
    Hilfsfelder
    DATA: CHAR1(1)   TYPE C.
    DATA: FLAG1(1)   TYPE C.
    DATA: INTENS(1)  TYPE C.
    DATA: FLAG2(1)   TYPE C.
    *---- K o n s t a n t e n -
    *---- DNULL zum Vergleich mit Datumsfeldern -
    DATA: DNULL(8) TYPE C VALUE '00000000'.
    *---- DECKBLATT = 'N' ==> Kein Deckblatt bei NEW-SECTION -
    DATA: DECKBLATT TYPE C VALUE 'N'.
    *---- 'H' =   Hilfsfelder, die jederzeit fuer Berechnungen ver-  -
    *---- wendet werden koennen. -
    DATA: BEGIN OF H,
            STICHTAG(8),
            OFFSET(2) TYPE P,
            OFFSE1(2) TYPE P,
            SOLL      LIKE LFC1-UM01S,
            HABEN     LIKE LFC1-UM01H,
            SALDO     LIKE LFC1-UMSAV,
            SHBKZ     LIKE LFC3-SHBKZ,     "Sonderhauptbuchkennzeichen
            SALDV     LIKE LFC3-SALDV,     "Sonderhauptbuch-Saldovortrag
            SHBLS     LIKE LFC3-SOLLL,     "Sonderhauptbuch-Lfd.-Saldo
            SHBSL     LIKE LFC3-SOLLL,     "Sonderhauptbuch-Lfd.-SOLL
            SHBHB     LIKE LFC3-HABNL,     "Sonderhauptbuch-Lfd.-HABEN
          GBNUM     LIKE lfC1-GBN01,    "Geschaeftsber. Nummer ECKERT
          GBUMS     LIKE lfC1-GBU01,    "Geschaeftsber. Umsatz
            TEXT(15),
            UMLOW     LIKE BSIK-UMSKZ,     "Umsatzkennzeichen
            UMHIG     LIKE BSIK-UMSKZ,     "Umsatzkennzeichen
          END   OF H.
    ---- 'C' =   Zwischenergebnisse, die aus Feldern des C-Segmentes ---
    *---- berechnet werden. -
    DATA: BEGIN OF C,
            SALDO     TYPE P,              "Saldo
            UMKZ1     LIKE LFC3-SHBKZ,     "SHBKZ 1
            SUMS1     TYPE P,              "Sonderumsatz 1
            UMKZ2     LIKE LFC3-SHBKZ,     "SHBKZ 2
            SUMS2     TYPE P,              "Sonderumsatz 2
            UMKZ3     LIKE LFC3-SHBKZ,     "SHBKZ 3
            SUMS3     TYPE P,              "Sonderumsatz 3
            UMKZ4     LIKE LFC3-SHBKZ,     "SHBKZ 4
            SUMS4     TYPE P,              "Sonderumsatz 4
            UMKZ5     LIKE LFC3-SHBKZ,     "SHBKZ 5
            SUMS5     TYPE P,              "Sonderumsatz 5
            UMKZ6     LIKE LFC3-SHBKZ,     "SHBKZ 6
            SUMS6     TYPE P,              "Sonderumsatz 6
            UMKZ7     LIKE LFC3-SHBKZ,     "SHBKZ 7
            SUMS7     TYPE P,              "Sonderumsatz 7
            UMKZ8     LIKE LFC3-SHBKZ,     "SHBKZ 8
            SUMS8     TYPE P,              "Sonderumsatz 8
            UMKZ9     LIKE LFC3-SHBKZ,     "SHBKZ 9
            SUMS9     TYPE P,              "Sonderumsatz 9
            UMKZ10    LIKE LFC3-SHBKZ,     "SHBKZ 10
            SUMS10    TYPE P,              "Sonderumsatz 10
            SONOB     TYPE P,              "Sonstige Umsatz-Kz
            BABZG     TYPE P,              "Berechtigte Abzuege
            UABZG     TYPE P,              "Unberechtigte Abzuege
            KZINS     TYPE P,              "Zinszahlungen
            KUMUM     TYPE P,              "Umsatz
            KUMAG     TYPE P,              "Kum. Jahresausgleich
          KREUEB    TYPE P,         "Kreditueberschreitung
          AGOBLI    TYPE P,         "Gesamt-Obligo (absolut)
            AGOBLI LIKE LFC1-UMSAV,        "Gesamt-Obligo (absolut)
          RGOBLI    TYPE P,         "Gesamt-Obligo (relativ)
          LFTAGE(3) TYPE P,         "Langfristige Überzugstage
          MFTAGE(3) TYPE P,         "Mittelfristige Überzugstage
          KFTAGE(3) TYPE P,         "Kurzfristige Überzugstage
          END   OF C.
    ---- 'C2'=   Zwischenergebnisse, die aus Feldern des C-Segmentes ---
    *---- berechnet werden. -
    DATA: BEGIN OF C2 OCCURS 0,
            BUKRS     LIKE LFC1-BUKRS,
            SALDO     TYPE P,              "Saldo
          WEXOB     TYPE P,         "Wechsel-Obligo        W,S,B
          ANZOB     TYPE P,         "Anzahlungs-Obligo     A
          ZANFB     TYPE P,         "Zahlungs-Anforderung  F
            UMKZ1     LIKE LFC3-SHBKZ,     "SHBKZ 1
            SUMS1     TYPE P,              "Sonderumsatz 1
            UMKZ2     LIKE LFC3-SHBKZ,     "SHBKZ 2
            SUMS2     TYPE P,              "Sonderumsatz 2
            UMKZ3     LIKE LFC3-SHBKZ,     "SHBKZ 3
            SUMS3     TYPE P,              "Sonderumsatz 3
            UMKZ4     LIKE LFC3-SHBKZ,     "SHBKZ 4
            SUMS4     TYPE P,              "Sonderumsatz 4
            UMKZ5     LIKE LFC3-SHBKZ,     "SHBKZ 5
            SUMS5     TYPE P,              "Sonderumsatz 5
            UMKZ6     LIKE LFC3-SHBKZ,     "SHBKZ 6
            SUMS6     TYPE P,              "Sonderumsatz 6
            UMKZ7     LIKE LFC3-SHBKZ,     "SHBKZ 7
            SUMS7     TYPE P,              "Sonderumsatz 7
            UMKZ8     LIKE LFC3-SHBKZ,     "SHBKZ 8
            SUMS8     TYPE P,              "Sonderumsatz 8
            UMKZ9     LIKE LFC3-SHBKZ,     "SHBKZ 9
            SUMS9     TYPE P,              "Sonderumsatz 9
            UMKZ10    LIKE LFC3-SHBKZ,     "SHBKZ 10
            SUMS10    TYPE P,              "Sonderumsatz 10
            SONOB     TYPE P,              "Sonstige Umsatz-Kz
            BABZG     TYPE P,              "Berechtigte Abzuege
            UABZG     TYPE P,              "Unberechtigte Abzuege
            KZINS     TYPE P,              "Zinszahlungen
            KUMUM     TYPE P,              "Umsatz
            KUMAG     TYPE P,              "Kum. Jahresausgleich
          KREUEB    TYPE P,         "Kreditueberschreitung
          AGOBLI    TYPE P,         "Gesamt-Obligo (absolut)
            AGOBLI LIKE LFC1-UMSAV,        "Gesamt-Obligo (absolut)
          RGOBLI    TYPE P,         "Gesamt-Obligo (relativ)
            LFTAGE(3) TYPE P,              "Langfristige Überzugstage
            MFTAGE(3) TYPE P,              "Mittelfristige Überzugstage
            KFTAGE(3) TYPE P,              "Kurzfristige Überzugstage
            ZVTYP(1)    TYPE C,            "Flag Skonto oder Nettozahler
            ZVPER(6)    TYPE C,            "letze Zahlungsperiode
            ZVVERZUG(8) TYPE P,            "Durchschittliche Verzugst
          END   OF C2.
    ---- 'C3'=   Zwischenergebnisse, die aus Feldern des C-Segmentes ---
    *---- berechnet werden. -
    DATA: BEGIN OF C3,
            SALDO     TYPE P,              "Saldo
          WEXOB     TYPE P,         "Wechsel-Obligo        W,S,B
          ANZOB     TYPE P,         "Anzahlungs-Obligo     A
          ZANFB     TYPE P,         "Zahlungs-Anforderung  F
            UMKZ1     LIKE LFC3-SHBKZ,     "SHBKZ 1
            SUMS1     TYPE P,              "Sonderumsatz 1
            UMKZ2     LIKE LFC3-SHBKZ,     "SHBKZ 2
            SUMS2     TYPE P,              "Sonderumsatz 2
            UMKZ3     LIKE LFC3-SHBKZ,     "SHBKZ 3
            SUMS3     TYPE P,              "Sonderumsatz 3
            UMKZ4     LIKE LFC3-SHBKZ,     "SHBKZ 4
            SUMS4     TYPE P,              "Sonderumsatz 4
            UMKZ5     LIKE LFC3-SHBKZ,     "SHBKZ 5
            SUMS5     TYPE P,              "Sonderumsatz 5
            UMKZ6     LIKE LFC3-SHBKZ,     "SHBKZ 6
            SUMS6     TYPE P,              "Sonderumsatz 6
            UMKZ7     LIKE LFC3-SHBKZ,     "SHBKZ 7
            SUMS7     TYPE P,              "Sonderumsatz 7
            UMKZ8     LIKE LFC3-SHBKZ,     "SHBKZ 8
            SUMS8     TYPE P,              "Sonderumsatz 8
            UMKZ9     LIKE LFC3-SHBKZ,     "SHBKZ 9
            SUMS9     TYPE P,              "Sonderumsatz 9
            UMKZ10    LIKE LFC3-SHBKZ,     "SHBKZ 10
            SUMS10    TYPE P,              "Sonderumsatz 10
            SONOB     TYPE P,              "Sonstige Umsatz-Kz
            BABZG     TYPE P,              "Berechtigte Abzuege
            UABZG     TYPE P,              "Unberechtigte Abzuege
            KZINS     TYPE P,              "Zinszahlungen
            KUMUM     TYPE P,              "Umsatz
            KUMAG     TYPE P,              "Kum. Jahresausgleich
          KREUEB    TYPE P,         "Kreditueberschreitung
          AGOBLI    TYPE P,         "Gesamt-Obligo (absolut)
            AGOBLI LIKE LFC1-UMSAV,        "Gesamt-Obligo (absolut)
          RGOBLI    TYPE P,         "Gesamt-Obligo (relativ)
          LFTAGE(3) TYPE P,         "Langfristige Überzugstage
          MFTAGE(3) TYPE P,         "Mittelfristige Überzugstage
          KFTAGE(3) TYPE P,         "Kurzfristige Überzugstage
          ZVTYP(1)    TYPE C,       "Flag Skonto oder Nettozahler
          ZVPER(6)    TYPE C,       "letze Zahlungsperiode
          ZVVERZUG(8) TYPE P,       "Durchschittliche Verzugst
          END   OF C3.
    DATA: SHBETRAG LIKE BSEGA-DMSHB.       "TYPE P.
    *---- 'RTAB' = Rastertabelle fuer offene Posten -
    DATA: BEGIN OF RTAB OCCURS 30,
            SORTK(1)   TYPE C,             "0 = Summe Gesber
                                           "1 = Summe aller Gesber
                                           "2 = Umsatzdaten
            BUKRS LIKE BSIK-BUKRS,
            GSBER LIKE BSIK-GSBER,
            WAERS LIKE BSIK-WAERS,
            RAART TYPE C,                  "Rasterart
                                           "1 = Netto-Faelligkeit
                                           "2 = Skonto1-Faelligkeit
                                           "3 = Zahlungseingang
                                           "4 = Ueber-Faelligkeit
            SPERR TYPE P,                  "gesprrte Posten
            KUMUM TYPE P,                  "Umsatz
            ANZAH TYPE P,                  "Anzahlungen
            OPSUM TYPE P,                  "Offene Posten Summe
            RAST1 TYPE P,                  "Rasterfeld 1
            RAST2 TYPE P,                  "Rasterfeld 2
            RAST3 TYPE P,                  "Rasterfeld 3
            RAST4 TYPE P,                  "Rasterfeld 4
            RAST5 TYPE P,                  "Rasterfeld 5
            RAST6 TYPE P,                  "Rasterfeld 6
          END   OF RTAB.
    *---- 'RBUS' = Rastertabelle fuer Summen pro Sachbearbeiter -
    *ATA: BEGIN OF RBUS OCCURS 30,
          SORTK(1)   TYPE C,        "0 = Summe Gesber
                                    "1 = Summe aller Gesber
          BUKRS LIKE BSIk-BUKRS,
          GSBER LIKE BSIk-GSBER,
          WAERS LIKE BSIk-WAERS,
          RAART TYPE C,             "Rasterart
                                    "1 = Netto-Faelligkeit
                                    "2 = Skonto1-Faelligkeit
                                    "3 = Zahlungseingang
                                    "4 = Ueber-Faelligkeit
          KUMUM TYPE P,             "Umsatz
          ANZAH TYPE P,             "Anzahlungen
          OPSUM TYPE P,             "Offene Posten Summe
          RAST1 TYPE P,             "Rasterfeld 1
          RAST2 TYPE P,             "Rasterfeld 2
          RAST3 TYPE P,             "Rasterfeld 3
          RAST4 TYPE P,             "Rasterfeld 4
          RAST5 TYPE P,             "Rasterfeld 5
          RAST6 TYPE P,             "Rasterfeld 6
        END   OF RBUS.
    *---- 'RBUK' = Rastertabelle fuer Summen pro Buchungskreis  -
    DATA: BEGIN OF RBUK OCCURS 30,
            SORTK(1)   TYPE C,             "0 = Summe Gesber
                                           "1 = Summe aller Gesber
                                           "2 = Umsatzdaten
            BUKRS LIKE BSIK-BUKRS,
            GSBER LIKE BSIK-GSBER,
            WAERS LIKE BSIK-WAERS,
            RAART TYPE C,                  "Rasterart
                                           "1 = Netto-Faelligkeit
                                           "2 = Skonto1-Faelligkeit
                                           "3 = Zahlungseingang
                                           "4 = Ueber-Faelligkeit
            SPERR TYPE P,                  "gesprrte Posten
            KUMUM TYPE P,                  "Umsatz
            ANZAH TYPE P,                  "Anzahlungen
            OPSUM TYPE P,                  "Offene Posten Summe
            RAST1 TYPE P,                  "Rasterfeld 1
            RAST2 TYPE P,                  "Rasterfeld 2
            RAST3 TYPE P,                  "Rasterfeld 3
            RAST4 TYPE P,                  "Rasterfeld 4
            RAST5 TYPE P,                  "Rasterfeld 5
            RAST6 TYPE P,                  "Rasterfeld 6
          END   OF RBUK.
    ---- 'RSUM' = Rastertabelle pro Währung über alle Buchungskreise ---
    DATA: BEGIN OF RSUM OCCURS 30,
            SORTK(1)   TYPE C,             "0 = Summe Gesber
                                           "1 = Summe aller Gesber
          BUKRS LIKE BSIk-BUKRS,
          GSBER LIKE BSIk-GSBER,
            WAERS LIKE BSIK-WAERS,
            RAART TYPE C,                  "Rasterart
                                           "1 = Netto-Faelligkeit
                                           "2 = Skonto1-Faelligkeit
                                           "3 = Zahlungseingang
                                           "4 = Ueber-Faelligkeit
            SPERR TYPE P,                  "gesperrte Posten
            KUMUM TYPE P,                  "Umsatz
            ANZAH TYPE P,                  "Anzahlungen
            OPSUM TYPE P,                  "Offene Posten Summe
            RAST1 TYPE P,                  "Rasterfeld 1
            RAST2 TYPE P,                  "Rasterfeld 2
            RAST3 TYPE P,                  "Rasterfeld 3
            RAST4 TYPE P,                  "Rasterfeld 4
            RAST5 TYPE P,                  "Rasterfeld 5
            RAST6 TYPE P,                  "Rasterfeld 6
          END   OF RSUM.
    *---- interne Tabelle für Periodenabgrenzung----
    RANGES: BMONAT FOR RFPDO-DOPRBMON.
    ---- In die Felder RP01 bis RP05 werden dynamisch die von aussen ---
    *---- eingegebenen Rasterpunkte uebertragen -
    DATA: RP01(2)   TYPE P,                "   0
          RP02(2)   TYPE P,                "  20
          RP03(2)   TYPE P,                "  40
          RP04(2)   TYPE P,                "  80
          RP05(2)   TYPE P,                " 100
          RP06(3)   TYPE P,                "   1
          RP07(3)   TYPE P,                "  21
          RP08(3)   TYPE P,                "  41
          RP09(3)   TYPE P,                "  81
          RP10(3)   TYPE P.                " 101
    *---- In die Felder RC01 bis RC10 werden die Rasterpunkte in -
    ---- charakterform abgestellt. (fuer REPLACE-Funktion in Variabler -
    *---- Ueberschrift) -
    DATA: RC01(4)   TYPE C,                                     "  0
          RC02(4)   TYPE C,                "  20
          RC03(4)   TYPE C,                "  40
          RC04(4)   TYPE C,                "  80
          RC05(4)   TYPE C,                " 100
          RC06(4)   TYPE C,                "   1
          RC07(4)   TYPE C,                "  21
          RC08(4)   TYPE C,                "  41
          RC09(4)   TYPE C,                "  81
          RC10(4)   TYPE C.                " 101
    *---- Felder für Umsatzkennzeichen -
    *---- für Ausweis der Sonderumsätze----
    DATA: HUMKZ1    LIKE LFC3-SHBKZ,
          HUMKZ2    LIKE LFC3-SHBKZ,
          HUMKZ3    LIKE LFC3-SHBKZ,
          HUMKZ4    LIKE LFC3-SHBKZ,
          HUMKZ5    LIKE LFC3-SHBKZ,
          HUMKZ6    LIKE LFC3-SHBKZ,
          HUMKZ7    LIKE LFC3-SHBKZ,
          HUMKZ8    LIKE LFC3-SHBKZ,
          HUMKZ9    LIKE LFC3-SHBKZ,
          HUMKZ10   LIKE LFC3-SHBKZ.
    *---- GBZAEHL - In diesem Feld wird vermerkt, fuer wieviele Ge- -
    *----           schaeftsbereiche ein OP-Raster ausgegeben wird. -
    ----           Wird das Raster nur fuer einen Geschaeftsbereich ge- -
    *----           druckt, so entfaellt das Summen-Raster. -
    DATA: GBZAEHL(3) TYPE P.
    ---- TOP-FLAG '1' = bei TOP-OF-PAGE Einzelpostenueberschrift ausg. --
    *----          '2' = bei TOP-OF-PAGE Ueberschrift fuer Raster ausgeb. *
    *----          '3' = bei TOP-OF-PAGE ULINE ausgeben. -
    ----          '4' = bei TOP-OF-PAGE Stammsatzueberschrift ausgeben --
    DATA: TOP-FLAG(1) TYPE C.
    *---- SEL-STAMM  'J' = Stammsatz wird ausgewertet                     *
    *----            'N' = Stammsatz wird nicht ausgewertet               *
    *---- SEL-POSTN  'J' = Stammsatz hat Posten gerastert                 *
    *----            'N' = Stammsatz hat keine Posten gerastert           *
    DATA: BEGIN OF SEL,
            STAMM(1) TYPE C,
            POSTN(1) TYPE C,
            POST2(1) TYPE C,
          END   OF SEL.
    *---- SATZART  '1' = Stammdaten -
    *----          '2' = Faelligkeitsraster -
    *----          '3' = Einzelposten -
    DATA: SATZART(1) TYPE C.
    *---- RART  =  Erste ausgewaehlte Rasterart -
    DATA: RART(1)    TYPE C.
    *---- TAGE  =  Tage nach denen die Posten sortiert sind -
    DATA: TAGE(4)    TYPE P,
    *---- NTAGE =  Tage fuer Netto-Faelligkeit -
          NTAGE(4)   TYPE P,
    *---- STAGE =  Tage fuer Skonto1-Faelligkeit -
          STAGE(4)   TYPE P,
    *---- ATAGE =  Alter der Belege -
          ATAGE(4)   TYPE P,
    *---- UTAGE =  Tage fuer Ueber-Faelligkeit -
          UTAGE(4)   TYPE P.
    *---- RASTERUU dient zur Sortierung der Einzelposten. Die Posten -
    *----          gemaess ihrer Rasterung die Werte '1' bis '6' -
    DATA: RASTERUU(1) TYPE C.
    *---- RAART  Rasterart -
    ---- Die einzelnen Felder der Feldleiste werden bei SART-OF-SELECTION
    *---- mit 1 oder 0 bestueckt. -
    *ATA: BEGIN OF RAART,
          NET(1)   TYPE C,      "X = ausgewaehlt, ' ' = nicht ausgewaehlt
          SKT(1)   TYPE C,      "X = ausgewaehlt, ' ' = nicht ausgewaehlt
          UEB(1)   TYPE C,      "X = ausgewaehlt, ' ' = nicht ausgewaehlt
        END   OF RAART.
    DATA: BEGIN OF GB,
            GSBER  LIKE BSIK-GSBER,
            WAERS  LIKE BSIK-WAERS,
          END   OF GB.
    *---- Variable Ueberschriften -
    DATA: BEGIN OF VARUEB1,
            FELD1(45)   TYPE C,
            FELD2(14)   TYPE C,
            FELD3(14)   TYPE C,
            FELD4(14)   TYPE C,
            FELD5(14)   TYPE C,
            FELD6(14)   TYPE C,
            FELD7(14)   TYPE C,
          END   OF VARUEB1.
    DATA: BEGIN OF VARUEB2,
            FELD1(45)   TYPE C,
            FELD2(14)   TYPE C,
            FELD3(14)   TYPE C,
            FELD4(14)   TYPE C,
            FELD5(14)   TYPE C,
            FELD6(14)   TYPE C,
            FELD7(14)   TYPE C,
          END   OF VARUEB2.
    DATA: VARUEB3(132),
          VARUEB4(132),
          VARTXT1(40),
          VARTXT(40)  TYPE C.
    *---- Variable für Ausgabe der Sonderumsätze----
    DATA: SHBBEZ LIKE T074T-LTEXT.
    DATA: ASUMS  TYPE P.                                        "
    *---- Interne Tabelle für Bezeichnungen der SHBKZ----
    DATA: BEGIN OF BEZSHB OCCURS 10,
            SHBKZ LIKE T074T-SHBKZ,
            LTEXT LIKE T074T-LTEXT,
          END OF BEZSHB.
    *---- Interne Tabelle für Zwischenspeicherung -
    DATA: BEGIN OF BLKEY,
            BUKRS LIKE BSIK-BUKRS,
            BELNR LIKE BSIK-BELNR,
            GJAHR LIKE BSIK-GJAHR,
            BUZEI LIKE BSIK-BUZEI,
          END   OF BLKEY.
    DATA: BEGIN OF RTAGE,
            NTAGE LIKE NTAGE,
            STAGE LIKE STAGE,
            ATAGE LIKE ATAGE,
            UTAGE LIKE UTAGE,
         END   OF RTAGE.
    DATA: BEGIN OF HBSIK OCCURS 10.
            INCLUDE STRUCTURE BSIK.
            INCLUDE STRUCTURE BSEGA.
            INCLUDE STRUCTURE RTAGE.
    DATA: END   OF HBSIK.
    DATA: BEGIN OF REFBL OCCURS 10.
            INCLUDE STRUCTURE BLKEY.
            INCLUDE STRUCTURE RTAGE.
    DATA: END   OF REFBL.
    DATA: BEGIN OF HLFB1 OCCURS 10.
            INCLUDE STRUCTURE LFB1.
    DATA: END   OF HLFB1.
    DATA: BEGIN OF HT001 OCCURS 10.
            INCLUDE STRUCTURE T001.
    DATA: END   OF HT001.
    *---- Interne Tabelle für Ausgabe der Obligos -
    DATA: BEGIN OF AOBLIGO OCCURS 12,
            OBART TYPE C,             "Flag für Obligoart 1 = Kontokorrent
                                           "                   2 = SHBKZ
                                      "                   3 = sonstige SHB
            SHBKZ LIKE T074T-SHBKZ,        "SHB-Kennzeichen
            LTEXT LIKE T074T-LTEXT,        "Bezeichnung
            OBLIG TYPE P,                  "Obligobetrag
          END OF AOBLIGO.
    *---- Declarationen für Accessibility /ALV GRID -
    data: ACC_MODE type c.
    Data: UEBTEXT(22) type c.
    Data: UEKTEXT(15)  type c.
    Data: TITTEXT(100) type c.
    Data: DATTEXT(10) type c.
    DATA: BEGIN OF RTAB_ALV OCCURS 30,
          SORTK(1)   TYPE C,             "0 = Summe Gesber
                                         "1 = Summe aller Gesber
                                         "2 = Umsatzdaten
            BUKRS LIKE BSIk-BUKRS,
            lifnr LIKE LFA1-lifnr,
            busab like lfb1-busab,
            SORTL LIKE lfA1-SORTL,
            LAND1 LIKE lfA1-LAND1,
            GSBER LIKE BSIk-GSBER,
            WAERS LIKE BSIk-WAERS,
          hwaer like rf140-hwaer,
            RAART like RF140-RAART,        "Rasterart
          shkzg like bsik-shkzg,
          XGUTS TYPE C,                  "Gutschrift
            KUMUM LIKE RF140-KUMUMHW,      "Umsatz
            ANZAH like rf140-anzbthw,      "Anzahlungen
            OPSUM like RF140-gsaldd,       "Offene Posten Summe
            RAST1 like RF140-rast1,        "Rasterfeld 1
            RAST2 like RF140-rast2,        "Rasterfeld 2
            RAST3 like RF140-rast3,        "Rasterfeld 3
            RAST4 like RF140-rast4,        "Rasterfeld 4
            RAST5 like RF140-rast5,        "Rasterfeld 5
            RAST6 like RF140-rast6,        "Rasterfeld 6
          END   OF RTAB_ALV.
    *"General Data
    TYPE-POOLS: SLIS.
    *DATA: BEGIN OF GT_OUTTAB OCCURS 0.
           INCLUDE STRUCTURE rtab_alv.
    *DATA: END OF GT_OUTTAB.
    Data: GS_LAYOUT TYPE SLIS_LAYOUT_ALV,
         G_EXIT_CAUSED_BY_CALLER,
         GS_EXIT_CAUSED_BY_USER TYPE SLIS_EXIT_BY_USER,
          G_REPID LIKE SY-REPID,
          G_GRID_TITLE TYPE  LVC_TITLE.
    *"Callback
    *Data: GT_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER,
         G_STATUS_SET   TYPE SLIS_FORMNAME VALUE 'PF_STATUS_SET',
    Data: G_USER_COMMAND TYPE SLIS_FORMNAME VALUE 'USER_COMMAND'.
         G_TOP_OF_PAGE  TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE',
         G_TOP_OF_LIST  TYPE SLIS_FORMNAME VALUE 'TOP_OF_LIST',
         G_END_OF_LIST  TYPE SLIS_FORMNAME VALUE 'END_OF_LIST'.
    *"Variants
    DATA: GS_VARIANT LIKE DISVARIANT,
          G_SAVE.
    Global structure of list
    fieldcatalog
    DATA:   LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
    DATA:   GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.
    sort
    *DATA:   GT_SORT     TYPE SLIS_T_SORTINFO_ALV.
    events
    *DATA:   GT_EVENTS   TYPE SLIS_T_EVENT.
    *----- Structure for specific color settings -
    *DATA:   COL_TAB_T TYPE SLIS_T_SPECIALCOL_ALV,
           COL_TAB   TYPE SLIS_SPECIALCOL_ALV.
    DATA:   G_TABNAME TYPE SLIS_TABNAME VALUE 'RTAB_ALV'.
    print
    *DATA:   GS_PRINT    TYPE SLIS_PRINT_ALV.
    *---- FIELD-GROUPS                            -
    FIELD-GROUPS:
              HEADER,
              STAMMDATEN,
              OP-RASTER,
              EINZELPOSTEN.
    INSERT
      LFB1-BUKRS                           " Buchungskreis
    lfB1-BUSAB         " Sachbearbeiter
      LFA1-LIFNR                           " Kontonummer
      SATZART                              " Satzart
      RTAB-SORTK                           " Sortkz fuer Tabelle RTAB
                                           " '0' = normale Eintraege
                                           " '1' = Summeneintraege
      GB                                   " Geschaeftsbereich
                                           " - GB-GSBER
                                           " - GB-WAERS
      RASTERUU         " Kennzeichen fuer Detailposten bzw Raster
    ab hier nur fuer Einzelposten -
      TAGE                                 " Rastertage  fuer Detailposten
      BSIK-UMSKZ                           " Umsatzkennzeichen
      BSIK-BLART                           " Belegart
    BSIK-ZUONR         " Zuordnungsnummer
      BSIK-BELNR                           " Belegnummer
      BSIK-BUZEI                           " Belegzeile
    INTO HEADER.
    INSERT
    Addressdaten
      ADRS-LINE0                           " 1. Zeile Adressenaufbereitung
      ADRS-LINE1                           " 2. "     "
      ADRS-LINE2                           " 3. "     "
      ADRS-LINE3                           " 4. "     "
      ADRS-LINE4                           " 5. "     "
      ADRS-LINE5                           " 6. "     "
      ADRS-LINE6                           " 7. "     "
    ADRS-LINE7         " 8. "     "
    ADRS-LINE8         " 9. "     "
    ADRS-LINE9         " 10."     "
    Umsatzdaten
      C-KUMUM                              " Umsatz
    C-BABZG          " Berechtigt. Abzuege
    C-UABZG          " Unberechtigt. Abzuege
    C-KZINS          " Zinszahlungen
    C-KUMAG          " Kum. Jahresausgleich
    Obligos
      C-SALDO                              " Saldo ohne SHB-Vorgänge
      C-UMKZ1                              "SHBKZ 1
      C-SUMS1                              "Sonderumsatz 1
      C-UMKZ2                              "SHBKZ 2
      C-SUMS2                              "Sonderumsatz 2
      C-UMKZ3                              "SHBKZ 3
      C-SUMS3                              "Sonderumsatz 3
      C-UMKZ4                              "SHBKZ 4
      C-SUMS4                              "Sonderumsatz 4
      C-UMKZ5                              "SHBKZ 5
      C-SUMS5                              "Sonderumsatz 5
      C-UMKZ6                              "SHBKZ 6
      C-SUMS6                              "Sonderumsatz 6
      C-UMKZ7                              "SHBKZ 7
      C-SUMS7                              "Sonderumsatz 7
      C-UMKZ8                              "SHBKZ 8
      C-SUMS8                              "Sonderumsatz 8
      C-UMKZ9                              "SHBKZ 9
      C-SUMS9                              "Sonderumsatz 9
      C-UMKZ10                             "SHBKZ 10
      C-SUMS10                             "Sonderumsatz 10
      C-SONOB                              " Sonst. Obligen
    Limits
      C-AGOBLI                             " Absolutes Gesamtobligo
    Zahlungdaten
      LFB1-ZTERM                           "Zahlungsbedingung
      LFB1-ZAHLS                           "Sperrschlüssel für Zahlung
      LFB1-ZWELS                           "Zahlwege
      LFB1-XVERR                           "Zahlungsverrechnung
      LFB1-WEBTR                           "Wechsellimit
      LFB1-BUSAB                           " Sachbearbeiter
      lfa1-sortl
      lfa1-land1
    INTO STAMMDATEN.
    INSERT
      RTAB-RAART                           "Rasterart
      RTAB-SPERR                           "gesperrte Posten
      RTAB-KUMUM                           "Umsatz
      RTAB-ANZAH                           "Anzahlungen
      RTAB-OPSUM                           "Offene Posten Summe
      RTAB-RAST1                           "Rasterfeld 1
      RTAB-RAST2                           "Rasterfeld 2
      RTAB-RAST3                           "Rasterfeld 3
      RTAB-RAST4                           "Rasterfeld 4
      RTAB-RAST5                           "Rasterfeld 5
      RTAB-RAST6                           "Rasterfeld 6
    INTO OP-RASTER.
    INSERT
      BSIK-BUDAT                           " Buchungsdatum
      BSIK-BLDAT                           " Belegdatum
      BSIK-CPUDT                           " CPU-Datum
    BKPF-USNAM         " User-ID
      BSIK-WAERS                           " Wahrungsschluessel
      BSEGA-NETDT                          " Nettofaelligkeitsdatum
    FAEDE-NETDT        " Nettofaelligkeitsdatum
      BSIK-ZFBDT                           " Zahlungsfristen-Basisdatum
      BSIK-BSCHL                           " Buchungsschluessel
      BSIK-ZLSCH                           " Zahlungsschluessel
    BSIK-MANST         " Mahnstufe
      SHBETRAG                             " Hauswaehrungsbetrag
      BSEGA-DMSHB                          " Hauswaehrungsbetrag
      BSEGA-WRSHB                          " Fremwaehrungsbetrag
    INTO EINZELPOSTEN.
    BEGIN_OF_BLOCK 1.
    *ELECT-OPTIONS:
         GESBER   FOR BSIK-GSBER.
    PARAMETERS:
           MONAT    LIKE RFPDO-DOPRBMON.
    SELECT-OPTIONS:
           KKSALDO2 FOR RFSDO-KOPRSAL2,    "Saldovortrag
           AGOBLIG2 FOR RFSDO-KOPRAGO2.    "Absolutes Obligo
         RGOBLIGO FOR RFSDO-DOPRRGOB.          "Relatives Obligo
    SELECT-OPTIONS:
         LAND     FOR LFA1-LAND1,
         KONTENGR FOR LFA1-KTOKK,
         SACHBEAR FOR LFB1-BUSAB,
           AKONTS   FOR LFB1-AKONT,
           AKONTP   FOR BSIK-HKONT.
    SELECT-OPTIONS:
           BUDAT    FOR BSIK-BUDAT,
           BLDAT    FOR BSIK-BLDAT,
           NETDT    FOR BSEGA-NETDT.
    PARAMETERS:     N_BELEGE    LIKE RFPDO-BPETNBEL
                                       DEFAULT 'X',   "Normale Belege.
                    STAT_BLG    LIKE RFPDO-BPETSBEL.  "Statistische Belege
    END_OF_BLOCK 1.
    *ELECT-OPTIONS:
         BERABZU1 FOR LFC1-BABZG,
         UNBABZU1 FOR LFC1-UABZG,
         ZINSE1   FOR LFC1-KZINS,
         JHRAUSG1 FOR LFC1-KUMAG.
         BERABZUG FOR BEABZUG NO-DISPLAY,       "Berechtigter Abzug
         UNBABZUG FOR UBABZUG NO-DISPLAY,       "Unberechtigter Abzug
         ZINSEN   FOR KUMZINS NO-DISPLAY,       "Kumulierter Zins
         JHRAUSGL FOR JAHRAUG NO-DISPLAY.       "Kumulierter Jahresausgl.
    BEGIN_OF_BLOCK 2.
    PARAMETERS:
           SORTART  LIKE RFPDO1-KOPRSOAR DEFAULT '1',          "Doku
           VERDICHT LIKE RFPDO1-KOPRVERD DEFAULT '1',          "Doku
           RASTVERD LIKE RFPDO1-KOPRRAST DEFAULT '0',          "Doku
           KONZVERS LIKE RFPDO-DOPOKONZ,   "Konzernversion
           XBUKRDAT LIKE RFPDO3-ALLGBUKD DEFAULT 0, "Bukr.daten
           KAUSGABE like rfpdo3-ALLGKAOR.
         SELECTION-SCREEN BEGIN OF LINE.
         SELECTION-SCREEN COMMENT 01(30) TEXT-030.
    PARAMETERS: RART-NET LIKE RFPDO-DOPRRNET DEFAULT 'X'.
         SELECTION-SCREEN COMMENT 33(01) TEXT-028.
    PARAMETERS: RART-SKT LIKE RFPDO-DOPRRSKT DEFAULT 'X'.
         SELECTION-SCREEN COMMENT 35(01) TEXT-028.
    SELECTION-SCREEN BEGIN OF LINE.
    PARAMETERS: RART-ALT LIKE RFPDO1-KOPRRALT DEFAULT 'X'.
    SELECTION-SCREEN COMMENT 03(28) TEXT-031.
    SELECTION-SCREEN POSITION POS_HIGH.
    PARAMETERS      RBLDAT   LIKE RFPDO2-KORD10BD.
    SELECTION-SCREEN COMMENT 61(12) TEXT-032.
    SELECTION-SCREEN END OF LINE.
         SELECTION-SCREEN COMMENT 37(01) TEXT-028.
    PARAMETERS: RART-UEB LIKE RFPDO-DOPRRUEB DEFAULT 'X'.
         SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 01(31) TEXT-026.
    PARAMETERS: RASTBIS1 LIKE RFPDO1-ALLGROGR DEFAULT '000'.
         SELECTION-SCREEN COMMENT 35(02) TEXT-027.
    PARAMETERS: RASTBIS2 LIKE RFPDO1-ALLGROGR DEFAULT '020'.
         SELECTION-SCREEN COMMENT 41(02) TEXT-027.
    PARAMETERS: RASTBIS3 LIKE RFPDO1-ALLGROGR DEFAULT '040'.
         SELECTION-SCREEN COMMENT 47(02) TEXT-027.
    PARAMETERS: RASTBIS4 LIKE RFPDO1-ALLGROGR DEFAULT '080'.
         SELECTION-SCREEN COMMENT 53(02) TEXT-027.
    PARAMETERS: RASTBIS5 LIKE RFPDO1-ALLGROGR DEFAULT '100'.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 01(31) TEXT-029.
    PARAMETERS:  FAKTOR LIKE RFPDO-DOPRFAKT DEFAULT '0'.
    SELECTION-SCREEN COMMENT 35(1) TEXT-028.
    PARAMETERS:  STELLEN LIKE RFPDO-DOPRFAKT DEFAULT '0'.
    SELECTION-SCREEN END OF LINE.
    PARAMETERS: PZUOR    LIKE RFPDO2-DOPRZUOR.
    PARAMETERS: UMSATZKZ LIKE RFPDO1-DOPRSHBO. "DEFAULT 'WSABIMVD'.
    PARAMETERS:
           TITLE       LIKE RFPDO1-ALLGLINE,
           LISTSEP     LIKE RFPDO-ALLGLSEP,
           MIKFICHE    LIKE RFPDO-ALLGMIKF.
    PARAMETERS:
           P_LVAR    LIKE Gs_VARIANT-VARIANT DEFAULT SPACE modif id 508.
    END_OF_BLOCK 2.
    AT SELECTION-SCREEN OUTPUT.
    if acc_mode is initial.
      LOOP AT SCREEN.
        IF SCREEN-GROUP1 = '508'.
          SCREEN-active    = '0'.
          MODIFY SCREEN.
        ENDIF.
    ENDLOOP.
    endif.
    AT SELECTION-SCREEN ON AKONTS.
       Konvertierung der Kontonummer
      LOOP AT AKONTS.
        PERFORM ALPHAFORMAT(SAPFS000)
          USING AKONTS-LOW AKONTS-LOW.
        PERFORM ALPHAFORMAT(SAPFS000)
          USING AKONTS-HIGH AKONTS-HIGH.
        MODIFY AKONTS.
      ENDLOOP.
    AT SELECTION-SCREEN ON AKONTP.
       Konvertierung der Kontonummer
      LOOP AT AKONTP.
        PERFORM ALPHAFORMAT(SAPFS000)
          USING AKONTP-LOW AKONTP-LOW.
        PERFORM ALPHAFORMAT(SAPFS000)
          USING AKONTP-HIGH AKONTP-HIGH.
        MODIFY AKONTP.
      ENDLOOP.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_LVAR.
      Gs_VARIANT-REPORT  = SY-REPID.
      Gs_VARIANT-VARIANT = P_LVAR.
      PERFORM F4_FOR_S_LVAR   USING Gs_VARIANT.
      P_LVAR = Gs_VARIANT-VARIANT.
    AT SELECTION-SCREEN.
      IF NOT RASTBIS5 IS INITIAL.
        IF  RASTBIS5 GT RASTBIS4
        AND RASTBIS4 GT RASTBIS3
        AND RASTBIS3 GT RASTBIS2
        AND RASTBIS2 GT RASTBIS1.
        ELSE.
          MESSAGE E379.
        ENDIF.
      ELSE.
        IF NOT RASTBIS4 IS INITIAL.
          IF  RASTBIS4 GT RASTBIS3
          AND RASTBIS3 GT RASTBIS2
          AND RASTBIS2 GT RASTBIS1.
          ELSE.
            MESSAGE E379.
          ENDIF.
        ELSE.
          IF NOT RASTBIS3 IS INITIAL.
            IF  RASTBIS3 GT RASTBIS2
            AND RASTBIS2 GT RASTBIS1.
            ELSE.
              MESSAGE E379.
            ENDIF.
          ELSE.
            IF NOT RASTBIS2 IS INITIAL.
              IF  RASTBIS2 GT RASTBIS1.
              ELSE.
                MESSAGE E379.
              E

    Hi Laxman,
    I have checked the program and found out following:
    the field "acc_mode" which gets populated by FM "GET_ACCESSIBILITY_MODE".
    If this field is initial, then normal list gets displayed and
    If this field has value, then ALV grid gets displayed.
    regards,
    Dharitree

  • Data type Enhancement in SPROXY

    HI,
    We are using standard  software component : SAP SRM 5.5 ...
    We created some data types in Datatype enhancement and link to the standard Data types.
    Activated.
    When we are looking in the SPROXY that Enhance Data type is not vissible..
    Our Version of SPROXY is Enterprise service browser.
    Any way to get that enhance Datatype into SPROXY and generate.
    Kindly help me in this isssueeeeeeeeeeeee.

    Hello,
    Create Message Interface (MI) based on message type which in turn based on your enhaced data type. After that you can see it in transaction SPROXY.
    BR,
    Dzmitry

  • Want to convert Sap standard report s_alr_87012085  into alvgrid

    i Want to convert Sap standard report s_alr_87012085  into alvgrid please help me.

    REPORT RFKOPR00
           MESSAGE-ID FR
           LINE-SIZE  132
           NO STANDARD PAGE HEADING.
    TABLES:   B0SG,
              LFA1,                        "Daten auf Mandantenebene
                LFB1,                      "Daten auf Buchungskreisebene
                  LFB5,                    "Mahndaten
                  LFC1,                    "Verkehrszahlen
                  LFC3,                    "Sonderumsätze
                  BSIK,                    "Offend Posten
                  BKPF,
                    BSEG,
                           BSEGA.
    TABLES:
              BHDGD,
              T001,
              T001S,
              *T001S,
              T074T,
              T074U,
              TBSL,
              TBSLT,
              TCURX,
              ADRS,
              RFPDO,
              RFPDO1,
              RFSDO,
              FAEDE.
    FIELD-SYMBOLS: .
    *Hilfsfelder
    *---Prüfung ob mehrere Hauswährungen verarbeitet werden.
    DATA:    CFAKT(3)      TYPE P,
             CHECKSALDO(8) TYPE P,
             CHECKAGOBL(8) TYPE P,
             WAERS LIKE T001-WAERS,
             WFLAG(1) TYPE P VALUE '0',
             WAERS2        LIKE T001-WAERS,
             WFLAG2(1)     TYPE P VALUE '0',
             PH-LINE(132)  TYPE C.
    *---Ermittlung aktuelles Geschäftsjahr über Funktionsbaustein.
    DATA: CURRY LIKE BSIK-GJAHR.
    *-Ermittlung Zahlungseingang bei Zahlungen mit Skontoabzug--
    *ATA: ZVTAGE LIKE KNB4-VZS01, "Verzugstage
        ZVSKONTO(8) TYPE P,     "Zahlungsvolumen bei Zahlung mit Skonto
        ZVNETTO(8)  TYPE P,     "Zahlungsvolumen bei Nettozahlung
        ZVVERZUG(8) TYPE P,     "Verzugstage
        ZVMALVZ(8)  TYPE P,     "Zahlungvolumen * Verzugstage
                                "KNB4-VZSxx)
        ZVTYP(1)    TYPE C,     "Skonto oder Nettozahler
        ZVPER(4)    TYPE C.     "Periode letze Zahlung
    *---Zeilenanzahl fü Adressausgabe -
    DATA: ZEILENANZAHL LIKE ADRS-ANZZL VALUE 7.
    DATA: KSALDO(6)  TYPE P.               "Saldovortrag
        BEABZUG(6) TYPE P,                   "Berechtigte Abzüge
        UBABZUG(6) TYPE P,                   "Unberechtigte Abzüge
        JAHRAUG(6) TYPE P,                   "Kumulierter Jahresausgleich
        KUMZINS(6) TYPE P.                   "Kumulierter Zins
    Ausgabe der Mahndaten pro Buchungskreis.
    DATA: INDEX(2) TYPE P VALUE 0.
    Hilfsfelder
    DATA: HF(1)    TYPE C.
    DATA: TXT_1(78) TYPE C,                "Mahnbereich
          TXT_2(78) TYPE C,                "Mahnart
          TXT_3(78) TYPE C,                "Mahnempfänger
          TXT_4(78) TYPE C,                "Mahndatum
          TXT_5(78) TYPE C,                "Mahnstufe
          TXT_6(78) TYPE C,                "Mahnsperre
          TXT_7(78) TYPE C,                "Mahnverfahren
          TXT_8(78) TYPE C.                "Sachbearbeiter
    DATA: BEGIN OF XMAHN OCCURS 10.
            INCLUDE STRUCTURE LFB5.
    DATA: END OF XMAHN.
    Hilfsfelder
    DATA: CHAR1(1)   TYPE C.
    DATA: FLAG1(1)   TYPE C.
    DATA: INTENS(1)  TYPE C.
    DATA: FLAG2(1)   TYPE C.
    *---- K o n s t a n t e n -
    *---- DNULL zum Vergleich mit Datumsfeldern -
    DATA: DNULL(8) TYPE C VALUE '00000000'.
    *---- DECKBLATT = 'N' ==> Kein Deckblatt bei NEW-SECTION -
    DATA: DECKBLATT TYPE C VALUE 'N'.
    *---- 'H' =   Hilfsfelder, die jederzeit fuer Berechnungen ver-  -
    *---- wendet werden koennen. -
    DATA: BEGIN OF H,
            STICHTAG(8),
            OFFSET(2) TYPE P,
            OFFSE1(2) TYPE P,
            SOLL      LIKE LFC1-UM01S,
            HABEN     LIKE LFC1-UM01H,
            SALDO     LIKE LFC1-UMSAV,
            SHBKZ     LIKE LFC3-SHBKZ,     "Sonderhauptbuchkennzeichen
            SALDV     LIKE LFC3-SALDV,     "Sonderhauptbuch-Saldovortrag
            SHBLS     LIKE LFC3-SOLLL,     "Sonderhauptbuch-Lfd.-Saldo
            SHBSL     LIKE LFC3-SOLLL,     "Sonderhauptbuch-Lfd.-SOLL
            SHBHB     LIKE LFC3-HABNL,     "Sonderhauptbuch-Lfd.-HABEN
          GBNUM     LIKE lfC1-GBN01,    "Geschaeftsber. Nummer ECKERT
          GBUMS     LIKE lfC1-GBU01,    "Geschaeftsber. Umsatz
            TEXT(15),
            UMLOW     LIKE BSIK-UMSKZ,     "Umsatzkennzeichen
            UMHIG     LIKE BSIK-UMSKZ,     "Umsatzkennzeichen
          END   OF H.
    ---- 'C' =   Zwischenergebnisse, die aus Feldern des C-Segmentes ---
    *---- berechnet werden. -
    DATA: BEGIN OF C,
            SALDO     TYPE P,              "Saldo
            UMKZ1     LIKE LFC3-SHBKZ,     "SHBKZ 1
            SUMS1     TYPE P,              "Sonderumsatz 1
            UMKZ2     LIKE LFC3-SHBKZ,     "SHBKZ 2
            SUMS2     TYPE P,              "Sonderumsatz 2
            UMKZ3     LIKE LFC3-SHBKZ,     "SHBKZ 3
            SUMS3     TYPE P,              "Sonderumsatz 3
            UMKZ4     LIKE LFC3-SHBKZ,     "SHBKZ 4
            SUMS4     TYPE P,              "Sonderumsatz 4
            UMKZ5     LIKE LFC3-SHBKZ,     "SHBKZ 5
            SUMS5     TYPE P,              "Sonderumsatz 5
            UMKZ6     LIKE LFC3-SHBKZ,     "SHBKZ 6
            SUMS6     TYPE P,              "Sonderumsatz 6
            UMKZ7     LIKE LFC3-SHBKZ,     "SHBKZ 7
            SUMS7     TYPE P,              "Sonderumsatz 7
            UMKZ8     LIKE LFC3-SHBKZ,     "SHBKZ 8
            SUMS8     TYPE P,              "Sonderumsatz 8
            UMKZ9     LIKE LFC3-SHBKZ,     "SHBKZ 9
            SUMS9     TYPE P,              "Sonderumsatz 9
            UMKZ10    LIKE LFC3-SHBKZ,     "SHBKZ 10
            SUMS10    TYPE P,              "Sonderumsatz 10
            SONOB     TYPE P,              "Sonstige Umsatz-Kz
            BABZG     TYPE P,              "Berechtigte Abzuege
            UABZG     TYPE P,              "Unberechtigte Abzuege
            KZINS     TYPE P,              "Zinszahlungen
            KUMUM     TYPE P,              "Umsatz
            KUMAG     TYPE P,              "Kum. Jahresausgleich
          KREUEB    TYPE P,         "Kreditueberschreitung
          AGOBLI    TYPE P,         "Gesamt-Obligo (absolut)
            AGOBLI LIKE LFC1-UMSAV,        "Gesamt-Obligo (absolut)
          RGOBLI    TYPE P,         "Gesamt-Obligo (relativ)
          LFTAGE(3) TYPE P,         "Langfristige Überzugstage
          MFTAGE(3) TYPE P,         "Mittelfristige Überzugstage
          KFTAGE(3) TYPE P,         "Kurzfristige Überzugstage
          END   OF C.
    ---- 'C2'=   Zwischenergebnisse, die aus Feldern des C-Segmentes ---
    *---- berechnet werden. -
    DATA: BEGIN OF C2 OCCURS 0,
            BUKRS     LIKE LFC1-BUKRS,
            SALDO     TYPE P,              "Saldo
          WEXOB     TYPE P,         "Wechsel-Obligo        W,S,B
          ANZOB     TYPE P,         "Anzahlungs-Obligo     A
          ZANFB     TYPE P,         "Zahlungs-Anforderung  F
            UMKZ1     LIKE LFC3-SHBKZ,     "SHBKZ 1
            SUMS1     TYPE P,              "Sonderumsatz 1
            UMKZ2     LIKE LFC3-SHBKZ,     "SHBKZ 2
            SUMS2     TYPE P,              "Sonderumsatz 2
            UMKZ3     LIKE LFC3-SHBKZ,     "SHBKZ 3
            SUMS3     TYPE P,              "Sonderumsatz 3
            UMKZ4     LIKE LFC3-SHBKZ,     "SHBKZ 4
            SUMS4     TYPE P,              "Sonderumsatz 4
            UMKZ5     LIKE LFC3-SHBKZ,     "SHBKZ 5
            SUMS5     TYPE P,              "Sonderumsatz 5
            UMKZ6     LIKE LFC3-SHBKZ,     "SHBKZ 6
            SUMS6     TYPE P,              "Sonderumsatz 6
            UMKZ7     LIKE LFC3-SHBKZ,     "SHBKZ 7
            SUMS7     TYPE P,              "Sonderumsatz 7
            UMKZ8     LIKE LFC3-SHBKZ,     "SHBKZ 8
            SUMS8     TYPE P,              "Sonderumsatz 8
            UMKZ9     LIKE LFC3-SHBKZ,     "SHBKZ 9
            SUMS9     TYPE P,              "Sonderumsatz 9
            UMKZ10    LIKE LFC3-SHBKZ,     "SHBKZ 10
            SUMS10    TYPE P,              "Sonderumsatz 10
            SONOB     TYPE P,              "Sonstige Umsatz-Kz
            BABZG     TYPE P,              "Berechtigte Abzuege
            UABZG     TYPE P,              "Unberechtigte Abzuege
            KZINS     TYPE P,              "Zinszahlungen
            KUMUM     TYPE P,              "Umsatz
            KUMAG     TYPE P,              "Kum. Jahresausgleich
          KREUEB    TYPE P,         "Kreditueberschreitung
          AGOBLI    TYPE P,         "Gesamt-Obligo (absolut)
            AGOBLI LIKE LFC1-UMSAV,        "Gesamt-Obligo (absolut)
          RGOBLI    TYPE P,         "Gesamt-Obligo (relativ)
            LFTAGE(3) TYPE P,              "Langfristige Überzugstage
            MFTAGE(3) TYPE P,              "Mittelfristige Überzugstage
            KFTAGE(3) TYPE P,              "Kurzfristige Überzugstage
            ZVTYP(1)    TYPE C,            "Flag Skonto oder Nettozahler
            ZVPER(6)    TYPE C,            "letze Zahlungsperiode
            ZVVERZUG(8) TYPE P,            "Durchschittliche Verzugst
          END   OF C2.
    ---- 'C3'=   Zwischenergebnisse, die aus Feldern des C-Segmentes ---
    *---- berechnet werden. -
    DATA: BEGIN OF C3,
            SALDO     TYPE P,              "Saldo
          WEXOB     TYPE P,         "Wechsel-Obligo        W,S,B
          ANZOB     TYPE P,         "Anzahlungs-Obligo     A
          ZANFB     TYPE P,         "Zahlungs-Anforderung  F
            UMKZ1     LIKE LFC3-SHBKZ,     "SHBKZ 1
            SUMS1     TYPE P,              "Sonderumsatz 1
            UMKZ2     LIKE LFC3-SHBKZ,     "SHBKZ 2
            SUMS2     TYPE P,              "Sonderumsatz 2
            UMKZ3     LIKE LFC3-SHBKZ,     "SHBKZ 3
            SUMS3     TYPE P,              "Sonderumsatz 3
            UMKZ4     LIKE LFC3-SHBKZ,     "SHBKZ 4
            SUMS4     TYPE P,              "Sonderumsatz 4
            UMKZ5     LIKE LFC3-SHBKZ,     "SHBKZ 5
            SUMS5     TYPE P,              "Sonderumsatz 5
            UMKZ6     LIKE LFC3-SHBKZ,     "SHBKZ 6
            SUMS6     TYPE P,              "Sonderumsatz 6
            UMKZ7     LIKE LFC3-SHBKZ,     "SHBKZ 7
            SUMS7     TYPE P,              "Sonderumsatz 7
            UMKZ8     LIKE LFC3-SHBKZ,     "SHBKZ 8
            SUMS8     TYPE P,              "Sonderumsatz 8
            UMKZ9     LIKE LFC3-SHBKZ,     "SHBKZ 9
            SUMS9     TYPE P,              "Sonderumsatz 9
            UMKZ10    LIKE LFC3-SHBKZ,     "SHBKZ 10
            SUMS10    TYPE P,              "Sonderumsatz 10
            SONOB     TYPE P,              "Sonstige Umsatz-Kz
            BABZG     TYPE P,              "Berechtigte Abzuege
            UABZG     TYPE P,              "Unberechtigte Abzuege
            KZINS     TYPE P,              "Zinszahlungen
            KUMUM     TYPE P,              "Umsatz
            KUMAG     TYPE P,              "Kum. Jahresausgleich
          KREUEB    TYPE P,         "Kreditueberschreitung
          AGOBLI    TYPE P,         "Gesamt-Obligo (absolut)
            AGOBLI LIKE LFC1-UMSAV,        "Gesamt-Obligo (absolut)
          RGOBLI    TYPE P,         "Gesamt-Obligo (relativ)
          LFTAGE(3) TYPE P,         "Langfristige Überzugstage
          MFTAGE(3) TYPE P,         "Mittelfristige Überzugstage
          KFTAGE(3) TYPE P,         "Kurzfristige Überzugstage
          ZVTYP(1)    TYPE C,       "Flag Skonto oder Nettozahler
          ZVPER(6)    TYPE C,       "letze Zahlungsperiode
          ZVVERZUG(8) TYPE P,       "Durchschittliche Verzugst
          END   OF C3.
    DATA: SHBETRAG LIKE BSEGA-DMSHB.       "TYPE P.
    *---- 'RTAB' = Rastertabelle fuer offene Posten -
    DATA: BEGIN OF RTAB OCCURS 30,
            SORTK(1)   TYPE C,             "0 = Summe Gesber
                                           "1 = Summe aller Gesber
                                           "2 = Umsatzdaten
            BUKRS LIKE BSIK-BUKRS,
            GSBER LIKE BSIK-GSBER,
            WAERS LIKE BSIK-WAERS,
            RAART TYPE C,                  "Rasterart
                                           "1 = Netto-Faelligkeit
                                           "2 = Skonto1-Faelligkeit
                                           "3 = Zahlungseingang
                                           "4 = Ueber-Faelligkeit
            SPERR TYPE P,                  "gesprrte Posten
            KUMUM TYPE P,                  "Umsatz
            ANZAH TYPE P,                  "Anzahlungen
            OPSUM TYPE P,                  "Offene Posten Summe
            RAST1 TYPE P,                  "Rasterfeld 1
            RAST2 TYPE P,                  "Rasterfeld 2
            RAST3 TYPE P,                  "Rasterfeld 3
            RAST4 TYPE P,                  "Rasterfeld 4
            RAST5 TYPE P,                  "Rasterfeld 5
            RAST6 TYPE P,                  "Rasterfeld 6
          END   OF RTAB.
    *---- 'RBUS' = Rastertabelle fuer Summen pro Sachbearbeiter -
    *ATA: BEGIN OF RBUS OCCURS 30,
          SORTK(1)   TYPE C,        "0 = Summe Gesber
                                    "1 = Summe aller Gesber
          BUKRS LIKE BSIk-BUKRS,
          GSBER LIKE BSIk-GSBER,
          WAERS LIKE BSIk-WAERS,
          RAART TYPE C,             "Rasterart
                                    "1 = Netto-Faelligkeit
                                    "2 = Skonto1-Faelligkeit
                                    "3 = Zahlungseingang
                                    "4 = Ueber-Faelligkeit
          KUMUM TYPE P,             "Umsatz
          ANZAH TYPE P,             "Anzahlungen
          OPSUM TYPE P,             "Offene Posten Summe
          RAST1 TYPE P,             "Rasterfeld 1
          RAST2 TYPE P,             "Rasterfeld 2
          RAST3 TYPE P,             "Rasterfeld 3
          RAST4 TYPE P,             "Rasterfeld 4
          RAST5 TYPE P,             "Rasterfeld 5
          RAST6 TYPE P,             "Rasterfeld 6
        END   OF RBUS.
    *---- 'RBUK' = Rastertabelle fuer Summen pro Buchungskreis  -
    DATA: BEGIN OF RBUK OCCURS 30,
            SORTK(1)   TYPE C,             "0 = Summe Gesber
                                           "1 = Summe aller Gesber
                                           "2 = Umsatzdaten
            BUKRS LIKE BSIK-BUKRS,
            GSBER LIKE BSIK-GSBER,
            WAERS LIKE BSIK-WAERS,
            RAART TYPE C,                  "Rasterart
                                           "1 = Netto-Faelligkeit
                                           "2 = Skonto1-Faelligkeit
                                           "3 = Zahlungseingang
                                           "4 = Ueber-Faelligkeit
            SPERR TYPE P,                  "gesprrte Posten
            KUMUM TYPE P,                  "Umsatz
            ANZAH TYPE P,                  "Anzahlungen
            OPSUM TYPE P,                  "Offene Posten Summe
            RAST1 TYPE P,                  "Rasterfeld 1
            RAST2 TYPE P,                  "Rasterfeld 2
            RAST3 TYPE P,                  "Rasterfeld 3
            RAST4 TYPE P,                  "Rasterfeld 4
            RAST5 TYPE P,                  "Rasterfeld 5
            RAST6 TYPE P,                  "Rasterfeld 6
          END   OF RBUK.
    ---- 'RSUM' = Rastertabelle pro Währung über alle Buchungskreise ---
    DATA: BEGIN OF RSUM OCCURS 30,
            SORTK(1)   TYPE C,             "0 = Summe Gesber
                                           "1 = Summe aller Gesber
          BUKRS LIKE BSIk-BUKRS,
          GSBER LIKE BSIk-GSBER,
            WAERS LIKE BSIK-WAERS,
            RAART TYPE C,                  "Rasterart
                                           "1 = Netto-Faelligkeit
                                           "2 = Skonto1-Faelligkeit
                                           "3 = Zahlungseingang
                                           "4 = Ueber-Faelligkeit
            SPERR TYPE P,                  "gesperrte Posten
            KUMUM TYPE P,                  "Umsatz
            ANZAH TYPE P,                  "Anzahlungen
            OPSUM TYPE P,                  "Offene Posten Summe
            RAST1 TYPE P,                  "Rasterfeld 1
            RAST2 TYPE P,                  "Rasterfeld 2
            RAST3 TYPE P,                  "Rasterfeld 3
            RAST4 TYPE P,                  "Rasterfeld 4
            RAST5 TYPE P,                  "Rasterfeld 5
            RAST6 TYPE P,                  "Rasterfeld 6
          END   OF RSUM.
    *---- interne Tabelle für Periodenabgrenzung----
    RANGES: BMONAT FOR RFPDO-DOPRBMON.
    ---- In die Felder RP01 bis RP05 werden dynamisch die von aussen ---
    *---- eingegebenen Rasterpunkte uebertragen -
    DATA: RP01(2)   TYPE P,                "   0
          RP02(2)   TYPE P,                "  20
          RP03(2)   TYPE P,                "  40
          RP04(2)   TYPE P,                "  80
          RP05(2)   TYPE P,                " 100
          RP06(3)   TYPE P,                "   1
          RP07(3)   TYPE P,                "  21
          RP08(3)   TYPE P,                "  41
          RP09(3)   TYPE P,                "  81
          RP10(3)   TYPE P.                " 101
    *---- In die Felder RC01 bis RC10 werden die Rasterpunkte in -
    ---- charakterform abgestellt. (fuer REPLACE-Funktion in Variabler -
    *---- Ueberschrift) -
    DATA: RC01(4)   TYPE C,                                     "  0
          RC02(4)   TYPE C,                "  20
          RC03(4)   TYPE C,                "  40
          RC04(4)   TYPE C,                "  80
          RC05(4)   TYPE C,                " 100
          RC06(4)   TYPE C,                "   1
          RC07(4)   TYPE C,                "  21
          RC08(4)   TYPE C,                "  41
          RC09(4)   TYPE C,                "  81
          RC10(4)   TYPE C.                " 101
    *---- Felder für Umsatzkennzeichen -
    *---- für Ausweis der Sonderumsätze----
    DATA: HUMKZ1    LIKE LFC3-SHBKZ,
          HUMKZ2    LIKE LFC3-SHBKZ,
          HUMKZ3    LIKE LFC3-SHBKZ,
          HUMKZ4    LIKE LFC3-SHBKZ,
          HUMKZ5    LIKE LFC3-SHBKZ,
          HUMKZ6    LIKE LFC3-SHBKZ,
          HUMKZ7    LIKE LFC3-SHBKZ,
          HUMKZ8    LIKE LFC3-SHBKZ,
          HUMKZ9    LIKE LFC3-SHBKZ,
          HUMKZ10   LIKE LFC3-SHBKZ.
    *---- GBZAEHL - In diesem Feld wird vermerkt, fuer wieviele Ge- -
    *----           schaeftsbereiche ein OP-Raster ausgegeben wird. -
    ----           Wird das Raster nur fuer einen Geschaeftsbereich ge- -
    *----           druckt, so entfaellt das Summen-Raster. -
    DATA: GBZAEHL(3) TYPE P.
    ---- TOP-FLAG '1' = bei TOP-OF-PAGE Einzelpostenueberschrift ausg. --
    *----          '2' = bei TOP-OF-PAGE Ueberschrift fuer Raster ausgeb. *
    *----          '3' = bei TOP-OF-PAGE ULINE ausgeben. -
    ----          '4' = bei TOP-OF-PAGE Stammsatzueberschrift ausgeben --
    DATA: TOP-FLAG(1) TYPE C.
    *---- SEL-STAMM  'J' = Stammsatz wird ausgewertet                     *
    *----            'N' = Stammsatz wird nicht ausgewertet               *
    *---- SEL-POSTN  'J' = Stammsatz hat Posten gerastert                 *
    *----            'N' = Stammsatz hat keine Posten gerastert           *
    DATA: BEGIN OF SEL,
            STAMM(1) TYPE C,
            POSTN(1) TYPE C,
            POST2(1) TYPE C,
          END   OF SEL.
    *---- SATZART  '1' = Stammdaten -
    *----          '2' = Faelligkeitsraster -
    *----          '3' = Einzelposten -
    DATA: SATZART(1) TYPE C.
    *---- RART  =  Erste ausgewaehlte Rasterart -
    DATA: RART(1)    TYPE C.
    *---- TAGE  =  Tage nach denen die Posten sortiert sind -
    DATA: TAGE(4)    TYPE P,
    *---- NTAGE =  Tage fuer Netto-Faelligkeit -
          NTAGE(4)   TYPE P,
    *---- STAGE =  Tage fuer Skonto1-Faelligkeit -
          STAGE(4)   TYPE P,
    *---- ATAGE =  Alter der Belege -
          ATAGE(4)   TYPE P,
    *---- UTAGE =  Tage fuer Ueber-Faelligkeit -
          UTAGE(4)   TYPE P.
    *---- RASTERUU dient zur Sortierung der Einzelposten. Die Posten -
    *----          gemaess ihrer Rasterung die Werte '1' bis '6' -
    DATA: RASTERUU(1) TYPE C.
    *---- RAART  Rasterart -
    ---- Die einzelnen Felder der Feldleiste werden bei SART-OF-SELECTION
    *---- mit 1 oder 0 bestueckt. -
    *ATA: BEGIN OF RAART,
          NET(1)   TYPE C,      "X = ausgewaehlt, ' ' = nicht ausgewaehlt
          SKT(1)   TYPE C,      "X = ausgewaehlt, ' ' = nicht ausgewaehlt
          UEB(1)   TYPE C,      "X = ausgewaehlt, ' ' = nicht ausgewaehlt
        END   OF RAART.
    DATA: BEGIN OF GB,
            GSBER  LIKE BSIK-GSBER,
            WAERS  LIKE BSIK-WAERS,
          END   OF GB.
    *---- Variable Ueberschriften -
    DATA: BEGIN OF VARUEB1,
            FELD1(45)   TYPE C,
            FELD2(14)   TYPE C,
            FELD3(14)   TYPE C,
            FELD4(14)   TYPE C,
            FELD5(14)   TYPE C,
            FELD6(14)   TYPE C,
            FELD7(14)   TYPE C,
          END   OF VARUEB1.
    DATA: BEGIN OF VARUEB2,
            FELD1(45)   TYPE C,
            FELD2(14)   TYPE C,
            FELD3(14)   TYPE C,
            FELD4(14)   TYPE C,
            FELD5(14)   TYPE C,
            FELD6(14)   TYPE C,
            FELD7(14)   TYPE C,
          END   OF VARUEB2.
    DATA: VARUEB3(132),
          VARUEB4(132),
          VARTXT1(40),
          VARTXT(40)  TYPE C.
    *---- Variable für Ausgabe der Sonderumsätze----
    DATA: SHBBEZ LIKE T074T-LTEXT.
    DATA: ASUMS  TYPE P.                                        "
    *---- Interne Tabelle für Bezeichnungen der SHBKZ----
    DATA: BEGIN OF BEZSHB OCCURS 10,
            SHBKZ LIKE T074T-SHBKZ,
            LTEXT LIKE T074T-LTEXT,
          END OF BEZSHB.
    *---- Interne Tabelle für Zwischenspeicherung -
    DATA: BEGIN OF BLKEY,
            BUKRS LIKE BSIK-BUKRS,
            BELNR LIKE BSIK-BELNR,
            GJAHR LIKE BSIK-GJAHR,
            BUZEI LIKE BSIK-BUZEI,
          END   OF BLKEY.
    DATA: BEGIN OF RTAGE,
            NTAGE LIKE NTAGE,
            STAGE LIKE STAGE,
            ATAGE LIKE ATAGE,
            UTAGE LIKE UTAGE,
         END   OF RTAGE.
    DATA: BEGIN OF HBSIK OCCURS 10.
            INCLUDE STRUCTURE BSIK.
            INCLUDE STRUCTURE BSEGA.
            INCLUDE STRUCTURE RTAGE.
    DATA: END   OF HBSIK.
    DATA: BEGIN OF REFBL OCCURS 10.
            INCLUDE STRUCTURE BLKEY.
            INCLUDE STRUCTURE RTAGE.
    DATA: END   OF REFBL.
    DATA: BEGIN OF HLFB1 OCCURS 10.
            INCLUDE STRUCTURE LFB1.
    DATA: END   OF HLFB1.
    DATA: BEGIN OF HT001 OCCURS 10.
            INCLUDE STRUCTURE T001.
    DATA: END   OF HT001.
    *---- Interne Tabelle für Ausgabe der Obligos -
    DATA: BEGIN OF AOBLIGO OCCURS 12,
            OBART TYPE C,             "Flag für Obligoart 1 = Kontokorrent
                                           "                   2 = SHBKZ
                                      "                   3 = sonstige SHB
            SHBKZ LIKE T074T-SHBKZ,        "SHB-Kennzeichen
            LTEXT LIKE T074T-LTEXT,        "Bezeichnung
            OBLIG TYPE P,                  "Obligobetrag
          END OF AOBLIGO.
    *---- Declarationen für Accessibility /ALV GRID -
    data: ACC_MODE type c.
    Data: UEBTEXT(22) type c.
    Data: UEKTEXT(15)  type c.
    Data: TITTEXT(100) type c.
    Data: DATTEXT(10) type c.
    DATA: BEGIN OF RTAB_ALV OCCURS 30,
          SORTK(1)   TYPE C,             "0 = Summe Gesber
                                         "1 = Summe aller Gesber
                                         "2 = Umsatzdaten
            BUKRS LIKE BSIk-BUKRS,
            lifnr LIKE LFA1-lifnr,
            busab like lfb1-busab,
            SORTL LIKE lfA1-SORTL,
            LAND1 LIKE lfA1-LAND1,
            GSBER LIKE BSIk-GSBER,
            WAERS LIKE BSIk-WAERS,
          hwaer like rf140-hwaer,
            RAART like RF140-RAART,        "Rasterart
          shkzg like bsik-shkzg,
          XGUTS TYPE C,                  "Gutschrift
            KUMUM LIKE RF140-KUMUMHW,      "Umsatz
            ANZAH like rf140-anzbthw,      "Anzahlungen
            OPSUM like RF140-gsaldd,       "Offene Posten Summe
            RAST1 like RF140-rast1,        "Rasterfeld 1
            RAST2 like RF140-rast2,        "Rasterfeld 2
            RAST3 like RF140-rast3,        "Rasterfeld 3
            RAST4 like RF140-rast4,        "Rasterfeld 4
            RAST5 like RF140-rast5,        "Rasterfeld 5
            RAST6 like RF140-rast6,        "Rasterfeld 6
          END   OF RTAB_ALV.
    *"General Data
    TYPE-POOLS: SLIS.
    *DATA: BEGIN OF GT_OUTTAB OCCURS 0.
           INCLUDE STRUCTURE rtab_alv.
    *DATA: END OF GT_OUTTAB.
    Data: GS_LAYOUT TYPE SLIS_LAYOUT_ALV,
         G_EXIT_CAUSED_BY_CALLER,
         GS_EXIT_CAUSED_BY_USER TYPE SLIS_EXIT_BY_USER,
          G_REPID LIKE SY-REPID,
          G_GRID_TITLE TYPE  LVC_TITLE.
    *"Callback
    *Data: GT_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER,
         G_STATUS_SET   TYPE SLIS_FORMNAME VALUE 'PF_STATUS_SET',
    Data: G_USER_COMMAND TYPE SLIS_FORMNAME VALUE 'USER_COMMAND'.
         G_TOP_OF_PAGE  TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE',
         G_TOP_OF_LIST  TYPE SLIS_FORMNAME VALUE 'TOP_OF_LIST',
         G_END_OF_LIST  TYPE SLIS_FORMNAME VALUE 'END_OF_LIST'.
    *"Variants
    DATA: GS_VARIANT LIKE DISVARIANT,
          G_SAVE.
    Global structure of list
    fieldcatalog
    DATA:   LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
    DATA:   GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.
    sort
    *DATA:   GT_SORT     TYPE SLIS_T_SORTINFO_ALV.
    events
    *DATA:   GT_EVENTS   TYPE SLIS_T_EVENT.
    *----- Structure for specific color settings -
    *DATA:   COL_TAB_T TYPE SLIS_T_SPECIALCOL_ALV,
           COL_TAB   TYPE SLIS_SPECIALCOL_ALV.
    DATA:   G_TABNAME TYPE SLIS_TABNAME VALUE 'RTAB_ALV'.
    print
    *DATA:   GS_PRINT    TYPE SLIS_PRINT_ALV.
    *---- FIELD-GROUPS                            -
    FIELD-GROUPS:
              HEADER,
              STAMMDATEN,
              OP-RASTER,
              EINZELPOSTEN.
    INSERT
      LFB1-BUKRS                           " Buchungskreis
    lfB1-BUSAB         " Sachbearbeiter
      LFA1-LIFNR                           " Kontonummer
      SATZART                              " Satzart
      RTAB-SORTK                           " Sortkz fuer Tabelle RTAB
                                           " '0' = normale Eintraege
                                           " '1' = Summeneintraege
      GB                                   " Geschaeftsbereich
                                           " - GB-GSBER
                                           " - GB-WAERS
      RASTERUU         " Kennzeichen fuer Detailposten bzw Raster
    ab hier nur fuer Einzelposten -
      TAGE                                 " Rastertage  fuer Detailposten
      BSIK-UMSKZ                           " Umsatzkennzeichen
      BSIK-BLART                           " Belegart
    BSIK-ZUONR         " Zuordnungsnummer
      BSIK-BELNR                           " Belegnummer
      BSIK-BUZEI                           " Belegzeile
    INTO HEADER.
    INSERT
    Addressdaten
      ADRS-LINE0                           " 1. Zeile Adressenaufbereitung
      ADRS-LINE1                           " 2. "     "
      ADRS-LINE2                           " 3. "     "
      ADRS-LINE3                           " 4. "     "
      ADRS-LINE4                           " 5. "     "
      ADRS-LINE5                           " 6. "     "
      ADRS-LINE6                           " 7. "     "
    ADRS-LINE7         " 8. "     "
    ADRS-LINE8         " 9. "     "
    ADRS-LINE9         " 10."     "
    Umsatzdaten
      C-KUMUM                              " Umsatz
    C-BABZG          " Berechtigt. Abzuege
    C-UABZG          " Unberechtigt. Abzuege
    C-KZINS          " Zinszahlungen
    C-KUMAG          " Kum. Jahresausgleich
    Obligos
      C-SALDO                              " Saldo ohne SHB-Vorgänge
      C-UMKZ1                              "SHBKZ 1
      C-SUMS1                              "Sonderumsatz 1
      C-UMKZ2                              "SHBKZ 2
      C-SUMS2                              "Sonderumsatz 2
      C-UMKZ3                              "SHBKZ 3
      C-SUMS3                              "Sonderumsatz 3
      C-UMKZ4                              "SHBKZ 4
      C-SUMS4                              "Sonderumsatz 4
      C-UMKZ5                              "SHBKZ 5
      C-SUMS5                              "Sonderumsatz 5
      C-UMKZ6                              "SHBKZ 6
      C-SUMS6                              "Sonderumsatz 6
      C-UMKZ7                              "SHBKZ 7
      C-SUMS7                              "Sonderumsatz 7
      C-UMKZ8                              "SHBKZ 8
      C-SUMS8                              "Sonderumsatz 8
      C-UMKZ9                              "SHBKZ 9
      C-SUMS9                              "Sonderumsatz 9
      C-UMKZ10                             "SHBKZ 10
      C-SUMS10                             "Sonderumsatz 10
      C-SONOB                              " Sonst. Obligen
    Limits
      C-AGOBLI                             " Absolutes Gesamtobligo
    Zahlungdaten
      LFB1-ZTERM                           "Zahlungsbedingung
      LFB1-ZAHLS                           "Sperrschlüssel für Zahlung
      LFB1-ZWELS                           "Zahlwege
      LFB1-XVERR                           "Zahlungsverrechnung
      LFB1-WEBTR                           "Wechsellimit
      LFB1-BUSAB                           " Sachbearbeiter
      lfa1-sortl
      lfa1-land1
    INTO STAMMDATEN.
    INSERT
      RTAB-RAART                           "Rasterart
      RTAB-SPERR                           "gesperrte Posten
      RTAB-KUMUM                           "Umsatz
      RTAB-ANZAH                           "Anzahlungen
      RTAB-OPSUM                           "Offene Posten Summe
      RTAB-RAST1                           "Rasterfeld 1
      RTAB-RAST2                           "Rasterfeld 2
      RTAB-RAST3                           "Rasterfeld 3
      RTAB-RAST4                           "Rasterfeld 4
      RTAB-RAST5                           "Rasterfeld 5
      RTAB-RAST6                           "Rasterfeld 6
    INTO OP-RASTER.
    INSERT
      BSIK-BUDAT                           " Buchungsdatum
      BSIK-BLDAT                           " Belegdatum
      BSIK-CPUDT                           " CPU-Datum
    BKPF-USNAM         " User-ID
      BSIK-WAERS                           " Wahrungsschluessel
      BSEGA-NETDT                          " Nettofaelligkeitsdatum
    FAEDE-NETDT        " Nettofaelligkeitsdatum
      BSIK-ZFBDT                           " Zahlungsfristen-Basisdatum
      BSIK-BSCHL                           " Buchungsschluessel
      BSIK-ZLSCH                           " Zahlungsschluessel
    BSIK-MANST         " Mahnstufe
      SHBETRAG                             " Hauswaehrungsbetrag
      BSEGA-DMSHB                          " Hauswaehrungsbetrag
      BSEGA-WRSHB                          " Fremwaehrungsbetrag
    INTO EINZELPOSTEN.
    BEGIN_OF_BLOCK 1.
    *ELECT-OPTIONS:
         GESBER   FOR BSIK-GSBER.
    PARAMETERS:
           MONAT    LIKE RFPDO-DOPRBMON.
    SELECT-OPTIONS:
           KKSALDO2 FOR RFSDO-KOPRSAL2,    "Saldovortrag
           AGOBLIG2 FOR RFSDO-KOPRAGO2.    "Absolutes Obligo
         RGOBLIGO FOR RFSDO-DOPRRGOB.          "Relatives Obligo
    SELECT-OPTIONS:
         LAND     FOR LFA1-LAND1,
         KONTENGR FOR LFA1-KTOKK,
         SACHBEAR FOR LFB1-BUSAB,
           AKONTS   FOR LFB1-AKONT,
           AKONTP   FOR BSIK-HKONT.
    SELECT-OPTIONS:
           BUDAT    FOR BSIK-BUDAT,
           BLDAT    FOR BSIK-BLDAT,
           NETDT    FOR BSEGA-NETDT.
    PARAMETERS:     N_BELEGE    LIKE RFPDO-BPETNBEL
                                       DEFAULT 'X',   "Normale Belege.
                    STAT_BLG    LIKE RFPDO-BPETSBEL.  "Statistische Belege
    END_OF_BLOCK 1.
    *ELECT-OPTIONS:
         BERABZU1 FOR LFC1-BABZG,
         UNBABZU1 FOR LFC1-UABZG,
         ZINSE1   FOR LFC1-KZINS,
         JHRAUSG1 FOR LFC1-KUMAG.
         BERABZUG FOR BEABZUG NO-DISPLAY,       "Berechtigter Abzug
         UNBABZUG FOR UBABZUG NO-DISPLAY,       "Unberechtigter Abzug
         ZINSEN   FOR KUMZINS NO-DISPLAY,       "Kumulierter Zins
         JHRAUSGL FOR JAHRAUG NO-DISPLAY.       "Kumulierter Jahresausgl.
    BEGIN_OF_BLOCK 2.
    PARAMETERS:
           SORTART  LIKE RFPDO1-KOPRSOAR DEFAULT '1',          "Doku
           VERDICHT LIKE RFPDO1-KOPRVERD DEFAULT '1',          "Doku
           RASTVERD LIKE RFPDO1-KOPRRAST DEFAULT '0',          "Doku
           KONZVERS LIKE RFPDO-DOPOKONZ,   "Konzernversion
           XBUKRDAT LIKE RFPDO3-ALLGBUKD DEFAULT 0, "Bukr.daten
           KAUSGABE like rfpdo3-ALLGKAOR.
         SELECTION-SCREEN BEGIN OF LINE.
         SELECTION-SCREEN COMMENT 01(30) TEXT-030.
    PARAMETERS: RART-NET LIKE RFPDO-DOPRRNET DEFAULT 'X'.
         SELECTION-SCREEN COMMENT 33(01) TEXT-028.
    PARAMETERS: RART-SKT LIKE RFPDO-DOPRRSKT DEFAULT 'X'.
         SELECTION-SCREEN COMMENT 35(01) TEXT-028.
    SELECTION-SCREEN BEGIN OF LINE.
    PARAMETERS: RART-ALT LIKE RFPDO1-KOPRRALT DEFAULT 'X'.
    SELECTION-SCREEN COMMENT 03(28) TEXT-031.
    SELECTION-SCREEN POSITION POS_HIGH.
    PARAMETERS      RBLDAT   LIKE RFPDO2-KORD10BD.
    SELECTION-SCREEN COMMENT 61(12) TEXT-032.
    SELECTION-SCREEN END OF LINE.
         SELECTION-SCREEN COMMENT 37(01) TEXT-028.
    PARAMETERS: RART-UEB LIKE RFPDO-DOPRRUEB DEFAULT 'X'.
         SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 01(31) TEXT-026.
    PARAMETERS: RASTBIS1 LIKE RFPDO1-ALLGROGR DEFAULT '000'.
         SELECTION-SCREEN COMMENT 35(02) TEXT-027.
    PARAMETERS: RASTBIS2 LIKE RFPDO1-ALLGROGR DEFAULT '020'.
         SELECTION-SCREEN COMMENT 41(02) TEXT-027.
    PARAMETERS: RASTBIS3 LIKE RFPDO1-ALLGROGR DEFAULT '040'.
         SELECTION-SCREEN COMMENT 47(02) TEXT-027.
    PARAMETERS: RASTBIS4 LIKE RFPDO1-ALLGROGR DEFAULT '080'.
         SELECTION-SCREEN COMMENT 53(02) TEXT-027.
    PARAMETERS: RASTBIS5 LIKE RFPDO1-ALLGROGR DEFAULT '100'.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 01(31) TEXT-029.
    PARAMETERS:  FAKTOR LIKE RFPDO-DOPRFAKT DEFAULT '0'.
    SELECTION-SCREEN COMMENT 35(1) TEXT-028.
    PARAMETERS:  STELLEN LIKE RFPDO-DOPRFAKT DEFAULT '0'.
    SELECTION-SCREEN END OF LINE.
    PARAMETERS: PZUOR    LIKE RFPDO2-DOPRZUOR.
    PARAMETERS: UMSATZKZ LIKE RFPDO1-DOPRSHBO. "DEFAULT 'WSABIMVD'.
    PARAMETERS:
           TITLE       LIKE RFPDO1-ALLGLINE,
           LISTSEP     LIKE RFPDO-ALLGLSEP,
           MIKFICHE    LIKE RFPDO-ALLGMIKF.
    PARAMETERS:
           P_LVAR    LIKE Gs_VARIANT-VARIANT DEFAULT SPACE modif id 508.
    END_OF_BLOCK 2.
    AT SELECTION-SCREEN OUTPUT.
    if acc_mode is initial.
      LOOP AT SCREEN.
        IF SCREEN-GROUP1 = '508'.
          SCREEN-active    = '0'.
          MODIFY SCREEN.
        ENDIF.
    ENDLOOP.
    endif.
    AT SELECTION-SCREEN ON AKONTS.
       Konvertierung der Kontonummer
      LOOP AT AKONTS.
        PERFORM ALPHAFORMAT(SAPFS000)
          USING AKONTS-LOW AKONTS-LOW.
        PERFORM ALPHAFORMAT(SAPFS000)
          USING AKONTS-HIGH AKONTS-HIGH.
        MODIFY AKONTS.
      ENDLOOP.
    AT SELECTION-SCREEN ON AKONTP.
       Konvertierung der Kontonummer
      LOOP AT AKONTP.
        PERFORM ALPHAFORMAT(SAPFS000)
          USING AKONTP-LOW AKONTP-LOW.
        PERFORM ALPHAFORMAT(SAPFS000)
          USING AKONTP-HIGH AKONTP-HIGH.
        MODIFY AKONTP.
      ENDLOOP.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_LVAR.
      Gs_VARIANT-REPORT  = SY-REPID.
      Gs_VARIANT-VARIANT = P_LVAR.
      PERFORM F4_FOR_S_LVAR   USING Gs_VARIANT.
      P_LVAR = Gs_VARIANT-VARIANT.
    AT SELECTION-SCREEN.
      IF NOT RASTBIS5 IS INITIAL.
        IF  RASTBIS5 GT RASTBIS4
        AND RASTBIS4 GT RASTBIS3
        AND RASTBIS3 GT RASTBIS2
        AND RASTBIS2 GT RASTBIS1.
        ELSE.
          MESSAGE E379.
        ENDIF.
      ELSE.
        IF NOT RASTBIS4 IS INITIAL.
          IF  RASTBIS4 GT RASTBIS3
          AND RASTBIS3 GT RASTBIS2
          AND RASTBIS2 GT RASTBIS1.
          ELSE.
            MESSAGE E379.
          ENDIF.
        ELSE.
          IF NOT RASTBIS3 IS INITIAL.
            IF  RASTBIS3 GT RASTBIS2
            AND RASTBIS2 GT RASTBIS1.
            ELSE.
              MESSAGE E379.
            ENDIF.
          ELSE.
            IF NOT RASTBIS2 IS INITIAL.
              IF  RASTBIS2 GT RASTBIS1.
              ELSE.
                MESSAGE E379.
              ENDIF.
            ELSE.
            nichts zu tun
            ENDIF.
          ENDIF.
        END

  • Enhance option in ECC6.0

    Hi Experts,
    Can somebody explain me the purpose of "Enhance button" (Shift + F4) in the ABAP Editor (SE38); prefrably with a small example.
    Any helpful entry will be rewarded.
    Warm regards,
    Raman.

    Enhancement spots are provided ECC6.0 onwards for making enhancements directly into the code provided by SAP without using user-exits / BADIs.
    Use Change Mode for creating enhancement points & sections.
    use button “Display <-> Change”       to switch to change mode.
    Use Enhancement Mode for creating enhancement implementations.
    use button “Change Enhancements”      to switch to Enhancement mode
    use button “Display <-> Change”      to leave Enhancement mode

  • About ENHANCEMENT and ENDENHANCEMENT

    Hi all SAP GURUS,
        In SAP 6.0 I found  some tline like
    <b>enhancemnet-point ......
    enhancement
    endenhancement</b>
    how can we work with this enhancements. I think it is new concept in sap6.0 for enhancemnts. At the time of implementing this enhancement it is showing so many static and dynamic enhancement implementations, what are these static and dynamic enhancements.

    Hi siri,
    <u><b>Enhancement Implementations</b></u> :
    Definition
    The enhancement implementations manage the enhancements of the enhancement options, both explicitly and implicitly.
    In the same way that we differentiate between enhancement options and their management in the case of enhancement spots, we also differentiate between the actual enhancement and its management in the case of enhancement implementations.
    Use
    An enhancement is managed by assigning one or more simple enhancement implementations to an enhancement spot of a concrete enhancement spot element definition. Conversely, every simple enhancement implementation belongs to exactly one enhancement spot. A simple enhancement implementation can have one or more enhancement implementation elements, which are assigned to the enhancement spot element definitions of the enhancement spot. A simple enhancement implementation must be assigned to at least one composite enhancement implementation:
    Simple and composite enhancement implementations are Repository objects that form a tree-like structure, where the leaves and branches represent simple and composite enhancement implementations respectively.
    Therefore, to implement the actual enhancement, one or more enhancement implementation elements are assigned to an enhancement spot element definition of an explicit or implicit enhancement option.
    You can assign source code plug-ins, defined between ENHANCEMENT and ENDENHANCEMENT in an ABAP program, to an enhancement option defined using ENHANCEMENT-POINT. These source code plug-ins are inserted into the code unchanged if the switch is in the relevant position.
    Enhancement implementations are processed with the Enhancement Builder tool, which is integrated in the ABAP Workbench. The Enhancement Builder’s hierarchical display of the enhancement implementations in a system shows the enhancements made in a system.
    An enhancement implementation describes the enhancement of a Repository object at one or more enhancement options. An enhancement implementation element always belongs to exactly one enhancement option. However, several enhancement implementation elements can be assigned to an enhancement option. The enhancement implementation element contains the actual enhancement – for example, a source code plug-in contains the source code to be added. However, an enhancement implementation element contains no information concerning at which positions of a Repository object the enhancement options were created. Composite enhancement implementations are used for the semantic grouping of simple enhancement implementations. A composite enhancement implementation contains either one or more simple enhancement implementations and/or one or more composite enhancement implementations of the relevant type. You can use composite enhancement implementations to combine simple enhancement implementations into meaningful units.
    The position of a Switch Framework switch assigned to the package of an enhancement implementation specifies whether or not an enhancement is taken into account in a system.
    <u><b>Creating Source Code Plug-Ins</b></u> :
    Procedure
           1.      Call the Enhancement Builder from the ABAP Editor using forward navigation.
           2.      Create an enhancement implementation for an implicit or explicit enhancement option. For more information, see Creating an Enhancement Implementation.
    An empty source code plug-in is automatically created. It has a unique ID and is displayed in the ABAP Editor below the enhancement option as follows:
    ENHANCEMENT id.
    <b>ENDENHANCEMENT</b>.
           3.      Implement the enhancement between the ENHANCEMENT and ENDENHANCEMENT lines.
    A source code plug-in is assigned to exactly one enhancement option. An enhancement option can be enhanced through several source code plug-ins of an enhancement implementation and through several enhancement implementations.
    Although source code plug-ins are displayed in the same source code as the respective enhancement options, they are actually stored in other Include programs managed by the Enhancement Builder.
    http://help.sap.com/search/highlightContent.jsp;
    http://help.sap.com/search/highlightContent.jsp.
    reward points , if useful
    regards,
    Bhaskar

  • Enhanced MetaFile to Adobe Print Driver

    I have an Windows application that plays an enhanced metafile into a print device context then executes some TextOut calls. This works fine for actual print devices. I have a customer that reports that when printing to the Adobe Print driver to create a PDF the enhanced metafile content is not generated in the PDF output. Is this a configuration issue or a Adobe Print driver issue? Any help would be greatly appreciated.
    TIA,
    SteveB

    That only used to be offered as a Distiller server product which is now EOL'd and no longer available.  These days that functionality is absorbed by Adobe LiveCycle ES server products.

  • Step by step procedure to create Enhancement spots, points and sections

    Hi all,
    Can anyone of you please provide a step by step procedure to create Enhancement spots, Enhancement points and Enhancement Sections and also give a brief explanation about the same ?
    Regards,
    Pramod

    Hi Pramod,
    The enhancement spots are used to manage explicit enhancement options. Enhancement spots carry information about the positions at which enhancement options were created. One enhancement spot can manage several enhancement options of a Repository object. Conversely, several enhancement spots can be assigned to one enhancement option.
    Use
    You create an explicit enhancement option when processing a Repository object with the relevant tool by creating an enhancement spot element definition at a point where this is possible. This enhancement option can then be called at different points using enhancement spot element calls. The enhancement spot element definition and the corresponding enhancement spot element calls make up the definition of an enhancement option. For example, when editing an ABAP program with the ABAP Editor, you can define explicit enhancement options in the form of the ENHANCEMENT-POINT statement, which also represents the element definition and element call.
    Each enhancement spot element definition must be assigned to at least one enhancement spot. For this, an enhancement spot element definition is assigned one or more simple enhancement spots, which in turn are assigned to at least one composite enhancement spot. Simple and composite enhancement spots are Repository objects that form a tree-like structure, where the leaves and branches represent simple and composite enhancement spots respectively. A simple enhancement spot is always assigned to exactly one enhancement technology (ABAP source code enhancement or BAdI).
    Composite enhancement spots are used for the semantic grouping of simple enhancement spots. A composite enhancement spot contains either one or more simple enhancement spots and/or one or more composite enhancement spots of the relevant type. You can use composite enhancement spots to combine simple enhancement spots into meaningful units.
    The statement ENHANCEMENT-POINT can either be entered directly or created by choosing Edit &#8594; Enhancement operations &#8594; Create enhancement in the Enhancement Builder.
    Kindly Reward Points If You Found The Reply Helpful,
    Cheers,
    Chaitanya.

  • HR basic-code

    Hi Guru's,
    I'm new to HR-ABAP could you please provide code for the following requirement?
    I.     Develop report to display personnel information of employee from master data. Display simple output list.
    Selection screen:
    Payroll Area
    Current Period
         Personnel Number
    Output List:
    Personnel number
    Name
         Address
         Job and Job Title
    Guidelines:
         Use of LDB is not required, instead use rp-read-infotype
         Infotypes:
              0001
              0002
              0006
    Enhancements:
         Provide a radio button on selection screen for:
    1.     Sort by personnel number
    2.     Sort By name

    Hi there,
    I did a report similar to this, so hope this code of mine helps you out.
    NODES: PERAS.
    Tables: pernr, pa0002, pa0006, pa0105, pa0071, pa0007,
    pa0016, pa0000 ,pa0001.
    INFOTYPES: 0002, 0006, 0105, 0071, 0007, 0016, 0000, 0001.
    TYPES: BEGIN OF ITAB ,
    ANRED TYPE PA0002-ANRED,
    VORNA TYPE PA0002-VORNA,
    MIDNM TYPE PA0002-MIDNM,
    NACHN TYPE PA0002-NACHN,
    PERNR TYPE PA0002-PERNR,
    PERID TYPE PA0002-PERID,
    GBDAT TYPE PA0002-GBDAT,
    STRAS TYPE PA0006-STRAS,
    LOCAT TYPE PA0006-LOCAT,
    ORT01 TYPE PA0006-ORT01,
    ORT02 TYPE PA0006-ORT02,
    STATE TYPE PA0006-STATE,
    PSTLZ TYPE PA0006-PSTLZ,
    LAND1 TYPE PA0006-LAND1,
    TELNR TYPE PA0006-TELNR,
    COM01 TYPE PA0006-COM01,
    USRID TYPE PA0105-USRID,
    SCREF TYPE PA0071-SCREF,
    CTTYP TYPE PA0016-CTTYP,
    ORGEH TYPE PA0001-ORGEH,
    STELL TYPE PA0001-STELL,
    KOSTL TYPE PA0001-KOSTL,
    BEGDA TYPE PA0000-BEGDA,
    ENDDA TYPE PA0000-ENDDA,
    MASSG TYPE PA0000-MASSG,
    MASSN TYPE PA0000-MASSN,
    ADDRESS TYPE STRING,
    END OF ITAB.
    TYPES: BEGIN OF T_ITAB ,
    ANRED TYPE STRING,
    VORNA TYPE STRING,
    MIDNM TYPE STRING,
    NACHN TYPE STRING,
    PERNR TYPE STRING,
    PERID TYPE STRING,
    GBDAT TYPE STRING,
    TELNR TYPE STRING,
    COM01 TYPE STRING,
    USRID TYPE STRING,
    SCREF TYPE STRING,
    CTTYP TYPE STRING,
    ORGEH TYPE STRING,
    STELL TYPE STRING,
    KOSTL TYPE STRING,
    BEGDA TYPE STRING,
    ENDDA TYPE STRING,
    MASSG TYPE STRING,
    MASSN TYPE STRING,
    ADDRESS TYPE STRING,
    END OF T_ITAB.
    DATA: I_TAB TYPE STANDARD TABLE OF ITAB WITH HEADER LINE .
    DATA: I_TAB2(4096) TYPE C OCCURS 0,
    I_TAB3 TYPE STANDARD TABLE OF T_ITAB.
    DATA: WA LIKE LINE OF I_TAB,
    WA2 LIKE LINE OF I_TAB3,
    WA3 LIKE LINE OF I_TAB2.
    DATA: PAPPLI(15) TYPE C,
    PPRESENT TYPE DYNPREAD-FIELDNAME ,
    TESTFILNAM TYPE IBIPPARMS-PATH,
    TESTFILNA TYPE STRING.
    SELECTION-SCREEN : BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
    PARAMETER : APPLI RADIOBUTTON GROUP RAD USER-COMMAND RADIO DEFAULT 'X',
    PRESENT RADIOBUTTON GROUP RAD.
    SELECT-OPTIONS : APPLI2 FOR PAPPLI MODIF ID SP1 NO INTERVALS NO-EXTENSION.
    PARAMETERS: PRESENT2 TYPE DYNPREAD-FIELDNAME MODIF ID SP2.
    SELECTION-SCREEN END OF BLOCK B1.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR PRESENT2.
    CALL FUNCTION 'F4_FILENAME'
    EXPORTING
    PROGRAM_NAME = SYST-CPROG
    DYNPRO_NUMBER = '1'
    FIELD_NAME = 'PPRESENT'
    IMPORTING
    FILE_NAME = TESTFILNAM.
    PRESENT2 = TESTFILNAM.
    TESTFILNA = TESTFILNAM.
    START-OF-SELECTION.
    WA2-ANRED = 'Title'.
    WA2-VORNA = 'Forenames'.
    WA2-MIDNM = 'Middle Name'.
    WA2-NACHN = 'Surname'.
    WA2-PERNR = 'Employee number'.
    WA2-PERID = 'NI number'.
    WA2-GBDAT = 'Date of birth'.
    WA2-TELNR = 'Tel no (work)'.
    WA2-COM01 = 'Tel no (home)'.
    WA2-USRID = 'Pension scheme no'.
    WA2-SCREF = 'Pension scheme indicator'.
    WA2-CTTYP = 'Contract Status'.
    WA2-ORGEH = 'Org Unit (name & no)'.
    WA2-STELL = 'Job code'.
    WA2-KOSTL = 'Cost centre'.
    WA2-BEGDA = 'Start date'.
    WA2-ENDDA = 'End Date'.
    WA2-MASSG = 'Reason for leaving'.
    WA2-MASSN = 'Maternity/adoptive leave flag'.
    WA2-ADDRESS = 'Address'.
    APPEND WA2 TO I_TAB3.
    GET PERAS.
    RP_PROVIDE_FROM_LAST P0002 SPACE PN-BEGDA PN-ENDDA.
    MOVE: P0002-PERNR TO WA-PERNR,
    P0002-ANRED TO WA-ANRED,
    P0002-GBDAT TO WA-GBDAT,
    P0002-PERID TO WA-PERID,
    P0002-VORNA TO WA-VORNA,
    P0002-NACHN TO WA-NACHN.
    RP_PROVIDE_FROM_LAST P0006 SPACE PN-BEGDA PN-ENDDA.
    IF P0006-PERNR = P0002-PERNR.
    CONCATENATE P0006-STRAS P0006-LOCAT P0006-ORT01 P0006-ORT02 P0006-STATE P0006-PSTLZ P0006-LAND1
    INTO WA-ADDRESS SEPARATED BY SPACE.
    ENDIF.
    RP_PROVIDE_FROM_LAST P0001 SPACE PN-BEGDA PN-ENDDA.
    IF P0001-PERNR = P0002-PERNR.
    MOVE: P0001-ORGEH TO WA-ORGEH,
    P0001-STELL TO WA-STELL,
    P0001-KOSTL TO WA-KOSTL.
    ENDIF.
    RP_PROVIDE_FROM_LAST P0000 SPACE PN-BEGDA PN-ENDDA.
    IF P0000-PERNR = P0002-PERNR.
    MOVE: P0000-MASSG TO WA-MASSG,
    P0000-MASSN TO WA-MASSN.
    ENDIF.
    RP_PROVIDE_FROM_LAST P0071 SPACE PN-BEGDA PN-ENDDA.
    IF P0071-PERNR = P0002-PERNR.
    MOVE: P0071-SCREF TO WA-SCREF.
    ENDIF.
    IF WA-ADDRESS CP ','.
    CONCATENATE '"' WA-ADDRESS '"' INTO WA-ADDRESS.
    ENDIF.
    APPEND WA TO I_TAB.
    LOOP AT I_TAB INTO WA.
    MOVE-CORRESPONDING WA TO WA2.
    ENDLOOP.
    APPEND WA2 TO I_TAB3.
    CALL FUNCTION 'SAP_CONVERT_TO_TEX_FORMAT'
    EXPORTING
    I_FIELD_SEPERATOR = ','
    I_LINE_HEADER =
    I_FILENAME =
    I_APPL_KEEP = ' '
    TABLES
    I_TAB_SAP_DATA = I_TAB3
    CHANGING
    I_TAB_CONVERTED_DATA = I_TAB2
    EXCEPTIONS
    CONVERSION_FAILED = 1
    OTHERS = 2
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    IF APPLI = 'X'.
    PERFORM APPLIFETCH.
    ENDIF.
    IF APPLI = ' '.
    PERFORM PRESENFETCH.
    ENDIF.
    END-OF-SELECTION.
    *& Form PRESENFETCH
    text
    FORM PRESENFETCH.
    CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
    BIN_FILESIZE =
    FILENAME = TESTFILNA
    FILETYPE = 'ASC'
    APPEND = ' '
    WRITE_FIELD_SEPARATOR = 'x'
    HEADER = '123'
    TRUNC_TRAILING_BLANKS = ' '
    WRITE_LF = 'X'
    COL_SELECT = ' '
    COL_SELECT_MASK = ' '
    DAT_MODE = ' '
    CONFIRM_OVERWRITE = ' '
    NO_AUTH_CHECK = ' '
    CODEPAGE = ' '
    IGNORE_CERR = ABAP_TRUE
    REPLACEMENT = '#'
    WRITE_BOM = ' '
    TRUNC_TRAILING_BLANKS_EOL = 'X'
    WK1_N_FORMAT = ' '
    WK1_N_SIZE = ' '
    WK1_T_FORMAT = ' '
    WK1_T_SIZE = ' '
    WRITE_LF_AFTER_LAST_LINE = ABAP_TRUE
    IMPORTING
    FILELENGTH =
    TABLES
    DATA_TAB = I_TAB2
    FIELDNAMES =
    EXCEPTIONS
    FILE_WRITE_ERROR = 1
    NO_BATCH = 2
    GUI_REFUSE_FILETRANSFER = 3
    INVALID_TYPE = 4
    NO_AUTHORITY = 5
    UNKNOWN_ERROR = 6
    HEADER_NOT_ALLOWED = 7
    SEPARATOR_NOT_ALLOWED = 8
    FILESIZE_NOT_ALLOWED = 9
    HEADER_TOO_LONG = 10
    DP_ERROR_CREATE = 11
    DP_ERROR_SEND = 12
    DP_ERROR_WRITE = 13
    UNKNOWN_DP_ERROR = 14
    ACCESS_DENIED = 15
    DP_OUT_OF_MEMORY = 16
    DISK_FULL = 17
    DP_TIMEOUT = 18
    FILE_NOT_FOUND = 19
    DATAPROVIDER_EXCEPTION = 20
    CONTROL_FLUSH_ERROR = 21
    OTHERS = 22
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    ENDFORM. "PRESENFETCH
    *& Form APPLIFETCH
    text
    FORM APPLIFETCH.
    DATA: ALL TYPE STRING.
    LOOP AT I_TAB2 INTO WA3.
    MOVE WA3 TO ALL.
    ENDLOOP.
    DATA: DSET TYPE STRING VALUE 'c:\lpc2.txt'.
    OPEN DATASET DSET FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
    TRANSFER ALL TO DSET.
    CLOSE DATASET DSET.
    ENDFORM. "APPLIFETCH
    AT SELECTION-SCREEN OUTPUT.
    LOOP AT SCREEN.
    IF APPLI = 'X'.
    IF SCREEN-GROUP1 = 'SP2'.
    SCREEN-INPUT = '0'.
    SCREEN-INVISIBLE = '0'.
    SCREEN-REQUIRED = '0'.
    MODIFY SCREEN.
    ENDIF.
    ELSEIF PRESENT = 'X'.
    IF SCREEN-GROUP1 = 'SP1'.
    SCREEN-INPUT = '0'.
    SCREEN-INVISIBLE = '0'.
    SCREEN-REQUIRED = '0'.
    MODIFY SCREEN.
    ENDIF.
    ENDIF.
    ENDLOOP.
    *BACKGROUND JOB SCHEDULE
    *data: JobNumber type i.
    *CALL FUNCTION 'JOB_OPEN'
    EXPORTING
    DELANFREP = ' '
    JOBGROUP = ' '
    JOBNAME = 'ZJOB11'
    SDLSTRTDT = NO_DATE
    SDLSTRTTM = NO_TIME
    JOBCLASS =
    IMPORTING
    JOBCOUNT = 'JobNumber'
    CHANGING
    RET =
    EXCEPTIONS
    CANT_CREATE_JOB = 1
    INVALID_JOB_DATA = 2
    JOBNAME_MISSING = 3
    OTHERS = 4
    *IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    *ENDIF.
    *CALL FUNCTION 'BP_START_DATE_EDITOR'
    EXPORTING
    STDT_DIALOG = 'Yes'
    STDT_INPUT = default
    STDT_OPCODE = 0
    IMPORTING
    STDT_MODIFY_TYPE =
    STDT_OUTPUT =
    EXCEPTIONS
    FCAL_ID_NOT_DEFINED = 1
    INCOMPLETE_LAST_STARTDATE = 2
    INCOMPLETE_STARTDATE = 3
    INVALID_DIALOG_TYPE = 4
    INVALID_EVENTID = 5
    INVALID_OPCODE = 6
    INVALID_OPMODE_NAME = 7
    INVALID_PERIODBEHAVIOUR = 8
    INVALID_PREDECESSOR_JOBNAME = 9
    LAST_STARTDATE_IN_THE_PAST = 10
    NO_PERIOD_DATA_GIVEN = 11
    NO_STARTDATE_GIVEN = 12
    PERIOD_AND_PREDJOB_NO_WAY = 13
    PERIOD_TOO_SMALL_FOR_LIMIT = 14
    PREDECESSOR_JOBNAME_NOT_UNIQUE = 15
    STARTDATE_INTERVAL_TOO_LARGE = 16
    STARTDATE_IN_THE_PAST = 17
    STARTDATE_IS_A_HOLIDAY = 18
    STARTDATE_OUT_OF_FCAL_RANGE = 19
    STDT_BEFORE_HOLIDAY_IN_PAST = 20
    UNKNOWN_FCAL_ERROR_OCCURED = 21
    NO_WORKDAY_NR_GIVEN = 22
    INVALID_WORKDAY_COUNTDIR = 23
    INVALID_WORKDAY_NR = 24
    NOTBEFORE_STDT_MISSING = 25
    WORKDAY_STARTTIME_MISSING = 26
    NO_EVENTID_GIVEN = 27
    OTHERS = 28
    *IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    *ENDIF.
    *CALL FUNCTION 'JOB_SUBMIT'
    EXPORTING
    ARCPARAMS =
    AUTHCKNAM = 'DEVHYD'
    COMMANDNAME = ' '
    OPERATINGSYSTEM = ' '
    EXTPGM_NAME = ' '
    EXTPGM_PARAM = ' '
    EXTPGM_SET_TRACE_ON = ' '
    EXTPGM_STDERR_IN_JOBLOG = 'X'
    EXTPGM_STDOUT_IN_JOBLOG = 'X'
    EXTPGM_SYSTEM = ' '
    EXTPGM_RFCDEST = ' '
    EXTPGM_WAIT_FOR_TERMINATION = 'X'
    JOBCOUNT = 'JobNumber'
    JOBNAME = 'ZJOB11'
    LANGUAGE = SY-LANGU
    PRIPARAMS = ' '
    REPORT = ' '
    VARIANT = ' '
    IMPORTING
    STEP_NUMBER =
    EXCEPTIONS
    BAD_PRIPARAMS = 1
    BAD_XPGFLAGS = 2
    INVALID_JOBDATA = 3
    JOBNAME_MISSING = 4
    JOB_NOTEX = 5
    JOB_SUBMIT_FAILED = 6
    LOCK_FAILED = 7
    PROGRAM_MISSING = 8
    PROG_ABAP_AND_EXTPG_SET = 9
    OTHERS = 10
    *IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    *ENDIF.
    *CALL FUNCTION 'JOB_CLOSE'
    EXPORTING
    AT_OPMODE = ' '
    AT_OPMODE_PERIODIC = ' '
    CALENDAR_ID = ' '
    EVENT_ID = ' '
    EVENT_PARAM = ' '
    EVENT_PERIODIC = ' '
    JOBCOUNT = 'JobNumber'
    JOBNAME = 'ZJOB11'
    LASTSTRTDT = NO_DATE
    LASTSTRTTM = NO_TIME
    PRDDAYS = 0
    PRDHOURS = 0
    PRDMINS = 0
    PRDMONTHS = 0
    PRDWEEKS = 0
    PREDJOB_CHECKSTAT = ' '
    PRED_JOBCOUNT = ' '
    PRED_JOBNAME = ' '
    SDLSTRTDT = NO_DATE
    SDLSTRTTM = NO_TIME
    STARTDATE_RESTRICTION = BTC_PROCESS_ALWAYS
    STRTIMMED = ' '
    TARGETSYSTEM = ' '
    START_ON_WORKDAY_NOT_BEFORE = SY-DATUM
    START_ON_WORKDAY_NR = 0
    WORKDAY_COUNT_DIRECTION = 0
    RECIPIENT_OBJ =
    TARGETSERVER = ' '
    DONT_RELEASE = ' '
    TARGETGROUP = ' '
    DIRECT_START =
    IMPORTING
    JOB_WAS_RELEASED =
    CHANGING
    RET =
    EXCEPTIONS
    CANT_START_IMMEDIATE = 1
    INVALID_STARTDATE = 2
    JOBNAME_MISSING = 3
    JOB_CLOSE_FAILED = 4
    JOB_NOSTEPS = 5
    JOB_NOTEX = 6
    LOCK_FAILED = 7
    INVALID_TARGET = 8
    OTHERS = 9
    *IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    rewards would be appreciated.
    Thanks
    Puneet

  • Difference between bex user exit and macros in functionality?

    Hi all,
    I need to create a report on material master data. I created an infoset on 0material and 0mat_plant. In the requirem
    ent, I have a report containing different material numbers followed by attributes in each row. the final column in each
    row should be calculated using logic. the logic involves comparing different row values and arrive at final conclusion.
    the logic comprises of large number of if conditions. so should i use bex user exit or excel macros?
    what is the difference between user exit and macros in funcitonalilty?
    is there an issue transporting the macro to Prod for end users to use?
    any performance criteria?
    Any how to documents ..will be of a lot of help
    plz send them to [email protected]
    Message was edited by:
            ravi a

    Hi,
    Macros offer a powerful and flexible way to extend the features of MS Excel. You can either create a macro using VB code or Record a macro. Use Alt+F11 for creating macro using VB code.
    You can refer to Microsoft help site or this link for more details:
    http://www.taltech.com/support/sw_tricks/exmacros.htm
    User-exits are empty subroutines that SAP Developers have provided for you.You can fill them with your own source code.Technically this is a modification.Customer exits are nothing but a include in customer name space will be provided in the function module which starts with CALL CUSTOMER.You can fill them with your own source code.Technically this is an enhancement.
    look into following links for procedure to find and use user-exits transaction for finding user-exits is 'SMOD'
    http://www.sapbrain.com/TUTORIALS/TECHNICAL/user_exits_tutorial.html
    http://www.sap-img.com/abap/a-short-tutorial-on-user-exits.htm

  • Issue with WRITE statement from Internal Table

    Hi All,
    I have written the below code in a infoset query, the syntax check is ok & when i run the query in debugging mode, i find the internal table being filled with the values & the write statement outputing the values as well.
    But the problem is when i execute the query the output does not show all the lines, instead just displays the last record . What could be the mistake?
    Is it because i have defined Y_EBELN, Y_EBELP & Y_OPENQTY as nodes in the Extras Tab of the infoset & have chosen this for display in my query? How to display the output from my internal table in my query output?
    Hope my problem is clear, await clarification.
    Vivek
    Code
      types:
        Begin of itab,
          wl_ebeln   type eket-ebeln,
          wl_ebelp   type eket-ebelp,
          wl_openqty type eket-menge,
        End of itab.
    Data: il_po type table of itab with header line.
    *Display open PO for materials
      SELECT EKETEBELN EKETEBELP EKETMENGE EKETWEMNG EKET~EINDT
           INTO (Y_EBELN, Y_EBELP, WL_MENGE, WL_WEMNG, Y_EINDT)
        FROM EKET
          INNER JOIN EKPO
             ON EKETEBELN     = EKPOEBELN
              AND EKETEBELP = EKPOEBELP
          INNER JOIN MARD
             ON EKPOMATNR     = MARDMATNR
              AND EKPOWERKS = MARDWERKS
              AND EKPOLGORT = MARDLGORT
        WHERE EKPO~MATNR = MARD-MATNR
          AND EKPO~WERKS = MARD-WERKS
          AND EKPO~LGORT = MARD-LGORT
          AND EKPO~LOEKZ = SPACE
          AND EKPO~ELIKZ = SPACE.
    *Display only still open qty per schedule line
      Y_OPENQTY = WL_MENGE - WL_WEMNG.
      il_po-wl_ebeln = Y_EBELN.
      il_po-wl_ebelp = Y_EBELP.
      il_po-wl_openqty = Y_OPENQTY.
        append il_po.
      ENDSELECT.
    ENDIF.
    Loop at il_po.
      write:/ il_po-wl_ebeln, il_po-wl_ebelp, il_po-wl_openqty.
    endloop.

    Hi Vivek,
      Try it like this.
    Data: Begin of itab,
           lifnr type lfa1-lifnr,
           name1 type lfa1-name1,
           land1 type lfa1-land1,
          End of itab,
          it_lfa1 like table of itab with header line,
          lifnr like lfa1-lifnr,
          name1 like lfa1-name1,
          land1 like lfa1-land1.
    select lifnr name1 land1 into (lifnr, name1, land1)
           from lfa1.
    it_lfa1-lifnr = lifnr.
    it_lfa1-name1 = name1.
    it_lfa1-land1 = land1.
    append it_lfa1.
    endselect.
    loop at it_lfa1.
    write:/ it_lfa1-lifnr, it_lfa1-name1, it_lfa1-land1.
    endloop.
    Note:
    In place of the above select you insert your join select statement. It is working for me.
    You have declared your internal table wrongly. In the internal table instead of TYPE use LIKE, it will work.
    Hope this will work for you.
    Thanks & Regards
    Haritha.

  • How to get the open order quantity for a material

    Hi All,
    We need to get the open order quantity for materials. At present we are using the following logic...
    SELECT VBAKVBELN VBAPPOSNR VBAP~KWMENG                 
        INTO TABLE IT_VBAP                                     
      FROM VBAP
      INNER JOIN VBAK ON VBAKVBELN   = VBAPVBELN             
      INNER JOIN VAPMA ON VAPMAVBELN = VBAPVBELN
                      AND VAPMAPOSNR = VBAPPOSNR
      INNER JOIN VBUP ON VBUPVBELN = VBAPVBELN
                     AND VBUPPOSNR = VBAPPOSNR
    WHERE VAPMA~MATNR = IT_OUTPUT-MATNR
       AND VAPMA~WERKS = IT_OUTPUT-WERKS
        AND VBAK~AUART  IN S_AUART                        
         AND VBUP~GBSTA NE 'C'.     
    But the Query takes quite a long time as it does a full range scan on all the tables. Is there any way the query can be improved, may be by creating an index etc? Or is there anyother way by which i can get the required data?
    Any input is appreciated.
    Regards
    Brain.

    This could help.
    *& Report: zsdvr055                date written: 03/24/00              *
    *& Author: Brian Huntley           last update: 03/24/00               *
    *& Program Title: Open Order Report                                    *
    *& Description: This report will create a list of sales documents      *
    *&   that are open (contain at least one item that is not shipped).    *
    *&   The report will sort by ship-to customer name and by sales        *
    *&   document number.                                                  *
    *& Tables:                                                             *
    *& Files:                                                              *
    *& Transactions:                                                       *
    *& Changes:                                                            *
    REPORT ZSDVR055 LINE-SIZE 255.
    TABLES: VBPA,
            VBAP,
            VBUP,
            VBAK,
            VBKD,
            KNA1,
            VBEP,
            VBFA,
            LIKP,
            LIPS,
            EKET,
            T171T.
    define hashed table for selected ship-to and sold-to SO's
    TYPES: BEGIN OF TVBPA_TYPE,
             VBELN LIKE VBPA-VBELN,               "sales document
             POSNR LIKE VBPA-POSNR,               "item number
             PARVW LIKE VBPA-PARVW,               "partner function
             KUNNR LIKE VBPA-KUNNR,               "customer number
           END OF TVBPA_TYPE.
    DATA: TVBPA TYPE HASHED TABLE OF TVBPA_TYPE
            WITH UNIQUE KEY VBELN POSNR PARVW WITH HEADER LINE.
    define internal table for all selected SO's
    DATA: BEGIN OF ITAB0 OCCURS 0,
            VBELN LIKE VBPA-VBELN,                "sales document
          END OF ITAB0.
    define internal table for all selected SO items
    DATA: BEGIN OF ITAB OCCURS 0,
            VBELN LIKE VBAP-VBELN,                "document number
            POSNR LIKE VBAP-POSNR,                "item number
            MATNR LIKE VBAP-MATNR,                "material
            ARKTX LIKE VBAP-ARKTX,                "description
            PSTYV LIKE VBAP-PSTYV,                "item category
            KDMAT LIKE VBAP-KDMAT,                "customer material
            NETWR LIKE VBAP-NETWR,                "net value
            WAERK LIKE VBAP-WAERK,                "currency
            KWMENG LIKE VBAP-KWMENG,              "quantity
            ERDAT LIKE VBAP-ERDAT,                "entry date
            NETPR LIKE VBAP-NETPR,                "net price
            KPEIN LIKE VBAP-KPEIN,                "pricing unit
            PRCTR LIKE VBAP-PRCTR,                "profit center
            ERNAM LIKE VBAK-ERNAM,                "entered by
            AUART LIKE VBAK-AUART,                "order type
            VKORG LIKE VBAK-VKORG,                "sales organization
            VTWEG LIKE VBAK-VTWEG,                "distribution channel
            VDATU LIKE VBAK-VDATU,                "requested date (header)
            BNAME LIKE VBAK-BNAME,                "name of orderer
            KUNNR LIKE VBAK-KUNNR,                "sold-to customer
            BZIRK LIKE VBKD-BZIRK,                "sales district
            KURSK LIKE VBKD-KURSK,                "conversion rate
            BSTKD LIKE VBKD-BSTKD,                "customer PO
            LFGSA LIKE VBUP-LFGSA,                "overall delivery status
            FKSAA LIKE VBUP-FKSAA,                "overall billing status
            KUNWE LIKE VBPA-KUNNR,                "ship-to customer
            NAME1 LIKE KNA1-NAME1,                "ship-to customer name
            ORT01 LIKE KNA1-ORT01,                "ship-to address
            REGIO LIKE KNA1-REGIO,                "ship-to region (state)
            LAND1 LIKE KNA1-LAND1,                "ship-to country
          END OF ITAB.
    create internal table for open orders
    DATA: BEGIN OF ITAB1 OCCURS 0,
            KUNNR LIKE VBAK-KUNNR,                "sold-to customer
            KUNWE LIKE VBPA-KUNNR,                "ship-to customer
            VBELN LIKE VBAP-VBELN,                "document number
            POSNR LIKE VBAP-POSNR,                "item number
            ZDATE1 LIKE VBEP-EDATU,               "requested date
            ZDATE2 LIKE VBEP-EDATU,               "scheduled date (confirm)
            ZDATE3 LIKE VBEP-EDATU,               "committed date
            ZQTY1 LIKE VBAP-KWMENG,               "qty ordered
            ZQTY2 LIKE VBEP-BMENG,                "backlog qty
            ZEXTD LIKE VBAP-NETWR,                "backlog net value
            ZDESC(30) TYPE C,                     "backlog description
          END OF ITAB1.
    define internal table for SO schedule lines
    DATA: BEGIN OF ITAB2A OCCURS 0,
            WADAT LIKE VBEP-WADAT,                "planned goods issue date
            VBELN LIKE VBAP-VBELN,                "document number
            POSNR LIKE VBAP-POSNR,                "item number
            WMENG LIKE VBEP-WMENG,                "qty ordered
            BMENG LIKE VBEP-BMENG,                "qty confirmed
          END OF ITAB2A.
    define internal table for SO item request dates
    DATA: BEGIN OF ITAB2B OCCURS 0,
            EDATU LIKE VBEP-EDATU,                "delivery date
            VBELN LIKE VBAP-VBELN,                "document number
            POSNR LIKE VBAP-POSNR,                "item number
            WMENG LIKE VBEP-WMENG,                "qty ordered
          END OF ITAB2B.
    define internal table for SO item commit dates
    DATA: BEGIN OF ITAB2C OCCURS 0,
            EDATU LIKE VBEP-EDATU,                "delivery date
            VBELN LIKE VBAP-VBELN,                "document number
            POSNR LIKE VBAP-POSNR,                "item number
            ROMS1 LIKE VBEP-WMENG,                "committed qty
          END OF ITAB2C.
    define internal table for SO item deliveries
    DATA: BEGIN OF ITAB3 OCCURS 0,
            VGBEL LIKE LIPS-VGBEL,                "sales document
            VGPOS LIKE LIPS-VGPOS,                "sales document item
            VBELN LIKE LIKP-VBELN,                "delivery number
            POSNR LIKE LIPS-POSNR,                "delivery item number
            WADAT LIKE LIKP-WADAT,                "planned GI date
            WADAT_IST LIKE LIKP-WADAT_IST,        "actual GI date
            LFIMG LIKE LIPS-LFIMG,                "actual qty delivered
            ERDAT LIKE LIKP-ERDAT,                "date created
            ERZET LIKE LIKP-ERZET,                "time created
          END OF ITAB3.
    define internal table for SO item / delivery cross reference
    DATA: BEGIN OF ITAB4 OCCURS 0,
            VBELV LIKE VBFA-VBELV,                "sales document
            POSNV LIKE VBFA-POSNV,                "sales document item
            VBELN LIKE VBFA-VBELN,                "delivery number
            POSNN LIKE VBFA-POSNN,                "delivery item
            VBTYP_N LIKE VBFA-VBTYP_N,            "document category
            RFMNG LIKE VBFA-RFMNG,                "qty delivered
            PLMIN LIKE VBFA-PLMIN,                "plus/minus flag
          END OF ITAB4.
    define local variables
    DATA: ORDR_QTY LIKE VBEP-WMENG,          "order qty
          CONF_QTY LIKE VBEP-BMENG,          "confirmed qty
          NOCONF_QTY LIKE VBEP-BMENG,        "qty not confirmed
          DELV_QTY LIKE VBEP-WMENG,          "qty delivered
          NODELV_QTY LIKE VBEP-WMENG,        "qty not delivered
          REMAIN_QTY LIKE VBEP-WMENG,        "qty remain to get conf date
          REQ_DATE LIKE VBEP-EDATU,          "request date
          COM_DATE LIKE VBEP-EDATU,          "committed date
          DELV_QTY1 LIKE VBEP-WMENG,         "preceding delivery qty
          REMAIN_QTY1 LIKE VBEP-WMENG,       "qty remain to get reqest date
          REMAIN_QTY2 LIKE VBEP-WMENG,       "qty remain to get commit date
          THIRD_QTY LIKE VBEP-WMENG,         "3rd party no PO qty
          SO_STOCK LIKE MSKA-KALAB,          "sales order stock
          ZPRICE LIKE VBAP-NETPR,            "unit price USD
          ADRS1(40) TYPE C,                  "concatenated city and region
          ADRS2(45) TYPE C,                  "city, region and country
          ADRS3(80) TYPE C,                  "name, city, rgn, ctry
          ZCNTR TYPE I.                      "counter
    define select options
    SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
    SELECT-OPTIONS: S_VKORG FOR VBAK-VKORG DEFAULT '1000',
      S_VTWEG FOR VBAK-VTWEG DEFAULT '10' NO-DISPLAY,
      S_SPART FOR VBAK-SPART DEFAULT '00' NO-DISPLAY,
      S_KUNNR FOR VBPA-KUNNR MATCHCODE OBJECT DEBI,
      S_KUNWE FOR VBPA-KUNNR MATCHCODE OBJECT DEBI.
    SELECTION-SCREEN SKIP.
    SELECT-OPTIONS:
      S_BZIRK FOR VBKD-BZIRK,
      S_PRCTR FOR VBAP-PRCTR,
      S_MATNR FOR VBAP-MATNR MATCHCODE OBJECT MAT1,
      S_ERNAM FOR VBAK-ERNAM,
      S_ERDAT FOR VBAP-ERDAT.
    SELECTION-SCREEN END OF BLOCK BLK1.
    AT SELECTION-SCREEN.
      IF S_KUNNR IS INITIAL AND S_KUNWE IS INITIAL.
        MESSAGE E005(ZM) WITH TEXT-100.
      ENDIF.
    MAIN PROGRAM
    INITIALIZATION.
      INCLUDE ZSYHEADR.
    START-OF-SELECTION.
      PERFORM 100_GET_SO_ITEMS.
      PERFORM 200_GET_NO_DELIVERY.
      PERFORM 300_GET_NO_GOODS_ISSUE.
      PERFORM 400_GET_PARTIAL_DELIVERY.
      PERFORM 500_GET_THIRD_PARTY.
      PERFORM 900_CREATE_LIST.
    FORM 100_GET_SO_ITEMS
    FORM 100_GET_SO_ITEMS.
    get SO's for selected ship-to and sold-to customers
      REFRESH TVBPA.
      IF NOT S_KUNNR IS INITIAL.
        SELECT VBELN POSNR PARVW KUNNR
          FROM VBPA INTO TABLE TVBPA
         WHERE KUNNR IN S_KUNNR AND PARVW = 'AG' AND VBELN < '0080000000'.
      ENDIF.
      IF NOT S_KUNWE IS INITIAL.
        SELECT VBELN POSNR PARVW KUNNR
          FROM VBPA APPENDING TABLE TVBPA
          WHERE KUNNR IN S_KUNWE AND PARVW = 'WE' AND VBELN < '0080000000'.
      ENDIF.
      DESCRIBE TABLE TVBPA LINES ZCNTR.
      IF ZCNTR = 0.
        WRITE: /1 'No data found for selection'.
        STOP.
      ENDIF.
    eliminate duplicate SO's
      LOOP AT TVBPA.
        CLEAR ITAB0.
        MOVE TVBPA-VBELN TO ITAB0-VBELN.
        APPEND ITAB0.
      ENDLOOP.
      DELETE ADJACENT DUPLICATES FROM ITAB0.
    get SO detail
      SELECT VBAP~VBELN VBAP~POSNR VBAP~MATNR VBAP~ARKTX VBAP~PSTYV
          VBAP~KDMAT VBAP~NETWR VBAP~WAERK VBAP~KWMENG VBAP~ERDAT
          VBAP~NETPR VBAP~KPEIN VBAP~PRCTR VBAK~ERNAM VBAK~AUART
          VBAK~VKORG VBAK~VTWEG VBAK~VDATU VBAK~BNAME VBAK~KUNNR
          VBKD~BZIRK VBKD~KURSK VBKD~BSTKD VBUP~LFGSA VBUP~FKSAA
        FROM VBAP INNER JOIN VBUP ON VBUP~VBELN = VBAP~VBELN AND
            VBUP~POSNR = VBAP~POSNR
          INNER JOIN VBKD ON VBKD~VBELN = VBAP~VBELN AND
            VBKD~POSNR = VBAP~POSNR
          INNER JOIN VBAK ON VBAK~VBELN = VBAP~VBELN
        INTO TABLE ITAB FOR ALL ENTRIES IN ITAB0
        WHERE VBAP~VBELN = ITAB0-VBELN AND VBAP~MATNR IN S_MATNR AND
          VBAP~ERDAT IN S_ERDAT AND VBAP~PRCTR IN S_PRCTR AND
          VBAP~ABGRU = SPACE AND VBKD~BZIRK IN S_BZIRK AND
          VBAK~VKORG IN S_VKORG AND VBAK~VTWEG IN S_VTWEG AND
          VBAK~SPART IN S_SPART AND VBAK~KUNNR IN S_KUNNR AND
          VBAK~ERNAM IN S_ERNAM.
      IF SY-SUBRC <> 0.
        WRITE: /1 'No data found for selection'.
        STOP.
      ENDIF.
    loop thru SO items
      LOOP AT ITAB.
    get ship-to customer
        IF NOT S_KUNWE IS INITIAL.
          CLEAR TVBPA.
          READ TABLE TVBPA WITH TABLE KEY VBELN = ITAB-VBELN
            POSNR = ITAB-POSNR PARVW = 'WE'.
          IF SY-SUBRC <> 0.
            READ TABLE TVBPA WITH TABLE KEY VBELN = ITAB-VBELN
              POSNR = '000000' PARVW = 'WE'.
          ENDIF.
          MOVE TVBPA-KUNNR TO ITAB-KUNWE.
        ELSE.
          CLEAR ITAB-KUNWE.
          SELECT SINGLE KUNNR FROM VBPA INTO ITAB-KUNWE
            WHERE VBELN = ITAB-VBELN AND POSNR = ITAB-POSNR AND
              PARVW = 'WE'.
          IF SY-SUBRC <> 0.
            SELECT SINGLE KUNNR FROM VBPA INTO ITAB-KUNWE
              WHERE VBELN = ITAB-VBELN AND POSNR = '000000' AND
                PARVW = 'WE'.
          ENDIF.
        ENDIF.
        IF NOT ITAB-KUNWE IN S_KUNWE.
          DELETE ITAB.
          CONTINUE.
        ENDIF.
    get ship-to customer address info
        SELECT SINGLE NAME1 ORT01 REGIO LAND1 FROM KNA1
          INTO (ITAB-NAME1, ITAB-ORT01, ITAB-REGIO, ITAB-LAND1)
          WHERE KUNNR = ITAB-KUNWE.
        MODIFY ITAB.
      ENDLOOP.
      SORT ITAB BY VBELN POSNR.
    ENDFORM.
    FORM 200_GET_NO_DELIVERY
    get detail for SO items w/ no deliveries for order document types
      (ZZOR, ZZC1, ZZCO, ZZRP, ZZRW, KE, KR, ZCHP, ZPSO, ZZNC)
    FORM 200_GET_NO_DELIVERY.
      LOOP AT ITAB WHERE AUART = 'ZZOR' OR AUART = 'ZZC1' OR
        AUART = 'ZZCO' OR AUART = 'ZZRP' OR AUART = 'ZZRW' OR
        AUART = 'KE' OR AUART = 'KR' OR AUART = 'ZCHP' OR
        AUART = 'ZPSO' OR AUART = 'ZZNC'.
    select if delivery status = A (not delivered)
        IF ITAB-LFGSA = 'A'.
    assign values to detail fields
          CLEAR ITAB1.
          ITAB1-KUNNR = ITAB-KUNNR.
          ITAB1-KUNWE = ITAB-KUNWE.
          ITAB1-VBELN = ITAB-VBELN.
          ITAB1-POSNR = ITAB-POSNR.
          IF ITAB-KURSK = 0.
            ITAB-KURSK = 1.
          ENDIF.
          IF ITAB-KPEIN = 0.
            ITAB-KPEIN = 1.
          ENDIF.
    select schedule lines for SO item and write to internal table itab2a
          SELECT WADAT VBELN POSNR WMENG BMENG
            FROM VBEP INTO TABLE ITAB2A
            WHERE VBELN = ITAB-VBELN AND POSNR = ITAB-POSNR.
    select sched lines w/request date and write to internal table itab2b
          SELECT EDATU VBELN POSNR WMENG
            FROM VBEP INTO TABLE ITAB2B
            WHERE VBELN = ITAB-VBELN AND POSNR = ITAB-POSNR AND
              WMENG <> 0.
    select sched lines w/commit date and write to internal table itab2c
          SELECT EDATU VBELN POSNR ROMS1
            FROM VBEP INTO TABLE ITAB2C
            WHERE VBELN = ITAB-VBELN AND POSNR = ITAB-POSNR AND
              ROMS1 <> 0.
          SORT ITAB2A BY WADAT.
          SORT ITAB2B BY EDATU.
          SORT ITAB2C BY EDATU.
          ORDR_QTY = 0.
          CONF_QTY = 0.
          NOCONF_QTY = 0.
    calculate the unconfirmed qty for a SO item
          LOOP AT ITAB2A.
            CONF_QTY = CONF_QTY + ITAB2A-BMENG.
            ORDR_QTY = ORDR_QTY + ITAB2A-WMENG.
          ENDLOOP.
          NOCONF_QTY = ORDR_QTY - CONF_QTY.
          LOOP AT ITAB2A WHERE BMENG <> 0.
            PERFORM GET_REQUEST_DATE TABLES ITAB2B
              USING ITAB2A-BMENG REQ_DATE.
            PERFORM GET_COMMIT_DATE TABLES ITAB2C
              USING ITAB2A-BMENG COM_DATE.
            ITAB1-ZDATE1 = REQ_DATE.
            ITAB1-ZDATE2 = ITAB2A-WADAT.
            ITAB1-ZDATE3 = COM_DATE.
            ITAB1-ZQTY1 = ITAB-KWMENG.
            ITAB1-ZQTY2 = ITAB2A-BMENG.
            ITAB1-ZDESC = 'no delivery, confirmed'.
    calculate net value for backlog qty
            ZPRICE = ( ITAB-NETPR / ITAB-KPEIN ) * ITAB-KURSK.
            ITAB1-ZEXTD = ITAB1-ZQTY2 * ZPRICE.
    if order type is consignment return (KR), reverse sign
            IF ITAB-AUART = 'KR'.
              ITAB1-ZQTY1 = ITAB1-ZQTY1 * -1.
              ITAB1-ZQTY2 = ITAB1-ZQTY2 * -1.
              ITAB1-ZEXTD = ITAB1-ZEXTD * -1.
            ENDIF.
            APPEND ITAB1.
          ENDLOOP.
    get request date for SO item
          IF NOCONF_QTY <> 0.
            PERFORM GET_REQUEST_DATE TABLES ITAB2B
              USING NOCONF_QTY REQ_DATE.
            PERFORM GET_COMMIT_DATE TABLES ITAB2C
              USING NOCONF_QTY COM_DATE.
            ITAB1-ZDATE1 = REQ_DATE.
            ITAB1-ZDATE2 = '99991231'.
            ITAB1-ZDATE3 = COM_DATE.
            ITAB1-ZQTY1 = ITAB-KWMENG.
            ITAB1-ZQTY2 = NOCONF_QTY.
            ITAB1-ZDESC = 'no delivery, not confirmed'.
    calculate net value for backlog qty
            ZPRICE = ( ITAB-NETPR / ITAB-KPEIN ) * ITAB-KURSK.
            ITAB1-ZEXTD = ITAB1-ZQTY2 * ZPRICE.
    if order type is consignment return (KR), reverse sign
            IF ITAB-AUART = 'KR'.
              ITAB1-ZQTY1 = ITAB1-ZQTY1 * -1.
              ITAB1-ZQTY2 = ITAB1-ZQTY2 * -1.
              ITAB1-ZEXTD = ITAB1-ZEXTD * -1.
            ENDIF.
            APPEND ITAB1.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDFORM.
    FORM 300_GET_NO_GOODS_ISSUE
    get detail for SO items w/deliveries and no goods issue for
      doc types (ZZOR, ZZC1, ZZCO, ZZRP, ZZRW, KE, KR, ZCHP, ZPSO, ZZNC)
    FORM 300_GET_NO_GOODS_ISSUE.
    get detail for deliveries w/no goods issue
      SELECT VBELN WADAT WADAT_IST ERDAT ERZET
        FROM LIKP INTO (LIKP-VBELN, LIKP-WADAT, LIKP-WADAT_IST,
          LIKP-ERDAT, LIKP-ERZET)
        WHERE WADAT_IST = 0.
    select if actual qty delivered <> 0
        CLEAR LIPS.
        SELECT POSNR VGBEL VGPOS LFIMG
          FROM LIPS INTO (LIPS-POSNR, LIPS-VGBEL, LIPS-VGPOS, LIPS-LFIMG)
          WHERE VBELN = LIKP-VBELN AND LFIMG <> 0.
    select if goods movement status on delivery = A (no goods issue)
          CLEAR VBUP.
          SELECT SINGLE WBSTA FROM VBUP INTO VBUP-WBSTA
            WHERE VBELN = LIKP-VBELN AND POSNR = LIPS-POSNR.
          IF VBUP-WBSTA = 'A'.
            CLEAR ITAB3.
            ITAB3-VGBEL = LIPS-VGBEL.
            ITAB3-VGPOS = LIPS-VGPOS.
            ITAB3-VBELN = LIKP-VBELN.
            ITAB3-POSNR = LIPS-POSNR.
            ITAB3-WADAT = LIKP-WADAT.
            ITAB3-WADAT_IST = LIKP-WADAT_IST.
            ITAB3-LFIMG = LIPS-LFIMG.
            ITAB3-ERDAT = LIKP-ERDAT.
            ITAB3-ERZET = LIKP-ERZET.
            APPEND ITAB3.
          ENDIF.
        ENDSELECT.
      ENDSELECT.
      SORT ITAB3 BY VGBEL VGPOS VBELN POSNR.
    loop thru deliveries w/no goods issue and get SO item detail
      LOOP AT ITAB3.
        CLEAR ITAB.
        READ TABLE ITAB WITH KEY VBELN = ITAB3-VGBEL POSNR = ITAB3-VGPOS.
        IF SY-SUBRC <> 0.
          IF ITAB-AUART = 'ZZOR' OR ITAB-AUART = 'ZZC1' OR
            ITAB-AUART = 'ZZCO' OR ITAB-AUART = 'ZZRP' OR
            ITAB-AUART = 'ZZRW' OR ITAB-AUART = 'KE' OR
            ITAB-AUART = 'KR' OR ITAB-AUART = 'ZCHP' OR
            ITAB-AUART = 'ZPSO' OR ITAB-AUART = 'ZZNC'.
    assign values to detail fields
            CLEAR ITAB1.
            ITAB1-KUNNR = ITAB-KUNNR.
            ITAB1-KUNWE = ITAB-KUNWE.
            ITAB1-VBELN = ITAB-VBELN.
            ITAB1-POSNR = ITAB-POSNR.
            IF ITAB-KURSK = 0.
              ITAB-KURSK = 1.
            ENDIF.
            IF ITAB-KPEIN = 0.
              ITAB-KPEIN = 1.
            ENDIF.
    select delivery qty for SO item and write to internal table
            SELECT VBELV POSNV VBELN POSNN VBTYP_N RFMNG PLMIN
              FROM VBFA INTO TABLE ITAB4
              WHERE VBELV = ITAB-VBELN AND POSNV = ITAB-POSNR AND
                ( VBTYP_N = 'J' OR VBTYP_N = 'T' ).
    calculate total delivery qty for SO item
            DELV_QTY = 0.
            DELV_QTY1 = 0.
            LOOP AT ITAB4.
              IF ITAB4-VBTYP_N = 'J' OR ( ITAB4-VBTYP_N = 'T' AND
                  ITAB-AUART = 'KR').
                IF ITAB4-PLMIN = '-'.
                  ITAB4-RFMNG = ITAB4-RFMNG * -1.
                ENDIF.
    determine if delivery for SO item precedes delivery w/no goods
      issue (to determine request date and qty)
                CLEAR LIKP.
                SELECT SINGLE ERDAT ERZET
                  FROM LIKP INTO (LIKP-ERDAT, LIKP-ERZET)
                  WHERE VBELN = ITAB4-VBELN.
                IF LIKP-ERDAT < ITAB3-ERDAT OR ( LIKP-ERDAT = ITAB3-ERDAT
                    AND LIKP-ERZET < ITAB3-ERZET ).
                  DELV_QTY1 = DELV_QTY1 + ITAB4-RFMNG.
                ENDIF.
                DELV_QTY = DELV_QTY + ITAB4-RFMNG.
              ENDIF.
            ENDLOOP.
    get request dates for SO item
            REFRESH ITAB2B.
            SELECT EDATU VBELN POSNR WMENG
              FROM VBEP INTO TABLE ITAB2B
              WHERE VBELN = ITAB-VBELN AND POSNR = ITAB-POSNR AND
                WMENG <> 0.
    select sched lines w/commit date and write to itab2c
            REFRESH ITAB2C.
            SELECT EDATU VBELN POSNR ROMS1
              FROM VBEP INTO TABLE ITAB2C
              WHERE VBELN = ITAB-VBELN AND POSNR = ITAB-POSNR AND
                ROMS1 <> 0.
            SORT ITAB2B BY EDATU.
            SORT ITAB2C BY EDATU.
    loop thru request dates and delete request date entries for
      quantity(s) for preceding deliveries
            REMAIN_QTY1 = DELV_QTY1.
            LOOP AT ITAB2B.
              IF ITAB2B-WMENG > REMAIN_QTY1.
                ITAB2B-WMENG = ITAB2B-WMENG - REMAIN_QTY1.
                MODIFY ITAB2B.
                EXIT.
              ELSEIF ITAB2B-WMENG = REMAIN_QTY1.
                DELETE ITAB2B.
                EXIT.
              ELSE.
                REMAIN_QTY1 = REMAIN_QTY1 - ITAB2B-WMENG.
                DELETE ITAB2B.
              ENDIF.
            ENDLOOP.
    loop thru commit dates and delete commit date entries for
      quantity(s) for preceding deliveries
            REMAIN_QTY2 = DELV_QTY1.
            LOOP AT ITAB2C.
              IF ITAB2C-ROMS1 > REMAIN_QTY2.
                ITAB2C-ROMS1 = ITAB2C-ROMS1 - REMAIN_QTY2.
                MODIFY ITAB2C.
                EXIT.
              ELSEIF ITAB2C-ROMS1 = REMAIN_QTY2.
                DELETE ITAB2C.
                EXIT.
              ELSE.
                REMAIN_QTY2 = REMAIN_QTY2 - ITAB2C-ROMS1.
                DELETE ITAB2C.
              ENDIF.
            ENDLOOP.
    if planned goods issue date is 0, put qty in non-confirmed
    get request date for SO item
            IF ITAB3-WADAT <> 0.
              PERFORM GET_REQUEST_DATE TABLES ITAB2B
                USING ITAB3-LFIMG REQ_DATE.
              PERFORM GET_COMMIT_DATE TABLES ITAB2C
                USING ITAB3-LFIMG COM_DATE.
              ITAB1-ZDATE1 = REQ_DATE.
              ITAB1-ZDATE2 = ITAB3-WADAT.
              ITAB1-ZDATE3 = COM_DATE.
              ITAB1-ZQTY1 = ITAB-KWMENG.
              ITAB1-ZQTY2 = ITAB3-LFIMG.
              ITAB1-ZDESC = 'delivery, no goods issue'.
            ELSE.
              PERFORM GET_REQUEST_DATE TABLES ITAB2B
                USING ITAB3-LFIMG REQ_DATE.
              PERFORM GET_COMMIT_DATE TABLES ITAB2C
                USING ITAB3-LFIMG COM_DATE.
              ITAB1-ZDATE1 = REQ_DATE.
              ITAB1-ZDATE2 = '99991231'.
              ITAB1-ZDATE3 = COM_DATE.
              ITAB1-ZQTY1 = ITAB-KWMENG.
              ITAB1-ZQTY2 = ITAB3-LFIMG.
              ITAB1-ZDESC = 'delivery, no goods issue date'.
            ENDIF.
    calculate net value for backlog qty
            ZPRICE = ( ITAB-NETPR / ITAB-KPEIN ) * ITAB-KURSK.
            ITAB1-ZEXTD = ITAB1-ZQTY2 * ZPRICE.
    if order type is consignment return (KR), reverse sign
            IF ITAB-AUART = 'KR'.
              ITAB1-ZQTY1 = ITAB1-ZQTY1 * -1.
              ITAB1-ZQTY2 = ITAB1-ZQTY2 * -1.
              ITAB1-ZEXTD = ITAB1-ZEXTD * -1.
            ENDIF.
            APPEND ITAB1.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDFORM.
    FORM 400_GET_PARTIAL_DELIVERY
    get detail for SO items w/partial deliveries for document types
      (ZZOR, ZZC1, ZZCO, ZZRP, ZZRW, KE, KR, ZCHP, ZPSO, ZZNC)
    FORM 400_GET_PARTIAL_DELIVERY.
    process SO items for selected order types
      LOOP AT ITAB WHERE AUART = 'ZZOR' OR AUART = 'ZZC1' OR
          AUART = 'ZZCO' OR AUART = 'ZZRP' OR AUART = 'ZZRW' OR
          AUART = 'KE' OR AUART = 'KR' OR AUART = 'ZCHP' OR
          AUART = 'ZPSO' OR AUART = 'ZZNC'.
    select if delivery status = B (partially delivered)
        IF ITAB-LFGSA = 'B'.
    assign values to detail fields
          CLEAR ITAB1.
          ITAB1-KUNNR = ITAB-KUNNR.
          ITAB1-KUNWE = ITAB-KUNWE.
          ITAB1-VBELN = ITAB-VBELN.
          ITAB1-POSNR = ITAB-POSNR.
          IF ITAB-KURSK = 0.
            ITAB-KURSK = 1.
          ENDIF.
          IF ITAB-KPEIN = 0.
            ITAB-KPEIN = 1.
          ENDIF.
    select delivery qty for SO item and write to internal table
          SELECT VBELV POSNV VBELN POSNN VBTYP_N RFMNG PLMIN
            FROM VBFA INTO TABLE ITAB4
            WHERE VBELV = ITAB-VBELN AND POSNV = ITAB-POSNR AND
              ( VBTYP_N = 'J' OR VBTYP_N = 'T' ).
    calculate total delivery qty for SO item
          DELV_QTY = 0.
          LOOP AT ITAB4.
            IF ITAB4-VBTYP_N = 'J' OR ( ITAB4-VBTYP_N = 'T' AND
                ITAB-AUART = 'KR').
              IF ITAB4-PLMIN = '-'.
                ITAB4-RFMNG = ITAB4-RFMNG * -1.
              ENDIF.
              DELV_QTY = DELV_QTY + ITAB4-RFMNG.
            ENDIF.
          ENDLOOP.
    select schedule lines for SO item and write to internal table
          REFRESH ITAB2A.
          SELECT WADAT VBELN POSNR WMENG BMENG
            FROM VBEP INTO TABLE ITAB2A
            WHERE VBELN = ITAB-VBELN AND POSNR = ITAB-POSNR.
    get request dates from schedule line table
          REFRESH ITAB2B.
          SELECT EDATU VBELN POSNR WMENG
            FROM VBEP INTO TABLE ITAB2B
            WHERE VBELN = ITAB-VBELN AND POSNR = ITAB-POSNR AND
              WMENG <> 0.
    get commit dates from schedule line table
          REFRESH ITAB2C.
          SELECT EDATU VBELN POSNR ROMS1
            FROM VBEP INTO TABLE ITAB2C
            WHERE VBELN = ITAB-VBELN AND POSNR = ITAB-POSNR AND
              ROMS1 <> 0.
          SORT ITAB2B BY EDATU.
          SORT ITAB2C BY EDATU.
          SORT ITAB2A BY WADAT.
    loop thru request dates and delete request date entries for
      quantity(s) already delivered
          REMAIN_QTY1 = DELV_QTY.
          LOOP AT ITAB2B.
            IF ITAB2B-WMENG > REMAIN_QTY1.
              ITAB2B-WMENG = ITAB2B-WMENG - REMAIN_QTY1.
              MODIFY ITAB2B.
              EXIT.
            ELSEIF ITAB2B-WMENG = REMAIN_QTY1.
              DELETE ITAB2B.
              EXIT.
            ELSE.
              REMAIN_QTY1 = REMAIN_QTY1 - ITAB2B-WMENG.
              DELETE ITAB2B.
            ENDIF.
          ENDLOOP.
    loop thru commit dates and delete request date entries for
      quantity(s) already delivered
          REMAIN_QTY2 = DELV_QTY.
          LOOP AT ITAB2C.
            IF ITAB2C-ROMS1 > REMAIN_QTY2.
              ITAB2C-ROMS1 = ITAB2C-ROMS1 - REMAIN_QTY2.
              MODIFY ITAB2C.
              EXIT.
            ELSEIF ITAB2C-ROMS1 = REMAIN_QTY2.
              DELETE ITAB2C.
              EXIT.
            ELSE.
              REMAIN_QTY2 = REMAIN_QTY2 - ITAB2C-ROMS1.
              DELETE ITAB2C.
            ENDIF.
          ENDLOOP.
           ORDR_QTY = 0.
           CONF_QTY = 0.
           NOCONF_QTY = 0.
    calculate the unconfirmed qty for SO item
          LOOP AT ITAB2A.
            ORDR_QTY = ORDR_QTY + ITAB2A-WMENG.
            CONF_QTY = CONF_QTY + ITAB2A-BMENG.
          ENDLOOP.
          NOCONF_QTY = ORDR_QTY - CONF_QTY.
          NODELV_QTY = ORDR_QTY - DELV_QTY.
    loop thru schedule lines and process entries with no related
      delivery(s)
          REMAIN_QTY = DELV_QTY.
          LOOP AT ITAB2A.
            IF ITAB2A-BMENG <> 0.
              IF ITAB2A-BMENG <= REMAIN_QTY.
                REMAIN_QTY = REMAIN_QTY - ITAB2A-BMENG.
              ELSE.
                ITAB2A-BMENG = ITAB2A-BMENG - REMAIN_QTY.
                PERFORM GET_REQUEST_DATE TABLES ITAB2B
                  USING ITAB2A-BMENG REQ_DATE.
                PERFORM GET_COMMIT_DATE TABLES ITAB2C
                  USING ITAB2A-BMENG COM_DATE.
                ITAB1-ZDATE1 = REQ_DATE.
                ITAB1-ZDATE2 = ITAB2A-WADAT.
                ITAB1-ZDATE3 = COM_DATE.
                ITAB1-ZQTY1 = ITAB-KWMENG.
                ITAB1-ZQTY2 = ITAB2A-BMENG.
                ITAB1-ZDESC = 'partial delivery'.
    calculate net value for backlog qty
                ZPRICE = ( ITAB-NETPR / ITAB-KPEIN ) * ITAB-KURSK.
                ITAB1-ZEXTD = ITAB1-ZQTY2 * ZPRICE.
    if order type is consignment return (KR), reverse sign
                IF ITAB-AUART = 'KR'.
                  ITAB1-ZQTY1 = ITAB1-ZQTY1 * -1.
                  ITAB1-ZQTY2 = ITAB1-ZQTY2 * -1.
                  ITAB1-ZEXTD = ITAB1-ZEXTD * -1.
                ENDIF.
                APPEND ITAB1.
                REMAIN_QTY = 0.
              ENDIF.
            ENDIF.
          ENDLOOP.
    if total unconfirmed >= total not delivered, qty is unconfirmed
          IF NOCONF_QTY >= NODELV_QTY.
            PERFORM GET_REQUEST_DATE TABLES ITAB2B
              USING NODELV_QTY REQ_DATE.
            PERFORM GET_COMMIT_DATE TABLES ITAB2C
              USING NODELV_QTY COM_DATE.
            ITAB1-ZDATE1 = REQ_DATE.
            ITAB1-ZDATE2 = '99991231'.
            ITAB1-ZDATE3 = COM_DATE.
            ITAB1-ZQTY1 = ITAB-KWMENG.
            ITAB1-ZQTY2 = NODELV_QTY.
            ITAB1-ZDESC = 'partial delv, not confirmed'.
    calculate net value for backlog qty
            ZPRICE = ( ITAB-NETPR / ITAB-KPEIN ) * ITAB-KURSK.
            ITAB1-ZEXTD = ITAB1-ZQTY2 * ZPRICE.
    if order type is consignment return (KR), reverse sign
            IF ITAB-AUART = 'KR'.
              ITAB1-ZQTY1 = ITAB1-ZQTY1 * -1.
              ITAB1-ZQTY2 = ITAB1-ZQTY2 * -1.
              ITAB1-ZEXTD = ITAB1-ZEXTD * -1.
            ENDIF.
            APPEND ITAB1.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDFORM.
    FORM 500_GET_THIRD_PARTY
    get detail for third party SO items
    FORM 500_GET_THIRD_PARTY.
    process SO items for selected order types
      LOOP AT ITAB WHERE PSTYV = 'TAS' AND ( AUART = 'ZZOR' OR
        AUART = 'ZZC1' OR AUART = 'ZZCO' OR AUART = 'ZZRP' OR
        AUART = 'ZZRW' OR AUART = 'KE' OR AUART = 'KR' OR
        AUART = 'ZCHP' OR AUART = 'ZPSO' OR AUART = 'ZZNC' ).
    select if billing status <> C (billed)
        IF ITAB-FKSAA <> 'C'.
    assign values to detail fields
          CLEAR ITAB1.
          ITAB1-KUNNR = ITAB-KUNNR.
          ITAB1-KUNWE = ITAB-KUNWE.
          ITAB1-VBELN = ITAB-VBELN.
          ITAB1-POSNR = ITAB-POSNR.
          IF ITAB-KURSK = 0.
            ITAB-KURSK = 1.
          ENDIF.
          IF ITAB-KPEIN = 0.
            ITAB-KPEIN = 1.
          ENDIF.
    get request dates from schedule line table
          REFRESH ITAB2B.
          SELECT EDATU VBELN POSNR WMENG
            FROM VBEP INTO TABLE ITAB2B
            WHERE VBELN = ITAB-VBELN AND POSNR = ITAB-POSNR AND
              WMENG <> 0.
    get commit dates from schedule line table
          REFRESH ITAB2C.
          SELECT EDATU VBELN POSNR ROMS1
            FROM VBEP INTO TABLE ITAB2C
            WHERE VBELN = ITAB-VBELN AND POSNR = ITAB-POSNR AND
              ROMS1 <> 0.
          SORT ITAB2B BY EDATU.
          SORT ITAB2C BY EDATU.
    get PO number(s) for SO item and write to internal table
          REFRESH ITAB4.
          SELECT VBELV POSNV VBELN POSNN VBTYP_N RFMNG PLMIN
            FROM VBFA INTO TABLE ITAB4
            WHERE VBELV = ITAB-VBELN AND POSNV = ITAB-POSNR AND
              VBTYP_N = 'V' AND RFMNG <> 0.
    calculate total delivery qty for PO item
          DELV_QTY = 0.
          LOOP AT ITAB4.
            IF ITAB4-PLMIN = '-'.
              ITAB4-RFMNG = ITAB4-RFMNG * -1.
            ENDIF.
            DELV_QTY = DELV_QTY + ITAB4-RFMNG.
          ENDLOOP.
    loop thru PO's for SO item
          LOOP AT ITAB4.
    select delivery lines for PO item
            SELECT EINDT EBELN EBELP MENGE FROM EKET
              INTO (EKET-EINDT, EKET-EBELN, EKET-EBELP, EKET-MENGE)
              WHERE EBELN = ITAB4-VBELN AND EBELP = ITAB4-POSNN.
              PERFORM GET_REQUEST_DATE TABLES ITAB2B
                USING EKET-MENGE REQ_DATE.
              PERFORM GET_COMMIT_DATE TABLES ITAB2C
                USING EKET-MENGE COM_DATE.
              ITAB1-ZDATE1 = REQ_DATE.
              ITAB1-ZDATE2 = EKET-EINDT.
              ITAB1-ZDATE3 = COM_DATE.
              ITAB1-ZQTY1 = ITAB-KWMENG.
              ITAB1-ZQTY2 = EKET-MENGE.
              ITAB1-ZDESC = '3rd party item'.
    calculate net value for backlog qty
              ZPRICE = ( ITAB-NETPR / ITAB-KPEIN ) * ITAB-KURSK.
              ITAB1-ZEXTD = ITAB1-ZQTY2 * ZPRICE.
              APPEND ITAB1.
            ENDSELECT.
          ENDLOOP.
    if total delivery qty < order qty, put remaining in non-confirmed
          IF DELV_QTY < ITAB-KWMENG.
            THIRD_QTY = ITAB-KWMENG - DELV_QTY.
            PERFORM GET_REQUEST_DATE TABLES ITAB2B
              USING THIRD_QTY REQ_DATE.
            PERFORM GET_COMMIT_DATE TABLES ITAB2C
              USING THIRD_QTY COM_DATE.
            ITAB1-ZDATE1 = REQ_DATE.
            ITAB1-ZDATE2 = '99991231'.
            ITAB1-ZDATE2 = COM_DATE.
            ITAB1-ZQTY1 = ITAB-KWMENG.
            ITAB1-ZQTY2 = THIRD_QTY.
            ITAB1-ZDESC = '3rd party item, no PO'.
    calculate net value for backlog qty
            ZPRICE = ( ITAB-NETPR / ITAB-KPEIN ) * ITAB-KURSK.
            ITAB1-ZEXTD = ITAB1-ZQTY2 * ZPRICE.
            APPEND ITAB1.
            CONTINUE.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDFORM.
    FORM 900_CREATE_LIST
    process open business detail and create list
    FORM 900_CREATE_LIST.
    if internal table is empty, write message and exit
        DESCRIBE TABLE ITAB1 LINES ZCNTR.
        IF ZCNTR = 0.
          WRITE: / 'No Data Found for Selection'.
          STOP.
        ENDIF.
        SORT ITAB1 BY KUNNR KUNWE VBELN POSNR.
    loop thru sorted table and create list
        LOOP AT ITAB1.
          IF ITAB1-ZDATE1 = SPACE.
            ITAB1-ZDATE1 = '99991231'.
          ENDIF.
          IF ITAB1-ZDATE3 = SPACE.
            ITAB1-ZDATE3 = '99991231'.
          ENDIF.
    get SO item detail
          CLEAR ITAB.
          READ TABLE ITAB WITH KEY VBELN = ITAB1-VBELN
                                   POSNR = ITAB1-POSNR BINARY SEARCH.
    print sold-to and ship-to customer header info
          AT NEW KUNWE.
            CLEAR KNA1.
            SELECT SINGLE NAME1 FROM KNA1 INTO KNA1-NAME1
              WHERE KUNNR = ITAB1-KUNNR.
            CONCATENATE ITAB-ORT01 ITAB-REGIO INTO ADRS1 SEPARATED BY ', '.
            CONCATENATE ADRS1 ITAB-LAND1 INTO ADRS2 SEPARATED BY '   '.
            CONCATENATE ITAB-NAME1 ADRS2 INTO ADRS3 SEPARATED BY '   '.
            FORMAT COLOR 1 INTENSIFIED OFF.
            WRITE: /1 'Sold-to:', 10 ITAB1-KUNNR, 18 KNA1-NAME1,
              56 'Ship-to:', 65 ITAB1-KUNWE, 73 ADRS3.
            FORMAT RESET.
            SKIP.
          ENDAT.
    print out backlog detail
          CLEAR T171T.
          SELECT SINGLE BZTXT FROM T171T INTO T171T-BZTXT
            WHERE SPRAS = SY-LANGU AND BZIRK = ITAB-BZIRK.
          WRITE: /1 ITAB1-VBELN,
            13(6) ITAB1-POSNR NO-ZERO,
            21 ITAB-MATNR,
            41 ITAB-ARKTX,
            83 ITAB1-ZDATE1,
            95 ITAB1-ZDATE3,
            107 ITAB1-ZDATE2,
            119 ITAB-ERNAM,
            129 ITAB-BZIRK, 135 T171T-BZTXT,
            157(20) ITAB-BSTKD,
            179(12) ITAB1-ZQTY1 DECIMALS 0,
            193(12) ITAB1-ZQTY2 DECIMALS 0,
            207(16) ITAB1-ZEXTD DECIMALS 2,
            225 ITAB1-ZDESC.
          AT END OF VBELN.
            SKIP.
          ENDAT.
    print footing at ship-to customer
          AT END OF KUNWE.
            SUM.
            ULINE: /193(12), 207(16).
            FORMAT COLOR 1 INTENSIFIED OFF.
            WRITE: /1 'Total:  Sold-to:', 18 ITAB1-KUNNR,
              25 '/', 27 'Ship-to:', 36 ITAB1-KUNWE,
              193(12) ITAB1-ZQTY2 DECIMALS 0,
              207(16) ITAB1-ZEXTD DECIMALS 2.
            FORMAT RESET.
            SKIP 2.
          ENDAT.
          AT LAST.
            SUM.
            ULINE: /193(12), 207(16).
            FORMAT COLOR 1 INTENSIFIED ON.
            WRITE: /1 'Report Total:',
              193(12) ITAB1-ZQTY2 DECIMALS 0,
              207(16) ITAB1-ZEXTD DECIMALS 2.
            FORMAT RESET.
          ENDAT.
        ENDLOOP.
    ENDFORM.
    FORM GET_REQUEST_DATE
    subroutine to get request date for SO item
    FORM GET_REQUEST_DATE TABLES FTAB STRUCTURE ITAB2B
                          USING CONF_QTY REQ_DATE.
    DATA: REMAIN LIKE VBEP-WMENG,                 "qty remaining
          CNTR TYPE I,                            "loop counter
          TAB_INDEX TYPE I.                       "table index
    initialize
      REMAIN = 0.
      REQ_DATE = SPACE.
    get first request date from table
      TAB_INDEX = 1.
      READ TABLE FTAB INDEX TAB_INDEX.
    if request date not found, set request date to blank
      IF SY-SUBRC <> 0.
        REQ_DATE = SPACE.
        EXIT.
      ELSE.
        REQ_DATE =  FTAB-EDATU.
      ENDIF.
    calculate quantity remaining for request date
      REMAIN = FTAB-WMENG - CONF_QTY.
    if qty remaining > 0, update request date with qty remaining
      IF REMAIN > 0.
        FTAB-WMENG = REMAIN.
        MODIFY FTAB INDEX TAB_INDEX.
    if qty remaining = 0, delete request date (so next request
      date will be used for next confirmed qty)
      ELSEIF REMAIN = 0.
        DELETE FTAB INDEX TAB_INDEX.
    if qty remaining < 0, find next request date and update
      ELSE.
        CNTR = 0.
        WHILE REMAIN < 0 OR CNTR < 10.
          DELETE FTAB INDEX TAB_INDEX.
          TAB_INDEX = TAB_INDEX + 1.
          READ TABLE FTAB INDEX TAB_INDEX.
          REMAIN = REMAIN + FTAB-WMENG.
          CNTR = CNTR + 1.
        ENDWHILE.
        IF REMAIN = 0.
          DELETE FTAB INDEX TAB_INDEX.
        ELSEIF REMAIN > 0.
          FTAB-WMENG = REMAIN.
          MODIFY FTAB INDEX TAB_INDEX.
        ENDIF.
      ENDIF.
    ENDFORM.
    FORM GET_COMMIT_DATE
    subroutine to get commit date for SO item
    FORM GET_COMMIT_DATE TABLES CTAB STRUCTURE ITAB2C
                          USING CONF_QTY COM_DATE.
    DATA: REMAIN LIKE VBEP-WMENG,                 "qty remaining
          CNTR TYPE I,                            "loop counter
          TAB_INDEX TYPE I.                       "table index
    initialize
      REMAIN = 0.
      COM_DATE = SPACE.
    get first commit date from table
      TAB_INDEX = 1.
      READ TABLE CTAB INDEX TAB_INDEX.
    if request date not found, set request date to blank
      IF SY-SUBRC <> 0.
        COM_DATE = SPACE.
        EXIT.
      ELSE.
        COM_DATE =  CTAB-EDATU.
      ENDIF.
    calculate quantity remaining for request date
      REMAIN = CTAB-ROMS1 - CONF_QTY.
    if qty remaining > 0, update request date with qty remaining
      IF REMAIN > 0.
        CTAB-ROMS1 = REMAIN.
        MODIFY CTAB INDEX TAB_INDEX.
    if qty remaining = 0, delete request date (so next request
      date will be used for next confirmed qty)
      ELSEIF REMAIN = 0.
        DELETE CTAB INDEX TAB_INDEX.
    if qty remaining < 0, find next request date and update
      ELSE.
        CNTR = 0.
        WHILE REMAIN < 0 OR CNTR < 10.
          DELETE CTAB INDEX TAB_INDEX.
          TAB_INDEX = TAB_INDEX + 1.
          READ TABLE CTAB INDEX TAB_INDEX.
          REMAIN = REMAIN + CTAB-ROMS1.
          CNTR = CNTR + 1.
        ENDWHILE.
        IF REMAIN = 0.
          DELETE CTAB INDEX TAB_INDEX.
        ELSEIF REMAIN > 0.
          CTAB-ROMS1 = REMAIN.
          MODIFY CTAB INDEX TAB_INDEX.
        ENDIF.
      ENDIF.
    ENDFORM.
    END-OF-REPORT.

  • URGENT -----  Problem in converting spool to pdf .

    Error - File cannot be opened because of no pages ......
    Hi experts,
    I am passing internal table contents to spool   -->  then spool to pdf  -
    >  then mail sending.
    Everything is fine but only error is in the receiving mail the above error is coming.
    given the code...
    <b>I think the error is in converting into pdf function module</b>
    <b>Help me to solve this problem as it is very urgent</b>
    include data_declare.       "  pasted down
    select * from kna1 into table itab up to 50 rows.
    CALL FUNCTION 'RSPO_OPEN_SPOOLREQUEST'
    EXPORTING
    dest = 'LP01'
    immediate_print = 'X'
    IMPORTING
    handle = handle
    SPOOLID = spoolid.
    loop at itab.
    concatenate itab-kunnr itab-name1 itab-land1 into text separated by
    space.
    CALL FUNCTION 'RSPO_WRITE_SPOOLREQUEST'
    EXPORTING
    handle = handle
    text =  text.
    endloop.
    CALL FUNCTION 'RSPO_CLOSE_SPOOLREQUEST'
    EXPORTING
    handle = handle.
    Convert Spool to PDF **********************************
      <b>CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
           EXPORTING
                src_spoolid              = spoolid "gd_spool_nr
                no_dialog                = c_no
                dst_device               = c_device
           IMPORTING
                pdf_bytecount            = gd_bytecount
           TABLES
                pdf                      = it_pdf_output
           EXCEPTIONS
                err_no_abap_spooljob     = 1
                err_no_spooljob          = 2
                err_no_permission        = 3
                err_conv_not_possible    = 4
                err_bad_destdevice       = 5
                user_cancelled           = 6
                err_spoolerror           = 7
                err_temseerror           = 8
                err_btcjob_open_failed   = 9
                err_btcjob_submit_failed = 10
                err_btcjob_close_failed  = 11
                OTHERS                   = 12.
      CHECK sy-subrc = 0.
    Transfer the 132-long strings to 255-long strings
      LOOP AT it_pdf_output.
        TRANSLATE it_pdf_output USING ' ~'.
        CONCATENATE gd_buffer it_pdf_output INTO gd_buffer.
      ENDLOOP.
      TRANSLATE gd_buffer USING '~ '.
      DO.
        it_mess_att = gd_buffer.
        APPEND it_mess_att.
        SHIFT gd_buffer LEFT BY 255 PLACES.
        IF gd_buffer IS INITIAL.
          EXIT.
        ENDIF.
      ENDDO.</b>
    Processing Mail Sending ************************************
      DATA: p_email LIKE somlreci1-receiver,
            p_sender LIKE somlreci1-receiver,
            sub(40).
      DESCRIBE TABLE it_mess_att LINES gd_recsize.
      CHECK gd_recsize > 0.
      REFRESH it_mess_bod.
    Default subject matter
      gd_subject         = 'Subject'.
      gd_attachment_desc = text-002.
      it_mess_bod        = text-001.
      APPEND it_mess_bod.
      IF p_sender EQ space.
        gd_sender_type  = space.
      ELSE.
        gd_sender_type  = 'INT'.
      ENDIF.
      MOVE 'Orders Rejeced on' TO sub.
      WRITE: sy-datum DD/MM/YYYY TO sub+27(10).
    Send file by email as .xls speadsheet
      PERFORM send_file_as_email_attachment
                                   TABLES it_mess_bod
                                          it_mess_att
                                    USING
                                         p_email
                                           sub                  "text-009
                                          'PDF'
                                           gd_attachment_name
                                           gd_attachment_desc
                                         p_sender
                                         gd_sender_type
                                 CHANGING gd_error
                                          gd_reciever.
    ENDFORM.                    " process_email
    *&      Form  send_file_as_email_attachment
          text
         -->P_IT_MESS_BOD  text
         -->P_IT_MESS_ATT  text
         -->P_TEXT_009  text
         -->P_1058   text
         -->P_GD_ATTACHMENT_NAME  text
         -->P_GD_ATTACHMENT_DESC  text
         <--P_GD_ERROR  text
         <--P_GD_RECIEVER  text
    FORM send_file_as_email_attachment TABLES it_message
                                              it_attach
                                        USING
                                            p_email
                                              p_mtitle
                                              p_format
                                              p_filename
                                              p_attdescription
                                            p_sender_address
                                            p_sender_addres_type
                                     CHANGING p_error
                                              p_reciever.
      DATA: ld_error    TYPE sy-subrc,
            ld_reciever TYPE sy-subrc,
            ld_mtitle LIKE sodocchgi1-obj_descr,
            ld_email LIKE  somlreci1-receiver,
            ld_format TYPE  so_obj_tp ,
            ld_attdescription TYPE  so_obj_nam ,
            ld_attfilename TYPE  so_obj_des ,
            ld_sender_address LIKE  soextreci1-receiver,
            ld_sender_address_type LIKE  soextreci1-adr_typ,
            ld_receiver LIKE  sy-subrc.
      DATA:   t_packing_list LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,
              t_contents LIKE solisti1 OCCURS 0 WITH HEADER LINE,
              t_receivers LIKE somlreci1 OCCURS 0 WITH HEADER LINE,
              t_attachment LIKE solisti1 OCCURS 0 WITH HEADER LINE,
              t_object_header LIKE solisti1 OCCURS 0 WITH HEADER LINE,
              w_cnt TYPE i,
              w_sent_all(1) TYPE c,
              w_doc_data LIKE sodocchgi1.
    ld_email   = p_email.
      ld_mtitle = p_mtitle.
      ld_format              = p_format.
      ld_attdescription      = p_attdescription.
      ld_attfilename         = p_filename.
    ld_sender_address      = p_sender_address.
    ld_sender_address_type = p_sender_addres_type.
    Fill the document data.
      w_doc_data-doc_size = 1.
    Populate the subject/generic message attributes
      w_doc_data-obj_langu = sy-langu.
      w_doc_data-obj_name  = 'SAPRPT'.
      w_doc_data-obj_descr = ld_mtitle .
      w_doc_data-sensitivty = 'F'.
    Fill the document data and get size of attachment
      CLEAR w_doc_data.
      READ TABLE it_attach INDEX w_cnt.
      w_doc_data-doc_size =
         ( w_cnt - 1 ) * 255 + STRLEN( it_attach ).
      w_doc_data-obj_langu  = sy-langu.
      w_doc_data-obj_name   = 'SAPRPT'.
      w_doc_data-obj_descr  = ld_mtitle.
      w_doc_data-sensitivty = 'F'.
      CLEAR t_attachment.
      REFRESH t_attachment.
      t_attachment[] = it_attach[].
    Describe the body of the message
      CLEAR t_packing_list.
      REFRESH t_packing_list.
      t_packing_list-transf_bin = space.
      t_packing_list-head_start = 1.
      t_packing_list-head_num = 0.
      t_packing_list-body_start = 1.
      DESCRIBE TABLE it_message LINES t_packing_list-body_num.
      t_packing_list-doc_type = 'RAW'.
      APPEND t_packing_list.
    Create attachment notification
      t_packing_list-transf_bin = 'X'.
      t_packing_list-head_start = 1.
      t_packing_list-head_num   = 1.
      t_packing_list-body_start = 1.
      DESCRIBE TABLE t_attachment LINES t_packing_list-body_num.
      t_packing_list-doc_type   =  ld_format.
      t_packing_list-obj_descr  =  ld_attdescription.
      t_packing_list-obj_name   =  ld_attfilename.
      t_packing_list-doc_size   =  t_packing_list-body_num * 255.
      APPEND t_packing_list.
    Add the recipients email address
      CLEAR t_receivers.
      REFRESH t_receivers.
      t_receivers-rec_type = 'U'.
      t_receivers-com_type = 'INT'.
      t_receivers-notif_del = 'X'.
      t_receivers-notif_ndel = 'X'.
      CLEAR gt_mail.
      SELECT SINGLE * FROM zmail INTO gt_mail
                      WHERE grpnr = '1'.
      IF NOT gt_mail-mail1 IS INITIAL.
        t_receivers-receiver = gt_mail-mail1.
        APPEND t_receivers.
      ENDIF.
      IF NOT gt_mail-mail2 IS INITIAL.
        t_receivers-receiver = gt_mail-mail2.
        APPEND t_receivers.
      ENDIF.
      IF NOT gt_mail-mail3 IS INITIAL.
        t_receivers-receiver = gt_mail-mail3.
        APPEND t_receivers.
      ENDIF.
      IF NOT gt_mail-mail4 IS INITIAL.
        t_receivers-receiver = gt_mail-mail4.
        APPEND t_receivers.
      ENDIF.
    LOOP AT gt_mail.
       t_receivers-receiver = gt_mail-mailid..
       APPEND t_receivers.
    ENDLOOP.
      CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
           EXPORTING
                document_data              = w_doc_data
                put_in_outbox              = 'X'
                sender_address             = ld_sender_address
                sender_address_type        = ld_sender_address_type
                commit_work                = 'X'
           IMPORTING
                sent_to_all                = w_sent_all
           TABLES
                packing_list               = t_packing_list
                contents_bin               = t_attachment
                contents_txt               = it_message
                receivers                  = t_receivers
           EXCEPTIONS
                too_many_receivers         = 1
                document_not_sent          = 2
                document_type_not_exist    = 3
                operation_no_authorization = 4
                parameter_error            = 5
                x_error                    = 6
                enqueue_error              = 7
                OTHERS                     = 8.
    Populate zerror return code
      ld_error = sy-subrc.
    Populate zreceiver return code
      LOOP AT t_receivers.
        ld_receiver = t_receivers-retrn_code.
      ENDLOOP.
    ENDFORM.                    " send_file_as_email_attachment
    Data Declaration ************************************
    DATA : handle LIKE sy-tabix.
    data itab like kna1 occurs 0 with header line.
    data: text(50) type c.
    data: spoolid type TSP01-RQIDENT.
    DATA : gt_listobject LIKE abaplist OCCURS 10 .
    DATA : gt_objcont LIKE soli OCCURS 10 WITH HEADER LINE.
    DATA : gt_objcont1 LIKE soli OCCURS 10 WITH HEADER LINE.
    DATA : gt_objhead LIKE soli OCCURS 10 WITH HEADER LINE.
    DATA : gt_att_head LIKE soli OCCURS 10  WITH HEADER LINE.
    DATA : gt_receivers LIKE soos1 OCCURS 10 WITH HEADER LINE.
    DATA : gt_packing_list LIKE soxpl OCCURS 10 WITH HEADER LINE.
    DATA : gt_so_ali LIKE soli OCCURS 100 WITH HEADER LINE.
    DATA : gt_so_ali1 LIKE soli OCCURS 100 WITH HEADER LINE.
    DATA : gt_document_data LIKE sood1.
    DATA: lineno TYPE i , length TYPE i , size TYPE i.
    DATA: gt_message LIKE soli OCCURS 10 WITH HEADER LINE,
          gt_message1 LIKE soli OCCURS 10 WITH HEADER LINE.
    DATA: gt_scheme LIKE ztrc_scheme OCCURS 0 WITH HEADER LINE,
         gt_mail LIKE zmail_prov OCCURS 0 WITH HEADER LINE.
          gt_mail LIKE zmail." occurs 0 with header line.
    DATA: gd_recsize TYPE i.
    Spool IDs
    TYPES: BEGIN OF t_tbtcp.
            INCLUDE STRUCTURE tbtcp.
    TYPES: END OF t_tbtcp.
    DATA: it_tbtcp TYPE STANDARD TABLE OF t_tbtcp INITIAL SIZE 0,
          wa_tbtcp TYPE t_tbtcp.
    Job Runtime Parameters
    DATA: gd_eventid LIKE tbtcm-eventid,
          gd_eventparm LIKE tbtcm-eventparm,
          gd_external_program_active LIKE tbtcm-xpgactive,
          gd_jobcount LIKE tbtcm-jobcount,
          gd_jobname LIKE tbtcm-jobname,
          gd_stepcount LIKE tbtcm-stepcount,
          gd_error    TYPE sy-subrc,
          gd_reciever TYPE sy-subrc.
    DATA:  w_recsize TYPE i.
    DATA: gd_subject   LIKE sodocchgi1-obj_descr,
          it_mess_bod LIKE solisti1 OCCURS 0 WITH HEADER LINE,
          it_mess_att LIKE solisti1 OCCURS 0 WITH HEADER LINE,
          gd_sender_type     LIKE soextreci1-adr_typ,
          gd_attachment_desc TYPE so_obj_nam,
          gd_attachment_name TYPE so_obj_des.
    Spool to PDF conversions
    DATA: gd_spool_nr LIKE tsp01-rqident,
          gd_destination LIKE rlgrap-filename,
          gd_bytecount LIKE tst01-dsize,
          gd_buffer TYPE string.
    Binary store for PDF
    DATA: BEGIN OF it_pdf_output OCCURS 0.
            INCLUDE STRUCTURE tline.
    DATA: END OF it_pdf_output.
    CONSTANTS: c_dev LIKE  sy-sysid VALUE 'DEV',
               c_no(1)     TYPE c   VALUE ' ',
               c_device(4) TYPE c   VALUE 'LOCL'.
    DATA: check TYPE c,
          days TYPE i.
    <b></b><b></b><b></b>

    Hi Prashant,
    Thanks for your reply. Really it is very useful one.
    In this, the output list is getting populated into spool and to pdf.
    But my requirement sending the internal table contents to spool directly without dispalying in the output list.
    I did the program like the above mentioned one already. But my requirement is not that one.
    Regards
    chakradhar

  • I Need Interactive Report for displaying vendor information. Based on the s

    Interactive Report for displaying vendor information. Based on the selection made by the corresponding Vendor Bank Details are listed such that the line selected in the basic list was visible along with the secondary list.

    hi
    Hi
    Use the Table LFA1 and LFB1 in the basic list
    and LFBK table details in the secondary list
    see the sample code related to customer Sales orders
    modify it with the Vendor tables
    REPORT ZTEJ_INTAB1 LINE-SIZE 103 LINE-COUNT 35(5) NO STANDARD PAGE
    HEADING.
    *TABLES DECLARATION
    TABLES : KNA1, VBAK, VBAP.
    *SELECT OPTIONS
    SELECT-OPTIONS: CUST_NO FOR KNA1-KUNNR.
    *INITIALIZATION
    INITIALIZATION.
    CUST_NO-LOW = '01'.
    CUST_NO-HIGH = '5000'.
    CUST_NO-SIGN = 'I'.
    CUST_NO-OPTION = 'BT'.
    APPEND CUST_NO.
    *SELECTION SCREEN VALIDATION
    AT SELECTION-SCREEN ON CUST_NO.
    LOOP AT SCREEN.
    IF CUST_NO-LOW < 1 OR CUST_NO-HIGH > 5000.
    MESSAGE E001(ZTJ1).
    ENDIF.
    ENDLOOP.
    *BASIC LIST SELECTION
    START-OF-SELECTION.
    SELECT KUNNR NAME1 ORT01 LAND1 INTO
    (KNA1-KUNNR, KNA1-NAME1,KNA1-ORT01,KNA1-LAND1)
    FROM KNA1
    WHERE KUNNR IN CUST_NO.
    WRITE:/1 SY-VLINE,
    KNA1-KUNNR UNDER 'CUSTOMER NO.' HOTSPOT ON,
    16 SY-VLINE,
    KNA1-NAME1 UNDER 'NAME',
    61 SY-VLINE,
    KNA1-ORT01 UNDER 'CITY',
    86 SY-VLINE,
    KNA1-LAND1 UNDER 'COUNTRY',
    103 SY-VLINE.
    HIDE: KNA1-KUNNR.
    ENDSELECT.
    ULINE.
    *SECONDARY LIST ACCESS
    AT user-command.
    IF SY-UCOMM = 'IONE'.
    PERFORM SALES_ORD.
    ENDIF.
    IF SY-UCOMM = 'ITWO'.
    PERFORM ITEM_DET.
    ENDIF.
    *TOP OF PAGE
    TOP-OF-PAGE.
    FORMAT COLOR 1.
    WRITE : 'CUSTOMER DETAILS'.
    FORMAT COLOR 1 OFF.
    ULINE.
    FORMAT COLOR 3.
    WRITE : 1 SY-VLINE,
    3 'CUSTOMER NO.',
    16 SY-VLINE,
    18 'NAME',
    61 SY-VLINE,
    63 'CITY',
    86 SY-VLINE,
    88 'COUNTRY',
    103 SY-VLINE.
    ULINE.
    FORMAT COLOR 3 OFF.
    *TOP OF PAGE FOR SECONDARY LISTS
    TOP-OF-PAGE DURING LINE-SELECTION.
    *TOP OF PAGE FOR 1ST SECONDARY LIST
    IF SY-UCOMM = 'IONE'.
    ULINE.
    FORMAT COLOR 1.
    WRITE : 'SALES ORDER DETAILS'.
    ULINE.
    FORMAT COLOR 1 OFF.
    FORMAT COLOR 3.
    WRITE : 1 SY-VLINE,
    3 'CUSTOMER NO.',
    16 SY-VLINE,
    18 'SALES ORDER NO.',
    40 SY-VLINE,
    42 'DATE',
    60 SY-VLINE,
    62 'CREATOR',
    85 SY-VLINE,
    87 'DOC DATE',
    103 SY-VLINE.
    ULINE.
    ENDIF.
    FORMAT COLOR 3 OFF.
    *TOP OF PAGE FOR 2ND SECONDARY LIST
    IF SY-UCOMM = 'ITWO'.
    ULINE.
    FORMAT COLOR 1.
    WRITE : 'ITEM DETAILS'.
    ULINE.
    FORMAT COLOR 1 OFF.
    FORMAT COLOR 3.
    WRITE : 1 SY-VLINE,
    3 'SALES ORDER NO.',
    40 SY-VLINE,
    42 'SALES ITEM NO.',
    60 SY-VLINE,
    62 'ORDER QUANTITY',
    103 SY-VLINE.
    ULINE.
    ENDIF.
    FORMAT COLOR 3 OFF.
    *END OF PAGE
    END-OF-PAGE.
    ULINE.
    WRITE :'USER :',SY-UNAME,/,'DATE :', SY-DATUM, 85 'END OF PAGE:',
    SY-PAGNO.
    SKIP.
    *& Form SALES_ORD
    *& FIRST SECONDARY LIST FORM
    FORM SALES_ORD .
    SELECT KUNNR VBELN ERDAT ERNAM AUDAT INTO
    (VBAK-KUNNR, VBAK-VBELN, VBAK-ERDAT, VBAK-ERNAM, VBAK-AUDAT)
    FROM VBAK
    WHERE KUNNR = KNA1-KUNNR.
    WRITE:/1 SY-VLINE,
    VBAK-KUNNR UNDER 'CUSTOMER NO.' HOTSPOT ON,
    16 SY-VLINE,
    VBAK-VBELN UNDER 'SALES ORDER NO.' HOTSPOT ON,
    40 SY-VLINE,
    VBAK-ERDAT UNDER 'DATE',
    60 SY-VLINE,
    VBAK-ERNAM UNDER 'CREATOR',
    85 SY-VLINE,
    VBAK-AUDAT UNDER 'DOC DATE',
    103 SY-VLINE.
    HIDE : VBAK-VBELN.
    ENDSELECT.
    ULINE.
    ENDFORM. " SALES_ORD
    *& Form ITEM_DET
    *& SECOND SECONDARY LIST FORM
    FORM ITEM_DET .
    SELECT VBELN POSNR KWMENG INTO
    (VBAP-VBELN, VBAP-POSNR, VBAP-KWMENG)
    FROM VBAP
    WHERE VBELN = VBAK-VBELN.
    WRITE : /1 SY-VLINE,
    VBAP-VBELN UNDER 'SALES ORDER NO.',
    40 SY-VLINE,
    VBAP-POSNR UNDER 'SALES ITEM NO.',
    60 SY-VLINE,
    VBAP-KWMENG UNDER 'ORDER QUANTITY',
    103 SY-VLINE.
    ENDSELECT.
    ULINE.
    ENDFORM. " ITEM_DET
    REPORT demo_list_at_pf.
    START-OF-SELECTION.
    WRITE 'Basic List, Press PF5, PF6, PF7, or PF8'.
    AT pf5.
    PERFORM out.
    AT pf6.
    PERFORM out.
    AT pf7.
    PERFORM out.
    AT pf8.
    PERFORM out.
    FORM out.
    WRITE: 'Secondary List by PF-Key Selection',
    / 'SY-LSIND =', sy-lsind,
    / 'SY-UCOMM =', sy-ucomm.
    ENDFORM.
    After executing the program, the system displays the basic list. The user can press the function keys F5 , F6 , F7 , and F8 to create secondary lists. If, for example, the 14th key the user presses is F6 , the output on the displayed secondary list looks as follows:
    Secondary List by PF-Key Selection
    SY-LSIND = 14
    SY-UCOMM = PF06
    Example for AT USER-COMMAND.
    REPORT demo_list_at_user_command NO STANDARD PAGE HEADING.
    START-OF-SELECTION.
    WRITE: 'Basic List',
    / 'SY-LSIND:', sy-lsind.
    TOP-OF-PAGE.
    WRITE 'Top-of-Page'.
    ULINE.
    TOP-OF-PAGE DURING LINE-SELECTION.
    CASE sy-pfkey.
    WHEN 'TEST'.
    WRITE 'Self-defined GUI for Function Codes'.
    ULINE.
    ENDCASE.
    AT LINE-SELECTION.
    SET PF-STATUS 'TEST' EXCLUDING 'PICK'.
    PERFORM out.
    sy-lsind = sy-lsind - 1.
    AT USER-COMMAND.
    CASE sy-ucomm.
    WHEN 'FC1'.
    PERFORM out.
    WRITE / 'Button FUN 1 was pressed'.
    WHEN 'FC2'.
    PERFORM out.
    WRITE / 'Button FUN 2 was pressed'.
    WHEN 'FC3'.
    PERFORM out.
    WRITE / 'Button FUN 3 was pressed'.
    WHEN 'FC4'.
    PERFORM out.
    WRITE / 'Button FUN 4 was pressed'.
    WHEN 'FC5'.
    PERFORM out.
    WRITE / 'Button FUN 5 was pressed'.
    ENDCASE.
    sy-lsind = sy-lsind - 1.
    FORM out.
    WRITE: 'Secondary List',
    / 'SY-LSIND:', sy-lsind,
    / 'SY-PFKEY:', sy-pfkey.
    ENDFORM.
    <b>Vendor performance report</b>
    See this sample code
    *"Table declarations...................................................
    TABLES:
    EKKO, " Purchasing Document Header
    CDHDR, " Change document header
    SSCRFIELDS. " Fields on selection screens
    *"Selection screen elements............................................
    SELECT-OPTIONS:
    S_EBELN FOR EKKO-EBELN, " Purchasing Document Number
    S_LIFNR FOR EKKO-LIFNR, " Vendor's account number
    S_EKGRP FOR EKKO-EKGRP, " Purchasing group
    S_BEDAT FOR EKKO-BEDAT, " Purchasing Document Date
    S_UDATE FOR CDHDR-UDATE. " Creation date of the change
    " document
    *" Data declarations...................................................
    Field String to hold Purchase Document Number *
    DATA:
    BEGIN OF FS_EBELN,
    EBELN(90) TYPE C, " Purchase Document Number
    ERNAM TYPE EKKO-ERNAM, " Name of Person who Created
    " the Object
    LIFNR TYPE EKKO-LIFNR, " Vendor's account number
    EKGRP TYPE EKKO-EKGRP, " Purchasing group
    BEDAT TYPE EKKO-BEDAT, " Purchasing Document Date
    END OF FS_EBELN,
    Field String to hold Purchase Document Header *
    BEGIN OF FS_EKKO,
    EBELN TYPE EKKO-EBELN, " Purchasing Document Number
    ERNAM TYPE EKKO-ERNAM, " Name of Person who Created the
    " Object
    LIFNR TYPE EKKO-LIFNR, " Vendor's account number
    EKGRP TYPE EKKO-EKGRP, " Purchasing group
    BEDAT TYPE EKKO-BEDAT, " Purchasing Document Date
    END OF FS_EKKO,
    Field String to hold Account Number and name of the Vendor *
    BEGIN OF FS_LFA1,
    LIFNR TYPE LFA1-LIFNR, " Account Number of Vendor
    NAME1 TYPE LFA1-NAME1, " Name1
    END OF FS_LFA1,
    Field String to hold Change date and the name of the user *
    BEGIN OF FS_CDHDR,
    OBJECTCLAS TYPE CDHDR-OBJECTCLAS, " Object Class
    OBJECTID TYPE CDHDR-OBJECTID, " Object value
    CHANGENR TYPE CDHDR-CHANGENR, " Document change number
    USERNAME TYPE CDHDR-USERNAME, " User name
    UDATE TYPE CDHDR-UDATE, " Creation date of the change
    " document
    END OF FS_CDHDR,
    Field String to hold Change document items *
    BEGIN OF FS_CDPOS,
    OBJECTCLAS TYPE CDPOS-OBJECTCLAS," Object class
    OBJECTID(10) TYPE C, " Object Value
    CHANGENR TYPE CDPOS-CHANGENR, " Document change number
    TABNAME TYPE CDPOS-TABNAME, " Table Name
    FNAME TYPE CDPOS-FNAME, " Field Name
    VALUE_NEW TYPE CDPOS-VALUE_NEW, " New contents of changed field
    VALUE_OLD TYPE CDPOS-VALUE_OLD, " Old contents of changed field
    END OF FS_CDPOS,
    Field String to hold Date Element Name *
    BEGIN OF FS_DATAELE,
    TABNAME TYPE DD03L-TABNAME, " Table Name
    FIELDNAME TYPE DD03L-FIELDNAME, " Field Name
    ROLLNAME TYPE DD03L-ROLLNAME, " Data element (semantic domain)
    END OF FS_DATAELE,
    Field String to hold Short Text of the Date Element *
    BEGIN OF FS_TEXT,
    ROLLNAME TYPE DD04T-ROLLNAME, " Data element (semantic domain)
    DDTEXT TYPE DD04T-DDTEXT, " Short Text Describing R/3
    " Repository Objects
    END OF FS_TEXT,
    Field String to hold data to be displayed on the ALV grid *
    BEGIN OF FS_OUTTAB,
    EBELN TYPE EKKO-EBELN, " Purchasing Document Number
    ERNAM TYPE EKKO-ERNAM, " Name of Person who Created the
    " Object
    LIFNR TYPE EKKO-LIFNR, " Vendor's account number
    EKGRP TYPE EKKO-EKGRP, " Purchasing group
    BEDAT TYPE EKKO-BEDAT, " Purchasing Document Date
    WERKS TYPE LFA1-WERKS, " Plant
    NAME1 TYPE LFA1-NAME1, " Name1
    USERNAME TYPE CDHDR-USERNAME, " User name
    UDATE TYPE CDHDR-UDATE, " Creation date of the change
    " document
    DDTEXT TYPE DD04T-DDTEXT, " Short Text Describing R/3
    " Repository Objects
    VALUE_NEW TYPE CDPOS-VALUE_NEW, " New contents of changed field
    VALUE_OLD TYPE CDPOS-VALUE_OLD, " Old contents of changed field
    END OF FS_OUTTAB,
    Internal table to hold Purchase Document Number *
    T_EBELN LIKE STANDARD TABLE
    OF FS_EBELN,
    Internal table to hold Purchase Document Header *
    T_EKKO LIKE STANDARD TABLE
    OF FS_EKKO,
    Temp Internal table to hold Purchase Document Header *
    T_EKKO_TEMP LIKE STANDARD TABLE
    OF FS_EKKO,
    Internal table to hold Account number and Name of the Vendor *
    T_LFA1 LIKE STANDARD TABLE
    OF FS_LFA1,
    Internal Table to hold Change date and the name of the user *
    T_CDHDR LIKE STANDARD TABLE
    OF FS_CDHDR,
    Internal Table to hold Change document items *
    T_CDPOS LIKE STANDARD TABLE
    OF FS_CDPOS,
    Temp. Internal Table to hold Change document items *
    T_CDPOS_TEMP LIKE STANDARD TABLE
    OF FS_CDPOS,
    Internal Table to hold Data Element Name *
    T_DATAELE LIKE STANDARD TABLE
    OF FS_DATAELE,
    Temp. Internal Table to hold Data Element Name *
    T_DATAELE_TEMP LIKE STANDARD TABLE
    OF FS_DATAELE,
    Internal Table to hold Short Text of the Date Element *
    T_TEXT LIKE STANDARD TABLE
    OF FS_TEXT,
    Internal Table to hold data to be displayed on the ALV grid *
    T_OUTTAB LIKE STANDARD TABLE
    OF FS_OUTTAB.
    C L A S S D E F I N I T I O N *
    CLASS LCL_EVENT_HANDLER DEFINITION DEFERRED.
    *" Data declarations...................................................
    Work variables *
    DATA:
    W_EBELN TYPE EKKO-EBELN, " Purchasing Document Number
    W_LIFNR TYPE EKKO-LIFNR, " Vendor's account number
    W_EKGRP TYPE EKKO-EKGRP, " Purchasing group
    W_VALUE TYPE EKKO-EBELN, " Reflected Value
    W_SPACE VALUE ' ', " Space
    W_FLAG TYPE I, " Flag Variable
    W_VARIANT TYPE DISVARIANT, " Variant
    *--- ALV Grid
    W_GRID TYPE REF TO CL_GUI_ALV_GRID,
    *--- Event Handler
    W_EVENT_CLICK TYPE REF TO LCL_EVENT_HANDLER,
    *--- Field catalog table
    T_FIELDCAT TYPE LVC_T_FCAT.
    AT SELECTION-SCREEN EVENT *
    AT SELECTION-SCREEN ON S_EBELN.
    Subroutine to validate Purchase Document Number.
    PERFORM VALIDATE_PD_NUM.
    AT SELECTION-SCREEN ON S_LIFNR.
    Subroutine to validate Vendor Number.
    PERFORM VALIDATE_VEN_NUM.
    AT SELECTION-SCREEN ON S_EKGRP.
    Subroutine to validate Purchase Group.
    PERFORM VALIDATE_PUR_GRP.
    START-OF-SELECTION EVENT *
    START-OF-SELECTION.
    Subroutine to select all Purchase orders.
    PERFORM SELECT_PO.
    CHECK W_FLAG EQ 0.
    Subroutine to select Object values.
    PERFORM SELECT_OBJ_ID.
    CHECK W_FLAG EQ 0.
    Subroutine to select Changed values.
    PERFORM SELECT_CHANGED_VALUE.
    CHECK W_FLAG EQ 0.
    Subroutine to Select Purchase Orders.
    PERFORM SELECT_PUR_DOC.
    Subroutine to select Vendor Details.
    PERFORM SELECT_VENDOR.
    Subroutine to select Text for the Changed values.
    PERFORM DESCRIPTION.
    END-OF-SELECTION EVENT *
    END-OF-SELECTION.
    IF NOT T_EKKO IS INITIAL.
    Subroutine to populate the Output Table.
    PERFORM FILL_OUTTAB.
    Subroutine to build Field Catalog.
    PERFORM PREPARE_FIELD_CATALOG CHANGING T_FIELDCAT.
    CALL SCREEN 100.
    ENDIF. " IF NOT T_EKKO...
    CLASS LCL_EVENT_HANDLER DEFINITION
    Defining Class which handles events
    CLASS LCL_EVENT_HANDLER DEFINITION .
    PUBLIC SECTION .
    METHODS:
    HANDLE_HOTSPOT_CLICK
    FOR EVENT HOTSPOT_CLICK OF CL_GUI_ALV_GRID
    IMPORTING E_ROW_ID E_COLUMN_ID.
    ENDCLASS. " LCL_EVENT_HANDLER DEFINITION
    CLASS LCL_EVENT_HANDLER IMPLEMENTATION
    Implementing the Class which can handle events
    CLASS LCL_EVENT_HANDLER IMPLEMENTATION .
    *---Handle Double Click
    METHOD HANDLE_HOTSPOT_CLICK .
    Subroutine to get the HotSpot Cell information.
    PERFORM GET_CELL_INFO.
    SET PARAMETER ID 'BES' FIELD W_VALUE.
    CALL TRANSACTION 'ME23N'.
    ENDMETHOD. " HANDLE_HOTSPOT_CLICK
    ENDCLASS. " LCL_EVENT_HANDLER
    *& Module STATUS_0100 OUTPUT
    PBO Event
    MODULE STATUS_0100 OUTPUT.
    SET PF-STATUS 'OOPS'.
    SET TITLEBAR 'TIT'.
    Subroutine to fill the Variant Structure
    PERFORM FILL_VARIANT.
    IF W_GRID IS INITIAL.
    CREATE OBJECT W_GRID
    EXPORTING
    I_SHELLSTYLE = 0
    I_LIFETIME =
    I_PARENT = CL_GUI_CONTAINER=>SCREEN0
    I_APPL_EVENTS =
    I_PARENTDBG =
    I_APPLOGPARENT =
    I_GRAPHICSPARENT =
    I_NAME =
    I_FCAT_COMPLETE = SPACE
    EXCEPTIONS
    ERROR_CNTL_CREATE = 1
    ERROR_CNTL_INIT = 2
    ERROR_CNTL_LINK = 3
    ERROR_DP_CREATE = 4
    OTHERS = 5.
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF. " IF SY-SUBRC <> 0
    CALL METHOD W_GRID->SET_TABLE_FOR_FIRST_DISPLAY
    EXPORTING
    I_BUFFER_ACTIVE =
    I_BYPASSING_BUFFER =
    I_CONSISTENCY_CHECK =
    I_STRUCTURE_NAME =
    IS_VARIANT = W_VARIANT
    I_SAVE = 'A'
    I_DEFAULT = 'X'
    IS_LAYOUT =
    IS_PRINT =
    IT_SPECIAL_GROUPS =
    IT_TOOLBAR_EXCLUDING =
    IT_HYPERLINK =
    IT_ALV_GRAPHICS =
    IT_EXCEPT_QINFO =
    IR_SALV_ADAPTER =
    CHANGING
    IT_OUTTAB = T_OUTTAB
    IT_FIELDCATALOG = T_FIELDCAT
    IT_SORT =
    IT_FILTER =
    EXCEPTIONS
    INVALID_PARAMETER_COMBINATION = 1
    PROGRAM_ERROR = 2
    TOO_MANY_LINES = 3
    OTHERS = 4
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF. " IF SY-SUBRC <> 0.
    ENDIF. " IF W_GRID IS INITIAL
    CREATE OBJECT W_EVENT_CLICK.
    SET HANDLER W_EVENT_CLICK->HANDLE_HOTSPOT_CLICK FOR W_GRID.
    ENDMODULE. " STATUS_0100 OUTPUT
    *& Module USER_COMMAND_0100 INPUT
    PAI Event
    MODULE USER_COMMAND_0100 INPUT.
    CASE SY-UCOMM.
    WHEN 'BACK'.
    LEAVE TO SCREEN 0.
    WHEN 'EXIT'.
    LEAVE PROGRAM.
    WHEN 'CANCEL'.
    LEAVE TO SCREEN 0.
    ENDCASE.
    ENDMODULE. " USER_COMMAND_0100 INPUT
    *& Form PREPARE_FIELD_CATALOG
    Subroutine to build the Field catalog
    <--P_T_FIELDCAT Field Catalog Table
    FORM PREPARE_FIELD_CATALOG CHANGING PT_FIELDCAT TYPE LVC_T_FCAT .
    DATA LS_FCAT TYPE LVC_S_FCAT.
    Purchasing group...
    LS_FCAT-FIELDNAME = 'EKGRP'.
    LS_FCAT-REF_TABLE = 'EKKO'.
    LS_FCAT-INTTYPE = 'C'.
    LS_FCAT-OUTPUTLEN = '10'.
    APPEND LS_FCAT TO PT_FIELDCAT.
    CLEAR LS_FCAT.
    Purchasing Document Number...
    LS_FCAT-FIELDNAME = 'EBELN'.
    LS_FCAT-REF_TABLE = 'EKKO' .
    LS_FCAT-EMPHASIZE = 'C411'.
    LS_FCAT-INTTYPE = 'C'.
    LS_FCAT-OUTPUTLEN = '10'.
    LS_FCAT-HOTSPOT = 'X'.
    APPEND LS_FCAT TO PT_FIELDCAT .
    CLEAR LS_FCAT .
    Name of Person who Created the Object...
    LS_FCAT-FIELDNAME = 'ERNAM'.
    LS_FCAT-REF_TABLE = 'EKKO'.
    LS_FCAT-OUTPUTLEN = '15' .
    APPEND LS_FCAT TO PT_FIELDCAT.
    CLEAR LS_FCAT.
    Purchasing Document Date...
    LS_FCAT-FIELDNAME = 'BEDAT'.
    LS_FCAT-REF_TABLE = 'EKKO'.
    LS_FCAT-INTTYPE = 'C'.
    LS_FCAT-OUTPUTLEN = '10'.
    APPEND LS_FCAT TO PT_FIELDCAT.
    CLEAR LS_FCAT.
    Vendor's account number...
    LS_FCAT-FIELDNAME = 'LIFNR'.
    LS_FCAT-REF_TABLE = 'EKKO'.
    LS_FCAT-INTTYPE = 'C'.
    LS_FCAT-OUTPUTLEN = '10'.
    APPEND LS_FCAT TO PT_FIELDCAT.
    CLEAR LS_FCAT.
    Account Number of Vendor or Creditor...
    LS_FCAT-FIELDNAME = 'NAME1'.
    LS_FCAT-REF_TABLE = 'LFA1'.
    LS_FCAT-INTTYPE = 'C'.
    LS_FCAT-OUTPUTLEN = '10'.
    LS_FCAT-COLTEXT = 'Vendor Name'(001).
    LS_FCAT-SELTEXT = 'Vendor Name'(001).
    APPEND LS_FCAT TO PT_FIELDCAT.
    CLEAR LS_FCAT.
    Creation date of the change document...
    LS_FCAT-FIELDNAME = 'UDATE'.
    LS_FCAT-REF_TABLE = 'CDHDR'.
    LS_FCAT-INTTYPE = 'C'.
    LS_FCAT-OUTPUTLEN = '10'.
    LS_FCAT-COLTEXT = 'Change Date'(002).
    LS_FCAT-SELTEXT = 'Change Date'(002).
    APPEND LS_FCAT TO PT_FIELDCAT.
    CLEAR LS_FCAT.
    User name of the person responsible in change document...
    LS_FCAT-FIELDNAME = 'USERNAME'.
    LS_FCAT-REF_TABLE = 'CDHDR'.
    LS_FCAT-INTTYPE = 'C'.
    LS_FCAT-OUTPUTLEN = '10'.
    LS_FCAT-COLTEXT = 'Modified by'(003).
    LS_FCAT-SELTEXT = 'Modified by'(003).
    APPEND LS_FCAT TO PT_FIELDCAT.
    CLEAR LS_FCAT.
    Short Text Describing R/3 Repository Objects...
    LS_FCAT-FIELDNAME = 'DDTEXT'.
    LS_FCAT-REF_TABLE = 'DD04T'.
    LS_FCAT-INTTYPE = 'C'.
    LS_FCAT-OUTPUTLEN = '15'.
    APPEND LS_FCAT TO PT_FIELDCAT.
    CLEAR LS_FCAT.
    Old contents of changed field...
    LS_FCAT-FIELDNAME = 'VALUE_OLD'.
    LS_FCAT-REF_TABLE = 'CDPOS'.
    LS_FCAT-INTTYPE = 'C'.
    LS_FCAT-OUTPUTLEN = '12'.
    APPEND LS_FCAT TO PT_FIELDCAT.
    CLEAR LS_FCAT.
    New contents of changed field...
    LS_FCAT-FIELDNAME = 'VALUE_NEW'.
    LS_FCAT-REF_TABLE = 'CDPOS'.
    LS_FCAT-INTTYPE = 'C'.
    LS_FCAT-OUTPUTLEN = '12'.
    APPEND LS_FCAT TO PT_FIELDCAT.
    CLEAR LS_FCAT.
    ENDFORM. " PREPARE_FIELD_CATALOG
    *& Form SELECT_PO
    Subroutine to select all the Purchase Orders
    There are no interface parameters to be passed to this subroutine.
    FORM SELECT_PO .
    SELECT EBELN " Purchasing Document Number
    ERNAM " Name of Person who Created
    " the Object
    LIFNR " Vendor's account number
    EKGRP " Purchasing group
    BEDAT " Purchasing Document Date
    FROM EKKO
    PACKAGE SIZE 10000
    APPENDING TABLE T_EBELN
    WHERE EBELN IN S_EBELN
    AND BEDAT IN S_BEDAT.
    ENDSELECT.
    IF SY-SUBRC NE 0.
    W_FLAG = 1.
    MESSAGE S401(M8).
    ENDIF. " IF SY-SUBRC NE 0
    ENDFORM. " SELECT_PO
    *& Form SELECT_OBJ_ID
    Subroutine to select Object ID
    There are no interface parameters to be passed to this subroutine.
    FORM SELECT_OBJ_ID .
    IF NOT T_EBELN IS INITIAL.
    SELECT OBJECTCLAS " Object Class
    OBJECTID " Object value
    CHANGENR " Document change number
    USERNAME " User name
    UDATE " Creation date
    FROM CDHDR
    INTO TABLE T_CDHDR
    FOR ALL ENTRIES IN T_EBELN
    WHERE OBJECTID EQ T_EBELN-EBELN
    AND UDATE IN S_UDATE
    AND TCODE IN ('ME21N','ME22N','ME23N').
    ENDSELECT.
    IF SY-SUBRC NE 0.
    W_FLAG = 1.
    MESSAGE S833(M8) WITH 'Header Not Found'(031).
    ENDIF. " IF SY-SUBRC NE 0.
    ENDIF. " IF NOT T_EBELN IS INITIAL
    ENDFORM. " SELECT_OBJ_ID
    *& Form SELECT_CHANGED_VALUE
    Subroutine to select Changed Values
    There are no interface parameters to be passed to this subroutine.
    FORM SELECT_CHANGED_VALUE .
    IF NOT T_CDHDR IS INITIAL.
    SELECT OBJECTCLAS " Object class
    OBJECTID " Object value
    CHANGENR " Document change number
    TABNAME " Table Name
    FNAME " Field Name
    VALUE_NEW " New contents of changed field
    VALUE_OLD " Old contents of changed field
    FROM CDPOS
    PACKAGE SIZE 10000
    APPENDING TABLE T_CDPOS
    FOR ALL ENTRIES IN T_CDHDR
    WHERE OBJECTCLAS EQ T_CDHDR-OBJECTCLAS
    AND OBJECTID EQ T_CDHDR-OBJECTID
    AND CHANGENR EQ T_CDHDR-CHANGENR.
    ENDSELECT.
    IF SY-SUBRC NE 0.
    W_FLAG = 1.
    MESSAGE S833(M8) WITH 'Item Not Found'(032).
    ENDIF. " IF SY-SUBRC NE 0.
    ENDIF. " IF NOT T_CDHDR IS INITIAL
    T_CDPOS_TEMP[] = T_CDPOS[].
    ENDFORM. " SELECT_CHANGED_VALUE
    *& Form SELECT_PUR_DOC
    Subroutine to select Purchase Order Details
    There are no interface parameters to be passed to this subroutine.
    FORM SELECT_PUR_DOC .
    IF NOT T_CDPOS IS INITIAL.
    SORT T_EBELN BY EBELN.
    LOOP AT T_CDPOS INTO FS_CDPOS.
    READ TABLE T_EBELN INTO FS_EBELN WITH KEY EBELN =
    FS_CDPOS-OBJECTID BINARY SEARCH.
    IF SY-SUBRC NE 0.
    DELETE TABLE T_EBELN FROM FS_EBELN.
    ENDIF. " IF SY-SUBRC NE 0.
    ENDLOOP. " LOOP AT T_CDPOS...
    LOOP AT T_EBELN INTO FS_EBELN.
    MOVE FS_EBELN-EBELN TO FS_EKKO-EBELN.
    MOVE FS_EBELN-ERNAM TO FS_EKKO-ERNAM.
    MOVE FS_EBELN-LIFNR TO FS_EKKO-LIFNR.
    MOVE FS_EBELN-EKGRP TO FS_EKKO-EKGRP.
    MOVE FS_EBELN-BEDAT TO FS_EKKO-BEDAT.
    APPEND FS_EKKO TO T_EKKO.
    ENDLOOP. " LOOP AT T_EBELN...
    T_EKKO_TEMP[] = T_EKKO[].
    ENDIF. " IF NOT T_CDPOS IS INITIAL
    ENDFORM. " SELECT_PUR_DOC
    *& Form SELECT_VENDOR
    Subroutine to select Vendor details
    There are no interface parameters to be passed to this subroutine.
    FORM SELECT_VENDOR .
    IF NOT T_EKKO IS INITIAL.
    SORT T_EKKO_TEMP BY LIFNR.
    DELETE ADJACENT DUPLICATES FROM T_EKKO_TEMP COMPARING LIFNR.
    SELECT LIFNR " Account Number of Vendor or
    " Creditor
    NAME1 " Name 1
    FROM LFA1
    INTO TABLE T_LFA1
    FOR ALL ENTRIES IN T_EKKO_TEMP
    WHERE LIFNR EQ T_EKKO_TEMP-LIFNR.
    IF SY-SUBRC NE 0.
    MESSAGE S002(M8) WITH 'Master Details'(033).
    ENDIF. " IF SY-SUBRC NE 0.
    ENDIF. " IF NOT T_EKKO IS INITIAL
    ENDFORM. " SELECT_VENDOR
    *& Form DESCRIPTION
    Subroutine to get the description
    There are no interface parameters to be passed to this subroutine.
    FORM DESCRIPTION .
    IF NOT T_CDPOS IS INITIAL.
    SORT T_CDPOS_TEMP BY TABNAME FNAME.
    DELETE ADJACENT DUPLICATES FROM T_CDPOS_TEMP COMPARING TABNAME FNAME
    SELECT TABNAME " Table Name
    FIELDNAME " Field Name
    ROLLNAME " Data element
    FROM DD03L
    INTO TABLE T_DATAELE
    FOR ALL ENTRIES IN T_CDPOS_TEMP
    WHERE TABNAME EQ T_CDPOS_TEMP-TABNAME
    AND FIELDNAME EQ T_CDPOS_TEMP-FNAME.
    IF NOT T_DATAELE IS INITIAL.
    T_DATAELE_TEMP[] = T_DATAELE[].
    SORT T_DATAELE_TEMP BY ROLLNAME.
    DELETE ADJACENT DUPLICATES FROM T_DATAELE_TEMP COMPARING ROLLNAME.
    SELECT ROLLNAME " Data element
    DDTEXT " Short Text Describing R/3
    " Repository Objects
    FROM DD04T
    INTO TABLE T_TEXT
    FOR ALL ENTRIES IN T_DATAELE_TEMP
    WHERE ROLLNAME EQ T_DATAELE_TEMP-ROLLNAME
    AND DDLANGUAGE EQ SY-LANGU.
    IF SY-SUBRC NE 0.
    EXIT.
    ENDIF. " IF SY-SUBRC NE 0.
    ENDIF. " IF NOT T_DATAELE IS INITIAL.
    ENDIF. " IF NOT T_CDPOS IS INITIAL.
    ENDFORM. " DESCRIPTION
    *& Form FILL_OUTTAB
    Subroutine to populate the Outtab
    There are no interface parameters to be passed to this subroutine.
    FORM FILL_OUTTAB .
    SORT T_CDHDR BY OBJECTCLAS OBJECTID CHANGENR.
    SORT T_EKKO BY EBELN.
    SORT T_LFA1 BY LIFNR.
    SORT T_DATAELE BY TABNAME FIELDNAME.
    SORT T_TEXT BY ROLLNAME.
    LOOP AT T_CDPOS INTO FS_CDPOS.
    READ TABLE T_CDHDR INTO FS_CDHDR WITH KEY
    OBJECTCLAS = FS_CDPOS-OBJECTCLAS
    OBJECTID = FS_CDPOS-OBJECTID
    CHANGENR = FS_CDPOS-CHANGENR
    BINARY SEARCH.
    IF SY-SUBRC EQ 0.
    MOVE FS_CDHDR-USERNAME TO FS_OUTTAB-USERNAME.
    MOVE FS_CDHDR-UDATE TO FS_OUTTAB-UDATE.
    READ TABLE T_EKKO INTO FS_EKKO WITH KEY
    EBELN = FS_CDHDR-OBJECTID
    BINARY SEARCH.
    IF SY-SUBRC EQ 0.
    MOVE FS_EKKO-EBELN TO FS_OUTTAB-EBELN.
    MOVE FS_EKKO-ERNAM TO FS_OUTTAB-ERNAM.
    MOVE FS_EKKO-LIFNR TO FS_OUTTAB-LIFNR.
    MOVE FS_EKKO-EKGRP TO FS_OUTTAB-EKGRP.
    MOVE FS_EKKO-BEDAT TO FS_OUTTAB-BEDAT.
    READ TABLE T_LFA1 INTO FS_LFA1 WITH KEY
    LIFNR = FS_EKKO-LIFNR
    BINARY SEARCH.
    IF SY-SUBRC EQ 0.
    MOVE FS_LFA1-NAME1 TO FS_OUTTAB-NAME1.
    ENDIF. " IF SY-SUBRC EQ 0.
    ENDIF. " IF SY-SUBRC EQ 0.
    ENDIF. " IF SY-SUBRC EQ 0.
    MOVE FS_CDPOS-VALUE_NEW TO FS_OUTTAB-VALUE_NEW.
    MOVE FS_CDPOS-VALUE_OLD TO FS_OUTTAB-VALUE_OLD.
    READ TABLE T_DATAELE INTO FS_DATAELE WITH KEY
    TABNAME = FS_CDPOS-TABNAME
    FIELDNAME = FS_CDPOS-FNAME
    BINARY SEARCH.
    IF SY-SUBRC EQ 0.
    READ TABLE T_TEXT INTO FS_TEXT WITH KEY
    ROLLNAME = FS_DATAELE-ROLLNAME
    BINARY SEARCH.
    IF SY-SUBRC EQ 0.
    MOVE FS_TEXT-DDTEXT TO FS_OUTTAB-DDTEXT.
    ENDIF. " IF SY-SUBRC EQ 0.
    ENDIF. " IF SY-SUBRC EQ 0.
    APPEND FS_OUTTAB TO T_OUTTAB.
    CLEAR FS_OUTTAB.
    ENDLOOP.
    ENDFORM. " FILL_OUTTAB
    *& Form GET_CELL_INFO
    Subroutine to get the Cell Information
    --> W_VALUE Holds the value of Hotspot clicked
    FORM GET_CELL_INFO .
    CALL METHOD W_GRID->GET_CURRENT_CELL
    IMPORTING
    E_ROW =
    E_VALUE = W_VALUE
    E_COL =
    ES_ROW_ID =
    ES_COL_ID =
    ES_ROW_NO =
    ENDFORM. " GET_CELL_INFO
    *& Form VALIDATE_PD_NUM
    Subroutine to validate Purchase Document Number
    There are no interface parameters to be passed to this subroutine.
    FORM VALIDATE_PD_NUM .
    IF NOT S_EBELN[] IS INITIAL.
    SELECT EBELN " Purchase Document Number
    FROM EKKO
    INTO W_EBELN
    UP TO 1 ROWS
    WHERE EBELN IN S_EBELN.
    ENDSELECT.
    IF SY-SUBRC NE 0.
    CLEAR SSCRFIELDS-UCOMM.
    MESSAGE E717(M8).
    ENDIF. " IF SY-SUBRC NE 0
    ENDIF. " IF NOT S_EBELN[]...
    ENDFORM. " VALIDATE_PD_NUM
    *& Form VALIDATE_VEN_NUM
    Subroutine to validate Vendor Number
    There are no interface parameters to be passed to this subroutine.
    FORM VALIDATE_VEN_NUM .
    IF NOT S_LIFNR[] IS INITIAL.
    SELECT LIFNR " Vendor Number
    FROM LFA1
    INTO W_LIFNR
    UP TO 1 ROWS
    WHERE LIFNR IN S_LIFNR.
    ENDSELECT.
    IF SY-SUBRC NE 0.
    CLEAR SSCRFIELDS-UCOMM.
    MESSAGE E002(M8) WITH W_SPACE.
    ENDIF. " IF SY-SUBRC NE 0
    ENDIF. " IF NOT S_LIFNR[]...
    ENDFORM. " VALIDATE_VEN_NUM
    *& Form VALIDATE_PUR_GRP
    Subroutine to validate the Purchase Group
    There are no interface parameters to be passed to this subroutine.
    FORM VALIDATE_PUR_GRP .
    IF NOT S_EKGRP[] IS INITIAL.
    SELECT EKGRP " Purchase Group
    FROM T024
    INTO W_EKGRP
    UP TO 1 ROWS
    WHERE EKGRP IN S_EKGRP.
    ENDSELECT.
    IF SY-SUBRC NE 0.
    CLEAR SSCRFIELDS-UCOMM.
    MESSAGE E622(M8) WITH W_SPACE.
    ENDIF. " IF SY-SUBRC NE 0
    ENDIF. " IF NOT S_EKFRP[]...
    ENDFORM. " VALIDATE_PUR_GRP
    *& Form FILL_VARIANT
    Subroutine to fill the Variant Structure
    There are no interface parameters to be passed to this subroutine
    FORM FILL_VARIANT .
    Filling the Variant structure
    W_VARIANT-REPORT = SY-REPID.
    W_VARIANT-USERNAME = SY-UNAME.
    ENDFORM. " FILL_VARIANT
    <b>Reward if usefull</b>

Maybe you are looking for