Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

ALV GRID Using oo abap example

Former Member
0 Likes
17,641

Hi Friends,

I am new to oo abap, Can any one give me a basic example how i can create alv grid in oo abap.

regards,

DVNS

1 ACCEPTED SOLUTION
Read only

aris_hidalgo
Contributor
0 Likes
4,337

Hi,

In SE38 you can type in BC*ALV and press F4 to check OO ALV examples. It ranges from basic to complex examples. Also, type in SALV* in SE38 if you want to use the factory method of ALV.

Hope it helps...

P.S. Please award points if it helps...

5 REPLIES 5
Read only

Former Member
0 Likes
4,337

Check the code

REPORT zbcalv_grid_test .

CLASS :cl_gui_alv_grid DEFINITION LOAD,

cl_gui_custom_container DEFINITION LOAD.

DATA: BEGIN OF itab OCCURS 0,

matnr TYPE mara-matnr,

mtart TYPE mara-mtart,

END OF itab.

***SCREEN VARIABLE

DATA: ok_code LIKE sy-ucomm,

gv_valid(1) TYPE c.

*****ALV DATA DECLARATION

DATA : gs_layout TYPE lvc_s_layo,

container TYPE REF TO cl_gui_custom_container,

g_grid TYPE REF TO cl_gui_alv_grid.

**************START-OF-SELECTION*********

START-OF-SELECTION.

CALL SCREEN 1000.

&----


*& Module STATUS_1000 OUTPUT

&----


  • text

----


MODULE status_1000 OUTPUT.

SET PF-STATUS 'STATUS1'.

SET TITLEBAR 'xxx'.

SELECT matnr mtart

FROM mara UP TO 10 ROWS

INTO TABLE itab.

IF sy-subrc = 0.

CREATE OBJECT container

EXPORTING

  • PARENT =

container_name = 'CONTAINER'

EXCEPTIONS

cntl_error = 1

cntl_system_error = 2

create_error = 3

lifetime_error = 4

lifetime_dynpro_dynpro_link = 5

OTHERS = 6.

gs_layout-cwidth_opt = 'X'.

CREATE OBJECT g_grid

EXPORTING

  • I_SHELLSTYLE = 0

  • I_LIFETIME =

i_parent = container

  • I_APPL_EVENTS = space

  • I_PARENTDBG =

  • I_APPLOGPARENT =

  • I_GRAPHICSPARENT =

  • I_NAME =

EXCEPTIONS

error_cntl_create = 1

error_cntl_init = 2

error_cntl_link = 3

error_dp_create = 4

OTHERS = 5.

CALL METHOD g_grid->set_table_for_first_display

EXPORTING

  • I_BUFFER_ACTIVE =

  • I_BYPASSING_BUFFER =

  • I_CONSISTENCY_CHECK =

i_structure_name = 'MARA'

  • IS_VARIANT =

  • I_SAVE =

  • I_DEFAULT = 'X'

is_layout = gs_layout

  • IS_PRINT =

  • IT_SPECIAL_GROUPS =

  • IT_TOOLBAR_EXCLUDING =

  • IT_HYPERLINK =

  • IT_ALV_GRAPHICS =

  • IT_EXCEPT_QINFO =

CHANGING

it_outtab = itab[]

  • IT_FIELDCATALOG = T_FIELDCAT

  • IT_SORT =

  • IT_FILTER =

EXCEPTIONS

invalid_parameter_combination = 1

program_error = 2

too_many_lines = 3

OTHERS = 4.

ENDIF.

ENDMODULE. " STATUS_1000 OUTPUT

&----


*& Module USER_COMMAND_1000 INPUT

&----


  • text

----


module USER_COMMAND_1000 input.

***USER INTERATION ON SCREEN 100

CASE ok_code.

WHEN '&F03'.

LEAVE program.

WHEN OTHERS.

LEAVE TO SCREEN 0.

ENDCASE.

endmodule. " USER_COMMAND_1000 INPUT

Read only

Former Member
0 Likes
4,337

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

i_callback_program = sy-repid

TABLES

t_outtab = it_kna1.

here sy-repid is our program name

it_kna1 is the internal table, this table data we want to print on the ALV grid control.

Read only

aris_hidalgo
Contributor
0 Likes
4,338

Hi,

In SE38 you can type in BC*ALV and press F4 to check OO ALV examples. It ranges from basic to complex examples. Also, type in SALV* in SE38 if you want to use the factory method of ALV.

Hope it helps...

P.S. Please award points if it helps...

Read only

Former Member
0 Likes
4,337

HI,

Programming for ALV grid display using the classes involves creation of a screen and calling it for display.

Since there has to be a linking between the program and the screen we have created , this comes in the form of a container. We use two important classes during the programming for displaying ALV grid, CL_GUI_ALV_GRID and CL_GUI_CUSTOM_CONTAINER.

Steps To Use ALV Grid in a Program

1. Declare reference variables for,

Container (class CL_GUI_CUSTOM_CONTAINER) and

Grid (class CL_GUI_ALV_GRID)

Example

DATA: grid TYPE REF TO cl_gui_alv_grid,

custom_container TYPE REF TO cl_gui_custom_container

2. Create Standard Screen and a container on that screen and give a name to that container ( Use custom control button from tool bar) . This name will be used to link the container we have created on the screen with the object reference of class CL_GUI_CUSTOM_CONTAINER, which we have declared in the first step

3. Call the screen which has been created

4. Instantiate the container control and the ALV Grid Control in PBO of the screen.

Example

IF custom_container IS INITIAL.

CREATE OBJECT custom_container

EXPORTING

CONTAINER_NAME = ‘MY_CONTAINER'.

CREATE OBJECT grid

EXPORTING

I_PARENT = custom_container.

ENDIF

5. For displaying the data, call the method set_table_for_first_display of object reference of CL_GUI_ALV_GRID.

Example

CALL METHOD grid->set_table_for_first_display

EXPORTING

I_BUFFER_ACTIVE =

I_BYPASSING_BUFFER =

I_CONSISTENCY_CHECK =

I_STRUCTURE_NAME =

IS_VARIANT =

I_SAVE =

I_DEFAULT =

IS_LAYOUT =

IS_PRINT =

IT_SPECIAL_GROUPS =

IT_TOOLBAR_EXCLUDING =

IT_HYPERLINK =

IT_ALV_GRAPHICS =

IT_EXCEPT_QINFO =

CHANGING

IT_OUTTAB =

IT_FIELDCATALOG =

IT_SORT =

IT_FILTER =

EXCEPTION

INVALID_PARAMETER_COMBINATION =

PROGRAM_ERROR =

TOO_MANY_LINES =

others =

EXPLANATION OF SOME IMPORTANT PARAMETERS.

I_BYPASSING_BUFFER & I_BUFFER_ACTIVE :

When the program is run for the first time, the fields present in the output table and their positions are stored in a buffer. So the buffer is taken as reference for the successive executions. In order to bypass this buffer the above parameter values should be ‘X’ and ‘ ‘(space) respectively. If these values are not passed to the function module, the changes made in the structure of the internal table will not be reflected in the output.

I_STRUCTURE_NAME:

If the structure of your output table corresponds to a structure stored in the Data Dictionary (DDIC), the ALV Grid Control can use this information to generate the field catalog automatically. Pass the table structure as parameter. In this case, all fields of this DDIC structure are displayed in the list.

IS_VARIANT :

It allows the user to save and reuse the layout. It is a structure of type DISVARIANT and contain the display variant name. It facilitates pre-assignment for a layout, rather than displaying report and then choosing displaying variant.

I_SAVE:

This single character variable specifies whether the user specific display variants can be saved or not.

The I_SAVE "Options for saving layouts" parameter can have the following values:

U Only user specific layouts can be saved

X Only global layouts can be saved

A Both user specific and global layouts can be saved

Space Layouts can not be saved

IS_LAYOUT:

This structure of type LVC_S_LAYO

is used to control the layout of the ALV. Two important fields are:

GRID TITLE. : Title of grid

ZEBRA : Alternate lines in list are displayed in different colors.

IT_FIELDCATALOG:

This internal table of type LVC_T_FCAT

is used to specify the position of various fields in the report itab.

There are three ways we can fill the field catalog table

:

1. Automatically through data dictionary structure (DDIC). In this case we pass the table structure to I_STRUCTURE_NAME.

2. Manually in ABAP program. Filling the internal table of type LVC_T_FCAT

1. . With each row corresponding to each column of output table. Each row of this table will hold value like

i). TABNAME & FIELDNAME specifies the reference fields for F1 help

ii). CTABNAME & CFIELDNAME specifies the reference fields for currency formatting

iii). QTABNAME & QFIELDNAME specifies the reference fields for quantity formatting

iv). SELTEXT_L holds the long description of the field

v). SELTEXT_M holds the medium description of the field

vi). SELTEXT_S holds the small description of the field

vii). KEY specifies the Key field ( cannot be hidden )

viii). OUTPUTLEN species the output length of the field

ix). DO_SUM specifies that subtotal is required on this field

x). NO_OUT specifies a hidden field

3. Semi-Automatically by combining the above 2 procedures.

Call function Module REUSE_ALV_FIELDCATALOG_MERGE and pass DDIC

structure or the output table to generate the field catalog.

Add additional Rows or modify existing properties of the fields to be displayed.

METHODS OF IMPLEMENTING SOME EXTRA FEATURES

Set focus to the grid

After CALL METHODgrid->set_table_for_first_display insert the following stament:

CALL METHOD cl_gui_control=>set_focus EXPORTING control = grid

Refresh grid display

Use the grid method REFRESH_TABLE_DISPLAY

Example:

CALL METHOD grid->refresh_table_display.

Set the title of the grid

Fill the grid_title field of structure lvc_s_layo.

DATA:

gs_layout TYPE lvc_s_layo.

gs_layout-grid_title = 'TITLE'.

CALL METHOD go_grid->set_table_for_first_display

EXPORTING i_structure_name = 'structure name'

is_layout = gs_layout

CHANGING it_outtab = Output table.

The structure lvc_s_layo contains fields for setting graphical properties, displaying exceptions, calculating totals and enabling specific interaction options

Event Handling

We can handle the events triggered by

1. User defined Text Output

2. Mouse-controlled Actions

3. Self-defined and Standard Functions

Steps for Event Handling

1. Define a (local) class for event handling

2. Define a method for each event you need to handle

3. Implement your event handler methods.

4. Create Object of the above class

5. Link used events and event handler methods of the receiver object and the grid

object.

Example program : Handling “Double Click” Event

Step1.Define a class.

class lcl_my_event_receiver definition.

public section.

methods:

handle_double_click

for event double_click of cl_gui_alv_grid.

endclass.

Step 2. Implement the class

class lcl_my_event_receiver implementation.

method handle_double_click.

message i001(zz) with ' double click event - Triggerd '.

endmethod.

endclass.

Step 3. Declare and create Object for the local class defined and implemented in steps 1 and 2 respectively

o_receiver TYPE REF TO lcl_my_event_receiver (Declaration)

create object o_receiver. (Instantiation)

Step 4. Link the method for handling the event with the grid object in the PBO of screen after instantiating the grid object

set handler o_receiver->handle_double_click for grid.

EXAMPLE PROGRAM TO CHANGE A CLASSICAL REPORT OUTPUT TO A ALV GRID

This can be used as a template program to convert a classical report layout to a ALV grid.

Report<Report name>

  • Grid data Declarations----------------------------------------------*

INCLUDE ZVINALVD.

----


  • Internal table for ALV grid

TYPES: BEGIN OF T_ALV,

Field1 like table-field1,

Field2 like table-field2,

END OF T_ALV.

DATA: I_ALV TYPE TABLE OF T_ALV.

DATA: WA_ALV TYPE T_ALV.

-Class declarations----


INCLUDE ZVINALVE.

----


Add a checkbox in selection screen for ALV grid display. If it is unchecked

  • output will be of classical type.

SELECTION-SCREEN BEGIN OF BLOCK box01.

SELECTION-SCREEN: BEGIN OF LINE.

SELECTION-SCREEN: COMMENT 4(30) ‘To display repot output as a ALV grid’.

PARAMETERS: p_alv AS CHECKBOX.

SELECTION-SCREEN: END OF LINE.

SELECTION-SCREEN END OF BLOCK box01.

START-OF-SELECTION.

  • Fill the ALV grid internal table

END-OF-SELECTION.

IF P_ALV = ‘X’.

PERFORM ALV_DISPLAY.

ELSE.

PERFORM CLASSICAL_DISPLAY.

ENDIF.

----


  • Alv Display

----


FORM ALV_DISPLAY.

CALL SCREEN 100.

ENDFORM.

*----


  • Module STATUS_0100 OUTPUT

*----


  • PBO for ALV Grid

----


MODULE STATUS_0100 OUTPUT.

SET PF-STATUS 'GRID_DISPLAY'.

DATA:

  • For parameter IS_VARIANT that is used to set up options for storing

  • the grid layout as a variant in method set_table_for_first_display

l_layout TYPE disvariant.

GS_LAYOUT-SEL_MODE = 'B'.

  • Optimize column width

GS_LAYOUT-CWIDTH_OPT = 'X'.

  • Read data and create objects

IF go_custom_container IS INITIAL.

  • Create objects for container and ALV grid

CREATE OBJECT go_custom_container

EXPORTING container_name = 'ALV_CONTAINER'.

CREATE OBJECT go_grid

EXPORTING i_parent = go_custom_container.

  • Create object for event_receiver class

  • and set handlers

CREATE OBJECT o_event_receiver.

SET HANDLER o_event_receiver->handle_user_command FOR go_grid.

SET HANDLER o_event_receiver->handle_toolbar FOR go_grid.

  • Layout (Variant) for ALV grid

l_layout-report = sy-repid. "Layout to report

  • To built fieldcatalog

PERFORM alv_build_fieldcatalog.

  • Grid setup for first display

CALL METHOD go_grid->set_table_for_first_display

EXPORTING

is_variant = l_layout

i_save = 'A'

is_layout = gs_layout

CHANGING it_outtab = I_ALV

it_fieldcatalog = fieldcat.

  • Raise event toolbar to show the modified toolbar

CALL METHOD go_grid->set_toolbar_interactive.

ENDIF.

ENDMODULE. " STATUS_0100 OUTPUT

*----


  • Form ALV_BUILD_FIELDCATALOG.

*----


  • Store contents of selected line in a internal table

*----


FORM alv_build_fieldcatalog.

CLEAR afield.

afield-fieldname = 'FIELD1'.

afield-tabname = 'I_ALV'.

afield-coltext = ‘Field Name 1’.

afield-lzero = ' '.

afield-key = 'X'.

afield-outputlen = XX.

APPEND afield TO fieldcat.

CLEAR afield.

afield-fieldname = 'FIELD2'.

afield-tabname = 'I_ALV'.

afield-coltext = ‘Field Name 2’.

APPEND afield TO fieldcat.

ENDFORM. " alv_build_fieldcatalog

*----


  • Module USER_COMMAND_0100 INPUT

*----


  • PAI for ALV Grid

*----


MODULE USER_COMMAND_0100 INPUT.

CASE OK_100.

WHEN 'BACK'.

LEAVE TO SCREEN 0.

WHEN 'EXIT'.

LEAVE PROGRAM.

ENDCASE.

ENDMODULE. " USER_COMMAND_0100 INPUT

*----


  • Form SELECT_LINE

*----


  • Store contents of selected line in a internal table

*----


FORM SELECT_LINE.

DATA:l_lines TYPE i.

REFRESH gi_index_rows.

CLEAR g_selected_row.

  • Read index of selected rows

CALL METHOD go_grid->get_selected_rows

IMPORTING et_index_rows = gi_index_rows.

  • Check if any row are selected at all. If not

  • table gi_index_rows will be empty

DESCRIBE TABLE gi_index_rows LINES l_lines.

IF l_lines = 0.

CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'

EXPORTING

textline1 = 'You must choose a line'.

EXIT.

ENDIF.

  • Read indexes of selected rows.

LOOP AT gi_index_rows INTO g_selected_row.

IF sy-tabix = 1.

READ TABLE I_ALV INDEX g_selected_row-index INTO

WA_ALV.

ENDIF.

ENDLOOP.

ENDFORM. " SELECT_LINE

Includes:

1. ZVINALVD for data declarations

*----


  • INCLUDE ZVINALVD .

*----


  • Type pool for icons - used in the toolbar

TYPE-POOLS: icon.

  • To allow the declaration of o_event_receiver before the

  • lcl_event_receiver class is defined, decale it as deferred in the

  • start of the program

CLASS lcl_event_receiver DEFINITION DEFERRED.

*----


  • GLOBAL DATA FOR ALV GRID

*----


DATA:

  • OK code for alv grid screen

OK_100(4) TYPE C,

  • ALV control: Layout structure

gs_layout TYPE lvc_s_layo,

  • Declare reference variables to the ALV grid and the container

go_grid TYPE REF TO cl_gui_alv_grid,

go_custom_container TYPE REF TO cl_gui_custom_container,

o_event_receiver TYPE REF TO lcl_event_receiver,

  • Data for storing information about selected rows in the grid

  • Internal table

gi_index_rows TYPE lvc_t_row,

  • Information about 1 row

g_selected_row LIKE lvc_s_row.

  • fieldcatalog

DATA: fieldcat TYPE LVC_T_FCAT,

afield TYPE LVC_S_FCAT.

2. ZVINALVE for Class/object declarations

*----


  • INCLUDE ZVINALVE.

*----


*----


  • C L A S S E S

*----


CLASS lcl_event_receiver DEFINITION.

PUBLIC SECTION.

METHODS:

handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid

IMPORTING e_object e_interactive,

handle_user_command FOR EVENT user_command OF cl_gui_alv_grid

IMPORTING e_ucomm.

ENDCLASS.

*----


  • CLASS lcl_event_receiver IMPLEMENTATION

*----


CLASS lcl_event_receiver IMPLEMENTATION.

METHOD handle_toolbar.

  • Event handler method for event toolbar.

CONSTANTS:

  • Constants for button type

c_button_normal TYPE i VALUE 0,

c_menu_and_default_button TYPE i VALUE 1,

c_menu TYPE i VALUE 2,

c_separator TYPE i VALUE 3,

c_radio_button TYPE i VALUE 4,

c_checkbox TYPE i VALUE 5,

c_menu_entry TYPE i VALUE 6.

DATA: ls_toolbar TYPE stb_button.

  • Append seperator to the normal toolbar

CLEAR ls_toolbar.

MOVE c_separator TO ls_toolbar-butn_type..

APPEND ls_toolbar TO e_object->mt_toolbar.

  • Append a new button that to the toolbar. Use E_OBJECT of

  • event toolbar. E_OBJECT is of type CL_ALV_EVENT_TOOLBAR_SET.

  • This class has one attribute MT_TOOLBAR which is of table type

  • TTB_BUTTON. The structure is STB_BUTTON

CLEAR ls_toolbar.

MOVE 'DISPLAY' TO ls_toolbar-function.

MOVE icon_DISPLAY TO ls_toolbar-icon.

MOVE 'Displaying customer' TO ls_toolbar-quickinfo.

MOVE 'Display' TO ls_toolbar-text.

MOVE ' ' TO ls_toolbar-disabled.

APPEND ls_toolbar TO e_object->mt_toolbar.

ENDMETHOD.

METHOD handle_user_command.

  • Handle own functions defined in the toolbar

CASE e_ucomm.

WHEN 'DISPLAY'.

PERFORM SELECT_LINE.

ENDCASE.

ENDMETHOD.

Reward if useful

Read only

Former Member
0 Likes
4,337

Please take a look at my code below. Just create a custom control in screen painter and PF-status and title as well. Hope it helps...

P.S. Please award points if it helps...

code

&----


*& Report ZFI_CASH_PROOF_SHEET

*&

*& PROGRAM TYPE : Report

*& RICEF ID : R-149

*& TITLE : ZFI_CASH_PROOF_SHEET

*& SAP Module : FI

*& CREATION DATE : 11/06/2007

*& AUTHOR : Aris Hidalgo

*& DESIGNER : Aris Hidalgo

&----


*& DESCRIPTION :

&----


$*********************************************************************

*$ CHANGE HISTORY

*$----


*$ DATE | T-Num | Description | Reference

| | |

$*********************************************************************

REPORT zfi_cash_proof_sheet

NO STANDARD PAGE HEADING

MESSAGE-ID zfi.

-


Data Dictionary Table/s *

-


TABLES: t012k.

CLASS lcl_event_receiver DEFINITION DEFERRED.

-


Global Data/s *

-


DATA: gt_fieldcat TYPE lvc_t_fcat,

wa_fieldcat LIKE LINE OF gt_fieldcat,

ok_code TYPE syst-ucomm,

save_ok TYPE syst-ucomm,

g_repid TYPE syst-repid,

gs_layout TYPE lvc_s_layo,

gv_container TYPE scrfname VALUE 'CUSTOM_CONTROL',

lcl_grid1 TYPE REF TO cl_gui_alv_grid,

lcl_custom_container TYPE REF TO cl_gui_custom_container,

gs_disvariant TYPE disvariant,

lcl_event_receiver TYPE REF TO lcl_event_receiver,

gt_sort TYPE lvc_t_sort,

gs_sort TYPE lvc_s_sort.

-


Global Structure/s *

-


TYPES: BEGIN OF t_output,

bukrs TYPE bsis-bukrs,

hbkid TYPE t012k-hbkid,

hktid TYPE t012k-hktid,

cash_in_bank TYPE bsis-dmbtr,

one_day TYPE bsis-dmbtr,

two_days TYPE bsis-dmbtr,

more_than_two_days TYPE bsis-dmbtr,

misc_collection TYPE bsis-dmbtr,

outs_rel_checks TYPE bsis-dmbtr,

treas_transactions TYPE bsis-dmbtr,

tot_cash_bal TYPE bsis-dmbtr,

outs_unrel_checks TYPE bsis-dmbtr,

imp_docs_due TYPE bsis-dmbtr,

est_cash_balance TYPE bsis-dmbtr,

END OF t_output.

DATA: gt_output TYPE STANDARD TABLE OF t_output,

wa_output LIKE LINE OF gt_output.

-


SELECTION-SCREEN *

-


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

SELECT-OPTIONS: s_bukrs FOR t012k-bukrs OBLIGATORY,

s_hbkid FOR t012k-hbkid,

s_hktid FOR t012k-hktid.

PARAMETERS: p_budat TYPE bsak-budat OBLIGATORY.

SELECTION-SCREEN END OF BLOCK b1.

*/ CLASS DEFINITION/S */

-


CLASS lcl_data_def DEFINITION

-


*

-


CLASS lcl_data_def DEFINITION ABSTRACT.

PUBLIC SECTION.

TYPES: BEGIN OF t_t012k,

bukrs TYPE t012k-bukrs,

hbkid TYPE t012k-hbkid,

hktid TYPE t012k-hktid,

hkont TYPE t012k-hkont,

END OF t_t012k.

TYPES: BEGIN OF t_bsis_bsas,

bukrs TYPE bsis-bukrs,

hkont TYPE bsis-hkont,

belnr TYPE bsis-belnr,

buzei TYPE bsis-buzei,

gjahr TYPE bsis-gjahr,

budat TYPE bsis-budat,

blart TYPE bsis-blart,

dmbtr TYPE bsis-dmbtr,

shkzg TYPE bsis-shkzg,

END OF t_bsis_bsas.

TYPES: BEGIN OF t_bsid_bsad,

bukrs TYPE bsid-bukrs,

belnr TYPE bsid-belnr,

gjahr TYPE bsid-gjahr,

blart TYPE bsid-blart,

buzei TYPE bsid-buzei,

budat TYPE bsid-budat,

dmbtr TYPE bsid-dmbtr,

shkzg TYPE bsid-shkzg,

bschl TYPE bsid-bschl,

END OF t_bsid_bsad.

TYPES: BEGIN OF t_cash_in_bank,

bukrs TYPE bsis-bukrs,

hkont TYPE bsis-hkont,

dmbtr TYPE bsis-dmbtr,

END OF t_cash_in_bank.

TYPES: BEGIN OF t_outs_trade_coll,

bukrs TYPE bsis-bukrs,

hkont TYPE bsis-hkont,

one_day TYPE bsis-dmbtr,

two_days TYPE bsis-dmbtr,

more_than_two_days TYPE bsis-dmbtr,

END OF t_outs_trade_coll.

TYPES: BEGIN OF t_zcheck_monitor,

zzbukr TYPE zcheck_monitor-zzbukr,

zhbkid TYPE zcheck_monitor-zhbkid,

zhktid TYPE zcheck_monitor-zhktid,

zubhkt TYPE zcheck_monitor-zubhkt,

zrwbtr TYPE zcheck_monitor-zrwbtr,

zrlsvd TYPE zcheck_monitor-zrlsvd,

zrlsdt TYPE zcheck_monitor-zrlsdt,

END OF t_zcheck_monitor.

TYPES: BEGIN OF t_zcheck_monitor_collect,

zzbukr TYPE zcheck_monitor-zzbukr,

zubhkt TYPE zcheck_monitor-zubhkt,

zrwbtr TYPE zcheck_monitor-zrwbtr,

END OF t_zcheck_monitor_collect.

TYPES: BEGIN OF t_company,

bukrs TYPE t001-bukrs,

butxt TYPE t001-butxt,

END OF t_company.

TYPES: BEGIN OF t_header,

bukrs TYPE t001-bukrs,

butxt TYPE t001-butxt,

hbkid TYPE t012k-hbkid,

hktid TYPE t012k-hktid,

expand(1) TYPE c,

END OF t_header.

DATA: gt_t012k TYPE HASHED TABLE OF t_t012k

WITH UNIQUE KEY bukrs hbkid hktid,

gt_bsis TYPE STANDARD TABLE OF t_bsis_bsas,

wa_bsis LIKE LINE OF gt_bsis,

gt_bsas LIKE gt_bsis,

gt_bsis_bsas LIKE gt_bsas,

gt_bsid_bsad TYPE STANDARD TABLE OF t_bsid_bsad

WITH NON-UNIQUE KEY bukrs belnr gjahr blart,

gt_bsid LIKE gt_bsid_bsad,

gt_bsad LIKE gt_bsid_bsad,

gt_bsik LIKE gt_bsid_bsad,

gt_bsak LIKE gt_bsid_bsad,

gt_cash_in_bank TYPE HASHED TABLE OF t_cash_in_bank

WITH UNIQUE KEY bukrs hkont,

gt_misc_collection LIKE gt_cash_in_bank,

wa_misc_collection LIKE LINE OF gt_misc_collection,

gt_importation_docs_due LIKE gt_cash_in_bank,

wa_importation_docs_due LIKE LINE OF gt_importation_docs_due,

wa_cash_in_bank LIKE LINE OF gt_cash_in_bank,

gt_outs_trade_coll TYPE HASHED TABLE OF t_outs_trade_coll

WITH UNIQUE KEY bukrs hkont,

wa_outs_trade_coll LIKE LINE OF gt_outs_trade_coll,

gt_zcheck_monitor TYPE STANDARD TABLE OF t_zcheck_monitor,

gt_zcheck_monitor_collect TYPE HASHED TABLE OF t_zcheck_monitor_collect

WITH UNIQUE KEY zzbukr zubhkt,

wa_zcheck_monitor_collect LIKE LINE OF gt_zcheck_monitor_collect,

gt_outs_rel_checks LIKE gt_cash_in_bank,

wa_outs_rel_checks LIKE LINE OF gt_outs_rel_checks,

gt_outs_unrel_checks LIKE gt_cash_in_bank,

wa_outs_unrel_checks LIKE LINE OF gt_outs_unrel_checks,

gt_company TYPE HASHED TABLE OF t_company

WITH UNIQUE KEY bukrs,

wa_company LIKE LINE OF gt_company,

gt_header TYPE STANDARD TABLE OF t_header,

wa_header LIKE LINE OF gt_header.

ENDCLASS. "lcl_data_def DEFINITION

-


CLASS lcl_get_data DEFINITION

-


*

-


CLASS lcl_get_data DEFINITION INHERITING FROM lcl_data_def.

PUBLIC SECTION.

METHODS: get_bank_details,

get_gl_balances,

get_cust_items,

get_vend_items,

sum_gl_accounts,

monday_routines

IMPORTING

im_date TYPE bsis-budat

im_bukrs TYPE bsis-bukrs

im_hkont TYPE bsis-hkont

im_budat TYPE bsis-budat

im_dmbtr TYPE bsis-dmbtr,

sunday_routines

IMPORTING

im_date TYPE bsis-budat

im_bukrs TYPE bsis-bukrs

im_hkont TYPE bsis-hkont

im_budat TYPE bsis-budat

im_dmbtr TYPE bsis-dmbtr,

tuesday_routines

IMPORTING

im_date TYPE bsis-budat

im_bukrs TYPE bsis-bukrs

im_hkont TYPE bsis-hkont

im_budat TYPE bsis-budat

im_dmbtr TYPE bsis-dmbtr,

other_days_routines

IMPORTING

im_date TYPE bsis-budat

im_bukrs TYPE bsis-bukrs

im_hkont TYPE bsis-hkont

im_budat TYPE bsis-budat

im_dmbtr TYPE bsis-dmbtr,

difference_in_days

IMPORTING

im_date TYPE bsis-budat

im_budat TYPE bsis-budat

EXPORTING

ex_diff TYPE vtbbewe-atage,

outs_check_released,

process_data.

PRIVATE SECTION.

CONSTANTS: lc_credit TYPE bsis-shkzg VALUE 'H',

lc_debit TYPE bsis-shkzg VALUE 'S',

lc_nt TYPE bsis-blart VALUE 'NT',

lc_nc TYPE bsis-blart VALUE 'NC',

lc_gl_zero TYPE bsis-hkont VALUE '+++++++++0',

lc_gl_one TYPE bsis-hkont VALUE '+++++++++1',

lc_gl_three TYPE bsis-hkont VALUE '+++++++++3',

lc_monday TYPE dtresr-weekday VALUE 'Monday',"#EC NOTEXT

lc_tuesday TYPE dtresr-weekday VALUE 'Tuesday',"#EC NOTEXT

lc_sunday TYPE dtresr-weekday VALUE 'Sunday'."#EC NOTEXT

CONSTANTS: lc_k3 TYPE bsik-blart VALUE 'K3',

lc_k4 TYPE bsik-blart VALUE 'K4',

lc_k5 TYPE bsik-blart VALUE 'K5',

lc_k6 TYPE bsik-blart VALUE 'K6',

lc_k7 TYPE bsik-blart VALUE 'K7',

lc_kb TYPE bsik-blart VALUE 'KB',

lc_kd TYPE bsik-blart VALUE 'KD',

lc_31 TYPE bsid-blart VALUE '31',

lc_001 TYPE bsid-buzei VALUE '001'.

DATA: lv_hkont TYPE bsis-hkont,

lr_hkont TYPE RANGE OF bsis-hkont,

wa_hkont LIKE LINE OF lr_hkont,

lr_blart TYPE RANGE OF bsik-blart,

wa_blart LIKE LINE OF lr_blart,

lv_hkont_new TYPE bsis-hkont,

lv_hkont_old TYPE bsis-hkont,

lv_date TYPE vtbbewe-atage,

lv_budat TYPE bsis-budat,

lv_day TYPE dtresr-weekday.

ENDCLASS. "lcl_get_data DEFINITION

-


CLASS lcl_alv_routines DEFINITION

-


*

-


CLASS lcl_alv_routines DEFINITION INHERITING FROM lcl_data_def.

PUBLIC SECTION.

METHODS: build_fieldcat FINAL,

sort_alv_display FINAL.

ENDCLASS. "lcl_alv_routines DEFINITION

-


CLASS lcl_event_receiver DEFINITION

-


*

-


CLASS lcl_event_receiver DEFINITION.

PUBLIC SECTION.

METHODS:

handle_data_changed FOR EVENT data_changed OF cl_gui_alv_grid

IMPORTING

er_data_changed,

handle_top_of_page FOR EVENT print_top_of_page OF cl_gui_alv_grid,

handle_top_of_list FOR EVENT print_top_of_list OF cl_gui_alv_grid.

PRIVATE SECTION.

DATA: ls_good TYPE lvc_s_modi,

lv_treas_transactions TYPE t_output-tot_cash_bal,

lv_tot_cash_bal TYPE t_output-tot_cash_bal,

lv_outs_unrel_checks TYPE t_output-outs_unrel_checks,

lv_imp_docs_due TYPE t_output-imp_docs_due,

lv_est_cash_balance TYPE t_output-est_cash_balance.

ENDCLASS. "lcl_event_receiver DEFINITION

*/ CLASS IMPLEMENTATION/S */

-


CLASS lcl_get_data IMPLEMENTATION

-


*

-


CLASS lcl_get_data IMPLEMENTATION.

METHOD get_bank_details

METHOD get_bank_details.

FIELD-SYMBOLS: <fs_t012k> LIKE LINE OF gt_t012k.

Get bank account/s and their corresponding G/L account/s

SELECT bukrs hbkid

hktid hkont

FROM t012k

INTO TABLE gt_t012k

WHERE bukrs IN s_bukrs

AND hbkid IN s_hbkid

AND hktid IN s_hktid.

IF NOT gt_t012k[] IS INITIAL.

SORT gt_t012k BY bukrs hbkid hktid hkont.

Get company name

SELECT bukrs butxt

FROM t001

INTO TABLE gt_company

FOR ALL ENTRIES IN gt_t012k

WHERE bukrs = gt_t012k-bukrs.

LOOP AT gt_t012k ASSIGNING <fs_t012k>.

wa_hkont-sign = 'I'.

wa_hkont-option = 'EQ'.

wa_hkont-low = <fs_t012k>-hkont.

SHIFT wa_hkont-low LEFT DELETING LEADING space.

APPEND wa_hkont TO lr_hkont.

CLEAR wa_hkont.

lv_hkont_new = <fs_t012k>-hkont.

IF lv_hkont_new lv_hkont_old.

CLEAR lv_hkont.

lv_hkont = <fs_t012k>-hkont.

DO 4 TIMES.

ADD 1 TO lv_hkont.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = lv_hkont

IMPORTING

output = lv_hkont.

wa_hkont-sign = 'I'.

wa_hkont-option = 'EQ'.

wa_hkont-low = lv_hkont.

SHIFT wa_hkont-low LEFT DELETING LEADING space.

APPEND wa_hkont TO lr_hkont.

CLEAR wa_hkont.

ENDDO.

ENDIF.

lv_hkont_old = lv_hkont_new.

ENDLOOP.

CALL METHOD me->get_gl_balances.

ENDIF.

ENDMETHOD. "get_bank_details

METHOD get_gl_balances

METHOD get_gl_balances.

Get G/L line items(Open items)

SELECT bukrs hkont belnr

buzei gjahr budat

blart dmbtr shkzg

FROM bsis

INTO TABLE gt_bsis

FOR ALL ENTRIES IN gt_t012k

WHERE bukrs = gt_t012k-bukrs

AND hkont IN lr_hkont

AND budat <= p_budat.

Get G/L line items(Cleared items)

SELECT bukrs hkont belnr

buzei gjahr budat

blart dmbtr shkzg

FROM bsas

INTO TABLE gt_bsas

FOR ALL ENTRIES IN gt_t012k

WHERE bukrs = gt_t012k-bukrs

AND hkont IN lr_hkont

AND budat <= p_budat.

APPEND LINES OF gt_bsis TO gt_bsis_bsas.

APPEND LINES OF gt_bsas TO gt_bsis_bsas.

IF NOT gt_bsis_bsas[] IS INITIAL.

CALL METHOD me->get_cust_items.

CALL METHOD me->get_vend_items.

CALL METHOD me->sum_gl_accounts.

ENDIF.

ENDMETHOD. "get_gl_balances

METHOD get_cust_items

METHOD get_cust_items.

Get customer line items(Open items)

SELECT bukrs belnr gjahr blart

buzei budat dmbtr shkzg

bschl

FROM bsid

INTO TABLE gt_bsid

FOR ALL ENTRIES IN gt_bsis_bsas

WHERE bukrs = gt_bsis_bsas-bukrs

AND gjahr = gt_bsis_bsas-gjahr

AND belnr = gt_bsis_bsas-belnr.

Get customer line items(Cleared items)

SELECT bukrs belnr gjahr blart

buzei budat dmbtr shkzg

bschl

FROM bsad

INTO TABLE gt_bsad

FOR ALL ENTRIES IN gt_bsis_bsas

WHERE bukrs = gt_bsis_bsas-bukrs

AND gjahr = gt_bsis_bsas-gjahr

AND belnr = gt_bsis_bsas-belnr.

APPEND LINES OF gt_bsid TO gt_bsid_bsad.

APPEND LINES OF gt_bsad TO gt_bsid_bsad.

ENDMETHOD. "get_cust_items

METHOD get_vend_items

METHOD get_vend_items.

Get vendor line items(Open items)

SELECT bukrs belnr gjahr blart

buzei budat dmbtr shkzg

bschl

FROM bsik

INTO TABLE gt_bsik

FOR ALL ENTRIES IN gt_bsis_bsas

WHERE bukrs = gt_bsis_bsas-bukrs

AND gjahr = gt_bsis_bsas-gjahr

AND belnr = gt_bsis_bsas-belnr.

DEFINE m_blart.

wa_blart-sign = 'I'.

wa_blart-option = 'EQ'.

wa_blart-low = &1.

append wa_blart to lr_blart.

clear wa_blart.

END-OF-DEFINITION.

m_blart lc_k3.

m_blart lc_k4.

m_blart lc_k5.

m_blart lc_k6.

m_blart lc_k7.

m_blart lc_kb.

m_blart lc_kd.

IF NOT gt_bsik] IS INITIAL AND NOT lr_blart[ IS INITIAL.

DELETE gt_bsik WHERE blart NOT IN lr_blart[].

DELETE gt_bsik WHERE bschl lc_31.

ENDIF.

ENDMETHOD. "get_vend_items

METHOD sum_gl_accounts

METHOD sum_gl_accounts.

FIELD-SYMBOLS: <fs_bsis_bsas> LIKE LINE OF gt_bsis_bsas,

<fs_bsis> LIKE LINE OF gt_bsis,

<fs_bsid_bsad> LIKE LINE OF gt_bsid_bsad,

<fs_bsik> LIKE LINE OF gt_bsik,

<fs_outs_rel_checks> LIKE LINE OF gt_outs_rel_checks,

<fs_outs_unrel_checks> LIKE LINE OF gt_outs_unrel_checks.

SORT gt_bsis_bsas BY bukrs hkont belnr.

LOOP AT gt_bsis_bsas ASSIGNING <fs_bsis_bsas>.

IF <fs_bsis_bsas>-shkzg = lc_credit. "H

MULTIPLY <fs_bsis_bsas>-dmbtr BY -1.

ENDIF.

*/Routine for cash in bank

IF <fs_bsis_bsas>-hkont CP lc_gl_zero.

MOVE-CORRESPONDING <fs_bsis_bsas> TO wa_cash_in_bank.

COLLECT wa_cash_in_bank INTO gt_cash_in_bank.

CLEAR wa_cash_in_bank.

ENDIF.

*/Routine for miscellaneous collection

IF <fs_bsis_bsas>-blart = lc_nt OR

<fs_bsis_bsas>-blart = lc_nc AND

<fs_bsis_bsas>-shkzg = lc_debit AND

<fs_bsis_bsas>-hkont CP lc_gl_one.

READ TABLE gt_bsid_bsad ASSIGNING <fs_bsid_bsad> WITH TABLE KEY bukrs = <fs_bsis_bsas>-bukrs

belnr = <fs_bsis_bsas>-belnr

gjahr = <fs_bsis_bsas>-gjahr

blart = <fs_bsis_bsas>-blart.

IF sy-subrc = 0.

MOVE-CORRESPONDING <fs_bsis_bsas> TO wa_misc_collection.

COLLECT wa_misc_collection INTO gt_misc_collection.

CLEAR wa_misc_collection.

ENDIF.

ENDIF.

*/Routine for importation docs.due

IF <fs_bsis_bsas>-shkzg = lc_credit.

READ TABLE gt_bsik ASSIGNING <fs_bsik> WITH TABLE KEY bukrs = <fs_bsis_bsas>-bukrs

belnr = <fs_bsis_bsas>-belnr

gjahr = <fs_bsis_bsas>-gjahr

blart = <fs_bsis_bsas>-blart.

IF sy-subrc = 0.

MOVE-CORRESPONDING <fs_bsis_bsas> TO wa_importation_docs_due.

COLLECT wa_importation_docs_due INTO gt_importation_docs_due.

CLEAR gt_importation_docs_due.

ENDIF.

ENDIF.

ENDLOOP.

IF NOT gt_bsis[] IS INITIAL.

IF NOT gt_bsis[] IS INITIAL.

lv_budat = p_budat.

CALL FUNCTION 'DATE_TO_DAY'

EXPORTING

date = lv_budat

IMPORTING

weekday = lv_day.

LOOP AT gt_bsis ASSIGNING <fs_bsis>.

*/Routine for outstanding trade collection

IF <fs_bsis>-shkzg = lc_debit AND <fs_bsis>-blart lc_nt.

IF lv_day = lc_monday.

CALL METHOD me->monday_routines

EXPORTING

im_date = p_budat

im_bukrs = <fs_bsis>-bukrs

im_hkont = <fs_bsis>-hkont

im_budat = <fs_bsis>-budat

im_dmbtr = <fs_bsis>-dmbtr.

ELSEIF lv_day = lc_sunday.

CALL METHOD me->sunday_routines

EXPORTING

im_date = p_budat

im_bukrs = <fs_bsis>-bukrs

im_hkont = <fs_bsis>-hkont

im_budat = <fs_bsis>-budat

im_dmbtr = <fs_bsis>-dmbtr.

ELSEIF lv_day = lc_tuesday.

CALL METHOD me->tuesday_routines

EXPORTING

im_date = p_budat

im_bukrs = <fs_bsis>-bukrs

im_hkont = <fs_bsis>-hkont

im_budat = <fs_bsis>-budat

im_dmbtr = <fs_bsis>-dmbtr.

ELSE.

CALL METHOD me->other_days_routines

EXPORTING

im_date = p_budat

im_bukrs = <fs_bsis>-bukrs

im_hkont = <fs_bsis>-hkont

im_budat = <fs_bsis>-budat

im_dmbtr = <fs_bsis>-dmbtr.

ENDIF.

ENDIF.

*/Routine for outstanding released checks

IF <fs_bsis>-hkont CP lc_gl_three AND <fs_bsis>-shkzg = lc_debit.

MOVE-CORRESPONDING <fs_bsis> TO wa_outs_rel_checks.

COLLECT wa_outs_rel_checks INTO gt_outs_rel_checks.

CLEAR wa_outs_rel_checks.

*/Routine for outstanding unreleased checks

ELSEIF <fs_bsis>-hkont CP lc_gl_three AND <fs_bsis>-shkzg = lc_credit.

MOVE-CORRESPONDING <fs_bsis> TO wa_outs_unrel_checks.

COLLECT wa_outs_unrel_checks INTO gt_outs_unrel_checks.

CLEAR wa_outs_unrel_checks.

ENDIF.

ENDLOOP.

ENDIF.

ENDIF.

*/Routine for outstanding released check/s

*/this routine will get all records from custom table zcheck_monitor

*/where status is released to vendor

CALL METHOD me->outs_check_released.

IF NOT gt_outs_rel_checks[] IS INITIAL.

Subtract debit line items from ZFE002

LOOP AT gt_outs_rel_checks ASSIGNING <fs_outs_rel_checks>.

CLEAR wa_zcheck_monitor_collect.

READ TABLE gt_zcheck_monitor_collect INTO wa_zcheck_monitor_collect

WITH TABLE KEY zzbukr = <fs_outs_rel_checks>-bukrs

zubhkt = <fs_outs_rel_checks>-hkont.

IF sy-subrc = 0.

<fs_outs_rel_checks>-dmbtr = wa_zcheck_monitor_collect-zrwbtr -

<fs_outs_rel_checks>-dmbtr.

ELSE.

<fs_outs_rel_checks>-dmbtr = 0 - <fs_outs_rel_checks>-dmbtr.

ENDIF.

ENDLOOP.

ENDIF.

IF NOT gt_outs_unrel_checks[] IS INITIAL.

Subtract ZFE002 records from credit line items

LOOP AT gt_outs_unrel_checks ASSIGNING <fs_outs_unrel_checks>.

CLEAR wa_zcheck_monitor_collect.

READ TABLE gt_zcheck_monitor_collect INTO wa_zcheck_monitor_collect

WITH TABLE KEY zzbukr = <fs_outs_unrel_checks>-bukrs

zubhkt = <fs_outs_unrel_checks>-hkont.

IF sy-subrc = 0.

<fs_outs_unrel_checks>-dmbtr = ABS( <fs_outs_unrel_checks>-dmbtr ) -

ABS( wa_zcheck_monitor_collect-zrwbtr ).

ENDIF.

ENDLOOP.

ENDIF.

Move records to output table

CALL METHOD me->process_data.

ENDMETHOD. "sum_gl_accounts

METHOD monday_routines

METHOD monday_routines.

wa_outs_trade_coll-bukrs = im_bukrs.

wa_outs_trade_coll-hkont = im_hkont.

CLEAR lv_date.

CALL METHOD me->difference_in_days

EXPORTING

im_date = im_date

im_budat = im_budat

IMPORTING

ex_diff = lv_date.

One day

IF lv_date = 3.

wa_outs_trade_coll-one_day = im_dmbtr.

Two days

ELSEIF lv_date = 4.

wa_outs_trade_coll-two_days = im_dmbtr.

More than two days

ELSEIF lv_date > 4.

wa_outs_trade_coll-more_than_two_days = im_dmbtr.

ENDIF.

COLLECT wa_outs_trade_coll INTO gt_outs_trade_coll.

CLEAR wa_outs_trade_coll.

ENDMETHOD. "monday_routines

METHOD sunday_routines

METHOD sunday_routines.

wa_outs_trade_coll-bukrs = im_bukrs.

wa_outs_trade_coll-hkont = im_hkont.

CLEAR lv_date.

CALL METHOD me->difference_in_days

EXPORTING

im_date = im_date

im_budat = im_budat

IMPORTING

ex_diff = lv_date.

One day

IF lv_date = 2.

wa_outs_trade_coll-one_day = im_dmbtr.

Two days

ELSEIF lv_date = 3.

wa_outs_trade_coll-two_days = im_dmbtr.

More than two days

ELSEIF lv_date > 3.

wa_outs_trade_coll-more_than_two_days = im_dmbtr.

ENDIF.

COLLECT wa_outs_trade_coll INTO gt_outs_trade_coll.

CLEAR wa_outs_trade_coll.

ENDMETHOD. "sunday_routines

METHOD tuesday_routines

METHOD tuesday_routines.

wa_outs_trade_coll-bukrs = im_bukrs.

wa_outs_trade_coll-hkont = im_hkont.

CLEAR lv_date.

CALL METHOD me->difference_in_days

EXPORTING

im_date = im_date

im_budat = im_budat

IMPORTING

ex_diff = lv_date.

One day

IF lv_date = 1.

wa_outs_trade_coll-one_day = im_dmbtr.

Two days

ELSEIF lv_date = 4.

wa_outs_trade_coll-two_days = im_dmbtr.

More than two days

ELSEIF lv_date > 4.

wa_outs_trade_coll-more_than_two_days = im_dmbtr.

ENDIF.

COLLECT wa_outs_trade_coll INTO gt_outs_trade_coll.

CLEAR wa_outs_trade_coll.

ENDMETHOD. "tuesday_routines

METHOD other_days_routines

METHOD other_days_routines.

wa_outs_trade_coll-bukrs = im_bukrs.

wa_outs_trade_coll-hkont = im_hkont.

CLEAR lv_date.

CALL METHOD me->difference_in_days

EXPORTING

im_date = im_date

im_budat = im_budat

IMPORTING

ex_diff = lv_date.

One day

IF lv_date = 1.

wa_outs_trade_coll-one_day = im_dmbtr.

Two days

ELSEIF lv_date = 2.

wa_outs_trade_coll-two_days = im_dmbtr.

More than two days

ELSEIF lv_date > 3.

wa_outs_trade_coll-more_than_two_days = im_dmbtr.

ENDIF.

COLLECT wa_outs_trade_coll INTO gt_outs_trade_coll.

CLEAR wa_outs_trade_coll.

ENDMETHOD. "other_days_routines

METHOD difference_in_days

METHOD difference_in_days.

CALL FUNCTION 'FIMA_DAYS_AND_MONTHS_AND_YEARS'

EXPORTING

i_date_from = im_budat

I_KEY_DAY_FROM =

i_date_to = im_date

I_KEY_DAY_TO =

I_FLG_SEPARATE = ' '

IMPORTING

e_days = ex_diff.

E_MONTHS =

E_YEARS =

ENDMETHOD. "difference_in_days

METHOD outs_check_released

METHOD outs_check_released.

FIELD-SYMBOLS: <fs_zcheck_monitor> LIKE LINE OF gt_zcheck_monitor.

SELECT zzbukr zhbkid zhktid

zubhkt zrwbtr zrlsvd

zrlsdt

FROM zcheck_monitor

INTO TABLE gt_zcheck_monitor

WHERE zrlsvd space.

IF NOT gt_zcheck_monitor[] IS INITIAL.

LOOP AT gt_zcheck_monitor ASSIGNING <fs_zcheck_monitor>.

MOVE-CORRESPONDING <fs_zcheck_monitor> TO wa_zcheck_monitor_collect.

COLLECT wa_zcheck_monitor_collect INTO gt_zcheck_monitor_collect.

CLEAR wa_zcheck_monitor_collect.

ENDLOOP.

ENDIF.

ENDMETHOD. "outs_check_released

METHOD process_data

METHOD process_data.

FIELD-SYMBOLS: <fs_t012k> LIKE LINE OF gt_t012k,

<fs_company> LIKE LINE OF gt_company,

<fs_cash_in_bank> LIKE LINE OF gt_cash_in_bank,

<fs_outs_trade_coll> LIKE LINE OF gt_outs_trade_coll,

<fs_misc_collection> LIKE LINE OF gt_misc_collection,

<fs_outs_rel_checks> LIKE LINE OF gt_outs_rel_checks,

<fs_outs_unrel_checks> LIKE LINE OF gt_outs_unrel_checks.

SORT gt_t012k BY bukrs hbkid.

LOOP AT gt_t012k ASSIGNING <fs_t012k>.

AT NEW hbkid.

READ TABLE gt_company ASSIGNING <fs_company>

WITH TABLE KEY bukrs = <fs_t012k>-bukrs.

IF sy-subrc = 0.

wa_header-bukrs = <fs_company>-bukrs.

wa_header-butxt = <fs_company>-butxt.

wa_header-hbkid = <fs_t012k>-hbkid.

wa_header-hktid = <fs_t012k>-hktid.

APPEND wa_header TO gt_header.

CLEAR wa_header.

ENDIF.

ENDAT.

wa_output-bukrs = <fs_t012k>-bukrs.

wa_output-hbkid = <fs_t012k>-hbkid.

wa_output-hktid = <fs_t012k>-hktid.

Move cash in bank

READ TABLE gt_cash_in_bank ASSIGNING <fs_cash_in_bank>

WITH TABLE KEY bukrs = <fs_t012k>-bukrs

hkont = <fs_t012k>-hkont.

IF sy-subrc = 0.

wa_output-cash_in_bank = <fs_cash_in_bank>-dmbtr.

ADD wa_output-cash_in_bank TO wa_output-tot_cash_bal.

ENDIF.

CLEAR lv_hkont.

lv_hkont = <fs_t012k>-hkont.

ADD 1 TO lv_hkont.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = lv_hkont

IMPORTING

output = lv_hkont.

Move outstanding trade collection(Deposit in transit)

READ TABLE gt_outs_trade_coll ASSIGNING <fs_outs_trade_coll>

WITH TABLE KEY bukrs = <fs_t012k>-bukrs

hkont = lv_hkont.

IF sy-subrc = 0.

wa_output-one_day = <fs_outs_trade_coll>-one_day.

ADD wa_output-one_day TO wa_output-tot_cash_bal.

wa_output-two_days = <fs_outs_trade_coll>-two_days.

ADD wa_output-two_days TO wa_output-tot_cash_bal.

wa_output-more_than_two_days = <fs_outs_trade_coll>-more_than_two_days.

ADD wa_output-more_than_two_days TO wa_output-tot_cash_bal.

ENDIF.

Move miscellaneous collection

READ TABLE gt_misc_collection ASSIGNING <fs_misc_collection>

WITH TABLE KEY bukrs = <fs_t012k>-bukrs

hkont = lv_hkont.

IF sy-subrc = 0.

wa_output-misc_collection = <fs_misc_collection>-dmbtr.

ADD wa_output-misc_collection TO wa_output-tot_cash_bal.

ENDIF.

Move outstanding released checks

CLEAR lv_hkont.

lv_hkont = <fs_t012k>-hkont.

ADD 3 TO lv_hkont.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = lv_hkont

IMPORTING

output = lv_hkont.

READ TABLE gt_outs_rel_checks ASSIGNING <fs_outs_rel_checks>

WITH TABLE KEY bukrs = <fs_t012k>-bukrs

hkont = lv_hkont.

IF sy-subrc = 0.

wa_output-outs_rel_checks = <fs_outs_rel_checks>-dmbtr.

IF wa_output-outs_rel_checks < 0.

ADD wa_output-outs_rel_checks TO wa_output-tot_cash_bal.

ELSE.

SUBTRACT wa_output-outs_rel_checks FROM wa_output-tot_cash_bal.

ENDIF.

ELSE.

CLEAR wa_zcheck_monitor_collect.

READ TABLE gt_zcheck_monitor_collect INTO wa_zcheck_monitor_collect

WITH TABLE KEY zzbukr = <fs_t012k>-bukrs

zubhkt = lv_hkont.

IF sy-subrc = 0.

wa_output-outs_rel_checks = wa_zcheck_monitor_collect-zrwbtr.

IF wa_output-outs_rel_checks < 0.

ADD wa_output-outs_rel_checks TO wa_output-tot_cash_bal.

ELSE.

SUBTRACT wa_output-outs_rel_checks FROM wa_output-tot_cash_bal.

ENDIF.

ENDIF.

ENDIF.

Move outstanding unreleased checks

CLEAR lv_hkont.

lv_hkont = <fs_t012k>-hkont.

ADD 3 TO lv_hkont.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = lv_hkont

IMPORTING

output = lv_hkont.

READ TABLE gt_outs_unrel_checks ASSIGNING <fs_outs_unrel_checks>

WITH TABLE KEY bukrs = <fs_t012k>-bukrs

hkont = lv_hkont.

IF sy-subrc = 0.

wa_output-outs_unrel_checks = <fs_outs_unrel_checks>-dmbtr.

ENDIF.

Move importation docs. due

CLEAR wa_importation_docs_due.

READ TABLE gt_importation_docs_due INTO wa_importation_docs_due

WITH TABLE KEY bukrs = <fs_t012k>-bukrs

hkont = lv_hkont

TRANSPORTING dmbtr.

IF sy-subrc = 0.

wa_output-imp_docs_due = wa_importation_docs_due-dmbtr.

ENDIF.

wa_output-est_cash_balance = wa_output-tot_cash_bal - ( wa_output-outs_unrel_checks +

wa_output-imp_docs_due ).

APPEND wa_output TO gt_output.

CLEAR wa_output.

ENDLOOP.

ENDMETHOD. "process_data

ENDCLASS. "lcl_get_data IMPLEMENTATION

-


CLASS lcl_alv_routines IMPLEMENTATION

-


*

-


CLASS lcl_alv_routines IMPLEMENTATION.

METHOD build_fieldcat.

DEFINE m_fieldcat.

add 1 to wa_fieldcat-col_pos.

wa_fieldcat-fieldname = &1.

wa_fieldcat-tabname = &2.

wa_fieldcat-coltext = &3.

wa_fieldcat-outputlen = &4.

wa_fieldcat-key = &5.

wa_fieldcat-just = &6.

wa_fieldcat-do_sum = &7.

wa_fieldcat-emphasize = &8.

wa_fieldcat-edit = &9.

append wa_fieldcat to gt_fieldcat.

clear wa_fieldcat.

END-OF-DEFINITION.

m_fieldcat 'BUKRS' 'GT_OUTPUT' text-a01 '12' 'X' '' '' '' ''.

m_fieldcat 'HBKID' 'GT_OUTPUT' text-a14 '10' 'X' '' '' '' ''.

m_fieldcat 'HKTID' 'GT_OUTPUT' text-a02 '10' 'X' '' '' '' ''.

m_fieldcat 'CASH_IN_BANK' 'GT_OUTPUT' text-a03 '12' '' 'R' 'X' '' ''.

m_fieldcat 'ONE_DAY' 'GT_OUTPUT' text-a04 '05' '' 'R' 'X' '' ''.

m_fieldcat 'TWO_DAYS' 'GT_OUTPUT' text-a05 '06' '' 'R' 'X' '' ''.

m_fieldcat 'MORE_THAN_TWO_DAYS' 'GT_OUTPUT' text-a06 '08' '' 'R' 'X' '' ''.

m_fieldcat 'MISC_COLLECTION' 'GT_OUTPUT' text-a07 '16' '' 'R' 'X' '' ''.

m_fieldcat 'OUTS_REL_CHECKS' 'GT_OUTPUT' text-a08 '21' '' 'R' 'X' '' ''.

m_fieldcat 'TREAS_TRANSACTIONS' 'GT_OUTPUT' text-a09 '19' '' 'R' 'X' '' 'X'.

m_fieldcat 'TOT_CASH_BAL' 'GT_OUTPUT' text-a10 '15' '' 'R' 'X' 'C300' ''.

m_fieldcat 'OUTS_UNREL_CHECKS' 'GT_OUTPUT' text-a11 '19' '' 'R' 'X' '' ''.

m_fieldcat 'IMP_DOCS_DUE' 'GT_OUTPUT' text-a12 '14' '' 'R' 'X' '' ''.

m_fieldcat 'EST_CASH_BALANCE' 'GT_OUTPUT' text-a13 '17' '' 'R' 'X' 'C300' ''.

ENDMETHOD. "build_fieldcat

METHOD sort_alv_display.

DEFINE m_sort.

clear gs_sort.

gs_sort-fieldname = &1.

gs_sort-spos = &2.

gs_sort-up = &3.

gs_sort-down = &4.

gs_sort-subtot = &5.

append gs_sort to gt_sort.

END-OF-DEFINITION.

m_sort 'BUKRS' '1' 'X' '' ''.

m_sort 'HBKID' '2' 'X' '' 'X'.

ENDMETHOD. "sort_alv_display

ENDCLASS. "lcl_alv_routines IMPLEMENTATION

-


CLASS lcl_event_receiver IMPLEMENTATION

-


*

-


CLASS lcl_event_receiver IMPLEMENTATION.

METHOD handle_data_changed.

LOOP AT er_data_changed->mt_mod_cells INTO ls_good.

CASE ls_good-fieldname.

WHEN 'TREAS_TRANSACTIONS'.

CLEAR lv_tot_cash_bal.

CALL METHOD er_data_changed->get_cell_value

EXPORTING

i_row_id = ls_good-row_id

i_fieldname = 'TOT_CASH_BAL'

IMPORTING

e_value = lv_tot_cash_bal.

IF ls_good-value CA 'ABCDEFGHIJKLMNOPQRSTUVWXYZ/'.

CALL METHOD er_data_changed->add_protocol_entry

EXPORTING

i_msgid = '0K'

i_msgno = '000'

i_msgty = 'E'

i_msgv1 = text-e01

i_msgv2 = ls_good-value

i_msgv3 = text-e02

i_fieldname = ls_good-fieldname

i_row_id = ls_good-row_id.

EXIT.

ELSE.

CLEAR lv_treas_transactions.

lv_treas_transactions = ls_good-value.

ADD lv_tot_cash_bal TO lv_treas_transactions.

CALL METHOD er_data_changed->modify_cell

EXPORTING

i_row_id = ls_good-row_id

i_fieldname = 'TOT_CASH_BAL'

i_value = lv_treas_transactions.

CLEAR lv_outs_unrel_checks.

CALL METHOD er_data_changed->get_cell_value

EXPORTING

i_row_id = ls_good-row_id

i_fieldname = 'OUTS_UNREL_CHECKS'

IMPORTING

e_value = lv_outs_unrel_checks.

CLEAR lv_imp_docs_due.

CALL METHOD er_data_changed->get_cell_value

EXPORTING

i_row_id = ls_good-row_id

i_fieldname = 'IMP_DOCS_DUE'

IMPORTING

e_value = lv_imp_docs_due.

lv_est_cash_balance = ls_good-value - ( lv_outs_unrel_checks +

lv_imp_docs_due ).

CALL METHOD er_data_changed->modify_cell

EXPORTING

i_row_id = ls_good-row_id

i_fieldname = 'EST_CASH_BALANCE'

i_value = lv_est_cash_balance.

CLEAR lv_est_cash_balance.

ENDIF.

ENDCASE.

ENDLOOP.

ENDMETHOD. "handle_data_changed

METHOD handle_top_of_page.

WRITE: sy-repid.

ENDMETHOD. "handle_top_of_page

METHOD handle_top_of_list.

WRITE: sy-repid.

ENDMETHOD. "handle_top_of_list

ENDCLASS. "lcl_event_receiver IMPLEMENTATION

-


START-OF-SELECTION *

-


START-OF-SELECTION.

DATA: o_lcl_get_data TYPE REF TO lcl_get_data.

CREATE OBJECT o_lcl_get_data.

CALL METHOD o_lcl_get_data->get_bank_details.

-


END-OF-SELECTION *

-


END-OF-SELECTION.

IF NOT gt_output[] IS INITIAL.

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

EXPORTING

PERCENTAGE = 0

text = text-p01.

CALL SCREEN 100.

ELSE.

MESSAGE i000 WITH text-i01.

ENDIF.

&----


*& Module STATUS_0100 OUTPUT

&----


text

-


MODULE status_0100 OUTPUT.

SET PF-STATUS 'MAIN100'.

SET TITLEBAR 'MAIN100'.

DATA: o_lcl_alv_routines TYPE REF TO lcl_alv_routines. "#EC *

CREATE OBJECT o_lcl_alv_routines. "#EC

g_repid = sy-repid.

IF lcl_custom_container IS INITIAL.

CREATE OBJECT lcl_custom_container

EXPORTING

container_name = gv_container

EXCEPTIONS

cntl_error = 1

cntl_system_error = 2

create_error = 3

lifetime_error = 4

lifetime_dynpro_dynpro_link = 5.

IF sy-subrc NE 0.

CALL FUNCTION 'POPUP_TO_INFORM'

EXPORTING

titel = g_repid

txt2 = sy-subrc

txt1 = text-004.

ENDIF.

CREATE OBJECT lcl_grid1

EXPORTING

i_parent = lcl_custom_container.

gs_layout-stylefname = 'GS_CELLTAB'.

Build fieldcatalog for initial display

CALL METHOD o_lcl_alv_routines->build_fieldcat.

CALL METHOD o_lcl_alv_routines->sort_alv_display.

gs_disvariant-report = sy-repid.

Display initial window

CALL METHOD lcl_grid1->set_table_for_first_display

EXPORTING

i_structure_name = ''

is_layout = gs_layout

i_save = 'A'

is_variant = gs_disvariant

CHANGING

it_outtab = gt_output

it_fieldcatalog = gt_fieldcat

it_sort = gt_sort.

Set editable cells to ready for input

CALL METHOD lcl_grid1->set_ready_for_input

EXPORTING

i_ready_for_input = 1.

CALL METHOD lcl_grid1->register_edit_event

EXPORTING

i_event_id = cl_gui_alv_grid=>mc_evt_enter.

CREATE OBJECT lcl_event_receiver.

SET HANDLER lcl_event_receiver->handle_data_changed FOR lcl_grid1.

SET HANDLER lcl_event_receiver->handle_top_of_page FOR lcl_grid1.

SET HANDLER lcl_event_receiver->handle_top_of_list FOR lcl_grid1.

ENDIF.

CALL METHOD cl_gui_control=>set_focus

EXPORTING

control = lcl_grid1.

ENDMODULE. " STATUS_0100 OUTPUT

&----


*& Module USER_COMMAND_0100 INPUT

&----


text

-


MODULE user_command_0100 INPUT.

save_ok = ok_code.

CASE save_ok.

WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.

CALL METHOD lcl_custom_container->free.

CALL METHOD cl_gui_cfw=>flush.

IF sy-subrc 0.

CALL FUNCTION 'POPUP_TO_INFORM'

EXPORTING

titel = g_repid

txt2 = sy-subrc

txt1 = text-005.

ENDIF.

LEAVE TO SCREEN 0.

ENDCASE.

ENDMODULE. " USER_COMMAND_0100 INPUT

REward points if useful.