‎2007 Jun 15 9:54 AM
hi i would like know that in ABAP how can we use Oops concept. WIll ABAP support OOPS.
Regards
shan
‎2007 Jun 15 9:56 AM
Hi,
ABAP Support OOPs
Check the links
OOPS OO ABAP
http://esnips.com/doc/5c65b0dd-eddf-4512-8e32-ecd26735f0f2/prefinalppt.ppt
http://esnips.com/doc/2c76dc57-e74a-4539-a20e-29383317e804/OO-abap.pdf
http://esnips.com/doc/0ef39d4b-586a-4637-abbb-e4f69d2d9307/SAP-CONTROLS-WORKSHOP.pdf
http://esnips.com/doc/92be4457-1b6e-4061-92e5-8e4b3a6e3239/Object-Oriented-ABAP.ppt
http://esnips.com/doc/448e8302-68b1-4046-9fef-8fa8808caee0/abap-objects-by-helen.pdf
http://esnips.com/doc/39fdc647-1aed-4b40-a476-4d3042b6ec28/class_builder.ppt
http://www.amazon.com/gp/explorer/0201750805/2/ref=pd_lpo_ase/102-9378020-8749710?ie=UTF8
http://help.sap.com/saphelp_nw04/helpdata/en/c3/225b5654f411d194a60000e8353423/content.htm
http://help.sap.com/saphelp_nw2004s/helpdata/en/c3/225b5654f411d194a60000e8353423/content.htm
Rgds,
Prakash
‎2007 Jun 15 9:56 AM
Hi
Yes, ABAP support OOPS
OOPs ABAP uses Classes and Interfaces which uses Methods and events.
If you have Java skills it is advantage for you.
There are Local classes as well as Global Classes.
Local classes we can work in SE38 straight away.
But mostly it is better to use the Global classes.
Global Classes or Interfaces are to be created in SE24.
SAP already given some predefined classes and Interfaces.
This OOPS concepts very useful for writing BADI's also.
So first create a class in SE 24.
Define attributes, Methods for that class.
Define parameters for that Method.
You can define event handlers also to handle the messages.
After creation in each method write the code.
Methods are similar to ABAP PERFORM -FORM statements.
After the creation of CLass and methods come to SE38 and create the program.
In the program create a object type ref to that class and with the help of that Object call the methods of that Class and display the data.
Example:
REPORT sapmz_hf_alv_grid .
Type pool for icons - used in the toolbar
TYPE-POOLS: icon.
TABLES: zsflight.
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.
*----
G L O B A L I N T E R N A L T A B L E S
*----
*DATA: gi_sflight TYPE STANDARD TABLE OF sflight.
To include a traffic light and/or color a line the structure of the
table must include fields for the traffic light and/or the color
TYPES: BEGIN OF st_sflight.
INCLUDE STRUCTURE zsflight.
Field for traffic light
TYPES: traffic_light TYPE c.
Field for line color
types: line_color(4) type c.
TYPES: END OF st_sflight.
TYPES: tt_sflight TYPE STANDARD TABLE OF st_sflight.
DATA: gi_sflight TYPE tt_sflight.
*----
G L O B A L D A T A
*----
DATA: ok_code LIKE sy-ucomm,
Work area for internal table
g_wa_sflight TYPE st_sflight,
ALV control: Layout structure
gs_layout TYPE lvc_s_layo.
Declare reference variables to the ALV grid and the container
DATA:
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:
Work area for screen 200
g_screen200 LIKE zsflight.
Data for storing information about selected rows in the grid
DATA:
Internal table
gi_index_rows TYPE lvc_t_row,
Information about 1 row
g_selected_row LIKE lvc_s_row.
*----
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 'CHANGE' TO ls_toolbar-function.
MOVE icon_change TO ls_toolbar-icon.
MOVE 'Change flight' TO ls_toolbar-quickinfo.
MOVE 'Change' 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 'CHANGE'.
PERFORM change_flight.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMETHOD.
ENDCLASS.
*----
S T A R T - O F - S E L E C T I O N.
*----
START-OF-SELECTION.
SET SCREEN '100'.
&----
*& Module USER_COMMAND_0100 INPUT
&----
MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN 'EXIT'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
&----
*& Module STATUS_0100 OUTPUT
&----
MODULE status_0100 OUTPUT.
DATA:
For parameter IS_VARIANT that is sued to set up options for storing
the grid layout as a variant in method set_table_for_first_display
l_layout TYPE disvariant,
Utillity field
l_lines TYPE i.
After returning from screen 200 the line that was selected before
going to screen 200, should be selected again. The table gi_index_rows
was the output table from the GET_SELECTED_ROWS method in form
CHANGE_FLIGHT
DESCRIBE TABLE gi_index_rows LINES l_lines.
IF l_lines > 0.
CALL METHOD go_grid->set_selected_rows
EXPORTING
it_index_rows = gi_index_rows.
CALL METHOD cl_gui_cfw=>flush.
REFRESH gi_index_rows.
ENDIF.
Read data and create objects
IF go_custom_container IS INITIAL.
Read data from datbase table
PERFORM get_data.
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 fo report
*----
Setup the grid layout using a variable of structure lvc_s_layo
*----
Set grid title
gs_layout-grid_title = 'Flights'.
Selection mode - Single row without buttons
(This is the default mode
gs_layout-sel_mode = 'B'.
Name of the exception field (Traffic light field) and the color
field + set the exception and color field of the table
gs_layout-excp_fname = 'TRAFFIC_LIGHT'.
gs_layout-info_fname = 'LINE_COLOR'.
LOOP AT gi_sflight INTO g_wa_sflight.
IF g_wa_sflight-paymentsum < 100000.
Value of traffic light field
g_wa_sflight-traffic_light = '1'.
Value of color field:
C = Color, 6=Color 1=Intesified on, 0: Inverse display off
g_wa_sflight-line_color = 'C610'.
ELSEIF g_wa_sflight-paymentsum => 100000 AND
g_wa_sflight-paymentsum < 1000000.
g_wa_sflight-traffic_light = '2'.
ELSE.
g_wa_sflight-traffic_light = '3'.
ENDIF.
MODIFY gi_sflight FROM g_wa_sflight.
ENDLOOP.
Grid setup for first display
CALL METHOD go_grid->set_table_for_first_display
EXPORTING i_structure_name = 'SFLIGHT'
is_variant = l_layout
i_save = 'A'
is_layout = gs_layout
CHANGING it_outtab = gi_sflight.
*-- End of grid setup -
Raise event toolbar to show the modified toolbar
CALL METHOD go_grid->set_toolbar_interactive.
Set focus to the grid. This is not necessary in this
example as there is only one control on the screen
CALL METHOD cl_gui_control=>set_focus EXPORTING control = go_grid.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
&----
*& Module USER_COMMAND_0200 INPUT
&----
MODULE user_command_0200 INPUT.
CASE ok_code.
WHEN 'EXIT200'.
LEAVE TO SCREEN 100.
WHEN'SAVE'.
PERFORM save_changes.
ENDCASE.
ENDMODULE. " USER_COMMAND_0200 INPUT
&----
*& Form get_data
&----
FORM get_data.
Read data from table SFLIGHT
SELECT *
FROM zsflight
INTO TABLE gi_sflight.
ENDFORM. " load_data_into_grid
&----
*& Form change_flight
&----
Reads the contents of the selected row in the grid, ans transfers
the data to screen 200, where it can be changed and saved.
----
FORM change_flight.
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. In this example only one
row can be selected as we are using gs_layout-sel_mode = 'B',
so it is only ncessary to read the first entry in
table gi_index_rows
LOOP AT gi_index_rows INTO g_selected_row.
IF sy-tabix = 1.
READ TABLE gi_sflight INDEX g_selected_row-index INTO g_wa_sflight.
ENDIF.
ENDLOOP.
Transfer data from the selected row to screenm 200 and show
screen 200
CLEAR g_screen200.
MOVE-CORRESPONDING g_wa_sflight TO g_screen200.
LEAVE TO SCREEN '200'.
ENDFORM. " change_flight
&----
*& Form save_changes
&----
Changes made in screen 200 are written to the datbase table
zsflight, and to the grid table gi_sflight, and the grid is
updated with method refresh_table_display to display the changes
----
FORM save_changes.
DATA: l_traffic_light TYPE c.
Update traffic light field
Update database table
MODIFY zsflight FROM g_screen200.
Update grid table , traffic light field and color field.
Note that it is necessary to use structure g_wa_sflight
for the update, as the screen structure does not have a
traffic light field
MOVE-CORRESPONDING g_screen200 TO g_wa_sflight.
IF g_wa_sflight-paymentsum < 100000.
g_wa_sflight-traffic_light = '1'.
C = Color, 6=Color 1=Intesified on, 0: Inverse display off
g_wa_sflight-line_color = 'C610'.
ELSEIF g_wa_sflight-paymentsum => 100000 AND
g_wa_sflight-paymentsum < 1000000.
g_wa_sflight-traffic_light = '2'.
clear g_wa_sflight-line_color.
ELSE.
g_wa_sflight-traffic_light = '3'.
clear g_wa_sflight-line_color.
ENDIF.
MODIFY gi_sflight INDEX g_selected_row-index FROM g_wa_sflight.
Refresh grid
CALL METHOD go_grid->refresh_table_display.
CALL METHOD cl_gui_cfw=>flush.
LEAVE TO SCREEN '100'.
ENDFORM. " save_changes
chk this blog
/people/vijaybabu.dudla/blog/2006/07/21/topofpage-in-alv-using-clguialvgrid
chk out the links below:
General Tutorial for OOPS
Have a look at these links for OO ABAP.
http://www.sapgenie.com/abap/OO/
http://help.sap.com/saphelp_nw04/helpdata/en/c3/225b5654f411d194a60000e8353423/content.htm
http://www.esnips.com/doc/375fff1b-5a62-444d-8ec1-55508c308b17/prefinalppt.ppt
http://www.esnips.com/doc/2c76dc57-e74a-4539-a20e-29383317e804/OO-abap.pdf
http://www.esnips.com/doc/5c65b0dd-eddf-4512-8e32-ecd26735f0f2/prefinalppt.ppt
http://www.sapgenie.com/abap/controls/index.htm
http://www.esnips.com/doc/2c76dc57-e74a-4539-a20e-29383317e804/OO-abap.pdf
http://www.esnips.com/doc/0ef39d4b-586a-4637-abbb-e4f69d2d9307/SAP-CONTROLS-WORKSHOP.pdf
http://help.sap.com/saphelp_erp2005/helpdata/en/ce/b518b6513611d194a50000e8353423/frameset.htm
SDN Series:
https://www.sdn.sap.com/irj/sdn/developerareas/abap?rid=/webcontent/uuid/35eaef9c-0b01-0010-dd8b-e3b... [original link is broken]
http://help.sap.com/printdocu/core/Print46c/en/data/pdf/BCABA/BCABA.pdf
Basic concepts of OOPS
http://www.henrikfrank.dk/abapuk.html
http://www.erpgenie.com/abap/OO/
<b>
Reward points for useful Answers</b>
Regards
Anji
‎2007 Jun 15 9:56 AM
Hi,
ABAP Support OOPs
Check the links
OOPS OO ABAP
http://esnips.com/doc/5c65b0dd-eddf-4512-8e32-ecd26735f0f2/prefinalppt.ppt
http://esnips.com/doc/2c76dc57-e74a-4539-a20e-29383317e804/OO-abap.pdf
http://esnips.com/doc/0ef39d4b-586a-4637-abbb-e4f69d2d9307/SAP-CONTROLS-WORKSHOP.pdf
http://esnips.com/doc/92be4457-1b6e-4061-92e5-8e4b3a6e3239/Object-Oriented-ABAP.ppt
http://esnips.com/doc/448e8302-68b1-4046-9fef-8fa8808caee0/abap-objects-by-helen.pdf
http://esnips.com/doc/39fdc647-1aed-4b40-a476-4d3042b6ec28/class_builder.ppt
http://www.amazon.com/gp/explorer/0201750805/2/ref=pd_lpo_ase/102-9378020-8749710?ie=UTF8
http://help.sap.com/saphelp_nw04/helpdata/en/c3/225b5654f411d194a60000e8353423/content.htm
http://help.sap.com/saphelp_nw2004s/helpdata/en/c3/225b5654f411d194a60000e8353423/content.htm
Rgds,
Prakash
‎2007 Jun 15 9:57 AM
‎2007 Jun 15 9:57 AM
HI,
yaa abap supports oops concepts
see this link for help on abap objects
rgds,
bharat.
‎2007 Jun 15 9:57 AM
Hi,
Check the links below:
http://esnips.com/doc/5c65b0dd-eddf-4512-8e32-ecd26735f0f2/prefinalppt.ppt
http://esnips.com/doc/2c76dc57-e74a-4539-a20e-29383317e804/OO-abap.pdf
http://esnips.com/doc/0ef39d4b-586a-4637-abbb-e4f69d2d9307/SAP-CONTROLS-WORKSHOP.pdf
http://esnips.com/doc/92be4457-1b6e-4061-92e5-8e4b3a6e3239/Object-Oriented-ABAP.ppt
http://esnips.com/doc/448e8302-68b1-4046-9fef-8fa8808caee0/abap-objects-by-helen.pdf
http://esnips.com/doc/39fdc647-1aed-4b40-a476-4d3042b6ec28/class_builder.ppt
Regards
Kannaiah
‎2007 Jun 15 9:57 AM
Yes, ABAP supports OPPS.
For details, please refer help.sap.com or some other relevant sites.
Thanks,
Max
‎2007 Jun 15 9:58 AM
Hi,
YES, its called ABA objects,
You can create classes in the SE24 class builder.
Also you can create in any report using CLASS keyword.
But all the classes that you create in a report are local to the report, where as the classes that you create in SE24 are gloabal and they are stored in SAP repository as seperate objects.
Regards,
Sesh
‎2007 Jun 15 9:58 AM
Hi,
check the below links lot of info and examples r there
http://www.sapgenie.com/abap/OO/index.htm
http://www.geocities.com/victorav15/sapr3/abap_ood.html
http://www.brabandt.de/html/abap_oo.html
Check this cool weblog:
/people/thomas.jung3/blog/2004/12/08/abap-persistent-classes-coding-without-sql
/people/thomas.jung3/blog/2004/12/08/abap-persistent-classes-coding-without-sql
http://help.sap.com/saphelp_nw04/helpdata/en/c3/225b6254f411d194a60000e8353423/frameset.htm
http://www.sapgenie.com/abap/OO/
http://www.sapgenie.com/abap/OO/index.htm
http://help.sap.com/saphelp_nw04/helpdata/en/c3/225b5654f411d194a60000e8353423/content.htm
http://www.esnips.com/doc/375fff1b-5a62-444d-8ec1-55508c308b17/prefinalppt.ppt
http://www.esnips.com/doc/2c76dc57-e74a-4539-a20e-29383317e804/OO-abap.pdf
http://www.esnips.com/doc/5c65b0dd-eddf-4512-8e32-ecd26735f0f2/prefinalppt.ppt
http://www.sapgenie.com/abap/OO/
http://www.sapgenie.com/abap/OO/index.htm
http://www.sapgenie.com/abap/controls/index.htm
http://www.esnips.com/doc/2c76dc57-e74a-4539-a20e-29383317e804/OO-abap.pdf
http://www.esnips.com/doc/0ef39d4b-586a-4637-abbb-e4f69d2d9307/SAP-CONTROLS-WORKSHOP.pdf
http://www.sapgenie.com/abap/OO/index.htm
http://help.sap.com/saphelp_erp2005/helpdata/en/ce/b518b6513611d194a50000e8353423/frameset.htm
http://www.sapgenie.com/abap/OO/
these links
http://help.sap.com/saphelp_47x200/helpdata/en/ce/b518b6513611d194a50000e8353423/content.htm
For funtion module to class
http://help.sap.com/saphelp_47x200/helpdata/en/c3/225b5954f411d194a60000e8353423/content.htm
for classes
http://help.sap.com/saphelp_47x200/helpdata/en/c3/225b5c54f411d194a60000e8353423/content.htm
for methods
http://help.sap.com/saphelp_47x200/helpdata/en/08/d27c03b81011d194f60000e8353423/content.htm
for inheritance
http://help.sap.com/saphelp_47x200/helpdata/en/dd/4049c40f4611d3b9380000e8353423/content.htm
for interfaces
http://help.sap.com/saphelp_47x200/helpdata/en/c3/225b6254f411d194a60000e8353423/content.htm
For Materials:
1) http://help.sap.com/printdocu/core/Print46c/en/data/pdf/BCABA/BCABA.pdf -- Page no: 1291
2) http://esnips.com/doc/5c65b0dd-eddf-4512-8e32-ecd26735f0f2/prefinalppt.ppt
3) http://esnips.com/doc/2c76dc57-e74a-4539-a20e-29383317e804/OO-abap.pdf
4) http://esnips.com/doc/0ef39d4b-586a-4637-abbb-e4f69d2d9307/SAP-CONTROLS-WORKSHOP.pdf
5) http://esnips.com/doc/92be4457-1b6e-4061-92e5-8e4b3a6e3239/Object-Oriented-ABAP.ppt
6) http://esnips.com/doc/448e8302-68b1-4046-9fef-8fa8808caee0/abap-objects-by-helen.pdf
7) http://esnips.com/doc/39fdc647-1aed-4b40-a476-4d3042b6ec28/class_builder.ppt
😎 http://www.amazon.com/gp/explorer/0201750805/2/ref=pd_lpo_ase/102-9378020-8749710?ie=UTF8
1) http://www.erpgenie.com/sap/abap/OO/index.htm
2) http://help.sap.com/saphelp_nw04/helpdata/en/ce/b518b6513611d194a50000e8353423/frameset.htm
Regards,
Priyanka.
‎2007 Jun 15 10:42 AM
Hello Shan,
ABAP supports OOPs concept. If you are familiar with JAVA then it will be very easier for you as the concepts are same only the syntax changes. ABAP and JAVA combination is used in Enterprise Portal and is much in demand.
There are many areas where you need to use OOPs in ABAP.
Regards,
Sangeeta.
‎2007 Sep 14 6:52 AM
Ya Abap supports OOPS Concepts. You can implement OOPS concepts like inheritance, polymorphism, encapsulation in abap using ABAP OBJECTS concepts. ABAP objects replaces the function modules in abap. The performance will be better if we use ABAP objects in a program. Most of the standard programs are written using ABAP Objects.
‎2007 Sep 14 6:57 AM
Hi,
Yes, we can use OO in ABAP. Please take a look at my report below ehere I used OO concepts.
Hope it helps...
[code]
&----
*& Report ZFI_VENDOR_PYMT_INQUIRY
*&
*& PROGRAM TYPE : Report
*& RICEF ID : 536
*& TITLE : ZFI_VENDOR_PYMT_INQUIRY
*& SAP Module : FI - AP
*& CREATION DATE : 08/09/2007
*& AUTHOR : Aris Hidalgo
*& DESIGNER : Aris Hidalgo
&----
*& DESCRIPTION :
&----
$*********************************************************************
*$ CHANGE HISTORY
*$----
*$ DATE | T-Num | Description | Reference
| | |
$*********************************************************************
REPORT zfi_vendor_pymt_inquiry
NO STANDARD PAGE HEADING
MESSAGE-ID zfi.
----
Data Dictionary Table/s *
----
TABLES: lfa1,
bkpf,
bsak,
payr,
zcheck_monitor.
CLASS lcl_event_receiver DEFINITION DEFERRED.
----
Global Data/s *
----
DATA: gt_fieldcat TYPE lvc_t_fcat,
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',
grid1 TYPE REF TO cl_gui_alv_grid,
custom_container TYPE REF TO cl_gui_custom_container,
event_receiver TYPE REF TO lcl_event_receiver,
gs_disvariant TYPE disvariant.
----
Global Structure/s *
----
TYPES: BEGIN OF t_output,
bukrs TYPE bsak-bukrs,
lifnr TYPE lfa1-lifnr,
name1 TYPE lfa1-name1,
lnrza TYPE lfa1-name1, "Name of alternate payee
augbl TYPE bsak-augbl,
belnr TYPE bsak-belnr,
buzei TYPE bsak-buzei,
budat TYPE bsak-budat,
bldat TYPE bsak-bldat,
dmbtr TYPE bsak-dmbtr,
wrbtr TYPE bsak-wrbtr,
waers TYPE bsak-waers,
zchect TYPE zcheck_monitor-zchect,
zaldt TYPE payr-zaldt,
xblnr TYPE bsak-xblnr,
sgtxt TYPE bsak-sgtxt,
zuonr TYPE bsak-zuonr,
blart TYPE bsak-blart,
zrcdap TYPE zcheck_monitor-zrcdap,
zrlsvd TYPE zcheck_monitor-zrlsvd,
zbancd TYPE zcheck_monitor-zbancd,
usnam TYPE bkpf-usnam,
gjahr TYPE bsak-gjahr,
END OF t_output.
----
Global Internal Table/s *
----
DATA: gt_output TYPE STANDARD TABLE OF t_output.
----
Global Work Area/s *
----
DATA: wa_output LIKE LINE OF gt_output.
----
SELECTION-SCREEN *
----
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
SELECT-OPTIONS: s_bukrs FOR bsak-bukrs OBLIGATORY,
s_lifnr FOR bsak-lifnr,
s_ktokk FOR lfa1-ktokk,
s_sortl FOR lfa1-sortl.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.
SELECT-OPTIONS: s_belnr FOR bkpf-belnr,
s_bldat FOR bsak-bldat,
s_budat FOR bkpf-budat,
s_blart FOR bsak-blart,
s_umskz FOR bsak-umskz,
s_xblnr FOR bsak-xblnr,
s_usnam FOR bkpf-usnam,
s_gjahr FOR bsak-gjahr NO INTERVALS NO-DISPLAY.
SELECTION-SCREEN END OF BLOCK b3.
SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-026.
SELECT-OPTIONS: s_zchect FOR zcheck_monitor-zchect,
s_zaldt FOR payr-zaldt.
SELECTION-SCREEN END OF BLOCK b4.
SELECTION-SCREEN END OF BLOCK b1.
*/ CLASS DEFINITION/S
----
CLASS lcl_data_def DEFINITION
----
*
----
CLASS lcl_data_def DEFINITION ABSTRACT.
PROTECTED SECTION.
TYPES: BEGIN OF t_vendor_details,
bukrs TYPE bsik-bukrs,
umskz TYPE bsik-umskz,
augdt TYPE bsik-augdt,
augbl TYPE bsik-augbl,
belnr TYPE bsik-belnr,
buzei TYPE bsik-buzei,
budat TYPE bsik-budat,
bldat TYPE bsik-bldat,
xblnr TYPE bsik-xblnr,
blart TYPE bsik-blart,
dmbtr TYPE bsik-dmbtr,
wrbtr TYPE bsik-wrbtr,
waers TYPE bsik-waers,
sgtxt TYPE bsik-sgtxt,
zuonr TYPE bsik-zuonr,
shkzg TYPE bsik-shkzg,
gjahr TYPE bsik-gjahr,
empfb TYPE bsik-empfb,
ktokk TYPE lfa1-ktokk,
sortl TYPE lfa1-sortl,
lifnr TYPE lfa1-lifnr,
name1 TYPE lfa1-name1,
lnrza TYPE lfa1-lnrza,
usnam TYPE bkpf-usnam,
END OF t_vendor_details.
TYPES: BEGIN OF t_bkpf,
bukrs TYPE bkpf-bukrs,
belnr TYPE bkpf-belnr,
gjahr TYPE bkpf-gjahr,
usnam TYPE bkpf-usnam,
END OF t_bkpf.
TYPES: BEGIN OF t_alt_payee,
lifnr TYPE lfa1-lifnr,
name1 TYPE lfa1-name1,
END OF t_alt_payee.
TYPES: BEGIN OF t_payment_details,
zzbukr TYPE zcheck_monitor-zzbukr,
zvblnr TYPE zcheck_monitor-zvblnr,
zchect TYPE zcheck_monitor-zchect,
zrcdap TYPE zcheck_monitor-zrcdap,
zrlsvd TYPE zcheck_monitor-zrlsvd,
zbancd TYPE zcheck_monitor-zbancd,
END OF t_payment_details.
TYPES: BEGIN OF t_payr,
zbukr TYPE payr-zbukr,
chect TYPE payr-chect,
vblnr TYPE payr-vblnr,
zaldt TYPE payr-zaldt,
END OF t_payr.
CLASS-DATA: gt_vendor_details TYPE STANDARD TABLE OF t_vendor_details,
gt_bkpf TYPE HASHED TABLE OF t_bkpf
WITH UNIQUE KEY bukrs belnr gjahr,
gt_alt_payee TYPE HASHED TABLE OF t_alt_payee
WITH UNIQUE KEY lifnr,
gt_payment_details TYPE STANDARD TABLE OF t_payment_details,
gt_payr TYPE STANDARD TABLE OF t_payr,
gr_zvblnr TYPE RANGE OF zcheck_monitor-zvblnr,
wa_zvblnr LIKE LINE OF gr_zvblnr.
ENDCLASS. "lcl_data_def DEFINITION
----
CLASS lcl_get_data DEFINITION
----
*
----
CLASS lcl_get_data DEFINITION INHERITING FROM lcl_data_def.
PUBLIC SECTION.
METHODS: get_records,
get_altpayee_name,
get_payment_details_1,
get_payment_details_2,
process_data,
get_check_num,
limit_records.
PRIVATE SECTION.
TYPES: BEGIN OF t_bsas,
bukrs TYPE bsas-bukrs,
belnr TYPE bsas-belnr,
gjahr TYPE bsas-gjahr,
buzei TYPE bsas-buzei,
augbl TYPE bsas-augbl,
END OF t_bsas.
TYPES: BEGIN OF t_bsak,
bukrs TYPE bsak-bukrs,
belnr TYPE bsak-belnr,
gjahr TYPE bsak-gjahr,
buzei TYPE bsak-buzei,
augbl TYPE bsak-augbl,
lifnr TYPE bsak-lifnr,
empfb TYPE bsak-empfb,
blart TYPE bsak-blart,
END OF t_bsak.
TYPES: BEGIN OF t_payr_dum,
zbukr TYPE payr-zbukr,
vblnr TYPE payr-vblnr,
gjahr TYPE payr-gjahr,
chect TYPE payr-chect,
zaldt TYPE payr-zaldt,
END OF t_payr_dum.
TYPES: BEGIN OF t_alt_payee2,
lifnr TYPE lfa1-lifnr,
name1 TYPE lfa1-name1,
lnrza TYPE lfa1-lnrza,
END OF t_alt_payee2.
DATA: lt_bsas TYPE SORTED TABLE OF t_bsas
WITH NON-UNIQUE KEY bukrs belnr gjahr,
lt_bsak TYPE SORTED TABLE OF t_bsak
WITH NON-UNIQUE KEY bukrs belnr gjahr,
lt_payr TYPE SORTED TABLE OF t_payr_dum
WITH NON-UNIQUE KEY zbukr vblnr gjahr,
lt_alt_payee2 TYPE SORTED TABLE OF t_alt_payee2
WITH NON-UNIQUE KEY lifnr,
lt_alt_payee_dum LIKE lt_alt_payee2,
lt_payment_details TYPE SORTED TABLE OF t_payment_details
WITH NON-UNIQUE KEY zzbukr zvblnr zchect,
lt_doctype_zp LIKE lt_bsak,
lt_doctype_kz LIKE lt_bsak,
lr_bkpf TYPE RANGE OF bkpf-belnr,
wa_bkpf LIKE LINE OF lr_bkpf.
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.
CLASS-DATA: wa_fieldcat LIKE LINE OF gt_fieldcat.
ENDCLASS. "lcl_alv_routines DEFINITION
----
CLASS lcl_event_receiver DEFINITION
----
*
----
CLASS lcl_event_receiver DEFINITION INHERITING FROM lcl_alv_routines FINAL.
PUBLIC SECTION.
METHODS: handle_hotspot_click
FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING
e_row_id
e_column_id
es_row_no.
ENDCLASS. "lcl_event_receiver DEFINITION
*/ CLASS IMPLEMENTATIONS
----
CLASS lcl_get_data IMPLEMENTATION
----
*
----
CLASS lcl_get_data IMPLEMENTATION.
METHOD get_records
METHOD get_records.
IF s_zchect[] IS INITIAL AND s_zaldt[] IS INITIAL.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = 0
text = text-031.
Get records from BSIK(Open Items)
SELECT bsik~bukrs bsik~umskz bsik~augdt bsik~augbl bsik~belnr
bsik~buzei bsik~budat bsik~bldat bsik~xblnr bsik~blart
bsik~dmbtr bsik~wrbtr bsik~waers bsik~sgtxt bsik~zuonr
bsik~shkzg bsik~gjahr bsik~empfb lfa1~ktokk lfa1~sortl
lfa1~lifnr lfa1~name1 lfa1~lnrza
FROM bsik
INNER JOIN lfa1
ON lfa1~lifnr = bsik~lifnr
INTO TABLE gt_vendor_details
WHERE bsik~mandt = sy-mandt
AND bsik~lifnr IN s_lifnr
AND bsik~bukrs IN s_bukrs
AND bsik~gjahr IN s_gjahr
AND bsik~belnr IN s_belnr
AND bsik~budat IN s_budat
AND bsik~bldat IN s_bldat
AND bsik~blart IN s_blart
AND bsik~umskz IN s_umskz
AND bsik~xblnr IN s_xblnr
AND lfa1~ktokk IN s_ktokk
AND lfa1~sortl IN s_sortl.
Get records from BSAK(Cleared Items)
SELECT bsak~bukrs bsak~umskz bsak~augdt bsak~augbl bsak~belnr
bsak~buzei bsak~budat bsak~bldat bsak~xblnr bsak~blart
bsak~dmbtr bsak~wrbtr bsak~waers bsak~sgtxt bsak~zuonr
bsak~shkzg bsak~gjahr bsak~empfb lfa1~ktokk lfa1~sortl
lfa1~lifnr lfa1~name1 lfa1~lnrza
FROM bsak
INNER JOIN lfa1
ON lfa1~lifnr = bsak~lifnr
APPENDING table gt_vendor_details
WHERE bsak~mandt = sy-mandt
AND bsak~lifnr IN s_lifnr
AND bsak~bukrs IN s_bukrs
AND bsak~gjahr IN s_gjahr
AND bsak~belnr IN s_belnr
AND bsak~budat IN s_budat
AND bsak~bldat IN s_bldat
AND bsak~blart IN s_blart
AND bsak~umskz IN s_umskz
AND bsak~xblnr IN s_xblnr
AND lfa1~ktokk IN s_ktokk
AND lfa1~sortl IN s_sortl.
ELSE.
CALL METHOD me->get_payment_details_2.
Get records from BSAK(Cleared Items)
SELECT bsak~bukrs bsak~umskz bsak~augdt bsak~augbl bsak~belnr
bsak~buzei bsak~budat bsak~bldat bsak~xblnr bsak~blart
bsak~dmbtr bsak~wrbtr bsak~waers bsak~sgtxt bsak~zuonr
bsak~shkzg bsak~gjahr bsak~empfb lfa1~ktokk lfa1~sortl
lfa1~lifnr lfa1~name1 lfa1~lnrza
FROM bsak
INNER JOIN lfa1
ON lfa1~lifnr = bsak~lifnr
INTO TABLE gt_vendor_details
FOR ALL ENTRIES IN gt_payment_details
WHERE bsak~mandt = sy-mandt
AND bsak~lifnr IN s_lifnr
AND bsak~bukrs = gt_payment_details-zzbukr
AND bsak~gjahr IN s_gjahr
AND bsak~belnr IN s_belnr
AND bsak~budat IN s_budat
AND bsak~bldat IN s_bldat
AND bsak~blart IN s_blart
AND bsak~umskz IN s_umskz
AND bsak~xblnr IN s_xblnr
AND lfa1~ktokk IN s_ktokk
AND lfa1~sortl IN s_sortl
AND bsak~augbl = gt_payment_details-zvblnr.
CALL METHOD me->limit_records.
ENDIF.
IF NOT gt_vendor_details[] IS INITIAL.
Do not include payment documents
DELETE gt_vendor_details WHERE blart = 'KZ'
OR blart = 'ZP'.
IF NOT gt_vendor_details[] IS INITIAL.
SELECT bukrs belnr gjahr
buzei augbl lifnr
empfb blart
FROM bsak
INTO TABLE lt_doctype_zp
FOR ALL ENTRIES IN gt_vendor_details
WHERE belnr = gt_vendor_details-augbl.
ENDIF.
ENDIF.
IF NOT gt_vendor_details[] IS INITIAL.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = 0
text = text-032.
Process data
CALL METHOD me->process_data.
ENDIF.
ENDMETHOD. "get_records
METHOD get_altpayee_name
METHOD get_altpayee_name.
SELECT lifnr name1
FROM lfa1
INTO TABLE gt_alt_payee
FOR ALL ENTRIES IN gt_vendor_details
WHERE lifnr = gt_vendor_details-lnrza.
ENDMETHOD. "get_altpayee_name
METHOD get_payment_details_1
METHOD get_payment_details_1.
IF s_zchect[] IS INITIAL AND s_zaldt[] IS INITIAL.
SELECT zzbukr zvblnr zchect
zrcdap zrlsvd zbancd
FROM zcheck_monitor
INTO TABLE gt_payment_details
FOR ALL ENTRIES IN gt_vendor_details
WHERE zzbukr = gt_vendor_details-bukrs
AND zvblnr = gt_vendor_details-augbl.
DELETE gt_payment_details WHERE zvblnr IS INITIAL.
IF NOT gt_payment_details[] IS INITIAL.
SELECT zbukr chect vblnr zaldt
FROM payr
INTO TABLE gt_payr
FOR ALL ENTRIES IN gt_payment_details
WHERE zbukr = gt_payment_details-zzbukr
AND vblnr = gt_payment_details-zvblnr
AND chect = gt_payment_details-zchect
AND zaldt IN s_zaldt.
DELETE gt_payr WHERE vblnr IS INITIAL.
ENDIF.
ENDIF.
ENDMETHOD. "get_payment_details_1
METHOD get_payment_details_2
METHOD get_payment_details_2.
IF NOT s_zchect[] IS INITIAL
AND s_zaldt[] IS INITIAL.
SELECT zzbukr zvblnr zchect
zrcdap zrlsvd zbancd
FROM zcheck_monitor
INTO TABLE gt_payment_details
WHERE zzbukr IN s_bukrs
AND zchect IN s_zchect.
DELETE gt_payment_details WHERE zvblnr IS INITIAL.
IF NOT gt_payment_details[] IS INITIAL.
SELECT zbukr chect vblnr zaldt
FROM payr
INTO TABLE gt_payr
FOR ALL ENTRIES IN gt_payment_details
WHERE zbukr = gt_payment_details-zzbukr
AND vblnr = gt_payment_details-zvblnr
AND chect = gt_payment_details-zchect
AND zaldt IN s_zaldt.
ENDIF.
ELSEIF s_zchect[] IS INITIAL AND
NOT s_zaldt[] IS INITIAL.
SELECT zbukr chect vblnr zaldt
FROM payr
INTO TABLE gt_payr
WHERE zbukr IN s_bukrs
AND zaldt IN s_zaldt.
DELETE gt_payr WHERE vblnr IS INITIAL.
IF NOT gt_payr[] IS INITIAL.
SELECT zzbukr zvblnr zchect
zrcdap zrlsvd zbancd
FROM zcheck_monitor
INTO TABLE gt_payment_details
FOR ALL ENTRIES IN gt_payr
WHERE zzbukr = gt_payr-zbukr
AND zchect = gt_payr-chect.
ENDIF.
ENDIF.
ENDMETHOD. "get_payment_details_2
METHOD process_data
METHOD process_data.
FIELD-SYMBOLS: <fs_bsas> LIKE LINE OF lt_bsas,
<fs_bsak> LIKE LINE OF lt_bsak,
<fs_payr2> LIKE LINE OF lt_payr,
<fs_alt_payee_dum> LIKE LINE OF lt_alt_payee_dum,
<fs_alt_payee2> LIKE LINE OF lt_alt_payee2,
<fs_payment_details2> LIKE LINE OF lt_payment_details.
FIELD-SYMBOLS: <fs_vendor_details> LIKE LINE OF gt_vendor_details,
<fs_bkpf> LIKE LINE OF gt_bkpf,
<fs_alt_payee> LIKE LINE OF gt_alt_payee,
<fs_payment_details> LIKE LINE OF gt_payment_details,
<fs_payr> LIKE LINE OF gt_payr,
<fs_doctype_zp> LIKE LINE OF lt_doctype_zp,
<fs_doctype_kz> LIKE LINE OF lt_doctype_kz.
IF NOT gt_vendor_details[] IS INITIAL.
SELECT bukrs belnr gjahr usnam
FROM bkpf
INTO TABLE gt_bkpf
FOR ALL ENTRIES IN gt_vendor_details
WHERE bukrs = gt_vendor_details-bukrs
AND belnr = gt_vendor_details-belnr
AND gjahr = gt_vendor_details-gjahr
AND usnam IN s_usnam.
IF NOT gt_bkpf[] IS INITIAL AND
NOT s_usnam[] IS INITIAL.
LOOP AT gt_bkpf ASSIGNING <fs_bkpf>.
wa_bkpf-sign = 'I'.
wa_bkpf-option = 'EQ'.
wa_bkpf-low = <fs_bkpf>-belnr.
APPEND wa_bkpf TO lr_bkpf.
CLEAR wa_bkpf.
ENDLOOP.
DELETE gt_vendor_details WHERE belnr NOT IN lr_bkpf.
ENDIF.
IF NOT gt_vendor_details[] IS INITIAL.
Get check number(For check cutting)
IF NOT lt_doctype_zp[] IS INITIAL.
lt_doctype_kz[] = lt_doctype_zp[].
DELETE lt_doctype_zp WHERE blart = 'KZ'.
DELETE lt_doctype_kz WHERE blart = 'ZP'.
IF NOT lt_doctype_zp[] IS INITIAL OR
NOT lt_doctype_kz[] IS INITIAL.
CALL METHOD me->get_check_num.
ENDIF.
CALL METHOD me->get_altpayee_name.
CALL METHOD me->get_payment_details_1.
ENDIF.
SORT gt_payment_details BY zzbukr zvblnr.
SORT gt_vendor_details BY bukrs augbl.
LOOP AT gt_vendor_details ASSIGNING <fs_vendor_details>.
READ TABLE gt_bkpf ASSIGNING <fs_bkpf> WITH TABLE KEY bukrs = <fs_vendor_details>-bukrs
belnr = <fs_vendor_details>-belnr
gjahr = <fs_vendor_details>-gjahr.
Pass username
IF sy-subrc = 0.
MOVE <fs_bkpf>-usnam TO wa_output-usnam.
ENDIF.
IF <fs_vendor_details>-shkzg = 'H'. "Credit
<fs_vendor_details>-dmbtr = <fs_vendor_details>-dmbtr * -1.
<fs_vendor_details>-wrbtr = <fs_vendor_details>-wrbtr * -1.
ENDIF.
Pass records to output table
MOVE: <fs_vendor_details>-bukrs TO wa_output-bukrs,
<fs_vendor_details>-lifnr TO wa_output-lifnr,
<fs_vendor_details>-name1 TO wa_output-name1,
<fs_vendor_details>-augbl TO wa_output-augbl,
<fs_vendor_details>-belnr TO wa_output-belnr,
<fs_vendor_details>-buzei TO wa_output-buzei,
<fs_vendor_details>-budat TO wa_output-budat,
<fs_vendor_details>-bldat TO wa_output-bldat,
<fs_vendor_details>-dmbtr TO wa_output-dmbtr,
<fs_vendor_details>-wrbtr TO wa_output-wrbtr,
<fs_vendor_details>-waers TO wa_output-waers,
<fs_vendor_details>-xblnr TO wa_output-xblnr,
<fs_vendor_details>-sgtxt TO wa_output-sgtxt,
<fs_vendor_details>-zuonr TO wa_output-zuonr,
<fs_vendor_details>-blart TO wa_output-blart,
<fs_vendor_details>-gjahr TO wa_output-gjahr.
Pass name of alternate payee
IF NOT <fs_vendor_details>-lnrza IS INITIAL.
READ TABLE gt_alt_payee ASSIGNING <fs_alt_payee>
WITH TABLE KEY lifnr = <fs_vendor_details>-lnrza.
IF sy-subrc = 0.
MOVE <fs_alt_payee>-name1 TO wa_output-lnrza.
ENDIF.
ELSE.
MOVE <fs_vendor_details>-empfb TO wa_output-lnrza.
ENDIF.
Pass payment details
IF NOT <fs_vendor_details>-augbl IS INITIAL.
READ TABLE gt_payment_details ASSIGNING <fs_payment_details>
WITH KEY zzbukr = <fs_vendor_details>-bukrs
zvblnr = <fs_vendor_details>-augbl
BINARY SEARCH.
IF sy-subrc = 0.
MOVE: <fs_payment_details>-zchect TO wa_output-zchect,
<fs_payment_details>-zrcdap TO wa_output-zrcdap,
<fs_payment_details>-zrlsvd TO wa_output-zrlsvd,
<fs_payment_details>-zbancd TO wa_output-zbancd.
Pass payment date
READ TABLE gt_payr ASSIGNING <fs_payr> WITH KEY zbukr = <fs_vendor_details>-bukrs
chect = wa_output-zchect
vblnr = <fs_vendor_details>-augbl.
IF sy-subrc = 0.
MOVE <fs_payr>-zaldt TO wa_output-zaldt.
ELSE.
CONTINUE.
ENDIF.
ENDIF.
Routine for passing check details for transactions using check-cutting
IF wa_output-zchect IS INITIAL.
Routine for 'ZP' transaction
READ TABLE lt_doctype_zp ASSIGNING <fs_doctype_zp> WITH TABLE KEY bukrs = <fs_vendor_details>-bukrs
belnr = <fs_vendor_details>-augbl
gjahr = <fs_vendor_details>-gjahr.
IF sy-subrc = 0.
READ TABLE lt_bsas ASSIGNING <fs_bsas> WITH TABLE KEY bukrs = <fs_doctype_zp>-bukrs
belnr = <fs_doctype_zp>-belnr
gjahr = <fs_doctype_zp>-gjahr.
IF sy-subrc = 0.
READ TABLE lt_bsak ASSIGNING <fs_bsak> WITH TABLE KEY bukrs = <fs_bsas>-bukrs
belnr = <fs_bsas>-augbl
gjahr = <fs_bsas>-gjahr.
IF sy-subrc = 0.
Pass alternate/permitted payee
READ TABLE lt_alt_payee_dum ASSIGNING <fs_alt_payee_dum> WITH TABLE KEY lifnr = <fs_bsak>-lifnr.
IF sy-subrc = 0.
READ TABLE lt_alt_payee2 ASSIGNING <fs_alt_payee2> WITH TABLE KEY lifnr = <fs_alt_payee_dum>-lnrza.
IF sy-subrc = 0.
MOVE <fs_alt_payee2>-name1 TO wa_output-lnrza.
ELSE.
MOVE <fs_bsak>-empfb TO wa_output-lnrza.
ENDIF.
ENDIF.
READ TABLE lt_payr ASSIGNING <fs_payr2> WITH TABLE KEY zbukr = <fs_bsak>-bukrs
vblnr = <fs_bsak>-augbl
gjahr = <fs_bsak>-gjahr.
IF sy-subrc = 0.
Pass check number and check date
MOVE <fs_payr2>-chect TO wa_output-zchect.
MOVE <fs_payr2>-zaldt TO wa_output-zaldt.
READ TABLE lt_payment_details ASSIGNING <fs_payment_details2>
WITH TABLE KEY zzbukr = <fs_payr2>-zbukr
zvblnr = <fs_payr2>-vblnr
zchect = <fs_payr2>-chect.
IF sy-subrc = 0.
MOVE: <fs_payment_details2>-zrcdap TO wa_output-zrcdap,
<fs_payment_details2>-zrlsvd TO wa_output-zrlsvd,
<fs_payment_details2>-zbancd TO wa_output-zbancd.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ELSE.
Routine for 'KZ' transactions
READ TABLE lt_doctype_kz ASSIGNING <fs_doctype_kz> WITH TABLE KEY bukrs = <fs_vendor_details>-bukrs
belnr = <fs_vendor_details>-augbl
gjahr = <fs_vendor_details>-gjahr.
IF sy-subrc = 0.
Pass alternate/permitted payee
READ TABLE lt_alt_payee_dum ASSIGNING <fs_alt_payee_dum> WITH TABLE KEY lifnr = <fs_doctype_kz>-lifnr.
IF sy-subrc = 0.
READ TABLE lt_alt_payee2 ASSIGNING <fs_alt_payee2> WITH TABLE KEY lifnr = <fs_alt_payee_dum>-lnrza.
IF sy-subrc = 0.
MOVE <fs_alt_payee2>-name1 TO wa_output-lnrza.
ELSE.
MOVE <fs_doctype_kz>-empfb TO wa_output-lnrza.
ENDIF.
ENDIF.
READ TABLE lt_payr ASSIGNING <fs_payr2> WITH TABLE KEY zbukr = <fs_doctype_kz>-bukrs
vblnr = <fs_doctype_kz>-belnr
gjahr = <fs_doctype_kz>-gjahr.
IF sy-subrc = 0.
MOVE <fs_payr2>-chect TO wa_output-zchect.
MOVE <fs_payr2>-zaldt TO wa_output-zaldt.
READ TABLE lt_payment_details ASSIGNING <fs_payment_details2>
WITH TABLE KEY zzbukr = <fs_payr2>-zbukr
zvblnr = <fs_payr2>-vblnr
zchect = <fs_payr2>-chect.
IF sy-subrc = 0.
MOVE: <fs_payment_details2>-zrcdap TO wa_output-zrcdap,
<fs_payment_details2>-zrlsvd TO wa_output-zrlsvd,
<fs_payment_details2>-zbancd TO wa_output-zbancd.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
APPEND wa_output TO gt_output.
CLEAR wa_output.
ENDLOOP.
ENDIF.
ENDIF.
ENDMETHOD. "process_data
METHOD get_check_num
METHOD get_check_num.
IF NOT lt_doctype_zp[] IS INITIAL.
SELECT bukrs belnr gjahr
buzei augbl
FROM bsas
INTO TABLE lt_bsas
FOR ALL ENTRIES IN lt_doctype_zp
WHERE bukrs = lt_doctype_zp-bukrs
AND belnr = lt_doctype_zp-belnr
AND gjahr = lt_doctype_zp-gjahr.
IF NOT lt_bsas[] IS INITIAL.
SELECT bukrs belnr gjahr
buzei augbl lifnr
empfb
FROM bsak
INTO TABLE lt_bsak
FOR ALL ENTRIES IN lt_bsas
WHERE bukrs = lt_bsas-bukrs
AND belnr = lt_bsas-augbl
AND gjahr = lt_bsas-gjahr.
IF NOT lt_bsak[] IS INITIAL.
Get check number and check date
SELECT zbukr vblnr gjahr
chect zaldt
FROM payr
INTO TABLE lt_payr
FOR ALL ENTRIES IN lt_bsak
WHERE zbukr = lt_bsak-bukrs
AND vblnr = lt_bsak-augbl
AND gjahr = lt_bsak-gjahr.
IF NOT lt_payr[] IS INITIAL.
Get check details
SELECT zzbukr zvblnr zchect
zrcdap zrlsvd zbancd
FROM zcheck_monitor
INTO TABLE lt_payment_details
FOR ALL ENTRIES IN lt_payr
WHERE zzbukr = lt_payr-zbukr
AND zvblnr = lt_payr-vblnr
AND zchect = lt_payr-chect.
ENDIF.
SELECT lifnr name1 lnrza
FROM lfa1
INTO TABLE lt_alt_payee_dum
FOR ALL ENTRIES IN lt_bsak
WHERE lifnr = lt_bsak-lifnr.
Get alternate payee
SELECT lifnr name1 lnrza
FROM lfa1
INTO TABLE lt_alt_payee2
FOR ALL ENTRIES IN lt_alt_payee_dum
WHERE lifnr = lt_alt_payee_dum-lnrza.
ENDIF.
ENDIF.
ENDIF.
*/For document type 'KZ'
IF NOT lt_doctype_kz[] IS INITIAL.
Get check number and check date
SELECT zbukr vblnr gjahr
chect zaldt
FROM payr
APPENDING TABLE lt_payr
FOR ALL ENTRIES IN lt_doctype_kz
WHERE zbukr = lt_doctype_kz-bukrs
AND vblnr = lt_doctype_kz-belnr
AND gjahr = lt_doctype_kz-gjahr.
IF NOT lt_payr[] IS INITIAL.
Get check details
SELECT zzbukr zvblnr zchect
zrcdap zrlsvd zbancd
FROM zcheck_monitor
APPENDING TABLE lt_payment_details
FOR ALL ENTRIES IN lt_payr
WHERE zzbukr = lt_payr-zbukr
AND zvblnr = lt_payr-vblnr
AND zchect = lt_payr-chect.
ENDIF.
SELECT lifnr name1 lnrza
FROM lfa1
APPENDING TABLE lt_alt_payee_dum
FOR ALL ENTRIES IN lt_doctype_kz
WHERE lifnr = lt_doctype_kz-lifnr.
Get alternate payee
SELECT lifnr name1 lnrza
FROM lfa1
APPENDING TABLE lt_alt_payee2
FOR ALL ENTRIES IN lt_alt_payee_dum
WHERE lifnr = lt_alt_payee_dum-lnrza.
ENDIF.
ENDMETHOD. "get_check_num
METHOD limit_records.
FIELD-SYMBOLS: <fs_payment_details> LIKE LINE OF gt_payment_details,
<fs_payr> LIKE LINE OF gt_payr.
Limit records to check number specified
IF NOT s_zchect[] IS INITIAL.
LOOP AT gt_payment_details ASSIGNING <fs_payment_details>.
wa_zvblnr-sign = 'I'.
wa_zvblnr-option = 'EQ'.
MOVE <fs_payment_details>-zvblnr TO wa_zvblnr-low.
APPEND wa_zvblnr TO gr_zvblnr.
CLEAR wa_zvblnr.
ENDLOOP.
DELETE gt_vendor_details WHERE NOT augbl IN gr_zvblnr.
ENDIF.
Limit records to check date specified
IF NOT s_zaldt[] IS INITIAL.
REFRESH gr_zvblnr.
LOOP AT gt_payr ASSIGNING <fs_payr>.
wa_zvblnr-sign = 'I'.
wa_zvblnr-option = 'EQ'.
MOVE <fs_payr>-vblnr TO wa_zvblnr-low.
APPEND wa_zvblnr TO gr_zvblnr.
CLEAR wa_zvblnr.
ENDLOOP.
IF gr_zvblnr[] IS INITIAL.
REFRESH gt_vendor_details.
ELSE.
DELETE gt_vendor_details WHERE NOT augbl IN gr_zvblnr.
ENDIF.
ENDIF.
ENDMETHOD. "limit_records
ENDCLASS. "lcl_get_data IMPLEMENTATION
----
CLASS lcl_alv_routines IMPLEMENTATION
----
*
----
CLASS lcl_alv_routines IMPLEMENTATION.
METHOD build_fieldcat
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-fix_column = &5.
wa_fieldcat-just = &6.
wa_fieldcat-do_sum = &7.
wa_fieldcat-emphasize = &8.
wa_fieldcat-hotspot = &9.
append wa_fieldcat to gt_fieldcat.
clear wa_fieldcat.
END-OF-DEFINITION.
m_fieldcat 'BUKRS' 'gt_output' text-006 '' '' '' '' '' ''.
m_fieldcat 'LIFNR' 'gt_output' text-007 '' '' '' '' '' ''.
m_fieldcat 'NAME1' 'gt_output' text-008 '' '' '' '' '' ''.
m_fieldcat 'LNRZA' 'gt_output' text-009 '' '' '' '' '' ''.
m_fieldcat 'ZCHECT' 'gt_output' text-015 '' '' '' '' '' ''.
m_fieldcat 'ZALDT' 'gt_output' text-016 '' '' '' '' '' ''.
m_fieldcat 'DMBTR' 'gt_output' text-013 '' '' 'R' 'X' '' ''.
m_fieldcat 'WRBTR' 'gt_output' text-014 '' '' 'R' 'X' '' ''.
m_fieldcat 'AUGBL' 'gt_output' text-010 '' '' '' '' '' ''.
m_fieldcat 'BELNR' 'gt_output' text-011 '' '' '' '' 'C410' 'X'.
m_fieldcat 'BUZEI' 'gt_output' text-029 '' '' '' '' '' ''.
m_fieldcat 'BUDAT' 'gt_output' text-012 '' '' '' '' '' ''.
m_fieldcat 'BLDAT' 'gt_output' text-028 '' '' '' '' '' ''.
m_fieldcat 'WAERS' 'gt_output' text-030 '' '' '' '' '' ''.
m_fieldcat 'XBLNR' 'gt_output' text-017 '' '' '' '' '' ''.
m_fieldcat 'SGTXT' 'gt_output' text-018 '' '' '' '' '' ''.
m_fieldcat 'ZUONR' 'gt_output' text-019 '' '' '' '' '' ''.
m_fieldcat 'BLART' 'gt_output' text-020 '' '' '' '' '' ''.
m_fieldcat 'ZRCDAP' 'gt_output' text-021 '' '' '' '' '' ''.
m_fieldcat 'ZRLSVD' 'gt_output' text-022 '' '' '' '' '' ''.
m_fieldcat 'ZBANCD' 'gt_output' text-023 '' '' '' '' '' ''.
m_fieldcat 'USNAM' 'gt_output' text-024 '' '' '' '' '' ''.
ENDMETHOD. "build_fieldcat
ENDCLASS. "lcl_alv_routines IMPLEMENTATION
----
CLASS lcl_event_receiver IMPLEMENTATION
----
*
----
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_hotspot_click.
CLEAR wa_output.
READ TABLE gt_output INDEX e_row_id INTO wa_output.
IF NOT wa_output-belnr IS INITIAL
AND e_column_id = 'BELNR'.
SET PARAMETER ID 'BLN' FIELD wa_output-belnr.
SET PARAMETER ID 'BUK' FIELD wa_output-bukrs.
SET PARAMETER ID 'GJR' FIELD wa_output-gjahr.
Display accounting document
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
ENDIF.
ENDMETHOD. "handle_hotspot_click
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_records.
----
END-OF-SELECTION *
----
END-OF-SELECTION.
IF NOT gt_output[] IS INITIAL.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = 0
text = text-033.
CALL SCREEN 100.
ELSE.
MESSAGE i000 WITH text-025.
ENDIF.
&----
*& Module STATUS_0100 OUTPUT
&----
text
----
MODULE status_0100 OUTPUT.
SET PF-STATUS '100'.
SET TITLEBAR 'TITLE100'.
DATA: o_lcl_alv_routines TYPE REF TO lcl_alv_routines.
CREATE OBJECT o_lcl_alv_routines.
g_repid = sy-repid.
IF custom_container IS INITIAL.
CREATE OBJECT 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 grid1
EXPORTING
i_parent = custom_container.
Build fieldcatalog for initial display
CALL METHOD o_lcl_alv_routines->build_fieldcat.
Sort output table
SORT gt_output BY bukrs lifnr zchect zaldt augbl.
gs_disvariant-report = sy-repid.
Display initial window
CALL METHOD 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.
CREATE OBJECT event_receiver.
Trigger event when user clicks hotspot field
SET HANDLER event_receiver->handle_hotspot_click FOR grid1.
ENDIF.
CALL METHOD cl_gui_control=>set_focus
EXPORTING
control = 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 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
[/code]
P.S. Please award points if it helps...