Sunteți pe pagina 1din 14

ZCRIS_CLASSICAL_REPORT

*&---------------------------------------------------------------------*
*& Report
ZCRIS_CLASSICAL_REPORT
*& Author
XXX
*& Start Date
27/08/2010
*& Purpose
REPORT TO DISPLAY THE PURCHASE DOCS
*&
USING EVENT
*& COPIED FROM NA
*&
*& *******************************************************************
*& MODIFICATION LOGS :
*& CHANGE REQUEST
CllEMAX4756
*& SUPPLIERS
xxxxxxxxxx
*&
*
*&---------------------------------------------------------------------*
REPORT ZCRIS_CLASSICAL_REPORT NO STANDARD PAGE HEADING LINE-COUNT
20(3)
.
TYPES : BEGIN OF TY_POS ,
EBELN TYPE EBELN ,
LIFNR TYPE LIFNR ,
BUKRS TYPE BUKRS ,
EKORG TYPE EKORG ,
EBELP TYPE EBELP ,
MATNR TYPE MATNR ,
MENGE TYPE BSTMG ,
NETPR TYPE BPREI,
END OF TY_POS.

DATA : IT_POS TYPE TABLE OF TY_POS ,


WA_POS TYPE
TY_POS.
DATA : V_BUKRS TYPE BUKRS ,
V_EKORG TYPE EKORG.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME .


SELECT-OPTIONS: S_BUKRS FOR WA_POS-BUKRS, "COMPANY CODE
S_EKORG FOR WA_POS-EKORG. "PURCHASING ORGANIZATION
SELECTION-SCREEN END OF BLOCK B1.

************************************************
*
TOP-OF-PAGE
************************************************
TOP-OF-PAGE.
WRITE : 15 'Comp.Code' ,
17 'Vendor' ,
28 'Pur.Org' ,
40 'Doc.Nof' ,
52 'Item'
,
60 'Mat.Nol' ,
80 'Price' .
ULINE.

*************************************************
**
INTIALIZATION
*************************************************
INITIALIZATION.
S_BUKRS-LOW
= '1000'.
S_BUKRS-HIGH
= '5000'.
S_BUKRS-SIGN
= 'I'.
S_BUKRS-OPTION = 'BT'.
APPEND S_BUKRS.

*************************************************
*
AT SELECTION SCREEN
*************************************************
AT SELECTION-SCREEN ON S_BUKRS.
SELECT BUKRS INTO V_BUKRS FROM T001 WHERE BUKRS IN S_BUKRS.
ENDSELECT.
IF SY-SUBRC <> 0.
WRITE : / 'INVALID COMPANY CODE'.
ENDIF.

AT SELECTION-SCREEN ON S_EKORG.
SELECT EKORG INTO V_EKORG FROM EKKO WHERE EKORG IN S_EKORG.
ENDSELECT.
IF SY-SUBRC <> 0.
WRITE : / 'INVALID PURCHASING ORGANIZATION'.
ENDIF.

*****************************************************
*
START OF SELECTION
*****************************************************
START-OF-SELECTION.
SELECT EKKO~EBELN
EKKO~LIFNR
EKKO~BUKRS
EKKO~EKORG
EKPO~EBELP
EKPO~MATNR
EKPO~MENGE
EKPO~NETPR INTO TABLE IT_POS
FROM EKKO INNER JOIN EKPO
ON EKKO~EBELN = EKPO~EBELN
WHERE EKKO~BUKRS IN S_BUKRS
AND EKKO~EKORG IN S_EKORG.

*******************************************************
*
END OF SELECTION
*******************************************************
END-OF-SELECTION.
IF NOT IT_POS IS INITIAL.
LOOP AT IT_POS INTO WA_POS.
WRITE : 15 WA_POS-BUKRS ,
17 WA_POS-LIFNR ,
28 WA_POS-EKORG ,
40 WA_POS-EBELN ,
52 WA_POS-EBELP ,
60 WA_POS-MATNR ,
80 WA_POS-NETPR.
ENDLOOP.
ELSE.
WRITE : 1 ' NO RECORDS FOUND FOR THE GIVEN SELECTION' .
ENDIF.

******************************************************************
*
END OF PAGE
*******************************************************************
END-OF-PAGE.
uline.
WRITE : 'tech.sap29@gmail.com' .
uline.

This Report Contains material according to the company .


--------------------------------------------------------------------------*&-------------------------------------------------------*& Report ZCLASSICAL_REPORT
*&
*&-------------------------------------------------------*& Author
tech.sap29@gmail.com
*
*&
*&-------------------------------------------------------REPORT ZCLASSICAL_REPORT

TABLES: MARA,
T001W.

SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-H01.


SELECT-OPTIONS: S_MATNR FOR MARA-MATNR.
PARAMETERS: P_WERKS LIKE MARD-WERKS.
SELECTION-SCREEN: END OF BLOCK B1.

INITIALIZATION.
S_MATNR-LOW = '100-100'. S_MATNR-HIGH = '100-500'.
S_MATNR-SIGN = 'I'. S_MATNR-OPTION = 'BT'.
APPEND S_MATNR.
P_WERKS = '1000'.

AT SELECTION-SCREEN.

*
*

IF P_WERKS IS INITIAL.
MESSAGE E000(Z00) WITH 'Pls Enter Plant'.
ENDIF.

AT SELECTION-SCREEN ON S_MATNR.
IF NOT S_MATNR[] IS INITIAL.
PERFORM VALIDATE_S_MATNR.
ENDIF.

AT SELECTION-SCREEN ON P_WERKS.
IF NOT P_WERKS IS INITIAL.
PERFORM VALIDATE_WERKS.
ENDIF.

AT SELECTION-SCREEN OUTPUT.
PERFORM CHANGE_FIELDS.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_WERKS.


MESSAGE I000(Z00) WITH 'On value request is called'.

AT SELECTION-SCREEN ON HELP-REQUEST FOR P_WERKS.


MESSAGE I000(Z00) WITH 'On Help request is called'.

*&---------------------------------------------------------------------*

*&

Form VALIDATE_S_MATNR

*&---------------------------------------------------------------------*
*

text

*----------------------------------------------------------------------*
FORM VALIDATE_S_MATNR .
SELECT MATNR
FROM MARA
INTO MARA-MATNR
UP TO 1 ROWS
WHERE MATNR IN S_MATNR.
ENDSELECT.

IF SY-SUBRC <> 0.
MESSAGE E000(Z00) WITH 'Invalid Range of Material From'
S_MATNR-LOW 'To' S_MATNR-HIGH.
ENDIF.

ENDFORM.

" VALIDATE_S_MATNR

*&---------------------------------------------------------------------*
*&

Form VALIDATE_WERKS

*&---------------------------------------------------------------------*
*

text

*----------------------------------------------------------------------*
FORM VALIDATE_WERKS .
SELECT SINGLE WERKS
FROM T001W

INTO T001W-WERKS
WHERE WERKS = P_WERKS.

IF SY-SUBRC <> 0.
MESSAGE E000(Z00) WITH 'Plant' P_WERKS 'Does not Exists'.
ENDIF.

ENDFORM.

" VALIDATE_WERKS

*&-------------------------------------------------------*&

Form CHANGE_FIELDS

*&-------------------------------------------------------*

text

*--------------------------------------------------------FORM CHANGE_FIELDS .
LOOP AT SCREEN.
IF SCREEN-NAME = 'P_WERKS'.
SCREEN-REQUIRED = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDFORM.

" CHANGE_FIELDS

Classical Report Using all events


Last Updated: October 17th 2013 by Ashok Kumar Reddy

Classical reports with events, validations in SAP ABAP programming.


+Requirement:Develop a Classical Report to display list of materials for a material input range(selectOptions) and for a material type (screen input) with validations, search help and value help, the
report can be able to download into excel sheet.
Input elements : Select-options for matnr ( material no for MARA table), parameter mtart( Material
type from MARA), a check box and a parameter limit for limiting no of results.
When ever we click on download data, select file to download field will be enabled otherwise this
should be disabled.
Input Screen.

REPORT ZSAPN_CLASSICAL_REPORT LINE-COUNT 34(2). "34 lines are for report space and 2
lines are for footer space
TABLES : MARA.
TYPES: BEGIN OF TY_MARA,
MATNR TYPE MARA-MATNR,
ERSDA TYPE MARA-ERSDA,
MTART TYPE MARA-MTART,
MBRSH TYPE MARA-MBRSH,
MATKL TYPE MARA-MATKL,

MEINS TYPE MARA-MEINS,


END OF TY_MARA.
DATA : IT_MARA TYPE TABLE OF TY_MARA. "material out put internal table
DATA : WA_MARA TYPE TY_MARA. " work area

DATA : LV_MTART TYPE MARA-MTART.


DATA : LV_START_TIME TYPE SY-UZEIT .
DATA : LV_END_TIME TYPE SY-UZEIT .
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001. "designs a block just
for design double click on TEXT-001 to add text

SELECT-OPTIONS : S_MATNR FOR MARA-MATNR. " Material range input


PARAMETERS : P_MTART TYPE MARA-MTART. "material type input

SELECTION-SCREEN END OF BLOCK B1.


PARAMETERS P_DLOAD AS CHECKBOX USER-COMMAND UC1.
PARAMETERS P_FILE TYPE RLGRAP-FILENAME MODIF ID DLD .
PARAMETERS P_LIMIT TYPE I . "Limit no of rows to display to avoid burden on database

LOAD-OF-PROGRAM. "loads program into memory


LV_START_TIME = SY-UZEIT . "see system variables www.sapnuts.com/resourse/systemvariable.html

INITIALIZATION. "triggers second


P_MTART = 'FERT'. "MATERIAL TYPE DEFAULT VALUE
P_LIMIT = '50'. "Limit rows to 50

AT SELECTION-SCREEN OUTPUT . "for dynamic modifications


IF P_DLOAD IS INITIAL .
LOOP AT SCREEN.
CHECK SCREEN-GROUP1 = 'DLD'.
SCREEN-INPUT = '0'.
MODIFY SCREEN.
ENDLOOP.

ENDIF.

AT SELECTION-SCREEN ON P_MTART . " Validate single input field at selection-screen is


alternative and good see http://www.sapnuts.com/courses/core-abap/classicalreports/selection-screen-event.html

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_MTART . "This event is not required here


will use in next lesson
PERFORM MTART_VALUE_HELP.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE .


PERFORM FILE_VALUE_HELP .

AT SELECTION-SCREEN ON HELP-REQUEST FOR P_MTART . " provide help request F1 help .


PERFORM MTART_HELP.

AT SELECTION-SCREEN.
PERFORM VALIDATE_INPUTS.

START-OF-SELECTION.
PERFORM GET_MATERIALS .

END-OF-SELECTION.
LV_END_TIME = SY-UZEIT .
PERFORM DISPLAY_OUTPUT.
IF P_DLOAD = 'X'.
PERFORM DOWNLOAD_DATA.
ENDIF.

TOP-OF-PAGE.
WRITE : 'Material Details ' COLOR 2.

END-OF-PAGE.
WRITE : 'The above materials are active materials available in database' COLOR 3.
WRITE : 'Start time' .
WRITE : LV_START_TIME .
WRITE : 'End time' .
WRITE : LV_END_TIME .

FORM VALIDATE_INPUTS .
IF S_MATNR IS INITIAL OR P_MTART IS INITIAL.

MESSAGE 'Please enter required inputs' TYPE 'E'.

ELSE.

***Validate material type is valid or not


SELECT MTART FROM MARA INTO LV_MTART
UP TO 1 ROWS WHERE MTART = P_MTART .
ENDSELECT.
IF LV_MTART IS INITIAL.
MESSAGE 'Material type is not available in MARA' TYPE 'E'.
ENDIF.
ENDIF.
ENDFORM.

" VALIDATE_INPUTS

FORM GET_MATERIALS .
SELECT MATNR ERSDA MTART MBRSH MATKL MEINS FROM MARA
INTO TABLE IT_MARA
UP TO P_LIMIT ROWS
WHERE MATNR IN S_MATNR AND MTART = P_MTART .

ENDFORM.

" GET_MATERIALS

FORM DISPLAY_OUTPUT .

IF IT_MARA IS NOT INITIAL.


LOOP AT IT_MARA INTO WA_MARA.

WRITE :/ WA_MARA-MATNR, WA_MARA-ERSDA, WA_MARA-MTART, WA_MARA-MBRSH,


WA_MARA-MATKL, WA_MARA-MEINS .

ENDLOOP.
ELSE.
WRITE : 'No Data Found for your Query'.
ENDIF.
ENDFORM.

" DISPLAY_OUTPUT

FORM MTART_HELP .
MESSAGE 'Enter a Material Type ' TYPE 'I'.
ENDFORM.

" MTART_HELP

FORM MTART_VALUE_HELP .
MESSAGE 'Material type input ex: FERT' TYPE 'I'.
ENDFORM.

" MTART_VSLUE_HELP

FORM DOWNLOAD_DATA .
DATA : LV_FILE TYPE STRING .
LV_FILE = P_FILE .
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* BIN_FILESIZE

FILENAME
FILETYPE
* APPEND

= LV_FILE
= 'ASC'
=''

WRITE_FIELD_SEPARATOR
* HEADER

= '00'

* TRUNC_TRAILING_BLANKS
* WRITE_LF

= 'X'

= '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
* WK1_N_FORMAT

=''

* WK1_N_SIZE

=''

* WK1_T_FORMAT
* WK1_T_SIZE

= 'X'

=''
=''

* WRITE_LF_AFTER_LAST_LINE

= ABAP_TRUE

* SHOW_TRANSFER_STATUS

= ABAP_TRUE

* IMPORTING
* FILELENGTH

TABLES
DATA_TAB
* FIELDNAMES

= IT_MARA
=

* EXCEPTIONS
* FILE_WRITE_ERROR
* NO_BATCH

=1
=2

* GUI_REFUSE_FILETRANSFER
* INVALID_TYPE

=4

* NO_AUTHORITY
* UNKNOWN_ERROR
* HEADER_NOT_ALLOWED
* SEPARATOR_NOT_ALLOWED
* FILESIZE_NOT_ALLOWED
* HEADER_TOO_LONG
* DP_ERROR_CREATE

=3

=5
=6
=7
=8
=9
= 10
= 11

* DP_ERROR_SEND

= 12

* DP_ERROR_WRITE

= 13

* UNKNOWN_DP_ERROR

= 14

* ACCESS_DENIED

= 15

* DP_OUT_OF_MEMORY
* DISK_FULL

= 16
= 17

* DP_TIMEOUT

= 18

* FILE_NOT_FOUND

= 19

* DATAPROVIDER_EXCEPTION
* CONTROL_FLUSH_ERROR
* OTHERS

= 20
= 21

= 22

.
IF SY-SUBRC = 0.
WRITE :/ 'Data downloaded to'.
WRITE : P_FILE.
ENDIF.

ENDFORM.

" DOWNLOAD_DATA

FORM FILE_VALUE_HELP .

CALL FUNCTION 'F4_FILENAME'


EXPORTING
FIELD_NAME = 'P_FILE'
IMPORTING
FILE_NAME = P_FILE.
ENDFORM.

" FILE_VALUE_HELP

S-ar putea să vă placă și