Saturday, April 18, 2009

Creating Simple ABAP Query Quick View


ABAP query quick view for Sales Document Item (Table: VBAP)


Step 1. Go to transaction SQ01.


Step 2. Enter a Name for Query and Press the Quick Viewer Push Button.


Step 3. Press the Button "Create" for creating a new query with name entered. Here "ZTEST" is used.


Step 4. Enter a description for the query. Chose Source as Table, Enter the table name Ex. VBAP.

Step 5. Choose the list of fields to be displayed in the report.


Step 6. Choose the fields for Selection Screen


Step 7. Choose the fields based on which the report needs to be sorted. Press the layout mode button for layout settings.


Step 8. Enter Header and Footer for the report. Using Tool Box, color the key columns. Read the Tool Box Help text for details. Press Execute button on completion.


Step 9. Enter the selection criteria.


Step 10. Report is displayed for Sales Document Item data.

Author: Arnab Bhattacharyya

Thursday, April 16, 2009

REPORT

PURPOSE -:
GETTING PROFIT CENTER DETAILS FROM CEPC & CEPCT TABLES BASED ON USER INPUT AND SAVING THE DATA IN A DESKTOP FILE AND DISPLAYING THEM.

DESCRIPTION -:
On providing the Profit Center data and file path of the .txt file, the user should get the PROFIT CENTER DETAILS from CEPC & CEPCT Tables saved on the file and the details will be displayed in the output.

CODE -:
* ALL THE GLOBAL DECLARATIONS
*&---------------------------------------------------------------------*
*&-------------------------DECLARATION OF TYPES------------------------*
*&---------------------------------------------------------------------*
TYPES: BEGIN OF TY_FINAL,
BUKRS TYPE BUKRS, " Company Code
PRCTR TYPE PRCTR, " Profit Center
DATBI TYPE DATBI, " valid to date
KOKRS TYPE KOKRS, " controlling area
DATAB TYPE DATAB, " valid from date
VERAK TYPE VERAPC, " person in charge of profit center
KHINR TYPE PHINR, " profit center area
TXJCD TYPE TXJCD, " tax jurisdiction code
KTEXT TYPE KTEXT, " general name
LTEXT TYPE LTEXT, " long text
ABTEI TYPE ABTEIL, " department
SEGMENT TYPE FB_SEGMENT, " segment for segmental reporting
END OF TY_FINAL.

TYPES: TY_PRCTR_T TYPE RANGE OF PRCTR,
TY_KOKRS_T TYPE RANGE OF KOKRS,
TY_BUKRS_T TYPE RANGE OF BUKRS,
TY_KHINR_T TYPE RANGE OF PHINR.
*&---------------------------------------------------------------------*
*&------------------DECLARATION OF INTERNAL TABLE----------------------*
*&---------------------------------------------------------------------*

DATA: I_FINAL TYPE STANDARD TABLE OF TY_FINAL.
*&---------------------------------------------------------------------*
*&-----------------DECLARATION OF WORK-AREA----------------------------*
*&---------------------------------------------------------------------*

DATA: WA_FINAL TYPE TY_FINAL.
*&---------------------------------------------------------------------*
*&------------------------------VARIABLES------------------------------*
*&---------------------------------------------------------------------*

DATA: G_PRCTR TYPE PRCTR,
G_DATBI TYPE DATBI,
G_KOKRS TYPE KOKRS,
G_BUKRS TYPE BUKRS,
G_KHINR TYPE PHINR.

DATA: L_V_RECORD TYPE STRING,
L_V_REM TYPE STRING,
L_V_LEFT TYPE STRING,
L_V_FILE TYPE STRING.
*&-----------------------------------------------------------------------&*
*& SELECTION SCREEN &*
*&-----------------------------------------------------------------------&*
SELECTION-SCREEN BEGIN OF BLOCK B WITH FRAME TITLE text-001.

SELECT-OPTIONS: S_PRCTR FOR G_PRCTR,
S_DATBI FOR G_DATBI,
S_KOKRS FOR G_KOKRS,
S_BUKRS FOR G_BUKRS,
S_KHINR FOR G_KHINR.

PARAMETERS: P_PREFIL TYPE RLGRAP-FILENAME obligatory.

SELECTION-SCREEN END OF BLOCK B.
*&------------------------------------------------------------------------&*
*& VALIDATING SELECTION SCREEN &*
*&------------------------------------------------------------------------&*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_PREFIL.
PERFORM f_getfile_name
CHANGING P_PREFIL.

AT SELECTION-SCREEN ON S_PRCTR.

* PERFORM VALIDATION OF Profit Centre
PERFORM f_validate_profit_centre
USING S_PRCTR[].

AT SELECTION-SCREEN ON S_KOKRS.

* PERFORM VALIDATION OF Controlling Area
PERFORM f_validate_control_area
USING S_KOKRS[].

AT SELECTION-SCREEN ON S_BUKRS.

* PERFORM VALIDATION OF Company Code
PERFORM f_validate_company_code
USING S_BUKRS[].

AT SELECTION-SCREEN ON S_KHINR.

* PERFORM VALIDATION OF Profit Center Area
PERFORM f_validate_center_area
USING S_KHINR[].

*&***********************************************************************&*
START-OF-SELECTION.


*&*******FETCHING DATA FROM CEPC & CEPCT TABLES BASED ON USER INPUT******&*

SELECT CEPC~BUKRS
CEPC~PRCTR
CEPC~DATBI
CEPC~KOKRS
CEPC~DATAB
CEPC~VERAK
CEPC~KHINR
CEPC~TXJCD
CEPCT~KTEXT
CEPCT~LTEXT
CEPC~ABTEI
CEPC~SEGMENT

INTO TABLE I_FINAL
FROM CEPC INNER JOIN CEPCT ON CEPC~PRCTR = CEPCT~PRCTR

WHERE CEPC~PRCTR IN S_PRCTR
AND CEPC~DATBI IN S_DATBI
AND CEPC~KOKRS IN S_KOKRS
AND CEPC~BUKRS IN S_BUKRS
AND CEPC~KHINR IN S_KHINR .

END-OF-SELECTION.
IF SY-SUBRC <> 0 .
MESSAGE 'No Data Found' TYPE 'I'.
LEAVE LIST-PROCESSING.
ELSE.
PERFORM F_SAVE_PRES_SERVER.
PERFORM F_DISPLAY_REPORT1.
ENDIF.

* ALL THE PERFORMS.
*&---------------------------------------------------------------------*
*& Form f_getfile_name
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->FP_P_FILE text
*----------------------------------------------------------------------*
FORM f_getfile_name CHANGING fp_p_file TYPE LOCALFILE.

CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = 'P_PREFIL'
IMPORTING
file_name = fp_p_file.

ENDFORM. "f_getfile_name



*&---------------------------------------------------------------------*
*& Form F_VALIDATE_PROFIT_CENTRE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_G_PRCTR text
*----------------------------------------------------------------------*
FORM F_VALIDATE_PROFIT_CENTRE USING P_S_PRCTR TYPE TY_PRCTR_T.

SELECT PRCTR
FROM CEPC
INTO G_PRCTR
UP TO 1 ROWS
WHERE PRCTR IN P_S_PRCTR.
ENDSELECT.

IF sy-subrc NE 0.
MESSAGE 'invalid profit centre' TYPE 'E'.
ENDIF.

ENDFORM. " F_VALIDATE_PROFIT_CENTRE
*&---------------------------------------------------------------------*
*& Form F_VALIDATE_CONTROL_AREA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_G_KOKRS text
*----------------------------------------------------------------------*
FORM F_VALIDATE_CONTROL_AREA USING P_S_KOKRS TYPE TY_KOKRS_T.

SELECT KOKRS
FROM TKA01
INTO G_KOKRS
UP TO 1 ROWS
WHERE KOKRS IN P_S_KOKRS.
ENDSELECT.

IF sy-subrc NE 0.
MESSAGE 'invalid controlling area' TYPE 'E'.
ENDIF.

ENDFORM. " F_VALIDATE_CONTROL_AREA
*&---------------------------------------------------------------------*
*& Form F_VALIDATE_COMPANY_CODE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_G_BUKRS text
*----------------------------------------------------------------------*
FORM F_VALIDATE_COMPANY_CODE USING P_S_BUKRS TYPE TY_BUKRS_T.

SELECT BUKRS
FROM T001
INTO G_BUKRS
UP TO 1 ROWS
WHERE BUKRS IN P_S_BUKRS.
ENDSELECT.

IF sy-subrc NE 0.
MESSAGE 'invalid company code' TYPE 'E'.
ENDIF.

ENDFORM. " F_VALIDATE_COMPANY_CODE
*&---------------------------------------------------------------------*
*& Form F_VALIDATE_CENTER_AREA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_G_KHINR text
*----------------------------------------------------------------------*
FORM f_validate_center_area USING P_S_KHINR TYPE TY_KHINR_T.

SELECT KHINR
FROM CEPC
INTO G_KHINR
UP TO 1 ROWS
WHERE KHINR IN P_S_KHINR.
ENDSELECT.

IF sy-subrc NE 0.
MESSAGE 'invalid profit centre area' TYPE 'E'.
ENDIF.

ENDFORM. " F_VALIDATE_CENTER_AREA
*****************SAVING DATA IN PRESENTATION SERVER*********************
*&---------------------------------------------------------------------*
*& Form F_SAVE_PRES_SERVER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text *----------------------------------------------------------------------* FORM F_SAVE_PRES_SERVER . L_V_FILE = P_PREFIL. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING FILENAME = L_V_FILE FILETYPE = 'ASC' APPEND = ' ' WRITE_FIELD_SEPARATOR = '|' NO_AUTH_CHECK = 'X' TABLES DATA_TAB = I_FINAL 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. " F_SAVE_PRES_SERVER
***************DISPLAYING DATA FROM PRESENTATION SERVER*****************
*&---------------------------------------------------------------------*
*& Form F_DISPLAY_REPORT1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text *----------------------------------------------------------------------* FORM F_DISPLAY_REPORT1 . CALL FUNCTION 'GUI_UPLOAD' EXPORTING FILENAME = L_V_FILE FILETYPE = 'ASC' HAS_FIELD_SEPARATOR = '|' NO_AUTH_CHECK = 'X' TABLES DATA_TAB = I_FINAL EXCEPTIONS FILE_OPEN_ERROR = 1 FILE_READ_ERROR = 2 NO_BATCH = 3 GUI_REFUSE_FILETRANSFER = 4 INVALID_TYPE = 5 NO_AUTHORITY = 6 UNKNOWN_ERROR = 7 BAD_DATA_FORMAT = 8 HEADER_NOT_ALLOWED = 9 SEPARATOR_NOT_ALLOWED = 10 HEADER_TOO_LONG = 11 UNKNOWN_DP_ERROR = 12 ACCESS_DENIED = 13 DP_OUT_OF_MEMORY = 14 DISK_FULL = 15 DP_TIMEOUT = 16 OTHERS = 17 . IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

WRITE:/ 'Code',
5 sy-vline,
6 'Pro.Ctr',
16 sy-vline,
17 'To Date',
28 sy-vline,
29 'Area',
34 sy-vline,
35 'From Date',
47 sy-vline,
48 'In charge',
70 sy-vline,
71 'Ctr Area',
84 sy-vline,
85 'Tax Code',
101 sy-vline,
102 'Name',
122 sy-vline,
123 'Long Text',
152 sy-vline,
153 'Dept',
165 sy-vline,
166 'Segment'.

ULINE.

LOOP AT I_FINAL INTO WA_FINAL.

WRITE:/ WA_FINAL-BUKRS,
5 sy-vline,
6 WA_FINAL-PRCTR,
16 sy-vline,
17 WA_FINAL-DATBI,
28 sy-vline,
29 WA_FINAL-KOKRS,
34 sy-vline,
35 WA_FINAL-DATAB,
47 sy-vline,
48 WA_FINAL-VERAK,
70 sy-vline,
71 WA_FINAL-KHINR,
84 sy-vline,
85 WA_FINAL-TXJCD,
101 sy-vline,
102 WA_FINAL-KTEXT,
122 sy-vline,
123 WA_FINAL-LTEXT,
152 sy-vline,
153 WA_FINAL-ABTEI,
165 sy-vline,
166 WA_FINAL-SEGMENT.
ENDLOOP.
ULINE.

ENDFORM. " F_DISPLAY_REPORT1

OUTPUT -:

REPORT

PURPOSE -:
To get customer item selected subtotal.

DESCRIPTION -:
On clicking subtotal button in the toolbar, user should get subtotal of customer items which are selected. Then subtotal of not selected items and in the end all items total.

CODE -:
1. This checkbox is provided using the slis_layout_alv.

FORM f_build_layout CHANGING fp_wa_layout TYPE slis_layout_alv.

CONSTANTS: l_c_total TYPE char5 VALUE 'TOTAL'.

fp_wa_layout-colwidth_optimize = c_x .
fp_wa_layout-box_fieldname = c_box.
fp_wa_layout-zebra = c_x. " striped pattern
fp_wa_layout-totals_text = l_c_total.


ENDFORM. " f_build_layout

2. Now since this ‘BOX’ field is available hence, using the sort table, we can get the selected item total.
FORM f_sort_tab CHANGING fp_it_sort TYPE slis_t_sortinfo_alv.

* Local work area For Sort info.
DATA: l_wa_sort TYPE slis_sortinfo_alv.
CONSTANTS: l_c_1 TYPE char1 VALUE '1',
l_c_kunnr TYPE char5 VALUE 'KUNNR'.


CONSTANTS: l_c_box TYPE char3 VALUE 'BOX',
l_c_2 TYPE char1 VALUE '2'.
l_wa_sort-fieldname = l_c_kunnr.
l_wa_sort-spos = l_c_1.
l_wa_sort-up = c_x.
l_wa_sort-subtot = c_x.
l_wa_sort-comp = c_x.
APPEND l_wa_sort TO fp_it_sort.
CLEAR l_wa_sort.

l_wa_sort-fieldname = l_c_box.
l_wa_sort-spos = l_c_2.
l_wa_sort-down = c_x.
l_wa_sort-subtot = c_x.
l_wa_sort-comp = c_x.
APPEND l_wa_sort TO fp_it_sort.
CLEAR l_wa_sort.

ENDFORM. " f_sort_tab

Please note that subtotal will not work unless we check the ‘COMP’ field of sort table (l_wa_sort-comp = ‘X’.).

3. In user command, refresh the output.
WHEN l_c_subt. “Subtotal button FCODE.
rs_selfield-refresh = c_x.