Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Reg interactive report.

Former Member
0 Kudos

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

1 ACCEPTED SOLUTION

varma_narayana
Active Contributor
0 Kudos

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.

7 REPLIES 7

varma_narayana
Active Contributor
0 Kudos

Hi..

You have to paste the Complete code. including the Subroutine definitions. (Forms)

Then it is possible to find the Reason.

regards,

Varma

0 Kudos

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

0 Kudos

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.

varma_narayana
Active Contributor
0 Kudos

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.

0 Kudos

Hi varma,

still i am facing same problem.

Regards

Srinu

0 Kudos

HI,

check my code.

rgdsm

bharat.

uwe_schieferstein
Active Contributor
0 Kudos

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