Powered By

Free XML Skins for Blogger

Powered by Blogger

Showing posts with label SAP ALV Grid. Show all posts
Showing posts with label SAP ALV Grid. Show all posts

Tuesday, February 10, 2009

SAP Highlighting only a particular cell instead of entire row in ALV Grid

Let us execute the standard program: BCALV_DEMO_TOOLTIP:

On the selection screen, select the radio button “Output as Grid” and press Execute.

Output displayed:

Now let us select any cell in the ALV list:

From the above screenshot, you can observe that entire row is highlighted.

Instead of selecting the entire row, let us modify the program to highlight only the selected cell.

Copy the standard program BCALV_DEMO_TOOLTIP to a ‘Z’ program and make the following modifications:

The line number at which the modifications are to be made is shown in the above screenshot.

Save and activate the program. Now execute the program again and select any particular cell:

From the above screenshot, you can observe that only the selected cell is highlighted.

SAP ALV - Details of Y/Z objects with lists of users/date/time/description during creation or change

A simple ALV - Details of Y/Z objects with lists of users/date/time/description during creation or change of the object.

*&---------------------------------------------------------------------*
*& Report Z_OBJECT_TRACKER *
*& Author :Swarna.S.
*&---------------------------------------------------------------------*
*&
*& AS:
*& Simple ALV report -- Details of Y or Z objects
*& showing lists of all the users , date ,time and description for creation
*& or changes done on it
*&
*&---------------------------------------------------------------------*
REPORT z_object_tracker NO STANDARD PAGE HEADING.

*Type pools declaration for ALV.
TYPE-POOLS : slis.

*Structure declaration for TRDIR table
TYPES : BEGIN OF ty_trdir,
name(120), "Name of the the Y/Z program
cnam TYPE trdir-cnam, "Author

cdat TYPE trdir-cdat, "Created on
subc TYPE trdir-subc, "Program type
END OF ty_trdir.

*Structure declaration for the output in ALV fomrat
TYPES : BEGIN OF ty_output,
obj_name TYPE e071-obj_name, "Object Name(Y/Z)
trkorr TYPE e071-trkorr, "Transport Request
objtype(20) TYPE c, "object type
as4user TYPE e070-as4user, "User name
as4date TYPE e070-as4date, "date
as4time TYPE e070-as4time, "time
as4text TYPE e07t-as4text, "Short Text Describing R/3 Repository Objects
END OF ty_output.

*Internal table and work area declarations
*Declaration for TRDIR table

DATA : it_trdir TYPE STANDARD TABLE OF ty_trdir,

wa_trdir TYPE ty_trdir.

*Declaration for output table
DATA : it_output TYPE STANDARD TABLE OF ty_output,
wa_output TYPE ty_output.

*DATA Declarations for ALV grid
DATA: c_ccont TYPE REF TO cl_gui_custom_container,
c_alvgd TYPE REF TO cl_gui_alv_grid,
it_fcat TYPE lvc_t_fcat,
it_layout TYPE lvc_s_layo.

* For grid title
DATA : txt1 TYPE string.

DATA : txt2 TYPE string.

DATA : txt3 TYPE string.
DATA : txt4 TYPE string.
DATA : titletext TYPE string.

* Selection screen
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME.
PARAMETERS : p_object LIKE wa_trdir-name.
SELECTION-SCREEN END OF BLOCK blk1.

*initialization event
INITIALIZATION.
txt1 = 'Object tracker for'.

txt3 = 'Type'.

*Start of selection event
START-OF-SELECTION.

*Subroutine to get the user name/date/time
PERFORM get_object_details.

*Subroutine to print alv output
PERFORM alv_output.

*End of selection event
END-OF-SELECTION.

*&---------------------------------------------------------------------*
*& Form alv_output

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

* --> p1 text

* <-- p2 text

*----------------------------------------------------------------------*

FORM alv_output.

*Call the ALV screen with custom container
CALL SCREEN '0600'.
ENDFORM. " alv_output

*On this statement double click it takes you to the screen painter SE51.Enter the attributes
*Create a Custom container and name it C_GRID and OK code as OK_CODE.
*Save check and Activate the scren painter.
*NOw a normal screen witn number 600 is created which holds the ALV grid.

* PBO of the actual screen , Here we can give a title and customized menus
*&---------------------------------------------------------------------*
*& Module STATUS_0600 OUTPUT
*&---------------------------------------------------------------------*

* text
*----------------------------------------------------------------------*
MODULE status_0600 OUTPUT.

* SET TITLEBAR 'XXXX'.*
* SET PF-STATUS 'XXXXXXX'.

ENDMODULE. " STATUS_0600 OUTPUT

* calling the PBO module SET_GRID.
*&---------------------------------------------------------------------*

*& Module SET_GRID OUTPUT

*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE set_grid OUTPUT.

* Create object for custom container
CREATE OBJECT c_ccont
EXPORTING
container_name = 'C_GRID'.

* Create object for ALV grid
CREATE OBJECT c_alvgd
EXPORTING
i_parent = c_ccont.

* Set field for ALV
PERFORM alv_fieldcat.

* Set ALV attributes FOR LAYOUT
PERFORM alv_layout.

CHECK NOT c_alvgd IS INITIAL.

* Call ALV GRID
CALL METHOD c_alvgd->set_table_for_first_display

EXPORTING

is_layout = it_layout
CHANGING
it_outtab = it_output
it_fieldcatalog = it_fcat
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.

IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDMODULE. " SET_GRID OUTPUT

* PAI module of the screen created. In case we use an interactive ALV or
*for additional functionalities we can create OK codes and based on the user command
*we can do the coding.
*&---------------------------------------------------------------------*

*& Module USER_COMMAND_0600 INPUT

*&---------------------------------------------------------------------*

* text
*----------------------------------------------------------------------*
MODULE user_command_0600 INPUT.

ENDMODULE. " USER_COMMAND_0600 INPUT

*&---------------------------------------------------------------------*
*& Form get_object_details
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*

* Subroutine to fetch the details of the object through the necessary

* selections in the database.
*
*----------------------------------------------------------------------*
FORM get_object_details.

*Select values from TRDIR

SELECT name cnam cdat subc FROM trdir INTO TABLE it_trdir
WHERE name EQ p_object AND ( name LIKE 'Z%' OR name LIKE 'Y%' ).

*Select values from CTS tables
IF sy-subrc IS INITIAL.
SELECT a~obj_name a~trkorr b~as4user b~as4date b~as4time c~as4text
INTO CORRESPONDING FIELDS OF TABLE it_output
FROM e071 AS a INNER JOIN e070 AS b
ON a~trkorr = b~trkorr
INNER JOIN e07t AS c

ON a~trkorr = c~trkorr

FOR ALL ENTRIES IN it_trdir
WHERE a~obj_name = it_trdir-name
AND c~langu = sy-langu AND

a~lockflag <> ' '.

ENDIF.

* Appending the selected values to our output internal table
LOOP AT it_output INTO wa_output.

AT NEW obj_name.
READ TABLE it_trdir INTO wa_trdir WITH KEY name = wa_output-obj_name.
CASE wa_trdir-subc.
WHEN '1'.
wa_output-objtype = 'Executable Program'.
WHEN 'I'.
wa_output-objtype = 'Include Program'.
WHEN 'M'.

wa_output-objtype = 'Module Pool'.

WHEN 'F'.
wa_output-objtype = 'Function group'.
WHEN 'S'.
wa_output-objtype = 'Subroutine Pool'.
WHEN 'J'.
wa_output-objtype = 'Interface'.
WHEN 'K'.
wa_output-objtype = 'Class'.
ENDCASE.
MODIFY it_output FROM wa_output
TRANSPORTING objtype
WHERE obj_name EQ wa_output-obj_name.
CLEAR : wa_output , wa_trdir.
ENDAT.
ENDLOOP.
SORT it_output BY obj_name as4date as4time.

*FOR grid TITLE
TXT4 = wa_output-objTYPE.
txt2 = wa_output-obj_name.

CONCATENATE txt1 txt2 TXT3 TXT4 INTO titletext SEPARATED BY space.
ENDFORM. "get_object_details

*&--------------------------------------------------------------------*
*& Form alv_fieldcat

*&--------------------------------------------------------------------*

* text

*---------------------------------------------------------------------*

FORM alv_fieldcat.
DATA lv_fldcat TYPE lvc_s_fcat.
CLEAR lv_fldcat.
lv_fldcat-row_pos = '1'.
lv_fldcat-col_pos = '1'.
lv_fldcat-fieldname = 'AS4DATE'.
lv_fldcat-tabname = 'IT_OUTPUT'.
lv_fldcat-outputlen = '20'.
lv_fldcat-scrtext_m = 'Date'.
APPEND lv_fldcat TO it_fcat.
CLEAR lv_fldcat.
lv_fldcat-row_pos = '1'.
lv_fldcat-col_pos = '2'.
lv_fldcat-fieldname = 'AS4TIME'.
lv_fldcat-tabname = 'IT_OUTPUT'.
lv_fldcat-outputlen = '20'.
lv_fldcat-scrtext_m = 'Time'.
APPEND lv_fldcat TO it_fcat.
CLEAR lv_fldcat.
lv_fldcat-row_pos = '1'.
lv_fldcat-col_pos = '3'.
lv_fldcat-fieldname = 'AS4USER'.
lv_fldcat-tabname = 'IT_OUTPUT'.
lv_fldcat-outputlen = '20'.
lv_fldcat-scrtext_m = 'Developer'.

APPEND lv_fldcat TO it_fcat.
CLEAR lv_fldcat.
lv_fldcat-row_pos = '1'.
lv_fldcat-col_pos = '4'.
lv_fldcat-fieldname = 'AS4TEXT'.

lv_fldcat-tabname = 'IT_OUTPUT'.

lv_fldcat-outputlen = '20'.

lv_fldcat-scrtext_m = 'Object Desc'.
APPEND lv_fldcat TO it_fcat.
CLEAR lv_fldcat.
ENDFORM. "ALV_FIELDCAT

*&--------------------------------------------------------------------*
*& Form alv_layout
*&--------------------------------------------------------------------*

* text

*---------------------------------------------------------------------*

FORM alv_layout.
it_layout-cwidth_opt = 'X'.
it_layout-zebra = 'X'.
it_layout-grid_title = titletext.
ENDFORM. "ALV_LAYOUT

Steps to be done for creation of a screen 0600 with custom container.

  1. Create the screen 0600 for the above program and place a custom container on the same.
  2. Create a Custom container and name it C_GRID and OK code as OK_CODE.
  3. Name the custom container C_GRID and give ok code as OK_CODE.
  4. In the Flow Logic enter a PBO Module as SET_GRID.
  5. Activate and Execute the Code.

SAP ALV report to find the list of infotypes configured in a SAP System

ALV report to find the list of infotypes configured in a SAP System

*&---------------------------------------------------------------------*
*& Report ZINFOTYPE*
*& Author : Swarna.
S *
*&---------------------------------------------------------------------*
*& *
*& AS: This program lists all the infotypes maintained in SAP system *
*&---------------------------------------------------------------------*
REPORT zinfotype .
TYPE-POOLS : slis.
*Structure declaration for Infotypes for customer
TYPES : BEGIN OF ty_table,
infty TYPE infty,
pnnnn TYPE pnnnn_d,
END OF ty_table.
*Structure for infotype text
TYPES : BEGIN OF ty_itext,
infty TYPE infty,
itext TYPE intxt,
sprsl TYPE sprsl,
END OF ty_itext.
*Structure for output display
TYPES : BEGIN OF ty_output,
infty TYPE infty,
itext TYPE intxt,
pnnnn TYPE pnnnn_d,
END OF ty_output.
*internal table and work area declarations
DATA : it_table TYPE STANDARD TABLE OF ty_table INITIAL SIZE 0,
it_output TYPE STANDARD TABLE OF ty_output INITIAL SIZE 0,
it_ittext TYPE STANDARD TABLE OF ty_itext INITIAL SIZE 0,
wa_table TYPE ty_table,
wa_output TYPE ty_output,
wa_ittext TYPE ty_itext.
*Data declarations for ALV
DATA: c_ccont TYPE REF TO cl_gui_custom_container,
"Custom container object
c_alvgd TYPE REF TO cl_gui_alv_grid,
"ALV grid object
it_fcat TYPE lvc_t_fcat,
"Field catalogue
it_layout TYPE lvc_s_layo.
"Layout

INITIALIZATION.
START-OF-SELECTION.
*select the infotypes maintained
SELECT infty pnnnn
FROM t582a
INTO TABLE it_table.
*Select the infotype texts
IF it_table[] IS NOT INITIAL.
SELECT itext infty sprsl
FROM t582s
INTO CORRESPONDING FIELDS OF TABLE it_ittext
FOR ALL ENTRIES IN it_table
WHERE infty = it_table-infty
AND sprsl = 'E'.
ENDIF.
*Apppending the data to the internal table of ALV output
LOOP AT it_table INTO wa_table.
wa_output-infty = wa_table-infty.
wa_output-pnnnn = wa_table-pnnnn.
* For texts
READ TABLE it_ittext INTO wa_ittext WITH KEY infty = wa_table-infty.
wa_output-itext = wa_ittext-itext.
APPEND wa_output TO it_output.
CLEAR wa_output.
ENDLOOP.
* Calling the ALV screen wiht custom container
CALL SCREEN 0600.
*On this statement double click it takes you to the screen painter SE51.
Enter the attributes
*Create a Custom container and name it CC_CONT and OK code as OK_CODE.
*Save check and Activate the scren painter.
*NOw a normal screen witn number 600 is created which holds the ALV grid.
* PBO of the actual screen ,
Here we can give a title and customized menuss
*&---------------------------------------------------------------------*
*& Module STATUS_0600 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*

module STATUS_0600 output.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
endmodule.
" STATUS_0600 OUTPUT

* calling the PBO module ALV_GRID.
*&---------------------------------------------------------------------*
*& Module ALV_GRID OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*

MODULE alv_grid OUTPUT.
CREATE OBJECT c_ccont EXPORTING container_name = 'CC_CONT'.
CREATE OBJECT c_alvgd EXPORTING i_parent = c_ccont.
* Set field for ALV
PERFORM alv_build_fieldcat.
* Set ALV attributes FOR LAYOUT
PERFORM alv_report_layout.
CHECK NOT c_alvgd IS INITIAL.
* Call ALV GRID
CALL METHOD c_alvgd->set_table_for_first_display
EXPORTING is_layout = it_layout
CHANGING it_outtab = it_output
it_fieldcatalog = it_fcat
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDMODULE.
" ALV_GRID OUTPUT
*&---------------------------------------------------------------------*
*& Form alv_build_fieldcat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_IT_FCAT text
*----------------------------------------------------------------------*

FORM alv_build_fieldcat.
DATA lv_fldcat TYPE lvc_s_fcat.
CLEAR lv_fldcat.
lv_fldcat-row_pos = '1'.
lv_fldcat-col_pos = '1'.
lv_fldcat-fieldname = 'INFTY'.
lv_fldcat-tabname = 'IT_OUTPUT'.
lv_fldcat-outputlen = 8.
lv_fldcat-scrtext_m = 'Infotype'.
lv_fldcat-icon = 'X'.
APPEND lv_fldcat TO it_fcat.
CLEAR lv_fldcat.
lv_fldcat-row_pos = '1'.
lv_fldcat-col_pos = '2'.
lv_fldcat-fieldname = 'PNNNN'.
lv_fldcat-tabname = 'IT_OUTPUT'.
lv_fldcat-outputlen = 15.
lv_fldcat-scrtext_m = 'Structure'.
lv_fldcat-icon = ''.
APPEND lv_fldcat TO it_fcat.
CLEAR lv_fldcat.
lv_fldcat-row_pos = '1'.
lv_fldcat-col_pos = '3'.
lv_fldcat-fieldname = 'ITEXT'.
lv_fldcat-tabname = 'IT_OUTPUT'.
lv_fldcat-outputlen = 60.
lv_fldcat-scrtext_m = 'Description'.
lv_fldcat-icon = ''.
APPEND lv_fldcat TO it_fcat.
CLEAR lv_fldcat.
ENDFORM.
" alv_build_fieldcat

*&---------------------------------------------------------------------*
*& Form alv_report_layout
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_IT_LAYOUT text
*----------------------------------------------------------------------*
FORM alv_report_layout.
it_layout-cwidth_opt = 'X'.
it_layout-zebra = 'X'.
ENDFORM.
" alv_report_layout

* PAI module of the screen created.
In case we use an interactive ALV or
*for additional functionalities we can create OK codes and based on the user command
*we can do the coding.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0600 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module USER_COMMAND_0600 input.
endmodule.
" USER_COMMAND_0600 INPUT

Steps to be done for creation of a screen 0600 with custom container.

  1. Create the screen 0600 for the above program and place a custom container on the same.
  2. Create a Custom container
  3. Name the custom container CC_CONT and give ok code as OK_CODE.
  4. In the Flow Logic enter a PBO Module as ALV_GRID.
  5. Activate and Execute the Code.

SAP ALV Report using REUSE

his program creates an ALV report for Daily Cash Receipts for a selected date range.

REPORT sy-repid.

*-----------------------------------------------------------------------

*/ Description :This program creates an ALV report for Daily Cash

* Receipts for a selected date range.

*-----------------------------------------------------------------------

* Global data declaration

TYPE-POOLS: slis.

* Global structure of list

TYPES: BEGIN OF i_cust_invoices, "This is a temp-table where SELECT

"data is to be stored.

bkpf LIKE bkpf, "Acct Doc Header structure

bseg LIKE bseg, "Acct Doc Segment struc

kna1 LIKE kna1, "Customer Master struc

skat LIKE skat, "Chart of Accts struc

END OF i_cust_invoices.

TABLES: bkpf, "TABLES: def of Database tables.

bseg,

kna1,

skat.

*/ Selection and Input Parameters

SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME.

SELECT-OPTIONS: s_belnr FOR bseg-belnr, "Acct Doc number

s_budat FOR bkpf-budat, "Doc Posting Date

s_blart FOR bkpf-blart DEFAULT 'DZ'. "Document Type

SELECTION-SCREEN END OF BLOCK block1.

DATA: gt_fieldcat TYPE slis_t_fieldcat_alv.

DATA: gt_outtab TYPE i_cust_invoices OCCURS 0 WITH HEADER LINE.

DATA: g_repid LIKE sy-repid.

DATA: i_bkpf TYPE bkpf OCCURS 0 WITH HEADER LINE.

* Initialization fieldcatalog

INITIALIZATION.

g_repid = sy-repid.

PERFORM fieldcat_init USING gt_fieldcat[].

* Start of Selection

START-OF-SELECTION.

* Data selection

PERFORM select_data TABLES gt_outtab.

* Display list

END-OF-SELECTION.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

EXPORTING

i_callback_program = g_repid

it_fieldcat = gt_fieldcat[]

TABLES

t_outtab = gt_outtab.

*-----------------------------------------------------------------------

* Forms

*-----------------------------------------------------------------------

* Initialization fieldcatalog DEFINITION OF HEADING.

* Fieldnames and ref_fieldnames MUST be UPPER CASE !!

FORM fieldcat_init

USING rt_fieldcat TYPE slis_t_fieldcat_alv.

DATA: ls_fieldcat TYPE slis_fieldcat_alv.

DATA: pos TYPE i VALUE 1.

CLEAR ls_fieldcat.

ls_fieldcat-col_pos = pos.

ls_fieldcat-fieldname = 'BKPF-BUDAT'. "Posting Date

ls_fieldcat-ref_fieldname = 'BUDAT'.

ls_fieldcat-ref_tabname = 'BKPF'.

ls_fieldcat-key = 'X'.

APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.

pos = pos + 1.

ls_fieldcat-col_pos = pos.

ls_fieldcat-fieldname = 'BSEG-BELNR'. "Acct Doc Number

ls_fieldcat-ref_fieldname = 'BELNR'.

ls_fieldcat-ref_tabname = 'BSEG'.

APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.

pos = pos + 1.

ls_fieldcat-col_pos = pos.

ls_fieldcat-fieldname = 'BSEG-HKONT'. "Acct number

ls_fieldcat-ref_fieldname = 'HKONT'.

ls_fieldcat-ref_tabname = 'BSEG'.

APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.

pos = pos + 1.

ls_fieldcat-col_pos = pos.

ls_fieldcat-fieldname = 'BSEG-KOSTL'. "Cost Center

ls_fieldcat-ref_fieldname = 'KOSTL'.

ls_fieldcat-ref_tabname = 'BSEG'.

APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.

pos = pos + 1.

ls_fieldcat-col_pos = pos.

ls_fieldcat-fieldname = 'SKAT-TXT20'. "Acct Description

ls_fieldcat-ref_fieldname = 'TXT20'.

ls_fieldcat-ref_tabname = 'SKAT'.

APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.

pos = pos + 1.

ls_fieldcat-col_pos = pos.

ls_fieldcat-fieldname = 'SKAT-TXT50'. "Acct Description

ls_fieldcat-ref_fieldname = 'TXT50'.

ls_fieldcat-ref_tabname = 'SKAT'.

LS_FIELDCAT-NO_OUT = 'X'.

APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.

pos = pos + 1.

* ls_fieldcat-col_pos = pos.

* ls_fieldcat-fieldname = 'BSEG-AUGBL'. "Clearing Doc

* ls_fieldcat-ref_fieldname = 'AUGBL'.

* ls_fieldcat-ref_tabname = 'BSEG'.

* APPEND ls_fieldcat TO rt_fieldcat.

* CLEAR ls_fieldcat.

* pos = pos + 1.

ls_fieldcat-col_pos = pos.

ls_fieldcat-fieldname = 'BSEG-KUNNR'. "Cust number

ls_fieldcat-ref_fieldname = 'KUNNR'.

ls_fieldcat-ref_tabname = 'BSEG'.

APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.

pos = pos + 1.

ls_fieldcat-col_pos = pos.

ls_fieldcat-fieldname = 'KNA1-NAME1'. "Customer name

ls_fieldcat-ref_fieldname = 'NAME1'.

ls_fieldcat-ref_tabname = 'KNA1'.

APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.

pos = pos + 1.

ls_fieldcat-col_pos = pos.

ls_fieldcat-fieldname = 'BKPF-XBLNR'. "Ref Doc (Check) Number

ls_fieldcat-ref_fieldname = 'XBLNR'.

ls_fieldcat-ref_tabname = 'BKPF'.

APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.

pos = pos + 1.

ls_fieldcat-col_pos = pos.

ls_fieldcat-fieldname = 'BSEG-SHKZG'. "DR/CR ind.

ls_fieldcat-ref_fieldname = 'SHKZG'.

ls_fieldcat-ref_tabname = 'BSEG'.

LS_FIELDCAT-NO_OUT = 'X'.

APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.

pos = pos + 1.

ls_fieldcat-col_pos = pos.

ls_fieldcat-fieldname = 'BSEG-WRBTR'. "Amt in Doc Currency

ls_fieldcat-ref_fieldname = 'WRBTR'.

ls_fieldcat-ref_tabname = 'BSEG'.

APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.

pos = pos + 1.

ls_fieldcat-col_pos = pos.

ls_fieldcat-fieldname = 'BKPF-WAERS'. "Currency Key

ls_fieldcat-ref_fieldname = 'WAERS'.

ls_fieldcat-ref_tabname = 'BKPF'.

APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.

pos = pos + 1.

ls_fieldcat-col_pos = pos.

ls_fieldcat-fieldname = 'BKPF-KURSF'. "Exchange Rate

ls_fieldcat-ref_fieldname = 'KURSF'.

ls_fieldcat-ref_tabname = 'BKPF'.

APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.

pos = pos + 1.

ls_fieldcat-col_pos = pos.

ls_fieldcat-fieldname = 'BSEG-DMBTR'. "Amt in Local Currency

ls_fieldcat-ref_fieldname = 'DMBTR'.

ls_fieldcat-ref_tabname = 'BSEG'.

APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.

pos = pos + 1.

ls_fieldcat-col_pos = pos.

ls_fieldcat-fieldname = 'BSEG-GJAHR'. "Fiscal Year

ls_fieldcat-ref_fieldname = 'GJAHR'.

ls_fieldcat-ref_tabname = 'BSEG'.

LS_FIELDCAT-NO_OUT = 'X'.

APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.

pos = pos + 1.

ls_fieldcat-col_pos = pos.

ls_fieldcat-fieldname = 'BSEG-BUZEI'. "Doc Line #

ls_fieldcat-ref_fieldname = 'BUZEI'.

ls_fieldcat-ref_tabname = 'BSEG'.

LS_FIELDCAT-NO_OUT = 'X'.

APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.

pos = pos + 1.

ls_fieldcat-col_pos = pos.

ls_fieldcat-fieldname = 'BSEG-BSCHL'. "Posting Key

ls_fieldcat-ref_fieldname = 'BSCHL'.

ls_fieldcat-ref_tabname = 'BSEG'.

LS_FIELDCAT-NO_OUT = 'X'.

APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.

pos = pos + 1.

* Cost Center is not needed for cash posting - only expenses.

*

* ls_fieldcat-col_pos = pos.

* ls_fieldcat-fieldname = 'BSEG-KOSTL'. "Cost Center

* ls_fieldcat-ref_fieldname = 'KOSTL'.

* ls_fieldcat-ref_tabname = 'BSEG'.

* APPEND ls_fieldcat TO rt_fieldcat.

* CLEAR ls_fieldcat.

* pos = pos + 1.

ls_fieldcat-col_pos = pos.

ls_fieldcat-fieldname = 'BKPF-BUKRS'. "Company Code

ls_fieldcat-ref_fieldname = 'BUKRS'.

ls_fieldcat-ref_tabname = 'BKPF'.

LS_FIELDCAT-NO_OUT = 'X'.

APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.

pos = pos + 1.

ls_fieldcat-col_pos = pos.

ls_fieldcat-fieldname = 'BKPF-BLART'. "Document Type

ls_fieldcat-ref_fieldname = 'BLART'.

ls_fieldcat-ref_tabname = 'BKPF'.

APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.

pos = pos + 1.

ls_fieldcat-col_pos = pos.

ls_fieldcat-fieldname = 'BSEG-SGTXT'. "Item Text

ls_fieldcat-ref_fieldname = 'SGTXT'.

ls_fieldcat-ref_tabname = 'BSEG'.

APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.

pos = pos + 1.

ls_fieldcat-col_pos = pos.

ls_fieldcat-fieldname = 'BKPF-USNAM'. "User name

ls_fieldcat-ref_fieldname = 'USNAM'.

ls_fieldcat-ref_tabname = 'BKPF'.

LS_FIELDCAT-NO_OUT = 'X'.

APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.

ENDFORM. "fieldcat_init

* Data selection

FORM select_data TABLES rt_outtab LIKE gt_outtab[].

DATA: l_name LIKE tline-tdline.

* IF s_hkont IS INITIAL.

SELECT bukrs belnr blart budat usnam xblnr waers kursf INTO

CORRESPONDING FIELDS OF TABLE

i_bkpf FROM bkpf WHERE belnr IN s_belnr

AND blart IN s_blart

AND budat IN s_budat.

LOOP AT i_bkpf.

SELECT hkont kostl belnr gjahr buzei bschl shkzg dmbtr wrbtr sgtxt

kunnr INTO (bseg-hkont, bseg-kostl, bseg-belnr, bseg-gjahr,

bseg-buzei, bseg-bschl, bseg-shkzg, bseg-dmbtr,

bseg-wrbtr, bseg-sgtxt, bseg-kunnr) FROM bseg

WHERE belnr EQ i_bkpf-belnr.

CLEAR: KNA1, skat.

SELECT SINGLE * FROM skat WHERE SPRAS EQ SY-LANGU

AND KTOPL EQ '7100'

AND SAKNR = bseg-hkont.

"ska1, skb1 account # stored in SAKNR.

"in BSEG, account # stored in HKONT.

if bseg-SHKZG eq 'H'.

multiply : bseg-wrbtr by -1,

bseg-dmbtr by -1.

endif.

MOVE-CORRESPONDING: i_bkpf TO rt_outtab-bkpf,

bseg TO rt_outtab-bseg,

skat TO rt_outtab-skat.

SELECT SINGLE name1 INTO rt_outtab-kna1-name1 FROM KNA1

WHERE kunnr = rt_outtab-bseg-kunnr.

APPEND rt_outtab.

CLEAR: rt_outtab.

ENDSELECT.

ENDLOOP.

ENDFORM. " select_data

Archives