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: 
11 REPLIES 11
Read only

Former Member
0 Likes
1,246

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

https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/e8a1d690-0201-0010-b7ad-d9719a41...

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.allsaplinks.com/

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

https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/b6cae890-0201-0010-ef8b-f970a9c4...

https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/1591ec90-0201-0010-3ba8-cdcd500b...

https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/library/webas/abap/abap%20...

http://www.henrikfrank.dk/abapuk.html

http://www.erpgenie.com/abap/OO/

<b>

Reward points for useful Answers</b>

Regards

Anji

Read only

Former Member
0 Likes
1,246

hi,

Refer

Read only

Former Member
0 Likes
1,246

HI,

yaa abap supports oops concepts

see this link for help on abap objects

http://www.esnips.com/doc/bc475662-82d6-4412-9083-28a7e7f1ce09/Abap-Objects---An-Introduction-To-Pro...

rgds,

bharat.

Read only

Former Member
0 Likes
1,246

Yes, ABAP supports OPPS.

For details, please refer help.sap.com or some other relevant sites.

Thanks,

Max

Read only

seshatalpasai_madala
Product and Topic Expert
Product and Topic Expert
0 Likes
1,246

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

Read only

Former Member
0 Likes
1,246

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.allsaplinks.com/

http://www.sap-img.com/

http://www.sapgenie.com/

http://help.sap.com

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.

Read only

Former Member
0 Likes
1,246

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.

Read only

Former Member
0 Likes
1,246

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.

Read only

aris_hidalgo
Contributor
0 Likes
1,246

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...