‎2008 Jan 18 5:00 AM
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
‎2008 Jan 18 5:06 AM
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...
‎2008 Jan 18 5:01 AM
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
‎2008 Jan 18 5:04 AM
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.
‎2008 Jan 18 5:06 AM
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...
‎2008 Jan 18 5:11 AM
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
‎2008 Jan 18 5:11 AM
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.