Google Search - Blog...........

Showing posts with label sample report programs. Show all posts
Showing posts with label sample report programs. Show all posts

ABAP - SALV List With Symbol.

REPORT ztest.

INCLUDE .
INCLUDE .
INCLUDE .

TYPES: BEGIN OF ty_mara,
symbol TYPE icon_d,
matnr TYPE mara-matnr,
meins TYPE mara-meins,
mtart TYPE mara-mtart,
t_celltype TYPE salv_t_int4_column,
END OF ty_mara.

DATA : lt_celltype TYPE salv_t_int4_column,
ls_celltype TYPE salv_s_int4_column.

DATA: lr_columns TYPE REF TO cl_salv_columns_table,
lr_column TYPE REF TO cl_salv_column_table.

CONSTANTS: gc_true TYPE sap_bool VALUE 'X'.

DATA : gr_layout TYPE REF TO cl_salv_layout,
gr_layout_key TYPE salv_s_layout_key,
ls_layout TYPE salv_s_layout,
lt_layout_info TYPE salv_t_layout_info.

DATA: it_mara TYPE TABLE OF ty_mara,
wa_mara TYPE ty_mara,
it_table TYPE REF TO cl_salv_table.

*----------------------------------------------------------------------*
* start of selection
*----------------------------------------------------------------------*
START-OF-SELECTION.

SELECT matnr
meins
mtart
FROM mara
INTO CORRESPONDING FIELDS OF TABLE it_mara
UP TO 10 ROWS.

END-OF-SELECTION.

LOOP AT it_mara INTO wa_mara.

IF wa_mara-meins = 'EA'.
wa_mara-symbol = sym_unlocked.
ELSE.
wa_mara-symbol = sym_locked.
ENDIF.

MODIFY it_mara FROM wa_mara.
ENDLOOP.

TRY.
cl_salv_table=>factory(
EXPORTING list_display = 'X'
IMPORTING
r_salv_table = it_table
CHANGING
t_table = it_mara ).
CATCH cx_salv_msg.
ENDTRY.

DATA: lr_functions TYPE REF TO cl_salv_functions.

lr_functions = it_table->get_functions( ).

lr_functions->set_all( gc_true ).

lr_columns = it_table->get_columns( ).
lr_columns->set_optimize( gc_true ).

try.
lr_column ?= lr_columns->get_column( 'SYMBOL' ).
lr_column->set_symbol( if_salv_c_bool_sap=>true ).
lr_column->set_long_text( 'SYMBOL' ).
catch cx_salv_not_found.
endtry.

it_table->display( ).



ALSO READ:

- Coloring A Row & Column In ALV Display Using OOPS Concept.

- Create Unique Handle For ALV Layout (Variant).

- Customizing Toolbar In ALV Tree Using ABAP OO.

- Dropdown in ALV Grid Display.

- Dynamic ALV Grid/List Display.

..... Back To Index On ALV List/ Grid Display.

..... Back To MAIN INDEX.


ABAP - SAL List With ICON's

REPORT ztest.

INCLUDE .
INCLUDE .
INCLUDE .

TYPES: BEGIN OF ty_mara,
icon TYPE icon_d,
matnr TYPE mara-matnr,
meins TYPE mara-meins,
mtart TYPE mara-mtart,
t_celltype TYPE salv_t_int4_column,
END OF ty_mara.

DATA : lt_celltype TYPE salv_t_int4_column,
ls_celltype TYPE salv_s_int4_column.

DATA: lr_columns TYPE REF TO cl_salv_columns_table,
lr_column TYPE REF TO cl_salv_column_table.

CONSTANTS: gc_true TYPE sap_bool VALUE 'X'.

DATA : gr_layout TYPE REF TO cl_salv_layout,
gr_layout_key TYPE salv_s_layout_key,
ls_layout TYPE salv_s_layout,
lt_layout_info TYPE salv_t_layout_info.

DATA: it_mara TYPE TABLE OF ty_mara,
wa_mara TYPE ty_mara,
it_table TYPE REF TO cl_salv_table.

*----------------------------------------------------------------------*
* start of selection
*----------------------------------------------------------------------*
START-OF-SELECTION.

SELECT matnr
meins
mtart
FROM mara
INTO CORRESPONDING FIELDS OF TABLE it_mara
UP TO 10 ROWS.

END-OF-SELECTION.

LOOP AT it_mara INTO wa_mara.

IF wa_mara-meins = 'EA'.
wa_mara-icon = ICON_CAR.
ELSE.
wa_mara-icon = ICON_FLIGHT.
ENDIF.

MODIFY it_mara FROM wa_mara.
ENDLOOP.

TRY.
cl_salv_table=>factory(
EXPORTING list_display = 'X'
IMPORTING
r_salv_table = it_table
CHANGING
t_table = it_mara ).
CATCH cx_salv_msg.
ENDTRY.

DATA: lr_functions TYPE REF TO cl_salv_functions.

lr_functions = it_table->get_functions( ).

lr_functions->set_all( gc_true ).

lr_columns = it_table->get_columns( ).
lr_columns->set_optimize( gc_true ).

TRY.
lr_column ?= lr_columns->get_column( 'ICON' ).
lr_column->set_icon( if_salv_c_bool_sap=>true ).
lr_column->set_long_text( 'ICON' ).
CATCH cx_salv_not_found.
ENDTRY.

it_table->display( ).


ALSO READ:

- Coloring A Row & Column In ALV Display Using OOPS Concept.

- Create Unique Handle For ALV Layout (Variant).

- Customizing Toolbar In ALV Tree Using ABAP OO.

- Dropdown in ALV Grid Display.

- Dynamic ALV Grid/List Display.

..... Back To Index On ALV List/ Grid Display.

..... Back To MAIN INDEX.


ABAP - SALV List With Check Box

* This is a simple report for displaying check box with class cl_salv_table

REPORT ztest.

INCLUDE .
INCLUDE .
INCLUDE .

TYPES: BEGIN OF ty_mara,
checkbox TYPE sap_bool,
matnr TYPE mara-matnr,
meins TYPE mara-meins,
mtart TYPE mara-mtart,
t_celltype TYPE salv_t_int4_column,
END OF ty_mara.

DATA : lt_celltype TYPE salv_t_int4_column,
ls_celltype TYPE salv_s_int4_column.

DATA: lr_columns TYPE REF TO cl_salv_columns_table,
lr_column TYPE REF TO cl_salv_column_table.

CONSTANTS: gc_true TYPE sap_bool VALUE 'X'.

DATA : gr_layout TYPE REF TO cl_salv_layout,
gr_layout_key TYPE salv_s_layout_key,
ls_layout TYPE salv_s_layout,
lt_layout_info TYPE salv_t_layout_info.

DATA: it_mara TYPE TABLE OF ty_mara,
wa_mara TYPE ty_mara,
it_table TYPE REF TO cl_salv_table.

*----------------------------------------------------------------------*
* start of selection
*----------------------------------------------------------------------*
START-OF-SELECTION.

SELECT matnr
meins
mtart
FROM mara
INTO CORRESPONDING FIELDS OF TABLE it_mara
UP TO 10 ROWS.

END-OF-SELECTION.

LOOP AT it_mara INTO wa_mara.
wa_mara-checkbox = 'X'.

MODIFY it_mara FROM wa_mara.
ENDLOOP.

TRY.
cl_salv_table=>factory(
EXPORTING list_display = 'X'
IMPORTING
r_salv_table = it_table
CHANGING
t_table = it_mara ).
CATCH cx_salv_msg.
ENDTRY.

DATA: lr_functions TYPE REF TO cl_salv_functions.

lr_functions = it_table->get_functions( ).

lr_functions->set_all( gc_true ).

lr_columns = it_table->get_columns( ).
lr_columns->set_optimize( gc_true ).

TRY.
lr_column ?= lr_columns->get_column( 'CHECKBOX' ).
lr_column->set_cell_type( if_salv_c_cell_type=>checkbox ).
lr_column->set_long_text( 'Check Box' ).

CATCH cx_salv_not_found.
ENDTRY.


it_table->display( ).




Insert Internal Table Data To The Dynamically Created Table

REPORT zTEST.

DATA: lt_mara TYPE TABLE OF mara,
ls_mara TYPE mara.

DATA: lr_dref TYPE REF TO data.
DATA: lv_tabname TYPE tabname.

FIELD-SYMBOLS: TYPE table,
TYPE ANY.

lv_tabname = 'MARA'.

TRY.

CREATE DATA lr_dref TYPE TABLE OF (lv_tabname).
ASSIGN lr_dref->* TO .

CATCH cx_sy_create_data_error.
* Do something

ENDTRY.


SELECT * FROM mara INTO TABLE lt_mara.

LOOP AT lt_mara INTO ls_mara.
ASSIGN ls_mara TO .
APPEND TO .
ENDLOOP.

Appending & Modifying A Dynamic Table Data.

REPORT ztest_001.

PARAMETER: p_table TYPE tabname DEFAULT 'MARD'.

DATA: dref TYPE REF TO data.

FIELD-SYMBOLS:
TYPE STANDARD TABLE, "Dyn. Int. Table
TYPE ANY, "Work Area
TYPE ANY.

*Create the data reference for internal table
CREATE DATA dref TYPE STANDARD TABLE OF (p_table).

*De-referencing the data reference variable
ASSIGN dref->* TO .
CLEAR dref.

* Create data reference for work area
CREATE DATA dref TYPE (p_table).
ASSIGN dref->* TO .

DO.
ASSIGN COMPONENT sy-index OF STRUCTURE TO .
IF sy-subrc = 0.
= 'Value'.
ELSE.
APPEND TO .
CLEAR .
EXIT.
ENDIF.
ENDDO.

start-of-selection.


LOOP AT INTO .
WRITE:/ .
ENDLOOP.

ABAP - Downloading All Custom Reports From The Server Using FM GUI_DOWNLOAD.

*--------------------------------------------------------*
* This simple program will give you a brief idea how to download
* a bunch of custom reports to your desktop
*--------------------------------------------------------*

REPORT ztest.


parameters: p_file type rlgrap-filename.

DATA: it_data TYPE TABLE OF string WITH HEADER LINE,
prog TYPE c LENGTH 30,
itab TYPE TABLE OF string,
v_lines TYPE i.

TYPES: BEGIN OF ty_name,
objname TYPE tadir-obj_name,
END OF ty_name.

DATA: it_name TYPE TABLE OF ty_name WITH HEADER LINE.

*at selection screen on value-request for p_file.

start-of-selection.

SELECT obj_name FROM tadir INTO TABLE it_name
WHERE object = 'PROG'
AND obj_name LIKE 'Z%'.

LOOP AT it_name.
prog = it_name-objname.
READ REPORT prog INTO itab.

describe table itab lines v_lines.

IF sy-subrc = 0.

*---this is to identify the program from another with this gap

APPEND LINES OF itab FROM 1 TO v_lines TO it_data.
append '*************************************************************' to it_data.
do 3 times.
append '' to it_data.
enddo.
REFRESH itab.
clear v_lines.
ENDIF.
ENDLOOP.

data: l_file type string.

l_file = p_file.

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = l_file

tables
data_tab = it_data .

Add Customer Field To The T-Codes ME51N / ME52N / ME53N

Create a new field in the transaction ME51N or ME52N or ME53N. Go to CMOD and create a new project with the custom name using the enhancement MEREQ001.

in this the possible enhancements are :

Function exit EXIT_SAPLMEREQ_001
EXIT_SAPLMEREQ_002
EXIT_SAPLMEREQ_003
EXIT_SAPLMEREQ_004
EXIT_SAPLMEREQ_005
EXIT_SAPLMEREQ_006
EXIT_SAPLMEREQ_007
EXIT_SAPLMEREQ_008
EXIT_SAPLMEREQ_009
EXIT_SAPLMEREQ_010

Screen exit SAPLMEGUI

Include tables CI_EBANDB
CI_EBANDBX
CI_EBANMEM
First you need to enhance the standard structures EBAN and CI_EBANDB with the custom field ( ZPRTY ).

in this create the screen exit, go to se51 and enter the program name as SAPLXM02
and screen number as 111. In the layout create the custom field as EBAN-ZPRTY.


in the PBO write the coding like as follows :

MODULE status_0111 OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.

DATA: v_char TYPE c,
v_screen TYPE screen,
v_input TYPE screen-input,
v_output TYPE screen-output.

IMPORT v_char FROM MEMORY ID 'ZTEST'.

CONCATENATE 'EBAN' '-ZPRTY' INTO v_name.
CONDENSE v_name.
ASSIGN (v_name) TO .
= v_char.

DATA: re_aktvt TYPE aktvt.

IMPORT re_aktvt FROM MEMORY ID 'ZACT'.


IF sy-tcode = 'ME53N'AND re_aktvt IS INITIAL.

LOOP AT SCREEN.
IF screen-name = 'EBAN-ZPRTY'.
screen-input = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ELSEIF sy-tcode = 'ME53N'AND re_aktvt IS NOT INITIAL.

LOOP AT SCREEN.
IF screen-name = 'EBAN-ZPRTY'.
CASE : re_aktvt.
WHEN 'A'. "-----> Only display mode
screen-input = '1'.
WHEN 'V'. "------> Input/output mode
screen-input = '0'.
ENDCASE.
MODIFY SCREEN.
ENDIF.

ENDLOOP.
ELSEIF sy-tcode = 'ME52N'AND re_aktvt IS NOT INITIAL.

LOOP AT SCREEN.
IF screen-name = 'EBAN-ZPRTY'.
CASE : re_aktvt.
WHEN 'A'. "-----> Only display mode
screen-input = '1'.
WHEN 'V'. "------> Input/output mode
screen-input = '0'.
ENDCASE.
MODIFY SCREEN.
ENDIF.

ENDLOOP.
ELSEIF sy-tcode = 'ME52N'AND re_aktvt IS INITIAL.

LOOP AT SCREEN.
IF screen-name = 'EBAN-ZPRTY'.
screen-input = '1'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.

ENDIF.
ENDMODULE. " STATUS_0111 OUTPUT

and in the PAI write the coding like this :

MODULE user_command_0111 INPUT.

CONCATENATE 'EBAN' '-ZPRTY' INTO v_name.
CONDENSE v_name.
ASSIGN (v_name) TO .

CONCATENATE 'CI_EBANDB' '-ZPRTY' INTO v_name1.
CONDENSE v_name1.
ASSIGN (v_name1) TO .

= .


ENDMODULE. " USER_COMMAND_0111 INPUT


Activate the user exit : ZXM02U01( this will trigger before the display from the tcode)


*&---------------------------------------------------------------------*
*& Include ZXM02U01
*&---------------------------------------------------------------------*

DATA : l_mereq_item TYPE mereq_item.

l_mereq_item = im_req_item->get_data( ).

DATA : v_name TYPE char30,
v_char type c.
FIELD-SYMBOLS: .

CONCATENATE 'EBAN' '-ZPRTY' INTO v_name.
CONDENSE v_name.
ASSIGN (v_name) TO .

IF NOT l_mereq_item-zprty IS INITIAL.
assign l_mereq_item-zprty to .
move to v_char.
export v_char to memory id 'ZTEST'.
ENDIF.

*&---------------------------------------------------------------------*
*& Include ZXM02U03
*&---------------------------------------------------------------------*

TABLES: ci_ebandb.

DATA : l_mereq_item TYPE mereq_item.

l_mereq_item = im_req_item->get_data( ).

MOVE-CORRESPONDING ci_ebandb TO l_mereq_item .

CALL METHOD im_req_item->set_data( l_mereq_item ).
ex_changed = 'X'.


DATA: re_aktvt TYPE aktvt.
CALL METHOD im_req_item->get_activity
RECEIVING
re_aktvt = re_aktvt.

CASE re_aktvt.
*---this will handles the toggling between change and display between the screens without changing the tcodes ( i mean ME52N to ME53N)
EXPORT re_aktvt TO MEMORY ID 'ZACT'.
WHEN 'A'. "-----> Only display mode
WHEN 'V'. "------> Input/output mode
ENDCASE.

Stock Details Report - Goods Inventory, Open & Closed Stock.

*---This report calculates the stock details for a given period with Goods Receipt, * Goods Inventory, and open and closed stock

REPORT zstock_details NO STANDARD PAGE HEADING
MESSAGE-ID zxyz
line-count 62
line-size 256.

* Type-pool decleration for ALV DIsplay
TYPE-POOLS: slis.

* Structure decleration for
TYPES : BEGIN OF ty_mseg_mkpf,
mblnr TYPE mblnr,
mjahr TYPE mjahr,
zeile TYPE mblpo,
bwart TYPE bwart,
matnr TYPE matnr,
werks TYPE werks_d,
insmk TYPE mb_insmk,
shkzg TYPE shkzg,
menge TYPE menge_d,
meins TYPE meins,
budat TYPE budat,
END OF ty_mseg_mkpf,

* Structure decleration for the final output table
BEGIN OF ty_final,
matnr TYPE matnr,
maktx TYPE maktx,
werks TYPE werks_d,
bdate TYPE budat,
edate TYPE budat,
os_menge TYPE menge_d,
os_meins TYPE meins,
gr_menge TYPE menge_d,
gr_meins TYPE meins,
gi_menge TYPE menge_d,
gi_meins TYPE meins,
cs_menge TYPE menge_d,
cs_meins TYPE meins,
END OF ty_final,

* Structure decleration for the material text
BEGIN OF ty_makt,
matnr TYPE matnr,
maktx TYPE maktx,
END OF ty_makt,
* Structure decleration for the material Units
BEGIN OF ty_marc_mara,
matnr TYPE matnr,
meins TYPE meins,
END OF ty_marc_mara,

* Structure decleration for the material current stock
BEGIN OF ty_mard,
matnr TYPE matnr,
werks TYPE werks_d,
labst TYPE labst,
END OF ty_mard,

* Structure decleration for the first and last dates of the months
BEGIN OF ty_year,
bdate TYPE dats,
ldate TYPE dats,
END OF ty_year,

* Internal body decleration for the above structures using types
tt_mseg_mkpf TYPE STANDARD TABLE OF ty_mseg_mkpf ,
tt_marc_mara TYPE STANDARD TABLE OF ty_marc_mara,
tt_makt TYPE STANDARD TABLE OF ty_makt,
tt_mard TYPE STANDARD TABLE OF ty_mard,
tt_final TYPE STANDARD TABLE OF ty_final,
tt_year TYPE STANDARD TABLE OF ty_year.


DATA : l_mfdate TYPE dats, " yyyymmdd
l_mldate TYPE dats,
l_datet TYPE dats,
l_odatet TYPE dats,
l_day TYPE i,
l_month TYPE i,
l_werks TYPE t001w-werks,
l_budat TYPE budat,
l_matnr TYPE mara-matnr,
l_open_stock TYPE menge_d,
l_gr_menge TYPE menge_d,
l_gi_menge TYPE menge_d,
l_gin_menge TYPE menge_d,
l_cs_menge TYPE menge_d,

l_pr_stock TYPE menge_d,

* Work area and body decleration's
w_year TYPE ty_year,
t_year TYPE tt_year,

w_mseg_mkpf TYPE ty_mseg_mkpf,
t_mseg_mkpf TYPE tt_mseg_mkpf,

w_mseg_mkpf_temp TYPE ty_mseg_mkpf,
t_mseg_mkpf_temp TYPE tt_mseg_mkpf,

w_makt TYPE ty_makt,
t_makt TYPE tt_makt,

w_mard TYPE ty_mard,
w_mard_temp TYPE ty_mard,
t_mard TYPE tt_mard,
w_mard1 TYPE ty_mard,
t_mard1 TYPE tt_mard,

w_marc_mara TYPE ty_marc_mara,
t_marc_mara TYPE tt_marc_mara,

w_final TYPE ty_final,
t_final TYPE tt_final,

* Table decleration for titles in xls file
BEGIN OF t_titles OCCURS 0,
text TYPE char20,
END OF t_titles,

*&---------------------------------------------------------------------*
*& ALV Declaration
*&---------------------------------------------------------------------*
* work area Declaration of fieldcat
w_fieldcat TYPE slis_fieldcat_alv,

* Internal table declaration for fieldcat
t_fieldcat TYPE slis_t_fieldcat_alv.

* Selection screen declerations
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS : p_werks TYPE werks_d DEFAULT 'PRUS' OBLIGATORY. " Plant
SELECT-OPTIONS : s_budat FOR l_budat OBLIGATORY NO-EXTENSION, " Posting Date in the Document
s_matnr FOR l_matnr. " Material Number

SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
PARAMETERS: r1 RADIOBUTTON GROUP rad USER-COMMAND rr DEFAULT 'X'. " View the report in ALV
SELECTION-SCREEN SKIP.
PARAMETERS:r2 RADIOBUTTON GROUP rad.
PARAMETER p_flname TYPE ibipparms-path DEFAULT 'C:\Stock_Details.xls' MODIF ID sc2. " File path

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 35(50) c_uname MODIF ID sc2.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK b2.

INITIALIZATION.

* Refresh all the Internal tables
REFRESH : t_mseg_mkpf,
t_final,
t_fieldcat,
t_makt,
t_mard,
t_marc_mara,
t_year,
t_titles.

* clear all the work ares
CLEAR : w_mseg_mkpf,
w_final,
w_fieldcat,
w_year,
w_makt,
w_mard,
w_marc_mara.

* Setting the default values at the selection screen
s_budat-low = '20080101'.
s_budat-high = sy-datum.
APPEND s_budat.
CLEAR s_budat.
c_uname = 'Enter the file name with .xls extension'.

***********At Selection Screen**************
AT SELECTION-SCREEN.

* Validating the Plant field
PERFORM sub_validate_werks.

* Validating the date field's
PERFORM sub_validate_budat.

* Validating the Material Number field
PERFORM sub_validate_matnr.

***********At Selection Screen on Value request for download file path**************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_flname.

* F4 help for the file path
PERFORM sub_get_f4help.

***********At Selection Screen Output**************

AT SELECTION-SCREEN OUTPUT.

LOOP AT SCREEN.
IF screen-group1 = 'SC1'.
IF r1 = 'X'.
screen-active = 1.
ELSEIF r2 = 'X'.
screen-active = 0.
ENDIF.
MODIFY SCREEN.
ELSEIF screen-group1 = 'SC2'.
IF r1 = 'X'.
screen-active = 0.
ELSEIF r2 = 'X'.
screen-active = 1.
ENDIF.
MODIFY SCREEN.
ENDIF.

ENDLOOP.

***********Start of Selection**************

START-OF-SELECTION.

* PERFORM sub_get_year_dates.

* Get all the materials and there unit of measure
PERFORM sub_get_material.

* Get the material text
PERFORM sub_get_material_texts.

* Calculate the opening stock for the given period
PERFORM sub_get_present_stock.

* Calculate the Goods Received, Goods Issued and the Closing Stock for the given period.
PERFORM sub_get_mseg_mkpf.

* Display the Output in ALV
PERFORM sub_disp_alv.

* Download the file to the Presentation server
PERFORM sub_download_xls.

*&---------------------------------------------------------------------*
*& Form sub_validate_werks
*----------------------------------------------------------------------*
FORM sub_validate_werks .
CLEAR l_werks.
SELECT SINGLE werks
FROM mseg
INTO l_werks
WHERE werks EQ p_werks.

IF sy-subrc NE 0.
MESSAGE e001 WITH 'No records exists for the given Plant'.
ENDIF.
ENDFORM. " sub_validate_werks
*&---------------------------------------------------------------------*
*& Form sub_validate_budat
*----------------------------------------------------------------------*
FORM sub_validate_budat .
CLEAR l_budat.
IF s_budat-high GT sy-datum.
MESSAGE e001 WITH 'Enter the Dates Less Than:', sy-datum.
ENDIF.
ENDFORM. " sub_validate_budat
*&---------------------------------------------------------------------*
*& Form sub_validate_matnr
*----------------------------------------------------------------------*
FORM sub_validate_matnr .

CLEAR l_matnr.
SELECT SINGLE matnr
FROM marc
INTO l_matnr
WHERE matnr IN s_matnr
AND werks EQ p_werks.

IF sy-subrc NE 0.
MESSAGE e001 WITH 'No records exists for the given Material No.'.
ENDIF.

ENDFORM. " sub_validate_matnr

*&---------------------------------------------------------------------*
*& Form sub_get_material
*----------------------------------------------------------------------*
FORM sub_get_material .

CLEAR : w_marc_mara.

REFRESH : t_marc_mara.

SELECT marc~matnr
mara~meins
INTO TABLE t_marc_mara
FROM marc INNER JOIN mara
ON marc~matnr EQ mara~matnr
WHERE marc~werks EQ p_werks
AND marc~matnr IN s_matnr.

SORT t_marc_mara BY matnr.

IF sy-subrc NE 0.
MESSAGE i001 WITH 'No Materials Available in the Master Material Table'.
LEAVE TO LIST-PROCESSING.
ENDIF.

ENDFORM. " sub_get_material

*&---------------------------------------------------------------------*
*& Form sub_gat_material_texts
*----------------------------------------------------------------------*
FORM sub_get_material_texts .

SELECT matnr
maktx
FROM makt
INTO TABLE t_makt
FOR ALL ENTRIES IN t_marc_mara
WHERE matnr EQ t_marc_mara-matnr.

SORT t_makt BY matnr.

ENDFORM. " sub_gat_material_texts
*&---------------------------------------------------------------------*
*& Form sub_get_present_stock
*----------------------------------------------------------------------*
FORM sub_get_present_stock .

CLEAR : w_mard.
SELECT matnr
werks
labst
FROM mard
INTO TABLE t_mard1
FOR ALL ENTRIES IN t_marc_mara
WHERE matnr EQ t_marc_mara-matnr
AND werks EQ p_werks.
IF sy-subrc NE 0.
MESSAGE i001 WITH 'No Stocks for the materials in master data'.
LEAVE TO LIST-PROCESSING.
ELSE.

CLEAR : l_pr_stock,
w_mard1,
l_matnr.
LOOP AT t_mard1 INTO w_mard_temp. " Calculating the Opening Stock's for all the materials in MSEG
IF l_matnr NE w_mard_temp-matnr.
CLEAR l_pr_stock.
ENDIF.
w_mard1 = w_mard_temp.
l_pr_stock = l_pr_stock + w_mard1-labst.
AT END OF matnr.
w_mard-matnr = w_mard1-matnr.
w_mard-werks = w_mard1-werks.
w_mard-labst = l_pr_stock.
APPEND w_mard TO t_mard.
ENDAT.
l_matnr = w_mard1-matnr.
CLEAR : "l_pr_stock,
w_mard1,
w_mard.
ENDLOOP.
SORT t_mard BY matnr.
ENDIF.
ENDFORM. " sub_get_present_stock

*&---------------------------------------------------------------------*
*& Form sub_disp_alv
*----------------------------------------------------------------------*
FORM sub_disp_alv .

IF t_final IS NOT INITIAL AND r1 EQ 'X'.
SORT t_final BY matnr.
PERFORM sub_create_fieldcat USING: '01' 'MATNR' 'MATERIAL NO.',
'02' 'MAKTX' 'MATERIAL TEXT',
'03' 'WERKS' 'PLANT',
'04' 'BDATE' 'OPENING DATE',
'05' 'EDATE' 'CLOSING DATE',
'06' 'OS_MENGE' 'OPEN STOCK',
'07' 'OS_MEINS' 'UNIT OF QTY',
'08' 'GR_MENGE' 'GOODS RECIPT',
'09' 'GR_MEINS' 'UNIT OF QTY',
'10' 'GI_MENGE' 'GOODS ISSUSED',
'11' 'GI_MEINS' 'UNIT OF QTY',
'12' 'CS_MENGE' 'CLOSING STOCK',
'13' 'CS_MEINS' 'UNIT OF QTY'.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-cprog
i_grid_title = 'STOCK'
it_fieldcat = t_fieldcat
TABLES
t_outtab = t_final
EXCEPTIONS
program_error = 1
OTHERS = 2.

ENDIF.
ENDFORM. " sub_disp_alv
*&---------------------------------------------------------------------*
*& Form sub_create_fieldcat
*----------------------------------------------------------------------*
FORM sub_create_fieldcat USING p_col TYPE char2
p_fname TYPE char20
p_text TYPE char30.
w_fieldcat-col_pos = p_col.
w_fieldcat-fieldname = p_fname.
w_fieldcat-seltext_m = p_text.

APPEND w_fieldcat TO t_fieldcat.
CLEAR w_fieldcat.

ENDFORM. " sub_create_fieldcat
*&---------------------------------------------------------------------*
*& Form sub_get_mseg_mkpf
*----------------------------------------------------------------------*
FORM sub_get_mseg_mkpf .

CLEAR : w_mseg_mkpf.

SELECT mseg~mblnr
mseg~mjahr
mseg~zeile
mseg~bwart
mseg~matnr
mseg~werks
mseg~insmk
mseg~shkzg
mseg~menge
mseg~meins
mkpf~budat
INTO TABLE t_mseg_mkpf
FROM mkpf INNER JOIN mseg
ON mkpf~mblnr EQ mseg~mblnr
AND mkpf~mjahr EQ mseg~mjahr
WHERE mkpf~budat BETWEEN s_budat-low AND sy-datum
AND mseg~werks EQ p_werks
AND mseg~matnr IN s_matnr.

IF sy-subrc EQ 0.
CLEAR : w_mseg_mkpf,
l_matnr.
SORT t_mseg_mkpf BY matnr bwart.

LOOP AT t_mseg_mkpf INTO w_mseg_mkpf.

IF l_matnr NE w_mseg_mkpf-matnr.
CLEAR : l_gi_menge,
l_gr_menge,
w_mseg_mkpf_temp.

READ TABLE t_mard INTO w_mard WITH KEY matnr = w_mseg_mkpf-matnr.
LOOP AT t_mseg_mkpf INTO w_mseg_mkpf_temp WHERE matnr EQ w_mseg_mkpf-matnr
AND shkzg EQ 'S'. " Calculating the Good's received

IF w_mseg_mkpf_temp-menge IS NOT INITIAL
AND w_mseg_mkpf_temp-matnr EQ w_mseg_mkpf-matnr.
l_gr_menge = l_gr_menge + w_mseg_mkpf_temp-menge.
ENDIF.
CLEAR w_mseg_mkpf_temp.

ENDLOOP.
LOOP AT t_mseg_mkpf INTO w_mseg_mkpf_temp WHERE matnr EQ w_mseg_mkpf-matnr
AND shkzg EQ 'H'. " Calculating the Good's Issued
IF w_mseg_mkpf_temp-menge IS NOT INITIAL
AND w_mseg_mkpf_temp-matnr EQ w_mseg_mkpf-matnr.

l_gi_menge = l_gi_menge + w_mseg_mkpf_temp-menge.
ENDIF.

CLEAR w_mseg_mkpf_temp.
ENDLOOP.

l_open_stock = w_mard-labst + l_gi_menge - l_gr_menge.

READ TABLE t_makt INTO w_makt WITH KEY matnr = w_mseg_mkpf-matnr.
READ TABLE t_marc_mara INTO w_marc_mara WITH KEY matnr = w_mseg_mkpf-matnr.

w_final-matnr = w_mseg_mkpf-matnr.
w_final-maktx = w_makt-maktx.
w_final-werks = p_werks.
w_final-bdate = s_budat-low.
w_final-edate = s_budat-high.
w_final-os_menge = l_open_stock.
w_final-os_meins = w_marc_mara-meins.
w_final-gr_meins = w_marc_mara-meins.
w_final-gi_meins = w_marc_mara-meins.
w_final-cs_meins = w_marc_mara-meins.

APPEND w_final TO t_final.
CLEAR : w_final,
w_makt,
w_mard.
l_matnr = w_mseg_mkpf-matnr.
ENDIF.
ENDLOOP.
ENDIF.

REFRESH t_mseg_mkpf.

SELECT mseg~mblnr
mseg~mjahr
mseg~zeile
mseg~bwart
mseg~matnr
mseg~werks
mseg~insmk
mseg~shkzg
mseg~menge
mseg~meins
mkpf~budat
INTO TABLE t_mseg_mkpf
FROM mkpf INNER JOIN mseg
ON mkpf~mblnr EQ mseg~mblnr
AND mkpf~mjahr EQ mseg~mjahr
WHERE mkpf~budat BETWEEN s_budat-low AND s_budat-high
AND mseg~werks EQ p_werks
AND mseg~matnr IN s_matnr.

IF sy-subrc EQ 0.
CLEAR : w_mseg_mkpf,
l_matnr.
SORT t_mseg_mkpf BY matnr bwart.

LOOP AT t_mseg_mkpf INTO w_mseg_mkpf.

IF l_matnr NE w_mseg_mkpf-matnr.
CLEAR : l_gi_menge,
l_gr_menge,
w_mseg_mkpf_temp.

LOOP AT t_mseg_mkpf INTO w_mseg_mkpf_temp WHERE matnr EQ w_mseg_mkpf-matnr
AND shkzg EQ 'S'.

IF w_mseg_mkpf_temp-menge IS NOT INITIAL
AND w_mseg_mkpf_temp-matnr EQ w_mseg_mkpf-matnr.
l_gr_menge = l_gr_menge + w_mseg_mkpf_temp-menge.
ENDIF.
CLEAR w_mseg_mkpf_temp.

ENDLOOP.
LOOP AT t_mseg_mkpf INTO w_mseg_mkpf_temp WHERE matnr EQ w_mseg_mkpf-matnr
AND shkzg EQ 'H'.
IF w_mseg_mkpf_temp-menge IS NOT INITIAL
AND w_mseg_mkpf_temp-matnr EQ w_mseg_mkpf-matnr.

l_gi_menge = l_gi_menge + w_mseg_mkpf_temp-menge.
ENDIF.

CLEAR w_mseg_mkpf_temp.
ENDLOOP.
READ TABLE t_final INTO w_final WITH KEY matnr = w_mseg_mkpf-matnr.

w_final-cs_menge = w_final-os_menge + l_gr_menge - l_gi_menge.


w_final-gr_menge = l_gr_menge.
w_final-gi_menge = l_gi_menge.
w_final-cs_menge = w_final-cs_menge.
MODIFY t_final FROM w_final TRANSPORTING "maktx
gr_menge
gi_menge
cs_menge
WHERE matnr = w_mseg_mkpf-matnr.

CLEAR : w_final,
w_makt,
w_mard,
l_gr_menge,
l_gi_menge.
l_matnr = w_mseg_mkpf-matnr.
ENDIF.
CLEAR w_final.
ENDLOOP.
ENDIF.

IF s_matnr-option EQ 'BT'.
LOOP AT t_marc_mara INTO w_marc_mara.
READ TABLE t_final INTO w_final WITH KEY matnr = w_marc_mara-matnr.
IF sy-subrc NE 0.
READ TABLE t_makt INTO w_makt WITH KEY matnr = w_marc_mara-matnr.
READ TABLE t_mard INTO w_mard WITH KEY matnr = w_marc_mara-matnr.

w_final-matnr = w_marc_mara-matnr.
w_final-maktx = w_makt-maktx.
w_final-werks = p_werks.
w_final-bdate = s_budat-low.
w_final-edate = s_budat-high.
w_final-os_meins = w_marc_mara-meins.
w_final-gr_meins = w_marc_mara-meins.
w_final-gi_meins = w_marc_mara-meins.

APPEND w_final TO t_final.
CLEAR w_final.

ENDIF.
CLEAR : w_marc_mara,
w_makt,
w_final,
w_mard.

ENDLOOP.
ENDIF.

IF s_matnr-option EQ 'EQ'.
LOOP AT s_matnr.

READ TABLE t_final INTO w_final WITH KEY matnr = s_matnr-low.
IF sy-subrc EQ 0
AND w_final-os_menge IS NOT INITIAL
AND w_final-gi_menge IS INITIAL
AND w_final-gr_menge IS INITIAL.
w_final-cs_menge = w_final-os_menge.
MODIFY t_final FROM w_final TRANSPORTING cs_menge
WHERE matnr = s_matnr-low.
ENDIF.

CLEAR : w_marc_mara,
w_makt,
s_matnr,
w_final.
ENDLOOP.
ENDIF.

IF s_matnr-low IS INITIAL
AND s_matnr-high IS INITIAL.
LOOP AT t_marc_mara INTO w_marc_mara.
READ TABLE t_final INTO w_final WITH KEY matnr = w_marc_mara-matnr.
IF sy-subrc NE 0.
READ TABLE t_makt INTO w_makt WITH KEY matnr = w_marc_mara-matnr.
READ TABLE t_mard INTO w_mard WITH KEY matnr = w_marc_mara-matnr.

w_final-matnr = w_marc_mara-matnr.
w_final-maktx = w_makt-maktx.
w_final-werks = p_werks.
w_final-bdate = s_budat-low.
w_final-edate = s_budat-high.
w_final-os_menge = w_mard-labst.
w_final-os_meins = w_marc_mara-meins.
w_final-gr_meins = w_marc_mara-meins.
w_final-gi_meins = w_marc_mara-meins.
w_final-cs_menge = w_mard-labst.
w_final-cs_meins = w_marc_mara-meins.

APPEND w_final TO t_final.
CLEAR w_final.
ELSEIF w_final-gi_menge IS INITIAL
AND w_final-gr_menge IS INITIAL.
w_final-cs_menge = w_final-os_menge.
MODIFY t_final FROM w_final TRANSPORTING cs_menge
WHERE matnr = w_marc_mara-matnr.

ENDIF.
CLEAR : w_marc_mara,
w_makt,
w_final,
w_mard.

ENDLOOP.
ENDIF.

ENDFORM. " sub_get_mseg_mkpf
*&---------------------------------------------------------------------*
*& Form sub_download_xls
*----------------------------------------------------------------------*
FORM sub_download_xls .
IF r2 EQ 'X'.
DATA: result_tab TYPE match_result_tab,
w_result_tab TYPE match_result,
l_len TYPE i,
l_len1 TYPE i,
l_string TYPE string.

DATA : f_fname TYPE string.

t_titles-text = 'MATERIAL NO.'.
APPEND t_titles.
CLEAR t_titles.

t_titles-text = 'MATERIAL TEXT'.
APPEND t_titles.
CLEAR t_titles.

t_titles-text = 'PLANT'.
APPEND t_titles.
CLEAR t_titles.
t_titles-text = 'OPENING DATE'.
APPEND t_titles.
CLEAR t_titles.

t_titles-text = 'CLOSING DATE'.
APPEND t_titles.
CLEAR t_titles.

t_titles-text = 'OPEN STOCK'.
APPEND t_titles.
CLEAR t_titles.

t_titles-text = 'UNIT OF QTY'.
APPEND t_titles.
CLEAR t_titles.

t_titles-text = 'GOODS RECIPT'.
APPEND t_titles.
CLEAR t_titles.

t_titles-text = 'UNIT OF QTY'.
APPEND t_titles.
CLEAR t_titles.

t_titles-text = 'GOODS ISSUSED'.
APPEND t_titles.
CLEAR t_titles.

t_titles-text = 'UNIT OF QTY'.
APPEND t_titles.
CLEAR t_titles.

t_titles-text = 'CLOSING STOCK'.
APPEND t_titles.
CLEAR t_titles.

t_titles-text = 'UNIT OF QTY'.
APPEND t_titles.
CLEAR t_titles.

SORT t_final BY matnr.

l_len = STRLEN( p_flname ).

FIND FIRST OCCURRENCE OF '.' IN p_flname
RESULTS result_tab.
IF sy-subrc EQ 0.

READ TABLE result_tab INTO w_result_tab INDEX 1.
l_len1 = l_len - w_result_tab-offset.
l_string = p_flname+w_result_tab-offset(l_len1).

IF l_string NE '.xls'.
REPLACE FIRST OCCURRENCE OF l_string IN p_flname WITH '.xls'.
ENDIF.
ELSE.
CONCATENATE p_flname '.xls' INTO p_flname.
*
ENDIF.
REFRESH result_tab.
CLEAR w_result_tab.

f_fname = p_flname.

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* BIN_FILESIZE =
filename = f_fname
filetype = 'DAT'
write_field_separator = 'X'
confirm_overwrite = 'X'
TABLES
data_tab = t_final
fieldnames = t_titles

EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22.

ENDIF.
ENDFORM. " sub_download_xls
*&---------------------------------------------------------------------*
*& Form sub_get_f4help
*----------------------------------------------------------------------*
FORM sub_get_f4help .


CLEAR p_flname.

CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = sy-repid
dynpro_number = '1000'
field_name = ' '
IMPORTING
file_name = p_flname.


ENDFORM. " sub_get_f4help


ALSO READ:

- Coloring A Row & Column In ALV Display Using OOPS Concept.

- Create Unique Handle For ALV Layout (Variant).

- Customizing Toolbar In ALV Tree Using ABAP OO.

- Dropdown in ALV Grid Display.

- Dynamic ALV Grid/List Display.

..... Back To Index On ALV List/ Grid Display.

..... Back To MAIN INDEX.

ABAP - Display The PO Status In ALV Report - MM.

*------------------------------------------------------*
* This program will display the data for the PO with RFQ
*-----------------------------------------------------*
REPORT zmm_po_status_report.


TYPE-POOLS: slis.

TABLES: ekko, ekpo.

TYPES: BEGIN OF ty_eban,
banfn TYPE eban-banfn,
bnfpo TYPE eban-bnfpo,
ebeln TYPE eban-ebeln,
ebelp TYPE eban-ebelp,
END OF ty_eban.

TYPES: BEGIN OF ty_ekbe,
ebeln TYPE ekbe-ebeln,
ebelp TYPE ekbe-ebelp,
bewtp TYPE ekbe-bewtp,
menge TYPE ekbe-menge,
matnr TYPE ekbe-matnr,
bldat TYPE ekbe-bldat,
END OF ty_ekbe.

TYPES : BEGIN OF ty_ekpo,
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp,
statu TYPE ekpo-statu,
aedat TYPE ekpo-aedat,
matnr TYPE ekpo-matnr,
bukrs TYPE ekpo-bukrs,
werks TYPE ekpo-werks,
lgort TYPE ekpo-lgort,
menge TYPE ekpo-menge,
meins TYPE ekpo-meins,
netpr TYPE ekpo-netpr,
abskz TYPE ekpo-abskz,
elikz TYPE ekpo-elikz,
erekz TYPE ekpo-erekz,
wepos TYPE ekpo-wepos,
repos TYPE ekpo-repos,
webre TYPE ekpo-webre,
lmein TYPE ekpo-lmein,
sobkz TYPE ekpo-sobkz,
END OF ty_ekpo.

TYPES: BEGIN OF ty_ekko,
ebeln TYPE ekko-ebeln,
waers TYPE ekko-waers,
END OF ty_ekko.

TYPES: BEGIN OF ty_makt,
matnr TYPE mara-matnr,
maktx TYPE makt-maktx,
END OF ty_makt.

TYPES: BEGIN OF ty_final,
banfn TYPE eban-banfn,
bnfpo TYPE eban-bnfpo,
aedat TYPE ekpo-aedat,
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp,
matnr TYPE ekpo-matnr,
maktx TYPE makt-maktx,
menge TYPE ekpo-menge,
menge1 TYPE ekpo-menge,
meins TYPE ekpo-meins,
netpr TYPE ekpo-netpr,
waers TYPE ekko-waers,
werks TYPE ekpo-werks,
lgort TYPE ekpo-lgort,
remark TYPE char50,
END OF ty_final.


DATA: it_eban TYPE TABLE OF ty_eban WITH HEADER LINE,
it_makt TYPE TABLE OF ty_makt WITH HEADER LINE,
it_ekko TYPE TABLE OF ty_ekko WITH HEADER LINE,
it_ekpo TYPE TABLE OF ty_ekpo WITH HEADER LINE,
it_ekbe TYPE TABLE OF ty_ekbe WITH HEADER LINE,
it_final TYPE TABLE OF ty_final WITH HEADER LINE.

DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
wa_fieldcat LIKE LINE OF it_fieldcat,
it_layout TYPE slis_layout_alv,
it_events TYPE slis_t_event,
wa_events LIKE LINE OF it_events,
it_list TYPE slis_t_listheader WITH HEADER LINE.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_ebeln FOR ekko-ebeln,
s_aedat FOR ekko-aedat,
s_werks FOR ekpo-werks.
SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.

PERFORM get_ekko_data.

PERFORM get_ekpo_data.

PERFORM get_eban_data.

PERFORM get_ekbe_data.

PERFORM get_makt_data.

END-OF-SELECTION.

PERFORM process_data.

PERFORM prepare_fieldcat.

PERFORM display_alv.


*&---------------------------------------------------------------------*
*& Form GET_EKKO_DATA
*----------------------------------------------------------------------*
FORM get_ekko_data .

SELECT ebeln
waers
FROM ekko
INTO TABLE it_ekko
WHERE ebeln IN s_ebeln
AND aedat IN s_aedat.

IF sy-subrc = 0.
SORT it_ekko BY ebeln.
ENDIF.

ENDFORM. " GET_EKKO_DATA
*&---------------------------------------------------------------------*
*& Form GET_EKPO_DATA
*----------------------------------------------------------------------*
FORM get_ekpo_data .

SELECT ebeln
ebelp
statu
aedat
matnr
bukrs
werks
lgort
menge
meins
netpr
abskz
elikz
erekz
wepos
repos
webre
lmein
sobkz
FROM ekpo
INTO TABLE it_ekpo
FOR ALL ENTRIES IN it_ekko
WHERE ebeln = it_ekko-ebeln
AND werks IN s_werks.

IF sy-subrc = 0.
SORT it_ekpo BY ebeln ebelp.
ENDIF.


ENDFORM. " GET_EKPO_DATA
*&---------------------------------------------------------------------*
*& Form GET_EBAN_DATA
*----------------------------------------------------------------------*
FORM get_eban_data .

SELECT banfn
bnfpo
ebeln
ebelp
FROM eban
INTO TABLE it_eban
FOR ALL ENTRIES IN it_ekpo
WHERE ebeln = it_ekpo-ebeln
AND ebelp = it_ekpo-ebelp
AND matnr = it_ekpo-matnr.

IF sy-subrc = 0.
SORT it_eban BY ebeln ebelp.
ENDIF.

ENDFORM. " GET_EBAN_DATA
*&---------------------------------------------------------------------*
*& Form GET_MAKT_DATA
*----------------------------------------------------------------------*
FORM get_makt_data .

SELECT matnr
maktx
FROM makt
INTO TABLE it_makt
FOR ALL ENTRIES IN it_ekpo
WHERE matnr = it_ekpo-matnr
AND spras = 'EN'.

IF sy-subrc = 0.
SORT it_makt BY matnr.
ENDIF.

ENDFORM. " GET_MAKT_DATA
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*----------------------------------------------------------------------*
FORM process_data .


LOOP AT it_ekpo.

it_final-ebeln = it_ekpo-ebeln.
it_final-ebelp = it_ekpo-ebelp.
it_final-menge = it_ekpo-menge.
it_final-meins = it_ekpo-meins.
it_final-werks = it_ekpo-werks.
it_final-lgort = it_ekpo-lgort.
it_final-aedat = it_ekpo-aedat.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = it_ekpo-matnr
IMPORTING
output = it_final-matnr.

READ TABLE it_eban WITH KEY ebeln = it_ekpo-ebeln
ebelp = it_ekpo-ebelp.
IF sy-subrc = 0.
it_final-banfn = it_eban-banfn.
it_final-bnfpo = it_eban-bnfpo.
ENDIF.

READ TABLE it_makt WITH KEY matnr = it_ekpo-matnr.
IF sy-subrc = 0.
it_final-maktx = it_makt-maktx.
ENDIF.

READ TABLE it_ekko WITH KEY ebeln = it_ekpo-ebeln.
IF sy-subrc = 0.
it_final-waers = it_ekko-waers.
ENDIF.

LOOP AT it_ekbe WHERE ebeln = it_eban-ebeln
AND ebelp = it_eban-ebelp.

CASE : it_ekbe-bewtp.
WHEN 'E'.
it_final-menge1 = it_final-menge1 + it_ekbe-menge.
ENDCASE.
ENDLOOP.

it_final-menge1 = it_final-menge - it_final-menge1.

CLEAR : it_final-remark.
APPEND it_final.
CLEAR it_final.

ENDLOOP.

ENDFORM. " PROCESS_DATA
*&---------------------------------------------------------------------*
*& Form PREPARE_FIELDCAT
*----------------------------------------------------------------------*
FORM prepare_fieldcat .

PERFORM build_fieldcat USING : 'BANFN' 'PR Number',
'BNFPO' 'PR Item',
'AEDAT' 'PO Date',
'EBELN' 'PO Number',
'EBELP' 'PO Item',
'MATNR' 'Material',
'MAKTX' 'Material Desc',
'MENGE' 'PO Quantity',
'MENGE1' 'PO Qty Pending',
'MEINS' 'Unit',
'NETPR' 'Net Price',
'WAERS' 'Currency',
'WERKS' 'Plant',
'LGORT' 'Stor Loc',
'REMARK' 'Remarks'.

ENDFORM. " PREPARE_FIELDCAT
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCAT
*----------------------------------------------------------------------*
FORM build_fieldcat USING value(p_0491)
value(p_0492).

wa_fieldcat-fieldname = p_0491.
wa_fieldcat-reptext_ddic = p_0492.
wa_fieldcat-tabname = 'IT_FINAL'.

IF wa_fieldcat-fieldname = 'MATNR' OR wa_fieldcat-fieldname = 'MAKTX'.
wa_fieldcat-just = 'L'.
ELSE.
wa_fieldcat-just = 'C'.
ENDIF.

APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

ENDFORM. " BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV
*----------------------------------------------------------------------*
FORM display_alv .

it_layout-zebra = 'X'.
it_layout-colwidth_optimize = 'X'.

wa_events-form = 'TOP_OF_PAGE'.
wa_events-name = 'TOP_OF_PAGE'.
APPEND wa_events TO it_events.
CLEAR wa_events.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* I_GRID_TITLE =
is_layout = it_layout
it_fieldcat = it_fieldcat
it_events = it_events
TABLES
t_outtab = it_final
EXCEPTIONS
program_error = 1
OTHERS = 2.


ENDFORM. " DISPLAY_ALV
*&--------------------------------------------------------------------*
*& Form top_of_page
*&--------------------------------------------------------------------*
* get the top-of-page and display
*---------------------------------------------------------------------*
FORM top_of_page.
*--Display the header of the report
PERFORM header.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = it_list[]
i_logo = 'ZLOGO2'.

ENDFORM. "top_of_page
*&---------------------------------------------------------------------*
*& Form HEADER
*&---------------------------------------------------------------------*
* Get the header of the alv
*----------------------------------------------------------------------*
FORM header .

*----variables for output header of the alv
DATA : date_s(10), date_e(10).
DATA: company_name(50) TYPE c VALUE 'Company Header'.
DATA : head_line(60) TYPE c.
DATA : today(10) TYPE c.
DATA : curr_time(10) TYPE c.
DATA : page_no(5) TYPE c.
DATA : len TYPE i.
DATA : wa_num1 TYPE i.
DATA : wa_num2 TYPE i.
DATA : pos TYPE i.
DATA : linex TYPE i,
v_stext(40), " Initial Template Id text
v_f4flag TYPE c.

WRITE sy-datum MM/DD/YYYY TO today.
WRITE sy-uzeit TO curr_time.
WRITE sy-pagno TO page_no LEFT-JUSTIFIED.

REFRESH it_list.
CLEAR it_list.

*---- REPORT PROGRAM NAME AND CLINT
it_list-typ = 'S'.
it_list-key = space.
CONCATENATE 'Report...:' sy-repid '(' sy-sysid(3) sy-mandt ')'
INTO it_list-info SEPARATED BY space.
APPEND it_list TO it_list.

*---- USER NAME
CLEAR it_list.
it_list-typ = 'S'.
it_list-key = space.
CONCATENATE 'User.....:' sy-uname
INTO it_list-info SEPARATED BY space.
APPEND it_list TO it_list.

*------DATE / TIME STAMP
CLEAR it_list.
it_list-typ = 'S'.
it_list-key = space.
CONCATENATE 'Date/Time:' today curr_time
INTO it_list-info SEPARATED BY space.
APPEND it_list TO it_list.

*------PAGE NUMBER
CLEAR it_list.
it_list-typ = 'S'.
it_list-key = space.
CONCATENATE 'Page.....:' page_no
INTO it_list-info SEPARATED BY space.
APPEND it_list TO it_list.

CLEAR it_list.
it_list-typ = 'S'.
it_list-key = space.
CONCATENATE ' ' ' '
INTO it_list-info SEPARATED BY space.
APPEND it_list TO it_list.

*------COMPANY NAME
* determine the starting position to center the company name
len = STRLEN( company_name ).
wa_num1 = 60 - len.
pos = wa_num1 / 2.
IF pos LT 1.
pos = 1.
ENDIF.
len = 60 - pos.

CLEAR it_list.
it_list-typ = 'H'.
it_list-key = space.
it_list-info+pos(len) = company_name.
APPEND it_list TO it_list.

*-------REPORT TITLE
DATA: v_string TYPE char40.
v_string = 'Test Header'.
* determine the starting position to center the report title
len = STRLEN( v_string ).
wa_num1 = 60 - len.
pos = wa_num1 / 2.
IF pos LT 1.
pos = 1.
ENDIF.
len = 60 - pos.

CLEAR it_list.
it_list-typ = 'H'.
it_list-key = space.
it_list-info+pos(len) = v_string.
APPEND it_list TO it_list.


* determine the starting position to center the report title
len = STRLEN( sy-title ).
wa_num1 = 60 - len.
pos = wa_num1 / 2.
IF pos LT 1.
pos = 1.
ENDIF.
len = 60 - pos.

CLEAR it_list.
it_list-typ = 'H'.
it_list-key = space.
it_list-info+pos(len) = sy-title.
APPEND it_list TO it_list.

len = STRLEN( head_line ).
wa_num1 = 60 - len.
pos = wa_num1 / 2.
IF pos LT 1.
pos = 1.
ENDIF.
len = 60 - pos.

CLEAR it_list.
it_list-typ = 'H'.
it_list-info+pos(len) = head_line.
APPEND it_list.
CLEAR it_list.

ENDFORM. " HEADER
*&---------------------------------------------------------------------*
*& Form GET_EKBE_DATA
*----------------------------------------------------------------------*
FORM get_ekbe_data .

SELECT ebeln
ebelp
bewtp
menge
matnr
bldat
FROM ekbe
INTO TABLE it_ekbe
FOR ALL ENTRIES IN it_ekpo
WHERE ebeln = it_ekpo-ebeln
AND ebelp = it_ekpo-ebelp.

IF sy-subrc = 0.
SORT it_ekbe BY ebeln ebelp.
ENDIF.

ENDFORM. " GET_EKBE_DATA


ALSO READ:

- Create Unique Handle For ALV Layout (Variant).

- Customizing Toolbar In ALV Tree Using ABAP OO.

- Dropdown in ALV Grid Display.

- SALV List With Check Box.

- SALV List With Symbol.

..... Back To Index On ALV List/ Grid Display.

..... Back To MAIN INDEX.