10-15-2007 4:55 AM
Hi,
I am working on interactive report. Initial screen i am getting customer no. When ever i am clicking the customer no i want to disply the sales order details. But i am getting total customer details. I want particular customer detials only. Check the code waht i am declaring.
AT LINE-SELECTION.
SET PF-STATUS 'ZSRINU'.
IF sy-lsind = 1.
PERFORM so_header.
ENDIF.
IF sy-lsind = 2.
PERFORM get_sales_item.
ENDIF.
AT USER-COMMAND.
CASE sy-ucomm.
WHEN 'SO_ITEM'.
PERFORM get_sales_item.
WHEN 'SO_DOCUMEN'.
PERFORM display_document.
ENDCASE.
DATA : var(20).
GET CURSOR FIELD var.
IF var = 'V_KNA1-KUNNR'.
IF sy-lsind = 1.
PERFORM so_header.
ENDIF.
ENDIF.
DATA : var1(20).
GET CURSOR FIELD var.
IF var1 = 'V_VBAK-VBELN'.
IF sy-lsind = 2.
PERFORM get_sales_item.
ENDIF.
ENDIF.
Regards
Srinu
10-15-2007 5:13 AM
Hi..
The problem is bcoz you are fetching the Data from All the Tables at once in a single Sub routine. But you have to fetch the Data for Detaial lists later.
Check the changes:
*---Tables declaration.
TABLES : kna1, "Customer master table
vbak, "Sales order header data
vbap. "Sales order item data
LIKP, "Delivery header data
LIPS. "Delivery item data
*---Customer
TYPES : BEGIN OF st_kna1,
kunnr TYPE kna1-kunnr,
name1 TYPE kna1-name1,
END OF st_kna1.
*---Sales order header
TYPES : BEGIN OF st_vbak,
vbeln TYPE vbak-vbeln, "sales order no
erdat TYPE vbak-erdat, "Order created date
ernam TYPE vbak-ernam, "Name of the person created
auart TYPE vbak-auart, "Sales doc type
kunnr TYPE vbak-kunnr, "sold-to-party
END OF st_vbak.
*---Sales order item
TYPES : BEGIN OF st_vbap,
vbeln TYPE vbap-vbeln, "Sales order no
posnr TYPE vbap-posnr, "Sales doc item
matnr TYPE vbap-matnr, "material no
matkl TYPE vbap-matkl, "Material group
meins TYPE vbap-meins, "Basic unit of measure
END OF st_vbap.
*----
*---INTERNAL TABLE DECLARATION
*----
DATA : it_kna1 TYPE STANDARD TABLE OF st_kna1,
it_vbak TYPE STANDARD TABLE OF st_vbak,
it_vbap TYPE STANDARD TABLE OF st_vbap.
*----
*---WORK AREA DECLARATION
*----
DATA : v_kna1 LIKE LINE OF it_kna1,
v_vbak LIKE LINE OF it_vbak,
v_vbap LIKE LINE OF it_vbap.
DATA : v_file LIKE ibipparms-path.
DATA : BEGIN OF itab OCCURS 0,
kunnr(10),
name1(35),
END OF itab.
*---Selection screen declaration
SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.
SELECTION-SCREEN: BEGIN OF LINE.
PARAMETERS : rb1 RADIOBUTTON GROUP g1 DEFAULT 'X'.
SELECTION-SCREEN: COMMENT 3(20) text-002 FOR FIELD rb1.
SELECT-OPTIONS : so_cust FOR kna1-kunnr.
SELECTION-SCREEN: END OF LINE.
PARAMETERS : p_hits TYPE i.
SELECTION-SCREEN: BEGIN OF LINE.
PARAMETERS : rb2 RADIOBUTTON GROUP g1.
SELECTION-SCREEN: COMMENT 4(20) text-003 FOR FIELD rb2.
PARAMETER : p_file(30) TYPE c.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: END OF BLOCK blk1.
AT SELECTION-SCREEN ON so_cust.
PERFORM valid_cust.
*---Displaying customer data.
START-OF-SELECTION.
PERFORM get_data.
PERFORM customer_data.
END-OF-SELECTION.
AT LINE-SELECTION.
SET PF-STATUS 'ZSRINU'.
IF sy-lsind = 1.
PERFORM so_header.
ENDIF.
IF sy-lsind = 2.
PERFORM get_sales_item.
ENDIF.
AT USER-COMMAND.
CASE sy-ucomm.
WHEN 'SO_ITEM'.
PERFORM get_sales_item.
WHEN 'SO_DOCUMEN'.
PERFORM display_document.
ENDCASE.
DATA : var(20).
GET CURSOR FIELD var.
IF var = 'V_KNA1-KUNNR'.
IF sy-lsind = 1.
PERFORM so_header.
ENDIF.
ENDIF.
DATA : var1(20).
GET CURSOR FIELD var.
IF var1 = 'V_VBAK-VBELN'.
IF sy-lsind = 2.
PERFORM get_sales_item.
ENDIF.
ENDIF.
TOP-OF-PAGE.
FORMAT COLOR 1.
WRITE:/'CUSTOMER DETAILS'.
FORMAT COLOR 1 OFF.
ULINE.
FORMAT COLOR 3.
WRITE:/ SY-VLINE,
3 'CUSTOMER NO',
15 'CUSTOMER NAME'.
ULINE.
FORMAT COLOR 3 OFF.
&----
*& Form VALID_CUST
&----
text
----
FORM valid_cust .
IF so_cust[] IS NOT INITIAL.
SELECT SINGLE kunnr FROM kna1 INTO v_kna1 WHERE kunnr IN so_cust.
ELSE.
MESSAGE i000(200) WITH 'PLEASE ENTER VALID CUSTOMER DOCUMENT NUMBER'.
ENDIF.
ENDFORM. " VALID_CUST
&----
*& Form GET_DATA
&----
text
----
FORM get_data .
SELECT kunnr
name1
FROM kna1 INTO CORRESPONDING FIELDS OF
TABLE it_kna1 WHERE kunnr IN so_cust.
**Remove the Below SELECT queries from this routine.
<b> IF it_kna1[] IS NOT INITIAL.
SELECT vbeln
erdat
ernam
auart
kunnr FROM vbak INTO CORRESPONDING FIELDS OF
TABLE it_vbak FOR ALL ENTRIES IN it_kna1
WHERE kunnr = it_kna1-kunnr.
IF it_vbak[] IS NOT INITIAL.
SELECT vbeln
posnr
matnr
matkl
meins FROM vbap INTO CORRESPONDING FIELDS OF
TABLE it_vbap FOR ALL ENTRIES IN it_vbak
WHERE vbeln = it_vbak-vbeln.
ENDIF.
ENDIF.</b>
ENDFORM. " GET_DATA
&----
*& Form CUSTOMER_DATA
&----
text
----
FORM customer_data .
LOOP AT it_kna1 INTO v_kna1.
WRITE:/1 sy-vline,
v_kna1-kunnr UNDER 'CUSTOMER NO.' HOTSPOT ON,
15 sy-vline,
v_kna1-name1 UNDER 'CUSTOMER NAME',
60 sy-vline.
HIDE v_kna1-kunnr.
ENDLOOP.
<b>CLEAR V_KNA1-KUNNR.</b>
ENDFORM. " CUSTOMER_DATA
&----
*& Form SO_HEADER
&----
text
----
FORM so_header .
<b>IF V_KNA1-KUNNR IS NOT INITIAL.
SELECT vbeln
erdat
ernam
auart
kunnr FROM vbak INTO CORRESPONDING FIELDS OF
TABLE it_vbak FOR ALL ENTRIES IN it_kna1
WHERE kunnr = it_kna1-kunnr.</b>
LOOP AT it_vbak INTO v_vbak.
WRITE:/ v_vbak-vbeln,
v_vbak-erdat,
v_vbak-ernam,
v_vbak-auart,
v_vbak-kunnr.
ENDLOOP.
<b>ENDIF.</b>
ENDFORM. " SO_HEADER
&----
*& Form GET_SALES_ITEM
&----
text
----
FORM get_sales_item .
<b> SELECT vbeln
posnr
matnr
matkl
meins FROM vbap INTO CORRESPONDING FIELDS OF
TABLE it_vbap FOR ALL ENTRIES IN it_vbak
WHERE vbeln = V_vbak-vbeln.
</b>
SET PF-STATUS 'ZSRINU1'.
LOOP AT it_vbap INTO v_vbap.
WRITE:/ v_vbap-vbeln,
v_vbap-posnr,
v_vbap-matnr,
v_vbap-matkl,
v_vbap-meins.
ENDLOOP.
ENDFORM. " GET_SALES_ITEM
&----
*& Form DISPLAY_DOCUMENT
&----
text
----
FORM display_document .
SET PARAMETER ID 'AUN' FIELD v_vbap-vbeln.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDFORM. " DISPLAY_DOCUMENT
Reward if Helpful.
10-15-2007 4:59 AM
Hi..
You have to paste the Complete code. including the Subroutine definitions. (Forms)
Then it is possible to find the Reason.
regards,
Varma
10-15-2007 5:02 AM
Hi varma,
please find the code.
*---Tables declaration.
TABLES : kna1, "Customer master table
vbak, "Sales order header data
vbap. "Sales order item data
* LIKP, "Delivery header data
* LIPS. "Delivery item data
*---Customer
TYPES : BEGIN OF st_kna1,
kunnr TYPE kna1-kunnr,
name1 TYPE kna1-name1,
END OF st_kna1.
*---Sales order header
TYPES : BEGIN OF st_vbak,
vbeln TYPE vbak-vbeln, "sales order no
erdat TYPE vbak-erdat, "Order created date
ernam TYPE vbak-ernam, "Name of the person created
auart TYPE vbak-auart, "Sales doc type
kunnr TYPE vbak-kunnr, "sold-to-party
END OF st_vbak.
*---Sales order item
TYPES : BEGIN OF st_vbap,
vbeln TYPE vbap-vbeln, "Sales order no
posnr TYPE vbap-posnr, "Sales doc item
matnr TYPE vbap-matnr, "material no
matkl TYPE vbap-matkl, "Material group
meins TYPE vbap-meins, "Basic unit of measure
END OF st_vbap.
*-----------------------------------------------------------------------
*---INTERNAL TABLE DECLARATION
*-----------------------------------------------------------------------
DATA : it_kna1 TYPE STANDARD TABLE OF st_kna1,
it_vbak TYPE STANDARD TABLE OF st_vbak,
it_vbap TYPE STANDARD TABLE OF st_vbap.
*-----------------------------------------------------------------------
*---WORK AREA DECLARATION
*-----------------------------------------------------------------------
DATA : v_kna1 LIKE LINE OF it_kna1,
v_vbak LIKE LINE OF it_vbak,
v_vbap LIKE LINE OF it_vbap.
DATA : v_file LIKE ibipparms-path.
DATA : BEGIN OF itab OCCURS 0,
kunnr(10),
name1(35),
END OF itab.
*---Selection screen declaration
SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.
SELECTION-SCREEN: BEGIN OF LINE.
PARAMETERS : rb1 RADIOBUTTON GROUP g1 DEFAULT 'X'.
SELECTION-SCREEN: COMMENT 3(20) text-002 FOR FIELD rb1.
SELECT-OPTIONS : so_cust FOR kna1-kunnr.
SELECTION-SCREEN: END OF LINE.
PARAMETERS : p_hits TYPE i.
SELECTION-SCREEN: BEGIN OF LINE.
PARAMETERS : rb2 RADIOBUTTON GROUP g1.
SELECTION-SCREEN: COMMENT 4(20) text-003 FOR FIELD rb2.
PARAMETER : p_file(30) TYPE c.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: END OF BLOCK blk1.
AT SELECTION-SCREEN ON so_cust.
PERFORM valid_cust.
*---Displaying customer data.
START-OF-SELECTION.
PERFORM get_data.
PERFORM customer_data.
END-OF-SELECTION.
AT LINE-SELECTION.
SET PF-STATUS 'ZSRINU'.
IF sy-lsind = 1.
PERFORM so_header.
ENDIF.
IF sy-lsind = 2.
PERFORM get_sales_item.
ENDIF.
AT USER-COMMAND.
CASE sy-ucomm.
WHEN 'SO_ITEM'.
PERFORM get_sales_item.
WHEN 'SO_DOCUMEN'.
PERFORM display_document.
ENDCASE.
DATA : var(20).
GET CURSOR FIELD var.
IF var = 'V_KNA1-KUNNR'.
IF sy-lsind = 1.
PERFORM so_header.
ENDIF.
ENDIF.
DATA : var1(20).
GET CURSOR FIELD var.
IF var1 = 'V_VBAK-VBELN'.
IF sy-lsind = 2.
PERFORM get_sales_item.
ENDIF.
ENDIF.
TOP-OF-PAGE.
FORMAT COLOR 1.
WRITE:/'CUSTOMER DETAILS'.
FORMAT COLOR 1 OFF.
ULINE.
FORMAT COLOR 3.
WRITE:/ SY-VLINE,
3 'CUSTOMER NO',
15 'CUSTOMER NAME'.
ULINE.
FORMAT COLOR 3 OFF.
*&---------------------------------------------------------------------*
*& Form VALID_CUST
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM valid_cust .
IF so_cust[] IS NOT INITIAL.
SELECT SINGLE kunnr FROM kna1 INTO v_kna1 WHERE kunnr IN so_cust.
ELSE.
MESSAGE i000(200) WITH 'PLEASE ENTER VALID CUSTOMER DOCUMENT NUMBER'.
ENDIF.
ENDFORM. " VALID_CUST
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_data .
SELECT kunnr
name1
FROM kna1 INTO CORRESPONDING FIELDS OF
TABLE it_kna1 WHERE kunnr IN so_cust.
IF it_kna1[] IS NOT INITIAL.
SELECT vbeln
erdat
ernam
auart
kunnr FROM vbak INTO CORRESPONDING FIELDS OF
TABLE it_vbak FOR ALL ENTRIES IN it_kna1
WHERE kunnr = it_kna1-kunnr.
IF it_vbak[] IS NOT INITIAL.
SELECT vbeln
posnr
matnr
matkl
meins FROM vbap INTO CORRESPONDING FIELDS OF
TABLE it_vbap FOR ALL ENTRIES IN it_vbak
WHERE vbeln = it_vbak-vbeln.
ENDIF.
ENDIF.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form CUSTOMER_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM customer_data .
LOOP AT it_kna1 INTO v_kna1.
WRITE:/1 sy-vline,
v_kna1-kunnr UNDER 'CUSTOMER NO.' HOTSPOT ON,
15 sy-vline,
v_kna1-name1 UNDER 'CUSTOMER NAME',
60 sy-vline.
HIDE v_kna1-kunnr.
ENDLOOP.
ENDFORM. " CUSTOMER_DATA
*&---------------------------------------------------------------------*
*& Form SO_HEADER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM so_header .
LOOP AT it_vbak INTO v_vbak.
WRITE:/ v_vbak-vbeln,
v_vbak-erdat,
v_vbak-ernam,
v_vbak-auart,
v_vbak-kunnr.
ENDLOOP.
ENDFORM. " SO_HEADER
*&---------------------------------------------------------------------*
*& Form GET_SALES_ITEM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_sales_item .
SET PF-STATUS 'ZSRINU1'.
LOOP AT it_vbap INTO v_vbap.
WRITE:/ v_vbap-vbeln,
v_vbap-posnr,
v_vbap-matnr,
v_vbap-matkl,
v_vbap-meins.
ENDLOOP.
ENDFORM. " GET_SALES_ITEM
*&---------------------------------------------------------------------*
*& Form DISPLAY_DOCUMENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM display_document .
SET PARAMETER ID 'AUN' FIELD v_vbap-vbeln.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDFORM. " DISPLAY_DOCUMENT
Regards
Srinu
10-15-2007 5:09 AM
HI,
change at the highlighted places.
FORM so_header .
LOOP AT it_vbak INTO v_vbak<b> where kunnr = v_vbak-kunnr</b>.
WRITE:/ v_vbak-vbeln,
v_vbak-erdat,
v_vbak-ernam,
v_vbak-auart,
v_vbak-kunnr.
<b> HIDE v_vbak-vbeln.</b>
ENDLOOP.
ENDFORM. " SO_HEADER
&----
*& Form GET_SALES_ITEM
&----
text
----
FORM get_sales_item .
SET PF-STATUS 'ZSRINU1'.
LOOP AT it_vbap INTO v_vbap <b>WHERE vbeln = v_vbak-vbeln</b>.
WRITE:/ v_vbap-vbeln,
v_vbap-posnr,
v_vbap-matnr,
v_vbap-matkl,
v_vbap-meins.
ENDLOOP.
ENDFORM. " GET_SALES_ITEM
rgds,
bharat.
10-15-2007 5:13 AM
Hi..
The problem is bcoz you are fetching the Data from All the Tables at once in a single Sub routine. But you have to fetch the Data for Detaial lists later.
Check the changes:
*---Tables declaration.
TABLES : kna1, "Customer master table
vbak, "Sales order header data
vbap. "Sales order item data
LIKP, "Delivery header data
LIPS. "Delivery item data
*---Customer
TYPES : BEGIN OF st_kna1,
kunnr TYPE kna1-kunnr,
name1 TYPE kna1-name1,
END OF st_kna1.
*---Sales order header
TYPES : BEGIN OF st_vbak,
vbeln TYPE vbak-vbeln, "sales order no
erdat TYPE vbak-erdat, "Order created date
ernam TYPE vbak-ernam, "Name of the person created
auart TYPE vbak-auart, "Sales doc type
kunnr TYPE vbak-kunnr, "sold-to-party
END OF st_vbak.
*---Sales order item
TYPES : BEGIN OF st_vbap,
vbeln TYPE vbap-vbeln, "Sales order no
posnr TYPE vbap-posnr, "Sales doc item
matnr TYPE vbap-matnr, "material no
matkl TYPE vbap-matkl, "Material group
meins TYPE vbap-meins, "Basic unit of measure
END OF st_vbap.
*----
*---INTERNAL TABLE DECLARATION
*----
DATA : it_kna1 TYPE STANDARD TABLE OF st_kna1,
it_vbak TYPE STANDARD TABLE OF st_vbak,
it_vbap TYPE STANDARD TABLE OF st_vbap.
*----
*---WORK AREA DECLARATION
*----
DATA : v_kna1 LIKE LINE OF it_kna1,
v_vbak LIKE LINE OF it_vbak,
v_vbap LIKE LINE OF it_vbap.
DATA : v_file LIKE ibipparms-path.
DATA : BEGIN OF itab OCCURS 0,
kunnr(10),
name1(35),
END OF itab.
*---Selection screen declaration
SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.
SELECTION-SCREEN: BEGIN OF LINE.
PARAMETERS : rb1 RADIOBUTTON GROUP g1 DEFAULT 'X'.
SELECTION-SCREEN: COMMENT 3(20) text-002 FOR FIELD rb1.
SELECT-OPTIONS : so_cust FOR kna1-kunnr.
SELECTION-SCREEN: END OF LINE.
PARAMETERS : p_hits TYPE i.
SELECTION-SCREEN: BEGIN OF LINE.
PARAMETERS : rb2 RADIOBUTTON GROUP g1.
SELECTION-SCREEN: COMMENT 4(20) text-003 FOR FIELD rb2.
PARAMETER : p_file(30) TYPE c.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: END OF BLOCK blk1.
AT SELECTION-SCREEN ON so_cust.
PERFORM valid_cust.
*---Displaying customer data.
START-OF-SELECTION.
PERFORM get_data.
PERFORM customer_data.
END-OF-SELECTION.
AT LINE-SELECTION.
SET PF-STATUS 'ZSRINU'.
IF sy-lsind = 1.
PERFORM so_header.
ENDIF.
IF sy-lsind = 2.
PERFORM get_sales_item.
ENDIF.
AT USER-COMMAND.
CASE sy-ucomm.
WHEN 'SO_ITEM'.
PERFORM get_sales_item.
WHEN 'SO_DOCUMEN'.
PERFORM display_document.
ENDCASE.
DATA : var(20).
GET CURSOR FIELD var.
IF var = 'V_KNA1-KUNNR'.
IF sy-lsind = 1.
PERFORM so_header.
ENDIF.
ENDIF.
DATA : var1(20).
GET CURSOR FIELD var.
IF var1 = 'V_VBAK-VBELN'.
IF sy-lsind = 2.
PERFORM get_sales_item.
ENDIF.
ENDIF.
TOP-OF-PAGE.
FORMAT COLOR 1.
WRITE:/'CUSTOMER DETAILS'.
FORMAT COLOR 1 OFF.
ULINE.
FORMAT COLOR 3.
WRITE:/ SY-VLINE,
3 'CUSTOMER NO',
15 'CUSTOMER NAME'.
ULINE.
FORMAT COLOR 3 OFF.
&----
*& Form VALID_CUST
&----
text
----
FORM valid_cust .
IF so_cust[] IS NOT INITIAL.
SELECT SINGLE kunnr FROM kna1 INTO v_kna1 WHERE kunnr IN so_cust.
ELSE.
MESSAGE i000(200) WITH 'PLEASE ENTER VALID CUSTOMER DOCUMENT NUMBER'.
ENDIF.
ENDFORM. " VALID_CUST
&----
*& Form GET_DATA
&----
text
----
FORM get_data .
SELECT kunnr
name1
FROM kna1 INTO CORRESPONDING FIELDS OF
TABLE it_kna1 WHERE kunnr IN so_cust.
**Remove the Below SELECT queries from this routine.
<b> IF it_kna1[] IS NOT INITIAL.
SELECT vbeln
erdat
ernam
auart
kunnr FROM vbak INTO CORRESPONDING FIELDS OF
TABLE it_vbak FOR ALL ENTRIES IN it_kna1
WHERE kunnr = it_kna1-kunnr.
IF it_vbak[] IS NOT INITIAL.
SELECT vbeln
posnr
matnr
matkl
meins FROM vbap INTO CORRESPONDING FIELDS OF
TABLE it_vbap FOR ALL ENTRIES IN it_vbak
WHERE vbeln = it_vbak-vbeln.
ENDIF.
ENDIF.</b>
ENDFORM. " GET_DATA
&----
*& Form CUSTOMER_DATA
&----
text
----
FORM customer_data .
LOOP AT it_kna1 INTO v_kna1.
WRITE:/1 sy-vline,
v_kna1-kunnr UNDER 'CUSTOMER NO.' HOTSPOT ON,
15 sy-vline,
v_kna1-name1 UNDER 'CUSTOMER NAME',
60 sy-vline.
HIDE v_kna1-kunnr.
ENDLOOP.
<b>CLEAR V_KNA1-KUNNR.</b>
ENDFORM. " CUSTOMER_DATA
&----
*& Form SO_HEADER
&----
text
----
FORM so_header .
<b>IF V_KNA1-KUNNR IS NOT INITIAL.
SELECT vbeln
erdat
ernam
auart
kunnr FROM vbak INTO CORRESPONDING FIELDS OF
TABLE it_vbak FOR ALL ENTRIES IN it_kna1
WHERE kunnr = it_kna1-kunnr.</b>
LOOP AT it_vbak INTO v_vbak.
WRITE:/ v_vbak-vbeln,
v_vbak-erdat,
v_vbak-ernam,
v_vbak-auart,
v_vbak-kunnr.
ENDLOOP.
<b>ENDIF.</b>
ENDFORM. " SO_HEADER
&----
*& Form GET_SALES_ITEM
&----
text
----
FORM get_sales_item .
<b> SELECT vbeln
posnr
matnr
matkl
meins FROM vbap INTO CORRESPONDING FIELDS OF
TABLE it_vbap FOR ALL ENTRIES IN it_vbak
WHERE vbeln = V_vbak-vbeln.
</b>
SET PF-STATUS 'ZSRINU1'.
LOOP AT it_vbap INTO v_vbap.
WRITE:/ v_vbap-vbeln,
v_vbap-posnr,
v_vbap-matnr,
v_vbap-matkl,
v_vbap-meins.
ENDLOOP.
ENDFORM. " GET_SALES_ITEM
&----
*& Form DISPLAY_DOCUMENT
&----
text
----
FORM display_document .
SET PARAMETER ID 'AUN' FIELD v_vbap-vbeln.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDFORM. " DISPLAY_DOCUMENT
Reward if Helpful.
10-15-2007 5:30 AM
10-15-2007 5:38 AM
10-15-2007 5:31 AM
Hello
If you want to do some <i>real </i>interactive reporting then you should definitely use ALV lists, e.g. like the sample report <b>ZUS_SDN_THREE_ALV_GRIDS</b>. Simple double-click within the ALV lists and see what happens.
Double-clicking in the 3rd ALV list on order number (VBELN) -> display order (VA03)
Double-clicking in the 3rd ALV list on material number (MATNR) -> display order (MM03)
*&---------------------------------------------------------------------*
*& Report ZUS_SDN_THREE_ALV_GRIDS
*&
*&---------------------------------------------------------------------*
*& Display Customer data in three ALV lists:
*& 1st ALV: Customers
*& 2nd ALV: Sales order of selected customer (double-click)
*& 3rd ALV: Positions of selected sales order (double-click)
*& Double-click on material -> display material (MM02)
*&---------------------------------------------------------------------*
REPORT zus_sdn_three_alv_grids.
DATA:
gd_repid TYPE syst-repid,
gd_okcode TYPE ui_func,
*
go_docking TYPE REF TO cl_gui_docking_container,
go_splitter TYPE REF TO cl_gui_splitter_container,
go_splitter_2 TYPE REF TO cl_gui_splitter_container,
go_cell_top TYPE REF TO cl_gui_container,
go_cell_bottom TYPE REF TO cl_gui_container,
go_cell_left TYPE REF TO cl_gui_container,
go_cell_right TYPE REF TO cl_gui_container,
go_grid1 TYPE REF TO cl_gui_alv_grid,
go_grid2 TYPE REF TO cl_gui_alv_grid,
go_grid3 TYPE REF TO cl_gui_alv_grid.
DATA:
gt_knb1 TYPE STANDARD TABLE OF knb1,
gt_vbak TYPE STANDARD TABLE OF vbak,
gt_vbap TYPE STANDARD TABLE OF vbap.
PARAMETERS:
p_bukrs TYPE bukrs DEFAULT '1000'.
*---------------------------------------------------------------------*
* CLASS lcl_eventhandler DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_eventhandler DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
handle_double_click FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING
e_row
e_column
es_row_no
sender. " sending control, i.e. ALV grid that raised event
ENDCLASS. "lcl_eventhandler DEFINITION
*---------------------------------------------------------------------*
* CLASS lcl_eventhandler IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_eventhandler IMPLEMENTATION.
METHOD handle_double_click.
* define local data
DATA:
ls_bdcdata type bdcdata,
lt_bdcdata type bdcdata_tab,
ls_knb1 TYPE knb1,
ls_vbak TYPE vbak,
ls_vbap TYPE vbap.
* Distinguish according to sending grid instance
CASE sender.
WHEN go_grid1.
READ TABLE gt_knb1 INTO ls_knb1 INDEX e_row-index.
CHECK ( ls_knb1-kunnr IS NOT INITIAL ).
CALL METHOD go_grid1->set_current_cell_via_id
EXPORTING
* IS_ROW_ID =
* IS_COLUMN_ID =
is_row_no = es_row_no.
* Triggers PAI of the dynpro with the specified ok-code
CALL METHOD cl_gui_cfw=>set_new_ok_code( 'ORDERS' ).
WHEN go_grid2.
READ TABLE gt_vbak INTO ls_vbak INDEX e_row-index.
CHECK ( ls_vbak-vbeln IS NOT INITIAL ).
CALL METHOD go_grid1->set_current_cell_via_id
EXPORTING
* IS_ROW_ID =
* IS_COLUMN_ID =
is_row_no = es_row_no.
* Triggers PAI of the dynpro with the specified ok-code
CALL METHOD cl_gui_cfw=>set_new_ok_code( 'ORDER_DETAILS' ).
WHEN go_grid3.
READ TABLE gt_vbap INTO ls_vbap INDEX e_row-index.
CASE e_column.
WHEN 'VBELN'.
CHECK ( ls_vbap-vbeln IS NOT INITIAL ).
clear: ls_bdcdata.
ls_bdcdata-dynbegin = 'T'. " transaction
ls_bdcdata-fnam = 'VA03'. " Display orders
append ls_bdcdata to lt_bdcdata.
clear: ls_bdcdata.
ls_bdcdata-program = 'SAPMV45A'.
ls_bdcdata-dynpro = '0102'.
ls_bdcdata-dynbegin = abap_true.
append ls_bdcdata to lt_bdcdata.
** clear: ls_bdcdata.
** ls_bdcdata-fnam = 'BDC_OKCODE'.
** ls_bdcdata-fval = '=UER1'. " Sales Overview
** append ls_bdcdata to lt_bdcdata.
clear: ls_bdcdata.
ls_bdcdata-fnam = 'VBAK-VBELN'.
ls_bdcdata-fval = ls_vbap-vbeln.
append ls_bdcdata to lt_bdcdata.
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
EXPORTING
tcode = 'VA03'
* SKIP_SCREEN = ' '
MODE_VAL = 'A'
UPDATE_VAL = 'S' " synchronous
* IMPORTING
* SUBRC =
TABLES
USING_TAB = lt_bdcdata
* SPAGPA_TAB =
* MESS_TAB =
EXCEPTIONS
CALL_TRANSACTION_DENIED = 1
TCODE_INVALID = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
WHEN 'MATNR'.
CHECK ( ls_vbap-matnr IS NOT INITIAL ).
SET PARAMETER ID 'MAT' FIELD ls_vbap-matnr.
CALL TRANSACTION 'MM02' AND SKIP FIRST SCREEN.
WHEN OTHERS.
RETURN.
ENDCASE.
WHEN OTHERS.
RETURN.
ENDCASE.
ENDMETHOD. "handle_double_click
ENDCLASS. "lcl_eventhandler IMPLEMENTATION
START-OF-SELECTION.
SELECT * FROM knb1 INTO TABLE gt_knb1
WHERE bukrs = p_bukrs.
PERFORM init_controls.
* Set event handler
SET HANDLER: lcl_eventhandler=>handle_double_click FOR go_grid1.
SET HANDLER: lcl_eventhandler=>handle_double_click FOR go_grid2.
SET HANDLER: lcl_eventhandler=>handle_double_click FOR go_grid3.
* Display data
CALL METHOD go_grid1->set_table_for_first_display
EXPORTING
i_structure_name = 'KNB1'
CHANGING
it_outtab = gt_knb1
EXCEPTIONS
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.
REFRESH: gt_vbak.
CALL METHOD go_grid2->set_table_for_first_display
EXPORTING
i_structure_name = 'VBAK'
CHANGING
it_outtab = gt_vbak " empty !!!
EXCEPTIONS
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.
REFRESH: gt_vbap.
CALL METHOD go_grid3->set_table_for_first_display
EXPORTING
i_structure_name = 'VBAP'
CHANGING
it_outtab = gt_vbap " empty !!!
EXCEPTIONS
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.
* Link the docking container to the target dynpro
gd_repid = syst-repid.
CALL METHOD go_docking->link
EXPORTING
repid = gd_repid
dynnr = '0100'
* CONTAINER =
EXCEPTIONS
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.
* NOTE: dynpro does not contain any elements (ok_code -> GD_OKCODE)
CALL SCREEN '0100'.
* Flow logic of dynpro:
*
*PROCESS BEFORE OUTPUT.
* MODULE STATUS_0100.
**
*PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0100.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS_0100'. " contains push button "ORDERS"
* SET TITLEBAR 'xxx'.
* Refresh display of detail ALV list
CALL METHOD go_grid2->refresh_table_display
* EXPORTING
* IS_STABLE =
* I_SOFT_REFRESH =
EXCEPTIONS
OTHERS = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Refresh display of detail ALV list
CALL METHOD go_grid3->refresh_table_display
* EXPORTING
* IS_STABLE =
* I_SOFT_REFRESH =
EXCEPTIONS
OTHERS = 2.
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. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
CASE gd_okcode.
WHEN 'BACK' OR
'END' OR
'CANC'.
SET SCREEN 0. LEAVE SCREEN.
* User has pushed button "Display Orders"
WHEN 'ORDERS'.
PERFORM customer_show_orders.
WHEN 'ORDER_DETAILS'.
PERFORM order_show_details.
WHEN OTHERS.
ENDCASE.
CLEAR: gd_okcode.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Form CUSTOMER_SHOW_ORDERS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM customer_show_orders .
* define local data
DATA:
ld_row TYPE i,
ls_knb1 TYPE knb1.
CALL METHOD go_grid1->get_current_cell
IMPORTING
e_row = ld_row.
READ TABLE gt_knb1 INTO ls_knb1 INDEX ld_row.
CHECK ( syst-subrc = 0 ).
SELECT * FROM vbak INTO TABLE gt_vbak
WHERE kunnr = ls_knb1-kunnr.
REFRESH: gt_vbap.
ENDFORM. " CUSTOMER_SHOW_ORDERS
*&---------------------------------------------------------------------*
*& Form ORDER_SHOW_DETAILS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM order_show_details .
* define local data
DATA:
ld_row TYPE i,
ls_vbak TYPE vbak.
CALL METHOD go_grid1->get_current_cell
IMPORTING
e_row = ld_row.
READ TABLE gt_vbak INTO ls_vbak INDEX ld_row.
CHECK ( syst-subrc = 0 ).
SELECT * FROM vbap INTO TABLE gt_vbap
WHERE vbeln = ls_vbak-vbeln.
ENDFORM. " ORDER_SHOW_DETAILS
*&---------------------------------------------------------------------*
*& Form INIT_CONTROLS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM init_controls .
* Create docking container
CREATE OBJECT go_docking
EXPORTING
parent = cl_gui_container=>screen0
ratio = 90
EXCEPTIONS
OTHERS = 6.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL METHOD go_docking->set_extension
EXPORTING
extension = 99999 " entire screen
EXCEPTIONS
cntl_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Create splitter container
CREATE OBJECT go_splitter
EXPORTING
parent = go_docking
rows = 1
columns = 2
* NO_AUTODEF_PROGID_DYNNR =
* NAME =
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Get cell container
CALL METHOD go_splitter->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = go_cell_left.
CALL METHOD go_splitter->get_container
EXPORTING
row = 1
column = 2
RECEIVING
container = go_cell_right.
* Create 2nd splitter container
CREATE OBJECT go_splitter_2
EXPORTING
parent = go_cell_left
rows = 2
columns = 1
* NO_AUTODEF_PROGID_DYNNR =
* NAME =
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Get cell container
CALL METHOD go_splitter_2->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = go_cell_top.
CALL METHOD go_splitter_2->get_container
EXPORTING
row = 2
column = 1
RECEIVING
container = go_cell_bottom.
* Create ALV grids
CREATE OBJECT go_grid1
EXPORTING
i_parent = go_cell_top
EXCEPTIONS
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CREATE OBJECT go_grid2
EXPORTING
i_parent = go_cell_bottom
EXCEPTIONS
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CREATE OBJECT go_grid3
EXPORTING
i_parent = go_cell_right
EXCEPTIONS
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " INIT_CONTROLS
Regards
Uwe