COMMON EXAMPLES FOR BUILDING SUBROUTINES IN PROGRAMS
REPORT ZSUBS .
*PARAMETERS : PAMT TYPE P DECIMALS 2,
* TM TYPE P DECIMALS 2,
* RT TYPE P DECIMALS 2.
*DATA SI TYPE P DECIMALS 2.
*
* PERFORM SIMPINT CHANGING PAMT TM RT SI.
* WRITE : / 'OUTSIDE SUBROUTINE ' COLOR 3.
* WRITE : / 'AMOUNT ', PAMT, / 'TIME ', TM , / 'RATE ', RT.
* WRITE : / ' SIMPLE INTREST ', SI.
*
* FORM SIMPINT CHANGING VALUE(AMT) VALUE(TIM) VALUE(RAT)
* VALUE(TI).
* TI = ( AMT * TIM * RAT ) / 100.
* WRITE : / 'WITHIN SUBROUTINE '.
* WRITE : / AMT, TI.
* TIM = '5'.
* RAT = '3'.
* TI = '120'.
* AMT = '3456'.
* ENDFORM.
**** EXTERNAL SUBS ****
*DATA : X TYPE I VALUE 500,
* Y TYPE I VALUE 200.
*PERFORM WELCOME(ZEXTS).
*PERFORM RESULT(ZEXTS).
*PERFORM CHKBAL(ZEXTS) USING X Y.
**** PASSING A STRUCTURE AS PARAMETER
*TYPES : BEGIN OF STRU,
* NO(5) TYPE N,
* NAME(20),
* ADDRS(20),
* AMT TYPE P DECIMALS 2,
* END OF STRU.
*
*DATA : CUST TYPE STRU.
*
* CUST-NO = '1234'.
* CUST-NAME = 'RAJ KUMAR'.
* CUST-ADDRS = 'AMEERPET'.
* CUST-AMT = '345.23'.
* WRITE : / 'BEFORE CALLING SUBROUTINE ' COLOR 3.
* WRITE : / ' NUMBER : ', CUST-NO.
* WRITE : / ' NAME : ', CUST-NAME.
* WRITE : / ' ADDRESS : ', CUST-ADDRS.
* WRITE : / ' SALARY : ', CUST-AMT.
*
* PERFORM GETSTRU USING CUST.
*
* WRITE : / 'AFTER CALLING SUBROUTINE ' COLOR 3.
*
* WRITE : / ' NUMBER : ', CUST-NO.
* WRITE : / ' NAME : ', CUST-NAME.
* WRITE : / ' ADDRESS : ', CUST-ADDRS.
* WRITE : / ' SALARY : ', CUST-AMT.
*
* FORM GETSTRU USING VALUE(TCUST) TYPE STRU.
* TCUST-NO = '345'.
* TCUST-NAME = 'PRASHANTH'.
* TCUST-ADDRS = 'BHILLS'.
* TCUST-AMT = '755.23'.
* ENDFORM.
*** MAKING TABLE AS LOCAL
*TABLES : KNA1.
*PERFORM TABTEST1.
*WRITE : / ' AFTER CALLING TABTEST1 SUBROUTINE ' COLOR 4.
*WRITE : / 'NUMBER : ', KNA1-KUNNR.
*WRITE : / 'NAME : ', KNA1-NAME1.
*WRITE : / 'CITY : ', KNA1-ORT01.
*
*PERFORM TABTEST2.
*WRITE : / ' AFTER CALLING TABTEST2 SUBROUTINE ' COLOR 3.
*WRITE : / 'NUMBER : ', KNA1-KUNNR.
*WRITE : / 'NAME : ', KNA1-NAME1.
*WRITE : / 'CITY : ', KNA1-ORT01.
*
*FORM TABTEST1.
*KNA1-KUNNR = '111'.
*KNA1-NAME1 = 'RAVI'.
*KNA1-ORT01 = 'HYD'.
*ENDFORM.
*
*FORM TABTEST2.
*LOCAL KNA1.
*KNA1-KUNNR = '222'.
*KNA1-NAME1 = 'SWATHI'.
*KNA1-ORT01 = 'SECBAD'.
*WRITE : / 'INSIDE THE SUBROUTINE2 ' COLOR 6.
*WRITE : / 'NUMBER : ', KNA1-KUNNR.
*WRITE : / 'NAME : ', KNA1-NAME1.
*WRITE : / 'CITY : ', KNA1-ORT01.
*ENDFORM.
*
**** STOP WITH SUBROUTINE
*DATA NUM TYPE I VALUE 10.
*PERFORM SUB1.
*WRITE : / 'NUMBER ', NUM.
*
*FORM SUB1.
*WRITE : / 'INSIDE THE SUB1 ', NUM.
*NUM = 30.
*STOP.
*ENDFORM.
**** STATICS WITH SUBROUTINE
*DO 3 TIMES.
*PERFORM TEST1.
*ENDDO.
*
*FORM TEST1.
*STATICS NO TYPE I VALUE 3.
*
*WRITE : / ' NUMBER ', NO.
*NO = NO + 10.
*ENDFORM.
*
**** CALLING SUBROUTINE FROM ANOTHER REPORT PROGRAM
*PERFORM WELCOME IN PROGRAM ZCALLSUB.
**** CREATION OF AN ARRAY
*DATA : NUM TYPE I,
* ARRAY TYPE I OCCURS 5.
*
* DO 5 TIMES .
* NUM = SY-INDEX + 5.
* APPEND NUM TO ARRAY.
* ENDDO.
*
* WRITE : / 'DATA FROM ARRAY '.
* LOOP AT ARRAY INTO NUM.
* WRITE : / NUM.
* ENDLOOP.
***** PASSING AN ARRAY FROM ONE REPORT TO ANOTHER REPORT
DATA : NUMBER TYPE I,
TAB TYPE I OCCURS 5.
SUBMIT ZCALLSUB AND RETURN.
IMPORT TAB FROM MEMORY ID 'ABC'.
WRITE : / 'DATA FROM TAB ARRAY '.
LOOP AT ATAB INTO NUMBER.
WRITE : / NUMBER.
ENDLOOP.
REPORT ZPROCUDERS .
*****************************************
// WISHING PROCEDURE ...
DO 5 TIMES.
PERFORM GREETINGS.
ENDDO.
FORM GREETINGS.
WRITE : / 'CONGRATS ' .
ENDFORM.
*****************************************
ADDING TWO NUMBER THROUGH USING OPTION
PARAMETERS : A TYPE I, B TYPE I.
DATA Z TYPE I.
WRITE : / ' BEFORE PROCEDURE CALLING ..', Z.
PERFORM CALC USING Z.
WRITE : / 'AFTER CALLING Z : ', Z.
FORM CALC USING Z .
Z = A + B.
WRITE : / ' Z : ', Z.
ENDFORM.
*****************************************
PARAMETERS TM TYPE I.
PARAMETERS : R TYPE P DECIMALS 2,
PIE TYPE P DECIMALS 2.
PERFORM WISH.
PARAMETERS N TYPE I.
PERFORM FACT USING N.
WRITE : / ' N = ' , N.
FORM WISH.
IF TM > 5 AND TM < 12.
WRITE : / ' GOOD MORNING '.
ELSEIF TM >= 12 AND TM < 4.
WRITE : / 'GOOD AFTER NOON'.
ELSEIF TM >= 4 AND TM < 8.
WRITE : / ' GOOD EVENING '.
ENDIF.
ENDFORM.
*****************************************
PERFORM AREA.
FORM AREA.
DATA AR TYPE P.
AR = PIE * R * R.
WRITE : / ' AREA = ' , AR.
ENDFORM.
******************************************
FINDING FACTORIAL
PARAMETERS N TYPE I.
DATA TP TYPE I VALUE 1.
DATA K TYPE I.
K = N.
FORM FACT USING N.
DO N TIMES.
TP = TP * K .
K = K - 1.
ENDDO.
N = K.
ENDFORM.
*****************************************
PROGRAM FORMPOOL.
FORM HEADER.
WRITE: / 'PROGRAM STARTED BY', SY-UNAME,
/ 'ON HOST', SY-HOST,
'DATE:', SY-DATUM, 'TIME:', SY-UZEIT.
ULINE.
ENDFORM.
THE SUBROUTINE CAN THEN BE CALLED FROM ANOTHER PROGRAM AS FOLLOWS:
PROGRAM FORM_TEST.
PERFORM HEADER(FORMPOOL) IF FOUND.
**********************************************
PROGRAM FORM_TEST.
DO 2 TIMES.
PERFORM SY-INDEX OF SUB1 SUB2.
ENDDO.
FORM SUB1.
WRITE / 'SUBROUTINE 1'.
ENDFORM.
FORM SUB2.
WRITE / 'SUBROUTINE 2'.
ENDFORM.
************************************************
INCLUDE STARTTXT.
WRITE: / 'PROGRAM STARTED BY', SY-UNAME,
/ 'ON HOST', SY-HOST,
'DATE:', SY-DATUM, 'TIME:', SY-UZEIT.
ULINE.
WE CAN THEN INCLUDE THIS PROGRAM IN ANY OTHER ABAP PROGRAM TO DISPLAY A STANDARD LIST HEADER.
PROGRAM SAPMZTST.
INCLUDE STARTTXT.
***********************************************
REPORT ZPROCUDURES .
*DO 5 TIMES.
*PERFORM GREETINGS.
*ENDDO.
*
*FORM GREETINGS.
*WRITE : / 'CONGRATS ' .
*ENDFORM.
*********FINDING FACTORIAL **********
PERFORM FACT USING N.
PARAMETERS N TYPE I.
DATA TP TYPE I VALUE 1.
DATA K TYPE I.
K = N.
FORM FACT USING N.
DO N TIMES.
TP = TP * K .
K = K - 1.
ENDDO.
********* REPEATEDLY CALLING *************
PROGRAM FORM_TEST.
DO 2 TIMES.
PERFORM SY-INDEX OF SUB1 SUB2.
ENDDO.
FORM SUB1.
WRITE / 'VENKAT'.
ENDFORM.
FORM SUB2.
WRITE / 'ESWAR'.
ENDFORM.
*********** USING **************
*PARAMETERS : A TYPE I, B TYPE I.
*DATA Z TYPE I.
*WRITE : / ' BEFORE PROCEDURE CALLING ..', Z.
*PERFORM CALC USING Z.
*WRITE : / 'AFTER CALLING Z : ', Z.
**
*FORM CALC USING K .
*K = A + B.
*WRITE : / 'K : ', K.
*ENDFORM.
**************** USING VALUE *****************
*PARAMETERS : A TYPE I, B TYPE I.
*DATA Z TYPE I.
*WRITE : / ' BEFORE PROCEDURE CALLING ..', Z.
*PERFORM CALC USING Z.
*WRITE : / 'AFTER CALLING Z : ', Z.
**
*FORM CALC USING VALUE(K).
*K = A + B.
*WRITE : / ' K= ' , K.
*ENDFORM.
**************** CHANGING VALUE ***********************
*PARAMETERS : A TYPE I, B TYPE I.
*DATA Z TYPE I.
*Z = 10.
*
*WRITE : / ' BEFORE PROCEDURE CALLING ..', Z.
*PERFORM CALC CHANGING Z.
*WRITE : / 'AFTER CALLING Z : ', Z.
*
*FORM CALC CHANGING VALUE(ZZ).
*ZZ = 100.
*ENDFORM.
************ USING AND CHANGING TOGETHER ********
DATA: NUM TYPE I VALUE 5,
FAC TYPE I VALUE 0.
PERFORM FACT USING NUM CHANGING FAC.
WRITE: / 'FACTORIAL OF', NUM, 'IS', FAC.
FORM FACT
USING VALUE(F_NUM)
CHANGING F_FACT.
F_FACT = 1.
WHILE F_NUM GE 1.
F_FACT = F_FACT * F_NUM.
F_NUM = F_NUM - 1.
ENDWHILE.
ENDFORM.
**************** EXTERNAL PROCUDERES ****************
REPORT ZEXTSUB .
PERFORM GIFT(ZEXTRENAL).
---------------------------
PARAMETERS GFT(10) TYPE C .
PERFORM GIFT(ZEXTRENAL) USING GFT.
WRITE : / ' IN THE REPORT '.
WRITE : / ' WANTS A ' , GFT.
-------------------------------
PARAMETERS GFT(10) TYPE C .
PERFORM GIFT(ZEXTRENAL) CHANGING GFT.
WRITE : / ' IN THE REPORT '.
WRITE : / ' WANTS A ' , GFT.
--------------------------------------------------------
PERFORM HEADER(ZEXTRENAL) IF FOUND.
*************************************************
PROGRAM EXTRENAL ...
FORM GIFT.
WRITE : / ' YOUR GIFT IS ON THE WAY '.
ENDFORM.
-------------------------------------------------------------
FORM GIFT USING NAME1.
WRITE : / ' WANT A CAR BUT NOT ', NAME1.
NAME1 = 'CAR'.
ENDFORM.
----------------------------------------------------
FORM GIFT USING VALUE(NAME1).
WRITE : / ' WANT A CAR BUT NOT ', NAME1.
NAME1 = 'CAR'.
ENDFORM.
-----------------------------------------------------------
FORM GIFT CHANGING VALUE(NAME1).
WRITE : / ' WANT A CAR BUT NOT ', NAME1.
NAME1 = 'CAR'.
ENDFORM.
------------------------------------------------------
FORM HEADER.
WRITE: / 'PROGRAM STARTED BY', SY-UNAME,
/ 'ON HOST', SY-HOST,
'DATE:', SY-DATUM, 'TIME:', SY-UZEIT.
ULINE.
ENDFORM.
*********** PASSING STRUCTURE AS A PARAMETER ******
TYPES: BEGIN OF CITIZEN,
NAME(10) TYPE C,
AGE(2) TYPE N,
COUNTRY(3) TYPE C,
END OF CITIZEN.
DATA CINFO TYPE CITIZEN.
CINFO-NAME = 'RAVI'. CINFO-AGE = '20'. CINFO-COUNTRY = 'IND'.
PERFORM TESTINFO CHANGING CINFO.
WRITE: / CINFO-NAME, CINFO-AGE, CINFO-COUNTRY.
FORM TESTINFO
CHANGING VALUE(PERSON) TYPE CITIZEN.
WRITE: / PERSON-NAME, PERSON-AGE, PERSON-COUNTRY.
PERSON-NAME = 'MOUNI'.
PERSON-AGE = '6'.
PERSON-COUNTRY = 'USA'.
ENDFORM.
************* MAKING STRUCTURE LOCAL *********
TABLES SFLIGHT.
PERFORM TABTEST1.
WRITE: / SFLIGHT-PLANETYPE, SFLIGHT-PRICE.
PERFORM TABTEST2.
WRITE: / SFLIGHT-PLANETYPE, SFLIGHT-PRICE.
FORM TABTEST1.
SFLIGHT-PLANETYPE = 'A310'.
SFLIGHT-PRICE = '150.00'.
WRITE: / SFLIGHT-PLANETYPE, SFLIGHT-PRICE.
ENDFORM.
FORM TABTEST2.
LOCAL SFLIGHT.
SFLIGHT-PLANETYPE = 'B747'.
SFLIGHT-PRICE = '500.00'.
WRITE: / SFLIGHT-PLANETYPE, SFLIGHT-PRICE.
ENDFORM.
********** STATISTICS FILED DECLARATION **********
PERFORM DATATEST1.
PERFORM DATATEST1.
SKIP.
PERFORM DATATEST2.
PERFORM DATATEST2.
FORM DATATEST1.
TYPES F_WORD(5) TYPE C.
DATA F_TEXT TYPE F_WORD VALUE 'INIT'.
WRITE F_TEXT.
F_TEXT = '12345'.
WRITE F_TEXT.
ENDFORM.
FORM DATATEST2.
TYPES F_WORD(5) TYPE C.
STATICS F_TEXT TYPE F_WORD VALUE 'INIT'.
WRITE F_TEXT.
F_TEXT = 'ABCDE'.
WRITE F_TEXT.
ENDFORM.
***************
DATA:
DATE1 TYPE D, DATE2 TYPE T,
STRING1(6) TYPE C, STRING2(8) TYPE C,
NUMBER1 TYPE P DECIMALS 2, NUMBER2 TYPE P,
COUNT1 TYPE I, COUNT2 TYPE I.
PERFORM TYPETEST USING DATE1 STRING1 NUMBER1 COUNT1.
SKIP.
PERFORM TYPETEST USING DATE2 STRING2 NUMBER2 COUNT2.
FORM TYPETEST USING NOW
TXT TYPE C
VALUE(NUM) TYPE P
INT TYPE I.
DATA: T.
DESCRIBE FIELD NOW TYPE T.
WRITE: / 'TYPE OF NOW IS', T.
DESCRIBE FIELD TXT LENGTH T.
WRITE: / 'LENGTH OF TXT IS', T.
DESCRIBE FIELD NUM DECIMALS T.
WRITE: / 'DECIMALS OF NUM ARE', T.
DESCRIBE FIELD INT TYPE T.
WRITE: / 'TYPE OF INT IS', T.
ENDFORM.
REPORT ZSUBS .
*************** WISHING PROCEDURE ******************
*DO 5 TIMES.
*PERFORM GREETINGS.
*ENDDO.
*
*FORM GREETINGS.
*WRITE : / 'CONGRATS ' .
*ENDFORM.
*******ADDING TWO NUMBER THROUGH USING OPTION **********
*PARAMETERS : A TYPE I, B TYPE I.
*DATA Z TYPE I.
*WRITE : / ' BEFORE PROCEDURE CALLING ..', Z.
*PERFORM CALC USING Z.
*WRITE : / 'AFTER CALLING Z : ', Z.
*WRITE : / ' VALUES OF A, B IN REPORT ', A, B.
*
*FORM CALC USING Z .
*Z = A + B.
*WRITE : / 'WITHIN SUBROUTINE Z = ', Z.
*A = 20.
*B = 30.
*ENDFORM.
*
******************************************
*PARAMETERS TM TYPE I.
*PARAMETERS : R TYPE P DECIMALS 2,
* PIE TYPE P DECIMALS 2.
*
*PERFORM WISH.
*PARAMETERS N TYPE I.
*PERFORM FACT USING N.
*WRITE : / ' N = ' , N.
*
*FORM WISH.
*IF TM > 5 AND TM < 12.
*WRITE : / ' GOOD MORNING '.
*ELSEIF TM >= 12 AND TM < 4.
*WRITE : / 'GOOD AFTER NOON'.
*ELSEIF TM >= 4 AND TM < 8.
*WRITE : / ' GOOD EVENING '.
*ENDIF.
*ENDFORM.
******************************************
*PERFORM AREA.
*
*FORM AREA.
* DATA AR TYPE P.
* AR = PIE * R * R.
* WRITE : / ' AREA = ' , AR.
*ENDFORM.
*
******************** FINDING FACTORIAL ****************
*PARAMETERS N TYPE I.
*DATA TP TYPE I VALUE 1.
*DATA K TYPE I.
*K = N.
*PERFORM FACT USING K.
*WRITE : / ' RESULT = ' , N.
*
*FORM FACT USING K.
*DO N TIMES.
*TP = TP * K .
*K = K - 1.
*ENDDO.
*N = TP.
*ENDFORM.
*********************** EXTERNAL PROCEDURE *****************
*PERFORM TEST(ZSUBSEXT).
*****************************
*PARAMETERS :
* P1 TYPE P DECIMALS 2,
* T1 TYPE P DECIMALS 2,
* R1 TYPE P DECIMALS 2.
*DATA S TYPE P DECIMALS 2.
*
* PERFORM SIMPLE(ZSUBSEXT) USING P1 T1 R1 CHANGING S.
* WRITE : / ' SIMPLE INETEREST IN REPORT ', S.
***********************************************
*INCLUDE ZINLUPROG.
*PARAMETERS R TYPE P DECIMALS 2.
*DATA AR TYPE P DECIMALS 2.
*
*PERFORM AREA(ZSUBSEXT) USING R CHANGING AR.
*WRITE : / 'AREA OF A CIRCLE ' , AR.
************ DESCRIBING THE FIELDS OF THE PRGRAM *******
DATA:
DATE1 TYPE D, DATE2 TYPE T,
STRING1(6) TYPE C, STRING2(8) TYPE C,
NUMBER1 TYPE P DECIMALS 2, NUMBER2 TYPE P,
COUNT1 TYPE I, COUNT2 TYPE I.
PERFORM TYPETEST USING DATE1 STRING1 NUMBER1 COUNT1.
SKIP.
PERFORM TYPETEST USING DATE2 STRING2 NUMBER2 COUNT2.
FORM TYPETEST USING NOW
TXT TYPE C
VALUE(NUM) TYPE P
INT TYPE I.
DATA: T.
DESCRIBE FIELD NOW TYPE T.
WRITE: / 'TYPE OF NOW IS', T.
DESCRIBE FIELD TXT LENGTH T.
WRITE: / 'LENGTH OF TXT IS', T.
DESCRIBE FIELD NUM DECIMALS T.
WRITE: / 'DECIMALS OF NUM ARE', T.
DESCRIBE FIELD INT TYPE T.
WRITE: / 'TYPE OF INT IS', T.
ENDFORM.
REPORT ZPROCS .
PARAMETERS : NO1 TYPE I, NO2 TYPE I.
DATA SUM TYPE I.
WRITE : / ' BEFORE CALLING THE SAMPLE'.
WRITE : / 'NO1 = ', NO1.
WRITE : / 'NO2 = ', NO2.
PERFORM SAMPLE. " SUBROUTINE CALLING AREA ....
WRITE : / ' AFTER CALLING THE SAMPLE'.
WRITE : / 'NO1 = ', NO1.
WRITE : / 'NO2 = ', NO2.
*********** BODY 0F THE SAMPLE **********
FORM SAMPLE.
SUM = NO1 + NO2.
WRITE : / 'SUM = ', SUM.
NO1 = 20.
NO2 = 30.
SUM = NO1 + NO2.
WRITE : / ' AFTER CHANGING NO1 , NO2'.
ULINE.
WRITE : SUM.
ENDFORM.
********** END OF THE PROGRAM **********
REPORT ZSUBR .
PARAMETERS : PAMT TYPE P DECIMALS 2,
RT TYPE P DECIMALS 2,
TM TYPE P DECIMALS 2.
DATA : SI TYPE P DECIMALS 2.
* WRITE : / 'BEFORE T AMOUNT ', PAMT.
* PERFORM SIMPINT USING SI PAMT.
* WRITE : / ' SIMPLE INTREST ', SI.
* WRITE : / 'P AMOUNT ', PAMT.
*
* FORM SIMPINT USING TI VALUE(AMT).
** DATA TI TYPE P DECIMALS 2.
* TI = ( PAMT * RT * TM ) / 100.
* AMT = '700.56'.
* STOP.
* ENDFORM.
*********EXTERNAL SUBROUTINES ********
*PERFORM WELCOME(ZESUBR).
*WRITE : / ' BEFORE PAMT ', PAMT.
*WRITE : / 'BEFROE SI ', SI.
*PERFORM SIMPINT(ZESUBR) USING SI PAMT RT TM.
*WRITE : / 'AFTER PAMT ', PAMT.
*WRITE : / 'AFTER SI ', SI.
*
************ WITH CHANGING NOTATION *********
*PERFORM SIMPINT CHANGING SI.
*WRITE : / 'SIMPLE INTREST ', SI.
*
*
*FORM SIMPINT CHANGING VALUE(TI).
*TI = ( PAMT * RT * TM ) / 100.
*WRITE : / 'INTREST IN SUB ', TI.
*ENDFORM.
******** BOTH USING AND CHANGING *********
*PERFORM SIMPINT USING SI CHANGING PAMT.
*WRITE : / ' AMOUNT IN REP ', PAMT.
*WRITE : / 'SIMPLE INTREST IN REP ', SI.
*
*
*FORM SIMPINT USING VALUE(TI) CHANGING VALUE(AMT).
*TI = ( AMT * RT * TM ) / 100.
*AMT = '975.12'.
*WRITE : / 'AMOUNT IN SUB ', AMT.
*WRITE : / 'INTREST IN SUB ', TI.
*STOP.
*ENDFORM.
UPLOAD / DOWNLOAD REPORTS WITH TEXTPOOL
REPORT YSTRAN00 .
*----------------------------------------------------------------------*
* TABELLEN *
*----------------------------------------------------------------------*
TABLES:
TRDIR,
TRDIRT. " * IF RELEASE < 4.0
*----------------------------------------------------------------------*
* INTERNE TABELLEN *
*----------------------------------------------------------------------*
DATA:
BEGIN OF I_HILF OCCURS 5000, " HILFSDATEI ZUM AUFTEILEN VON
ZEILE(500), " I_TAB
END OF I_HILF,
BEGIN OF I_TAB OCCURS 5000, " DATENÜBERGABE BEIM UP-/DOWNL
ZEILE(500),
END OF I_TAB,
BEGIN OF I_REP OCCURS 5000, " ZUM EINLESEN DES REPORTS
ZEILE(72),
END OF I_REP,
BEGIN OF I_AUSW OCCURS 50, " AUSWAHL DER REPORTS
NAME(72),
END OF I_AUSW.
*----------------------------------------------------------------------*
* HILFS- UND ARBEITSFELDER *
*----------------------------------------------------------------------*
DATA:
HF_1(5), " ZWMK0004
HF_REPOR LIKE TRDIR-NAME, " REPORTNAME
HF_AKTUE(4), " AKTUELLE DATENART
HF_CHAR(200), " HILFSFELD
HF_CHAR10(10), " HILFSFELD
HF_COUNT TYPE P, " ZÄHLER REPORTS
HF_PATH LIKE RLGRAP-FILENAME.
*----------------------------------------------------------------------*
* SELEKTIONSBEDINGUNGEN *
*----------------------------------------------------------------------*
SELECT-OPTIONS:
S_REPOR FOR TRDIR-NAME DEFAULT 'ZSTEMP00'.
*----------------------------------------------------------------------*
* PARAMETER *
*----------------------------------------------------------------------*
PARAMETERS:
P_ENDUN(4) DEFAULT 'TXT', " DATEIENDUNG
P_PATH DEFAULT 'C:\TEMP\' " DATEIPFAD AUF PC
LIKE RLGRAP-FILENAME,
P_WASTU DEFAULT 'E', " (E)XPORT ODER (I)MPORT
P_AUSWA DEFAULT 'X' " AUSWAHLLISTE ANZEIGEN
AS CHECKBOX,
P_EINZE DEFAULT 'X' " EINZELDATEIEN ERZEUGEN
AS CHECKBOX.
SELECT-OPTIONS:
S_CNAM FOR TRDIR-CNAM,
S_CDAT FOR TRDIR-CDAT.
*----------------------------------------------------------------------*
* BEGINN DER VERARBEITUNG *
*----------------------------------------------------------------------*
START-OF-SELECTION.
CASE P_WASTU.
WHEN 'E'.
* REPORTAUSWAHL FESTLEGEN
SELECT * FROM TRDIR
WHERE NAME IN S_REPOR
AND CNAM IN S_CNAM
AND CDAT IN S_CDAT.
MOVE TRDIR-NAME TO I_AUSW-NAME.
APPEND I_AUSW.
ENDSELECT.
IF P_AUSWA EQ 'X'. " AUSWAHL BEARBEITEN ?
EDITOR-CALL FOR I_AUSW.
ENDIF.
LOOP AT I_AUSW " DATEN ZUSAMMENSTELLEN
WHERE NAME(1) NE '*'.
PERFORM TRDIR_IN_TABELLE_LESEN USING I_AUSW-NAME.
PERFORM REPORT_IN_TABELLE_LESEN USING I_AUSW-NAME.
PERFORM TEXTPOOL_IN_TABELLE_LESEN USING I_AUSW-NAME.
CONCATENATE
'REPORT'
TRDIR-NAME
'WURDE EXPORTIERT'
INTO HF_CHAR SEPARATED BY SPACE.
WRITE / HF_CHAR.
ADD 1 TO HF_COUNT.
IF P_EINZE EQ 'X'. " EINE DATEI JE REPORT
PERFORM REPORT_EXPORTIEREN
USING I_AUSW-NAME 'X'. " DATEN EXPORTIEREN
ENDIF.
ENDLOOP.
IF P_EINZE NE 'X'. " ALLES IN EINE DATEI
PERFORM REPORT_EXPORTIEREN
USING '' ''. " DATEN EXPORTIEREN
ENDIF.
WHEN 'I'.
PERFORM DATENTRAEGER_EINLESEN.
PERFORM EINGELESENE_DATEI_VERARBEITEN.
ENDCASE.
*---------------------------------------------------------------------*
* FORM DATENTRAEGER_EINLESEN *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM DATENTRAEGER_EINLESEN.
CALL FUNCTION 'UPLOAD'
EXPORTING
CODEPAGE = ' '
FILENAME = P_PATH
FILETYPE = 'ASC'
LINE_EXIT = ' '
TRUNCLEN = ' '
IMPORTING
FILELENGTH = HF_1
TABLES
DATA_TAB = I_TAB
EXCEPTIONS
FILE_OPEN_ERROR = 01
FILE_READ_ERROR = 02
INVALID_TYPE = 03
NO_BATCH = 04
UNKNOWN_ERROR = 05.
ENDFORM.
*---------------------------------------------------------------------*
* FORM EINGELESENE_DATEI_VERARBEITEN *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM EINGELESENE_DATEI_VERARBEITEN.
LOOP AT I_TAB.
IF HF_AKTUE NE SPACE AND " NEUE DATENART
I_TAB(4) EQ '%&%&'.
CASE HF_AKTUE.
WHEN 'RDIR'.
PERFORM EINFUEGEN_TRDIR.
WHEN 'REPO'.
PERFORM EINFUEGEN_REPORT.
WHEN 'TEXP'.
PERFORM EINFUEGEN_TEXTPOOL.
ENDCASE.
ENDIF.
CASE I_TAB(9).
WHEN '%&%& REPO'.
MOVE:
'REPO' TO HF_AKTUE,
I_TAB+10(40) TO HF_REPOR.
CHECK 0 = 1.
WHEN '%&%& TEXP'.
MOVE:
'TEXP' TO HF_AKTUE,
I_TAB+10(40) TO HF_REPOR.
CHECK 0 = 1.
WHEN '%&%& RDIR'.
MOVE:
'RDIR' TO HF_AKTUE,
I_TAB+10(40) TO HF_REPOR.
CHECK 0 = 1.
ENDCASE.
MOVE I_TAB TO I_HILF.
APPEND I_HILF.
ENDLOOP.
CASE HF_AKTUE.
WHEN 'TRIR'.
PERFORM EINFUEGEN_TRDIR.
WHEN 'REPO'.
PERFORM EINFUEGEN_REPORT.
WHEN 'TEXP'.
PERFORM EINFUEGEN_TEXTPOOL.
WHEN ' '.
* MOVE P_REPOR TO HF_REPOR.
PERFORM EINFUEGEN_REPORT.
ENDCASE.
ENDFORM.
*---------------------------------------------------------------------*
* FORM REPORT_IN_TABELLE_LESEN *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> F_REPOR *
*---------------------------------------------------------------------*
FORM REPORT_IN_TABELLE_LESEN USING F_REPOR.
READ REPORT F_REPOR INTO I_HILF.
MOVE:
'%&%& REPO' TO I_TAB,
F_REPOR TO I_TAB+10.
APPEND I_TAB.
LOOP AT I_HILF.
MOVE I_HILF TO I_TAB.
APPEND I_TAB.
ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
* FORM TEXTPOOL_IN_TABELLE_LESEN *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> F_REPOR *
*---------------------------------------------------------------------*
FORM TEXTPOOL_IN_TABELLE_LESEN USING F_REPOR.
READ TEXTPOOL F_REPOR INTO I_HILF.
MOVE:
'%&%& TEXP' TO I_TAB,
F_REPOR TO I_TAB+10.
APPEND I_TAB.
LOOP AT I_HILF.
MOVE I_HILF TO I_TAB.
APPEND I_TAB.
ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
* FORM TRDIR_IN_TABELLE_LESEN *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> F_REPOR *
*---------------------------------------------------------------------*
FORM TRDIR_IN_TABELLE_LESEN USING F_REPOR.
SELECT SINGLE * FROM TRDIR
WHERE NAME = F_REPOR .
MOVE:
'%&%& RDIR' TO I_TAB,
F_REPOR TO I_TAB+10.
APPEND I_TAB.
MOVE TRDIR TO I_TAB.
APPEND I_TAB.
ENDFORM.
*---------------------------------------------------------------------*
* FORM REPORT_EXPORTIEREN *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM REPORT_EXPORTIEREN USING F_NAME F_AUTOM.
* DATEINAME AUTOMATISCH ERZEUGEN, FALLS NUR EIN REPORT
IF F_AUTOM EQ 'X'. " NAME AUTOMATISCH ERZEUGEN
SELECT SINGLE * FROM TRDIRT " * IF RELEASE < 4.0
WHERE SPRSL = SYST-LANGU " * IF RELEASE < 4.0
AND NAME = F_NAME. " * IF RELEASE < 4.0
MOVE:
P_PATH TO HF_CHAR,
TRDIR-NAME TO HF_CHAR+60.
CONDENSE HF_CHAR NO-GAPS.
MOVE:
TRDIRT-TEXT TO HF_CHAR+81, " * IF RELEASE < 4.0
'.' TO HF_CHAR+161,
P_ENDUN TO HF_CHAR+162.
CONDENSE HF_CHAR.
HF_PATH = HF_CHAR.
TRANSLATE HF_PATH+2 USING '*_?_"__|_:_/_'. " SONDERZEICHEN RAUS
ELSE.
HF_PATH = P_PATH.
ENDIF.
* DATEI RUNTERLADEN
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
BIN_FILESIZE = ' '
CODEPAGE = ' '
FILENAME = HF_PATH
FILETYPE = 'ASC'
MODE = ' '
WK1_N_FORMAT = ' '
WK1_N_SIZE = ' '
WK1_T_FORMAT = ' '
WK1_T_SIZE = ' '
IMPORTING
FILELENGTH = HF_1
TABLES
DATA_TAB = I_TAB
EXCEPTIONS
FILE_OPEN_ERROR = 01
FILE_WRITE_ERROR = 02
INVALID_TYPE = 03
NO_BATCH = 04
UNKNOWN_ERROR = 05.
IF SYST-SUBRC = 0.
CONCATENATE
'DATEI'
HF_PATH
'WURDE ERZEUGT'
INTO HF_CHAR SEPARATED BY SPACE.
WRITE:
/ HF_CHAR.
ELSE.
MOVE SYST-SUBRC TO HF_CHAR10.
CONDENSE HF_CHAR10 NO-GAPS.
CONCATENATE 'FEHLER' HF_CHAR10
'BEIM ERSTELLEN DER DATEI' HF_PATH
INTO HF_CHAR SEPARATED BY SPACE.
WRITE:
/ HF_CHAR.
ENDIF.
REFRESH I_TAB.
ENDFORM.
*---------------------------------------------------------------------*
* FORM EINFUEGEN_REPORT *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM EINFUEGEN_REPORT.
REFRESH I_REP.
LOOP AT I_HILF.
MOVE I_HILF TO I_REP.
APPEND I_REP.
ENDLOOP.
* INSERT REPORT HF_REPOR FROM I_HILF.
INSERT REPORT HF_REPOR FROM I_REP.
WRITE: / 'REPORT', HF_REPOR , 'HINZUGEFÜGT'.
REFRESH I_HILF.
ENDFORM.
*---------------------------------------------------------------------*
* FORM EINFUEGEN_TEXTPOOL *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM EINFUEGEN_TEXTPOOL.
INSERT TEXTPOOL HF_REPOR FROM I_HILF.
WRITE: / 'TEXTPOOL', HF_REPOR , 'HINZUGEFÜGT'.
REFRESH I_HILF.
ENDFORM.
*---------------------------------------------------------------------*
* FORM EINFUEGEN_TRDIR *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM EINFUEGEN_TRDIR.
MOVE I_HILF TO TRDIR.
MODIFY TRDIR.
WRITE: / 'RDIR EINTRAG', HF_REPOR , 'HINZUGEFÜGT'.
REFRESH I_HILF.
ENDFORM.
%&%& TEXP YSTRAN00
R KOPIEREN VON REPORTS ZWISCHEN SAP UND PRÄSENTATIONSSERVER 9{{{
SP_AUSWA AUSWAHLLISTE REPORTS ANZEIGEN %{{{
SP_EINZE EINE DATEI JE REPORT ERZEUGEN %{{{
SP_ENDUN FILTYP AUF DEM PC {{{
SP_PATH D NAME DER DATEI {{{
SP_WASTU (I)MPORT / (E)XPORT {{{
SS_CDAT D ERSTELLUNGSDATUM {{{
SS_CNAM PROGRAMMAUTHOR {{{
SS_REPOR D PROGRAMMNAME {{{
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment