‎2005 May 18 3:35 PM
Hello everyone,
I am new to dialog programming. I am using 2 tables( vbak, vbap) and 3 internal tables ITAB1, ITAB2 & ITAB. I am putting the required data in from vbak & vbap in2 itab1 & itab2 and putting the data in itab.
iam using 2 screens 100 and 200. In 100 iam inputting a value (vbak-vbeln) and when push a button get details trying to display the data in table of screen 200.
The code below is working if i only use single itab but throwing an error if using in above said fashion.
Can anyone help with me as to where iam going wrong.
Thnaks in advance.
<u>Code</u>
PROGRAM zdia_table
tables : vbak. vbap.
Data: BEGIN OF ITAB1 OCCURS 0.
VBELN LIKE VBAK-VBELN,
AUDAT LIKE VBAK-AUDAT,
KUNNR LIKE VBAK-KUNNR,
DATA: END OF ITAB1.
Data: BEGIN OF ITAB2 OCCURS 0.
VBELN LIKE VBAP-VBELN,
ZMENG LIKE VBAP-ZMENG,
NETWR LIKE VBAP-NETWR,
DATA: END OF ITAB2.
DATA: BEGIN OF ITAB OCCURS 0,
VBELN LIKE VBAK-VBELN,
AUDAT LIKE VBAK-AUDAT,
KUNNR LIKE VBAK-KUNNR,
ZMENG LIKE VBAP-ZMENG,
NETWR LIKE VBAP-NETWR,
DATA: END OF ITAB.
&----
*& MODULE STATUS_0100 OUTPUT
&----
TEXT
&----
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'XXXXXXX'.
*SET TITLEBAR 'XXX'.
ENDMODULE. "STATUS_0100 OUTPUT
&----
*& MODULE STATUS_0100 INPUT
&----
TEXT
&----
MODULE STATUS_0100 INPUT.
IF SY-UCOMM = 'GET'.
SELECT VBELN AUDAT KUNNR
FROM VBAK
INTO CORRESPONDING FIELDS OF TABLE ITAB1
WHERE VBELN = VBAK-VBELN.
SELECT VBELN ZMENG NETWR
FROM VBAP
INTO CORRESPONDING FIELDS OF TABLE ITAB2
FOR ALL ENTERIES IN ITAB1
WHERE VBELN = ITAB1-VBELN.
LOOP AT ITAB1.
LOOP AT ITAB2 WHERE VBELN = ITAB1-VBELN.
MOVE ITAB1-VBELN TO ITAB-VBELN.
MOVE ITAB1-AUDAT TO ITAB-AUDAT.
MOVE ITAB1-KUNNR TO ITAB-KUNNR.
MOVE ITAB2-NETWR TO ITAB-NETWR.
MOVE ITAB2-ZMENG TO ITAB-ZMENG.
APPEND ITAB.
CLEAR ITAB.
ENDLOOP.
ENDLOOP.
IF SY-SYBRC = 0.
CALL SCREEN 200.
ENDIF.
ENDIF.
&----
*& MODULE STATUS_0200 OUTPUT
&----
TEXT
&----
MODULE STATUS_0200 OUTPUT.
SET PF-STATUS 'XXXXXXX'.
*SET TITLEBAR 'XXX'.
ENDMODULE. "STATUS_0200 OUTPUT
&----
*& MODULE DISPLAY_DATA OUTPUT
&----
TEXT
&----
MOVE ITAB-VBELN TO VBAK-VBELN.
MOVE ITAB-AUDAT TO VBAK-AUDAT.
MOVE ITAB-KUNNR TO VBAK-KUNNR.
MOVE ITAB-NETWR TO VBAK-NETWR.
MOVE ITAB-ZMENG TO VBAK-ZMENG.
ENDMODULE. "DISPLAY_DATA OUTPUT
*----
SCREEN1 LOGIC
*----
PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.
*----
SCREEN2 LOGIC
*----
PROCESS BEFORE OUTPUT.
MODULE STATUS_0200.
LOOP AT ITAB WITH CONTROL TAB_CNTL
CURSOR TAB_CNTL-CURRENT_LINE.
MODULE DISPLAY_DATA.
ENDLOOP.
PROCESS AFTER INPUT.
*MODULE USER_COMMAND_0200.
LOOP AT ITAB.
ENDLOOP.
‎2005 May 18 3:54 PM
‎2005 May 18 4:00 PM
When i execute the program( using Tcode) iam getting the first screen. After entering the number(vbak-vbeln) and push the get details buttion it directly taking me to Short Dump. It dosnt giving me much details, but the error pointer pointing at the line..
-
> ENDMODULE. "STATUS_0200 OUTPUT.
Thank you.
‎2005 May 18 6:23 PM
The Statement <b>SET PF-STATUS 'XXXXXXX'.</b> is probably the problem.
Create a Status for the detail screen and use that instead of 'XXXXXXX' or simply comment the line to get rid of the short dump.
Rishi
‎2005 May 18 8:46 PM
i did created the status. As i mentioned earlier another program if iam using single ITAB with vbak table, its working.The thing is i want to equate the 'vbeln' from both the tables and if the duplicate exists for that record i like to display all the records and said field details from both the tables.
‎2005 May 18 9:04 PM
add
CONTROLS: TAB_CNTL TYPE TABLEVIEW USING SCREEN 0200.
after your data declarations.
seems like the dump is because the table control is not defined.
Rishi
‎2005 May 18 9:20 PM
Thank you.
But i think i missed out to put that line when posting the problem. But in the program iam using that line just after declaring the tables.
Thanks anyway for reminding me about that line.Any more input to make the program work will be appreciated.
‎2005 May 18 9:29 PM
What exactly is the error in the dump (e.g. COMPUTE_FLOAT_ZERODIVIDE)
Also try commenting module STATUS_0200 from the flow logic and see what happens!
Rishi
Try the following (the answer to your problem)
<b>PROGRAM zdia_table
tables : vbak. vbap.
CONTROLS: TAB_CNTL TYPE TABLEVIEW USING SCREEN 0200.
Data: BEGIN OF ITAB1 OCCURS 0.
VBELN LIKE VBAK-VBELN,
AUDAT LIKE VBAK-AUDAT,
KUNNR LIKE VBAK-KUNNR,
DATA: END OF ITAB1.
Data: BEGIN OF ITAB2 OCCURS 0.
VBELN LIKE VBAP-VBELN,
ZMENG LIKE VBAP-ZMENG,
NETWR LIKE VBAP-NETWR,
DATA: END OF ITAB2.
DATA: BEGIN OF ITAB OCCURS 0,
VBELN LIKE VBAK-VBELN,
AUDAT LIKE VBAK-AUDAT,
KUNNR LIKE VBAK-KUNNR,
ZMENG LIKE VBAP-ZMENG,
NETWR LIKE VBAP-NETWR,
DATA: END OF ITAB.
&----
*& MODULE STATUS_0100 OUTPUT
&----
*TEXT
&----
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'XXXXXXX'.
*SET TITLEBAR 'XXX'.
ENDMODULE. "STATUS_0100 OUTPUT
&----
*& MODULE USER_COMMAND_0100 INPUT
&----
*TEXT
&----
<u>MODULE USER_COMMAND_0100 INPUT.
IF SY-UCOMM = 'GET'.
SELECT VBELN AUDAT KUNNR
FROM VBAK
INTO CORRESPONDING FIELDS OF TABLE ITAB1
WHERE VBELN = VBAK-VBELN.
SELECT VBELN ZMENG NETWR
FROM VBAP
INTO CORRESPONDING FIELDS OF TABLE ITAB2
FOR ALL ENTERIES IN ITAB1
WHERE VBELN = ITAB1-VBELN.
LOOP AT ITAB1.
LOOP AT ITAB2 WHERE VBELN = ITAB1-VBELN.
MOVE ITAB1-VBELN TO ITAB-VBELN.
MOVE ITAB1-AUDAT TO ITAB-AUDAT.
MOVE ITAB1-KUNNR TO ITAB-KUNNR.
MOVE ITAB2-NETWR TO ITAB-NETWR.
MOVE ITAB2-ZMENG TO ITAB-ZMENG.
APPEND ITAB.
CLEAR ITAB.
ENDLOOP.
ENDLOOP.
IF SY-SYBRC = 0.
SET SCREEN 200.
LEAVE SCREEN.
ENDIF.
ENDIF.
ENDMODULE. USER_COMMAND_0100 INPUT</u>
&----
*& MODULE STATUS_0200 OUTPUT
&----
*TEXT
&----
MODULE STATUS_0200 OUTPUT.
SET PF-STATUS 'XXXXXXX'.
*SET TITLEBAR 'XXX'.
ENDMODULE. "STATUS_0200 OUTPUT
&----
*& MODULE DISPLAY_DATA OUTPUT
&----
*TEXT
&----
MOVE ITAB-VBELN TO VBAK-VBELN.
MOVE ITAB-AUDAT TO VBAK-AUDAT.
MOVE ITAB-KUNNR TO VBAK-KUNNR.
MOVE ITAB-NETWR TO VBAK-NETWR.
MOVE ITAB-ZMENG TO VBAK-ZMENG.
ENDMODULE. "DISPLAY_DATA OUTPUT
*----
SCREEN1 LOGIC
*----
PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.
*----
SCREEN2 LOGIC
*----
PROCESS BEFORE OUTPUT.
MODULE STATUS_0200.
LOOP AT ITAB WITH CONTROL TAB_CNTL
CURSOR TAB_CNTL-CURRENT_LINE.
MODULE DISPLAY_DATA.
ENDLOOP.
PROCESS AFTER INPUT.
*MODULE USER_COMMAND_0200.
LOOP AT ITAB.
ENDLOOP.</b>
Message was edited by: Rishi Joseph (solution)<b></b>
‎2005 May 19 10:26 AM
Thanks Rishi. But i think i got the solution now. Thanks for your help anyway.
‎2011 Jun 06 9:06 PM