Error handling in module pool program
hi,
in module pool program after enabling a field if the user enters an invalid value iam giving a error message.
message 'something' type 's' display like 'E'.
then again it should go to the previous screen where the user enters the value for that enabled filed.
can u guys share some ideas.
Hi ,
if it is a ascreen field use the below syntax
Field <fieldname> module <module_validate>.
in the module validate write the validation and throw error message ,the screen will be in error position
if the field is in Table control
Loop at <table control>.
chain.
field <fieldnamemodule <module_validate>.
"in the module validate write the validation and throw error message ,the screen will be in error position
endchain.
Endloop.
Prabhudas
Similar Messages
-
Exception error handling in module pool program
Hi all,
I have developed a screen in which I am calculating one of field value using two fields from same table.following is sample code.
zfi_proposal-zpro_value = zfi_proposal-zinv_rate * zfi_proposal-zno_of_shares.
here, field zinv_rate has domain type quan length 10 and decimal places = 4, and field zno_of_shares has domain type numc length 4. while zpro_value has domain type quan length 10 and decimal places = 4.
If zinv_rate > six digit value and zno_of_shares = two digit number system is giving conversion error.
can anyone provide solution to rectify this error.Thanks in advance.
Regards,
HarshadaYou can catch the exception cx_sy_arithmetic_overflow
Please refer example coding
PARAMETERS: pa_rate TYPE p DECIMALS 4,
pa_shar TYPE n LENGTH 4,
pa_pro TYPE p DECIMALS 4.
AT SELECTION-SCREEN ON pa_rate.
TRY .
pa_pro = pa_rate * pa_shar.
CATCH cx_sy_arithmetic_overflow.
MESSAGE 'Sorry the rate is too high, please correct the entry' TYPE 'E'.
ENDTRY.
AT SELECTION-SCREEN ON pa_shar.
TRY .
pa_pro = pa_rate * pa_shar.
CATCH cx_sy_arithmetic_overflow.
MESSAGE 'Sorry the no_shares is too high, please correct the entry' TYPE 'E'.
ENDTRY.
Regards
Marcin -
Error message in Module Pool program
Hi folks,
I have developed a module pool program for a custom screen. while entering data on the screen,
it throws a error message for a wrong data entry.But, even after cliking enter, the error message coming repeatedly and the screen is disabled.I havent inculded the screen fields in between CHAIN-ENDCHAIN.Is this the reason for the bug. If so, i have approximately 50 fields on my screen.Should i keep all those fields in between CHAIN-ENDCHAIN. Pls suggest me...
Thanks in advance,
Shyam.Hi Shyam,
Please find the LInk below
Hope this is help full
[Error Message|Re: chain endchain]
Thanks
kalyan -
Doubt in Radiobutton handling in Module-pool program
Hi Experts,
I have requirement in where in a module pool screen I am creating two Radio-buttons say R1 and R2 under one group.
When I do this the first radio button R1 is by default gettimg checked. What is that I need to do for making secand radiobutton R2 by default getting cheked.....?
Please note that it is in Module-pool not a Report.
Kindly help me out in this aspect.
Regards,
Rama Murthy.PHi,
You can set check/uncheck value of radio buttons in PBO.
But that check box button should be declared in main program(se38) also.
for e.g
data: R1 type c,
R2 type c.
declare above in your main program.
now go to se51. In layout go to Dictionary/Program fields or press F6.
Now click on Get from program button and drag R1,R2 to your layout.
Now right click on it and under convert option you will get radio button.
In main program under PBO make that radio button check.
Loop at screen.
if screen-name = 'R2'.
R2 = 'X'.
endloop.
Modify Screen.
Regards,
SUDHIR MANJAREKAR -
UP AND DOWN ARROW KEY HANDLING IN MODULE POOL PROGRAM
HI GURUS,
I HAVE A STRANGE REQUIREMENT ....I AM DISPLAYING TWO TABLE CONTROLS IN A SCREEN
WHERE IN THE 1ST TABLE CONTROL IS DISPLAYING ALL THE SALES ORDER NO'S WHEN ENTER KEY IS PRESSED.
THE SECOND TABLE IS DISPLAYING THE ITEMS FOR THE SELECTED SALES ORDER...
THIS IS HAPPENING WHEN I DOUBLE CLICK THE SALES ORDER NO IN THE FIRST TABLE CONTROL..
NOW THE CLIENT SAYS HE WILL NOT DOUBLE CLICK IT...HE SAYS THAT THE ITEM DISPLAY IN THE SECOND TABLE SHOULD BE DONE WHEN HE USES THE ARROW KEYS..Yes!
Create a class like this:
CLASS lcl_click_handler DEFINITION.
PUBLIC SECTION.
METHODS:
handle_hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING e_row_id e_column_id.
ENDCLASS.
Write the implementation for this class which meets your needs.
Declare it:
DATA: obj_click_handler TYPE REF TO lcl_click_handler.
Create and use it:
CREATE OBJECT obj_click_handler.
SET HANDLER obj_click_handler->handle_hotspot_click FOR your_obj_grid.
Regards
Jordi -
How to write module pool program
hai,
what is the module -pool program ?
what are the procedures to write the module-pool program.
plz give the simple program for module-pool programs?
regards
surenderHi
This component though is not attached to the screen painter, plays important role in transaction. Normally, for reports, on line executable programs are written but for transaction, Module Pool Programs are written. The module pool program contains only modules to handle various events associated with screen and data declaration statements.
System divides the module pool program into several include program. These are global field, PBO modules, and PAI modules. It is entirely users decision whether to use these modules or write directly into main program.
Creation of Module Pool Program
You can create module pool program either through
Object browser
System automatically creates the module pool program and for these program which are created through object browser, system creates the include modules.
Or
ABAP/4 editor
It is similar to normal program creation. Type of program should be given M and is not created by system.
Communication between Dynpro and Module Program
For each screen, the system executes the flow logic, which contains corresponding events. The control is passed to Module Pool Program. Module Pool Program handles the code for these events and again passes back control to the flow logic and finally to screen. Unlike on line program, in this case, the control remains with flow logic. The switching of control between flow logic and module pool program and back is common process when user executes transaction.
Creation of a Complete Transaction
Steps involved to create a complete transaction
Create module pool program.
From screen painter create screens.
Write flow logic for each screen.
Write code for all the events in module pool program.
Check for any error in screen and flow logic.
Generate each and every component of screen i.e. flow logic and screen.
Single screen can be tested using Screen Painter.
Create transaction code through object browser.
Generate the transaction code.
User can execute the transaction by entering the transaction code in the command field.
Handling Function Code
The function code or OKCODE is the last field of Field list. Function code can be handled as follows:
During the Designing of the screen, a function code is assigned to pushbutton.
In field list, developer needs to specify OKCODE as last field.
In module program it is a global field and can be evaluated in the PAI event.
A function code is treated in the same way, regardless it comes from pushbutton, menu item or any other GUI element.
When the user clicks on the Display button, you want to display details of sflight, with corresponding carrid and connid (which is entered by the user).
Module pool program to handle this particular screen is as follows:
Program YVTEST7.
TABLES: SFLIGHT.
DATA: OKCODE (4).
MODULE INPUT1 INPUT,
CASE OKCODE.
WHEN DISP.
SELECT * FROM SFLIGHT
WHERE CARRID = SFLIGHT CARRID AND
CONNID = SFLIGHT CONNID.
ENDSELECT.
LEAVE TO SCREEN 200.
WHEN EXIT. LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. INPUT1 INPUT
MODULE USER_COMMAND_0200 INPUT.
CASE OKCODE.
WHEN BACK. LEAVE TO SCREEN 100.
ENDCASE.
ENDMODULE. USER_COMMAND_0200 INPUT
When the user clicks on display, control is transferred to screen no. 200 on which you display sflight details & on the same screen, when user clicks on BACK button, he comes back to main screen.
Flow logic for screen 100 is as follows:
PROCESS AFTER INPUT.
MODULE INPUT.
Flow logic for screen 200
PROCESS AFTER INPUT.
USER_COMMAND_0200.
MODULES: Modules are handled in module pool program.
You need to write flow logic for screen 200 and design screen 200.
In case of transaction transfer of data from program to screen is automatic i.e. you need not transfer the data from program to screen explicitly. The fields, which you define in the screen receives the data from program and displays the same.
The Field Checks
As already mentioned Transaction is the only method, which SAP recommends to update the database tables. Data entered in the database table should be valid and correct. Data entered is validated at each and every point. ABAP/4 offers various methods to validate data and those are as follows:
Automatic field checks
Checks performed in the flow logic
Checks performed in the ABAP/4 module pool program
Automatic Field Checks
These checks are based on the field information stored in the dictionary. These checks are performed by the system automatically when the user enters the data for the screen field. System performs these checks before PAI event is triggered. Types of field checks performed by system are as follows:
Required input
While designing the screen, for particular screen field if you click the Req. Entry checkbox, the field becomes mandatory. When the transaction is executed if user leaves this particular field blank, the system displays error message. User cannot proceed until the user enters some data.
Proper Data Format
Each field has its own data format whether it is table field or screen field. Whenever data is entered, system checks for the proper format of the data. For example date. Each user has its own format for date, which is defined in the user master record. If the date defined in the user master record is in the format DD/MM/YYYY, if the user enters the date, say, in YY/DD/MM, the user displays the error message. System also checks for the value of month or days. For example if month entered is greater than twelve then the error message is displayed.
Valid Value for the Field
In data dictionary two tables are related by Primary key-Foreign key relationship. Whenever the user enters the data, the system checks for the check table values. Also in Domain, if you have fixed values, then the system checks for these values.
Automatic field checks are repeated each time the user enters the data.
About at Exit Command
Automatic field checks can be avoided by AT EXIT-COMMAND, which works exactly the same way as Cancel works on application tools bar. In the R/3 screen, if you want to quit the processing of that particular screen without entering the mandatory fields, user can click the Cancel button. Same functionality can be incorporated in the user-defined transaction by using AT EXIT-COMMAND. This module can be called before the system executes the automatic field checks and it goes without saying that before PAI event. Code for AT EXIT-COMMAND in flow logic and in module pool program can be written as follows:
In Flow Logic
Process After Input.
Module exit AT EXIT-COMMAND.
In module pool program.
Module exit.
Case okcode.
When Exit.
Leave to screen 0.
To achieve this kind of functionality a pushbutton or menu item should be assigned a function type E. It tells the system to process this particular module before carrying out any field checks.
Flow Logic Validations
Consider the case where you want user to enter only LH and SQ for sflight-carrid. In this case, you are restricting value of a screen field. This cannot be achieved by automatic field check. Hence there is a need of additional validation. It can be done in flow logic by using following statement:
Field -
Values
Syntax
PAI.
Field sflight-carrid values (LH).
For multiple values
PAI.
Field sflight-carrid values (LH SQ).
Field sflight-price values (between 1000 and 2000).
In this case when the user enters the value, PAI is triggered and field is checked for that particular value. If the value entered happens to be wrong, that field is enabled for user to enter. If you have multiple Field statements in your flow logic, it is sequential execution.
Consider the following case:
PAI.
Module assign.
Field sflight-carrid values (LH SQ).
In ABAP/4
Module assign.
Data: carrid1 like sflight-carrid.
Carrid1 = sflight-carrid.
Endmodule.
In this case, Sflight-carrid is used in the flow logic before the field statement. The system will give invalid value or some previous value as the field sflight-carrid is used in module before it is checked i.e., field statement is after the module in which sflight-carrid is being used. The field is not available to the system unless it executes the field statement. Field statement transfers the values to the program and is done only once. If you dont have Field statement in your flow logic, transfer of values takes place in PAI event.
Consider one more case where you have multiple field statement
PAI.
Field Sflight-carrid values (LH).
Field Sflight-connid values (0400 0500).
In this case if the user enters only carrid wrong, then this particular field is enabled and rest of the fields are disabled for user to input. Many times if the user enters wrong value for one field, then you might want to give option to user to enter all the fields, which is not possible by using Field statement only. This functionality can be achieved by CHAIN ENDCHAIN.
Syntax
Chain.
Field sflight-carrid value (LH).
Field sflight-connid values (between 200 and 500).
Endchain.
Field sflight-price values (100 1000).
In this case, if the user enters wrong value only for carrid, both the fields i.e. carrid and connid are enabled as they are grouped together in the Chain statement. The field price will be disabled for input. Usually, logically related fields are grouped together with Chain-Endchain statement.
Module Pool Program Validations
Checking fields ABAP/4 program includes
Field statement in flow logic.
Module statement in ABAP/4 module pool Program.
Syntax
PAI.
Field sflight-carrid module <name>.
This module can be handled in the main program i.e. module pool program.
In ABAP/4 program
Module Check.
Select single * from sflight where carrid = sflight-carrid.
If sy-subrc ne 0.
Message e001.
Endif.
In this case, field sflight-carrid is checked in the table for its existence.
Dynamically Calling the Screens
About Displaying Next Screen
Transaction is a sequence of screens, which are displayed one after the other. The next screen displayed depends upon the attributes of first screen. In attributes you need to give Next Screen number i.e. if next screen displayed should be 200 screen, then this number should be given in next Screen attributes. These are static attributes of the screen. By default, if nothing is specified in the program, the system branches out to the screen number, which is specified in the attribute screen.
In this case, if user selects MARA pushbutton, then fields from Mara table are displayed. When the user clicks on the MARD, then the fields from MARD table are displayed. Depending upon users selection, the screen is branched out and this has to be done during runtime. This functionality can be achieved by dynamically calling the screen in module pool program.
The screen can branch out to new screen depending upon user selection. Following command in module pool program can do this:
SET SCREEM
CALL SCREEN
LEAVE TO SCREEN <NUMBER>
All these commands override the specifications given in the attributes. This overriding is temporary. The values stored in the attribute are not changed.
Set Screen
Syntax
Set screen <number>.
In module pool program
Case okcode.
When DISP.
Set screen 200.
When LIST.
Set screen 300.
Endcase.
In this case, the entire processing of current screen takes place and then the system branches out to next screen. If you want to branch out to the next screen without processing the current screen, LEAVE SCREEN should be used along with the SET SCREEN.
For Example:
Case okcode..
When DISP.
Set screen 200.
Leave Screen.
When LIST.
Set screen 300.
Leave Screen.
Endcase.
When SET SCREEN is used, control cannot be transferred to the main screen or previous screen, unless you write code for the same.
Call Screen
Usually used for pop up screens. Many times, there is a need for user to enter additional information or secondary information on another screen or pop up screen. Once the user enters the data, he should be able to go back to main screen or to the screen where he started. This is not possible by using SET SCREEN. CALL SCREEN achieves this functionality.
Syntax
Call Screen 200.
Will simply call a screen number 200 from a main screen. Once the screen is displayed the user can enter all the data and return to the main screen by clicking BACK button.
To call screen as pop up screen the syntax is
Call screen starting at <col.no.> <line no>
Ending at <col no> <line no>.
In this case window will be popped as window and user can close it by using BACK button.
Leave to screen
To SET a new screen without processing current screen, you need to use the following two statements together:
SET SCREEN 200.
LEAVE SCREEN.
Or a Single statement
LEAVE TO SCREEN 200. -
Getting error while calling a subscreen in module pool program
HI ALL,
ACTUALLY I'M GETTING A SYNTAX ERROR WHILE I'M CALLING A SUBSCREEN
IN A MODULE POOL PROGRAM IN PAI MODULE
THE ERROR IS AS FOLLOW
"." or "ID ... FIELD ..." expected after "SUBSCREEN"
CAN ANYBODY PLS HELP ME.
REGARDS
ANDREWSHI MAX ,
THE CODE IS AS FOLLOWS:
*& Report ZTABSTRIP_PS
REPORT ZTABSTRIP_PS.
type-pools : vrm.
DATA:number1 type I,
number2 type I,
result type I,
ok_code like SY-UCOMM,
employee1 type c,
ABAP(19) type c,
SALES(19) type c,
HR(19) type c,
MM(19) type c,
employee type c.
emp type c.
CONTROLS tabstrip TYPE TABSTRIP.
CALL SCREEN 100.
call screen 110.
call screen 130.
call screen 120.
call screen 140.
*& Module STATUS_0100 OUTPUT
text
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'STATUS'.
SET TITLEBAR 'TITLE'.
CASE OK_CODE.
WHEN 'BACK' or 'EXIT' or 'DELETE'.
leave program.
WHEN 'SAVE'.
MESSAGE 'please choose a valid function' TYPE 'I'.
WHEN 'BACK'.
leave PROGRAM.
when 'EXIT' or 'DELETE'.
leave to screen 0.
WHEN 'SAVE'.
MESSAGE 'please choose a valid function' TYPE 'I'.
endcase.
ENDMODULE. " STATUS_0100 OUTPUT
*& Module USER_COMMAND_0100 INPUT
text
MODULE USER_COMMAND_0100 INPUT.
CASE OK_CODE.
when 'TAB1'.
tabstrip-activetab = 'TAB1'.
when 'TAB2'.
tabstrip-activetab = 'TAB2'.
result = number1 + number2.
when 'TAB3'.
tabstrip-activetab = 'TAB3'.
SET TITLEBAR 'TITLE1'.
when 'TAB4'.
tabstrip-activetab = 'TAB4'.
if employee = 'NEERAJ'.
ABAP = 'NEERAJ'.
elseif employee = 'UMESH'.
SALES = 'UMESH'.
ELSEIF employee = 'RAM'.
HR = 'RAM'.
elseif employee = 'ANIL'.
MM = 'ANIL'.
endif.
employee = employee.
WHEN 'BACK'.
leave PROGRAM.
when 'EXIT' or 'DELETE'.
leave to screen 0.
WHEN 'SAVE'.
MESSAGE 'please choose a valid function' TYPE 'I'.
ENDCASE.
WHEN 'BACK' or 'EXIT' or 'DELETE'.
leave program .
WHEN 'SAVE'.
MESSAGE 'please choose a valid function' TYPE 'I'.
endcase.
ENDMODULE. " USER_COMMAND_0100 INPUT
*& Module STATUS_0110 OUTPUT
text
**MODULE STATUS_0110 OUTPUT.
SET PF-STATUS 'STATUS1'.
SET TITLEBAR 'xxx'.
**case ok_code.
**WHEN 'back' or 'exit' or 'delete'.
leave PROGRAM.
WHEN 'save'.
MESSAGE 'please choose a valid function ' TYPE 'W'.
ENDCASE.
**ENDMODULE. " STATUS_0110 OUTPUT
*& Module USER_COMMAND_0110 INPUT
text
MODULE USER_COMMAND_0110 INPUT.
number1 = number1.
number2 = number2.
CLEAR NUMBER1.
CLEAR NUMBER2.
REFRESH NUMBER1.
REFRESH NUMBER2.
ENDMODULE. " USER_COMMAND_0110 INPUT
*& Module STATUS_0130 OUTPUT
text
MODULE STATUS_0130 OUTPUT.
SET PF-STATUS 'STATUS2'.
SET TITLEBAR 'xxx'.
RESULT = number1 + number2.
*CLEAR RESULT.
REFRESH RESULT.
ENDMODULE. " STATUS_0130 OUTPUT
*& Module STATUS_0120 OUTPUT
text
MODULE STATUS_0120 OUTPUT.
SET PF-STATUS 'xxxxxxxx'.
SET TITLEBAR 'xxx'.
DATA: l_name TYPE vrm_id,
li_list TYPE vrm_values,
l_value LIKE LINE OF li_list.
l_value-key = '1'.
l_value-text = 'ANIL'.
APPEND l_value TO li_list.
CLEAR l_value.
CLEAR li_list.
l_value-key = '2'.
l_value-text = 'RAM'.
APPEND l_value TO li_list.
CLEAR l_value.
CLEAR li_list.
l_value-key = '3'.
l_value-text = 'NEERAJ'.
APPEND l_value TO li_list.
CLEAR l_value.
CLEAR li_list.
l_value-key = '4'.
l_value-text = 'UMESH'.
APPEND l_value TO li_list.
CLEAR l_value.
CLEAR li_list.
l_name = 'employee'.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
ID = l_name
VALUES = li_list
EXCEPTIONS
ID_ILLEGAL_NAME = 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.
CLEAR li_list.
ENDMODULE. " STATUS_0120 OUTPUT
*& Module USER_COMMAND_0120 INPUT
text
MODULE USER_COMMAND_0120 INPUT.
INCLUDING sy-repid '140'.
employee1 = employee.
IF employee1 CS 'NEERAJ'.
call SUBSCREEN sub4 .
ABAP = 'NEERAJ'.
CLEAR ABAP.
ELSEIF employee1 CS 'UMESH'.
call SUBSCREEN sub4 .
SALES = 'UMESH'.
CLEAR SALES.
elseif employee1 CS 'RAM'.
call SUBSCREEN sub4 .
HR = 'RAM'.
CLEAR HR.
ELSEIF employee1 CS 'ANIL'.
call SUBSCREEN sub4 .
MM = 'ANIL'.
CLEAR MM.
endif.
ENDMODULE. " USER_COMMAND_0120 INPUT
*& Module STATUS_0140 OUTPUT
text
MODULE STATUS_0140 OUTPUT.
*CASE OK_CODE.
WHEN employee1 'NEERAJ'.
screen-active = 1.
ABAP = 'NEERAJ'.
WHEN employee1 = 'UMESH'.
screen-active = 1.
SALES = 'UMESH'.
WHEN employee1 = 'RAM'.
screen-active = 1.
HR = 'RAM'.
WHEN employee1 = 'ANIL'.
screen-active = 1.
MM = 'ANIL'.
endif.
*ENDCASE.
ENDMODULE. " STATUS_0140 OUTPUT -
Runtime errors in module pool programming
HI all,
I have done a module pool program for invoice tracking level wise.
I am encountering a runtime error, LIST_TOO_MANY_LPROS, while execution ie., for two and more than two updations of the database.
The error analysis says that "At present, the maximum permitted number of nested screen levels is restricted to 50".
Short Text :- "No further list processing possible".
Can anyone please come out with a solution for this problem.
regards
samarendra.
Edited by: samarendra penugonda on Nov 5, 2008 5:03 AMHi
U should replace the comand CALL SCREEN with LEAVE TO SCREEN.
The command CALL SCREEN create an internal mode to link the calling screen to called screen automatically: in this way when it needs to back to calling screen it doesn't need to specify the screen number but only to use:
- LEAVE TO SCREEN 0.
or
- SET SCREEN 0. LEAVE SCREEN.
Now if you use LEAVE TO SCREEN, u need to indicate the screen when it needs to back to calling screen:
- Go from 100 to 200
LEAVE TO SCREEN 200. (Instead of CALL SCREEN 200)
- Back to 100.
LEAVE TO SCREEN 100. (Instead of LEAVE TO SCREEN 0)
Max -
Hi All,
I have created 1 module pool program with screen no. 0100. But the statement CALL SCREEN 0100 is not getting executing its showing error i.e ' statement cannot be accessable' even i have created and activated the sceen 0100.
Thanks...
kiranHi kiran,
Open you program in se38 menu bar -> GOTO -> ATTRIBUTES and check wheather it is executable program or module pool program.
if it is exeutable program then u can call the screen 0100 as ur intial screen. if not ur given type as module pool then u have to create a transaction in SE93 and give the screen name in that and prgoram name then it will display the screen which u hv created .
if you want to show the screen 0100 as ur initial sceen in module pool program without using transaction it is not possible so use either executable program and use the stament call screen 0100.
<b>reward if useful </b>
Regards,
sunil kairam. -
Using FM DD_POPUP_TO_CONFIRM_CANCEL giving error in module pool program
HI,
I am using FM DD_POPUP_TO_CONFIRM_CANCEL in my module pool program.
But when the cursor comes to the FM it is throwing error like
*CALL SCREEN (not modal) in modal dialog box not allowed.*
i am using the below code.
CALL FUNCTION 'DD_POPUP_TO_CONFIRM_CANCEL'
EXPORTING
textline1 = 'UFN Preprint record created!'
textline2 = 'Proceed to Add more States ?'
title = 'Confirmation'
start_column = 25
start_row = 15
defaultpos = 'C'
IMPORTING
answer = lv_answer.
Regards
JaiHi,
Please try to use FM: 'POPUP_TO_CONFIRM'.
Cheers, -
Table maintenance by using module pool program
Hi
Please give me step by step procedure to generate table maintenance by using module pool programWhile creating table maintenance, you can go thro' the module pool program used for that.In that,in PBO part,just try making particular field active = 1 inside loop at screen.
Girish Kumar Lo...
Posts: 1,518
Questions: 2
Registered: 4/19/07
Forum points: 1,982
Re: Regarding Table maintanence generator
Posted: Jun 26, 2007 9:02 AM in response to: Younus Khan Reply E-mail this post
here is the code for that
REPORT ZTAB_MAINT
NO STANDARD PAGE HEADING
MESSAGE-ID ZZ.
T Y P E D E C L A R A T I O N S
*--Types declaration for selection to be passed as parameter into
*--VIEW_MAINTENANCE_CALL FM
TYPES: BEGIN OF TP_RANGETAB.
INCLUDE STRUCTURE VIMSELLIST.
TYPES: END OF TP_RANGETAB.
D A T A D E C L A R A T I O N S
DATA: V_MATNR TYPE MATNR, " Material Number
V_WERKS TYPE WERKS_D, " Plant
V_KONOB TYPE KONOB, " Product allocation object
V_ZCPLT(40) TYPE C. " Message
I N T E R N A L T A B L E D E C L A R A T I O N S
Internal table to subroutine code
*Internal table used as selection for VIEW_MAINTENANCE_CALL FM
DATA: IT_RANGETAB TYPE STANDARD TABLE OF TP_RANGETAB WITH HEADER LINE.
*--Internal table used for getting the tablefields
DATA: BEGIN OF IT_HEADER OCCURS 1.
INCLUDE STRUCTURE VIMDESC.
DATA: END OF IT_HEADER.
*--Name Tabel
DATA: BEGIN OF IT_NAMTAB OCCURS 50.
INCLUDE STRUCTURE VIMNAMTAB.
DATA: END OF IT_NAMTAB.
*--Used for handling 'BT' option
DATA: BEGIN OF IT_MATNR OCCURS 0,
MATNR TYPE MATNR,
END OF IT_MATNR.
*--Used for handling 'BT' option
DATA: BEGIN OF IT_WERKS OCCURS 0,
WERKS TYPE WERKS,
END OF IT_WERKS.
*--Used for handling 'BT' option
DATA: BEGIN OF IT_KONOB OCCURS 0,
KONOB TYPE KONOB,
END OF IT_KONOB.
*--Used for handling 'BT' option
DATA: BEGIN OF IT_ZCPLT OCCURS 0,
ZCPLT(40) TYPE C,
END OF IT_ZCPLT.
I N P U T S C R E E N
SELECTION-SCREEN BEGIN OF BLOCK SELSCR WITH FRAME TITLE TEXT-001.
RANGES: R_MATNR FOR V_MATNR.
RANGES: R_WERKS FOR V_WERKS.
RANGES: R_KONOB FOR V_KONOB.
RANGES: R_ZCPLT FOR V_ZCPLT.
Select Options
SELECT-OPTIONS: S_MATNR FOR V_MATNR NO-EXTENSION, " Material
S_WERKS FOR V_WERKS NO-EXTENSION, " Plant
S_KONOB FOR V_KONOB NO-EXTENSION,
" Product allocation object
S_ZCPLT FOR V_ZCPLT NO-EXTENSION. " Plant
SELECTION-SCREEN END OF BLOCK SELSCR.
A T S E L E C T I O N S C R E E N
AT SELECTION-SCREEN.
Validate user inputs
PERFORM FRM_VALIDATIONS.
S T A R T O F S E L E C T I O N
START-OF-SELECTION.
Fetch Data from Data Base
PERFORM FRM_GET_DATA.
S U B R O U T I N E S
*& Form frm_get_data
Call the function module VIEW_MAINTENNACE_CALL to get data
based on selection criteria
FORM FRM_GET_DATA .
CALL FUNCTION 'VIEW_GET_DDIC_INFO'
EXPORTING
VIEWNAME = 'ZTAB'
TABLES
X_HEADER = IT_HEADER
X_NAMTAB = IT_NAMTAB
SELLIST = IT_RANGETAB
EXCEPTIONS
NO_TVDIR_ENTRY = 1
TABLE_NOT_FOUND = 2.
IF SY-SUBRC <> 0.
MESSAGE E002 WITH 'Error in ZTAB table'(005).
ENDIF.
CLEAR: IT_RANGETAB,
IT_RANGETAB[].
LOOP AT IT_NAMTAB.
CASE IT_NAMTAB-VIEWFIELD.
WHEN 'MATNR'.
CLEAR IT_RANGETAB.
IT_RANGETAB-VIEWFIELD = 'MATNR'.
IT_RANGETAB-TABIX = SY-TABIX.
IT_RANGETAB-DDIC = IT_NAMTAB-READONLY.
LOOP AT S_MATNR.
CASE S_MATNR-OPTION.
WHEN 'EQ'.
IT_RANGETAB-AND_OR = 'AND'.
IT_RANGETAB-OPERATOR = 'EQ'.
IT_RANGETAB-VALUE = S_MATNR-LOW.
APPEND IT_RANGETAB.
WHEN 'BT'.
IT_RANGETAB-AND_OR = 'AND'.
IT_RANGETAB-OPERATOR = 'GE'.
IT_RANGETAB-VALUE = S_MATNR-LOW.
APPEND IT_RANGETAB.
IT_RANGETAB-AND_OR = 'AND'.
IT_RANGETAB-OPERATOR = 'LE'.
IT_RANGETAB-VALUE = S_MATNR-HIGH.
APPEND IT_RANGETAB.
WHEN 'NB'.
CLEAR: R_MATNR,
R_MATNR[].
R_MATNR-SIGN = 'I'.
R_MATNR-OPTION = 'BT'.
R_MATNR-LOW = S_MATNR-LOW.
R_MATNR-HIGH = S_MATNR-HIGH.
APPEND R_MATNR.
SELECT MATNR
INTO TABLE IT_MATNR
FROM ZTAB
WHERE MATNR IN R_MATNR.
DELETE ADJACENT DUPLICATES FROM IT_MATNR COMPARING MATNR
LOOP AT IT_MATNR.
IT_RANGETAB-AND_OR = 'AND'.
IT_RANGETAB-OPERATOR = 'NE'.
IT_RANGETAB-VALUE = IT_MATNR-MATNR.
APPEND IT_RANGETAB.
ENDLOOP.
WHEN 'NE'.
IT_RANGETAB-AND_OR = 'AND'.
IT_RANGETAB-OPERATOR = 'NE'.
IT_RANGETAB-VALUE = S_MATNR-LOW.
APPEND IT_RANGETAB.
WHEN OTHERS.
IT_RANGETAB-AND_OR = 'AND'.
IT_RANGETAB-OPERATOR = S_MATNR-OPTION.
IT_RANGETAB-VALUE = S_MATNR-LOW.
APPEND IT_RANGETAB.
ENDCASE.
ENDLOOP.
WHEN 'WERKS'.
CLEAR IT_RANGETAB.
IT_RANGETAB-VIEWFIELD = 'WERKS'.
IT_RANGETAB-TABIX = SY-TABIX.
IT_RANGETAB-DDIC = IT_NAMTAB-READONLY.
LOOP AT S_WERKS.
CASE S_WERKS-OPTION.
WHEN 'EQ'.
IT_RANGETAB-AND_OR = 'AND'.
IT_RANGETAB-OPERATOR = 'EQ'.
IT_RANGETAB-VALUE = S_WERKS-LOW.
APPEND IT_RANGETAB.
WHEN 'BT'.
IT_RANGETAB-AND_OR = 'AND'.
IT_RANGETAB-OPERATOR = 'GE'.
IT_RANGETAB-VALUE = S_WERKS-LOW.
APPEND IT_RANGETAB.
IT_RANGETAB-AND_OR = 'AND'.
IT_RANGETAB-OPERATOR = 'LE'.
IT_RANGETAB-VALUE = S_WERKS-HIGH.
APPEND IT_RANGETAB.
WHEN 'NB'.
CLEAR: R_WERKS,
R_WERKS[].
R_WERKS-SIGN = 'I'.
R_WERKS-OPTION = 'BT'.
R_WERKS-LOW = S_WERKS-LOW.
R_WERKS-HIGH = S_WERKS-HIGH.
APPEND R_WERKS.
SELECT WERKS
INTO TABLE IT_WERKS
FROM MARC
WHERE WERKS IN R_WERKS.
DELETE ADJACENT DUPLICATES FROM IT_WERKS COMPARING WERKS
LOOP AT IT_WERKS.
IT_RANGETAB-AND_OR = 'AND'.
IT_RANGETAB-OPERATOR = 'NE'.
IT_RANGETAB-VALUE = IT_WERKS-WERKS.
APPEND IT_RANGETAB.
ENDLOOP.
WHEN 'NE'.
IT_RANGETAB-AND_OR = 'AND'.
IT_RANGETAB-OPERATOR = 'NE'.
IT_RANGETAB-VALUE = S_WERKS-LOW.
APPEND IT_RANGETAB.
WHEN OTHERS.
IT_RANGETAB-AND_OR = 'AND'.
IT_RANGETAB-OPERATOR = S_WERKS-OPTION.
IT_RANGETAB-VALUE = S_WERKS-LOW.
APPEND IT_RANGETAB.
ENDCASE.
ENDLOOP.
WHEN 'KONOB'.
CLEAR IT_RANGETAB.
IT_RANGETAB-VIEWFIELD = 'KONOB'.
IT_RANGETAB-TABIX = SY-TABIX.
IT_RANGETAB-DDIC = IT_NAMTAB-READONLY.
LOOP AT S_KONOB.
CASE S_KONOB-OPTION.
WHEN 'EQ'.
IT_RANGETAB-AND_OR = 'AND'.
IT_RANGETAB-OPERATOR = 'EQ'.
IT_RANGETAB-VALUE = S_KONOB-LOW.
APPEND IT_RANGETAB.
WHEN 'BT'.
IT_RANGETAB-AND_OR = 'AND'.
IT_RANGETAB-OPERATOR = 'GE'.
IT_RANGETAB-VALUE = S_KONOB-LOW.
APPEND IT_RANGETAB.
IT_RANGETAB-AND_OR = 'AND'.
IT_RANGETAB-OPERATOR = 'LE'.
IT_RANGETAB-VALUE = S_KONOB-HIGH.
APPEND IT_RANGETAB.
WHEN 'NB'.
CLEAR: R_KONOB,
R_KONOB[].
R_KONOB-SIGN = 'I'.
R_KONOB-OPTION = 'BT'.
R_KONOB-LOW = S_KONOB-LOW.
R_KONOB-HIGH = S_KONOB-HIGH.
APPEND R_KONOB.
SELECT KONOB
INTO TABLE IT_KONOB
FROM T190
WHERE KONOB IN R_KONOB.
DELETE ADJACENT DUPLICATES FROM IT_KONOB COMPARING KONOB
LOOP AT IT_KONOB.
IT_RANGETAB-AND_OR = 'AND'.
IT_RANGETAB-OPERATOR = 'NE'.
IT_RANGETAB-VALUE = IT_KONOB-KONOB.
APPEND IT_RANGETAB.
ENDLOOP.
WHEN 'NE'.
IT_RANGETAB-AND_OR = 'AND'.
IT_RANGETAB-OPERATOR = 'NE'.
IT_RANGETAB-VALUE = S_KONOB-LOW.
APPEND IT_RANGETAB.
WHEN OTHERS.
IT_RANGETAB-AND_OR = 'AND'.
IT_RANGETAB-OPERATOR = S_KONOB-OPTION.
IT_RANGETAB-VALUE = S_KONOB-LOW.
APPEND IT_RANGETAB.
ENDCASE.
ENDLOOP.
WHEN 'ZCPLT'.
CLEAR IT_RANGETAB.
IT_RANGETAB-VIEWFIELD = 'ZCPLT'.
IT_RANGETAB-TABIX = SY-TABIX.
IT_RANGETAB-DDIC = IT_NAMTAB-READONLY.
LOOP AT S_ZCPLT.
CASE S_ZCPLT-OPTION.
WHEN 'EQ'.
IT_RANGETAB-AND_OR = 'AND'.
IT_RANGETAB-OPERATOR = 'EQ'.
IT_RANGETAB-VALUE = S_ZCPLT-LOW.
APPEND IT_RANGETAB.
WHEN 'BT'.
IT_RANGETAB-AND_OR = 'AND'.
IT_RANGETAB-OPERATOR = 'GE'.
IT_RANGETAB-VALUE = S_ZCPLT-LOW.
APPEND IT_RANGETAB.
IT_RANGETAB-AND_OR = 'AND'.
IT_RANGETAB-OPERATOR = 'LE'.
IT_RANGETAB-VALUE = S_ZCPLT-HIGH.
APPEND IT_RANGETAB.
WHEN 'NB'.
CLEAR: R_ZCPLT,
R_ZCPLT[].
R_ZCPLT-SIGN = 'I'.
R_ZCPLT-OPTION = 'BT'.
R_ZCPLT-LOW = S_ZCPLT-LOW.
R_ZCPLT-HIGH = S_ZCPLT-HIGH.
APPEND R_ZCPLT.
SELECT ZCPLT
INTO TABLE IT_ZCPLT
FROM ZTAB
WHERE ZCPLT IN R_ZCPLT.
DELETE ADJACENT DUPLICATES FROM IT_ZCPLT COMPARING ZCPLT
LOOP AT IT_ZCPLT.
IT_RANGETAB-AND_OR = 'AND'.
IT_RANGETAB-OPERATOR = 'NE'.
IT_RANGETAB-VALUE = IT_ZCPLT-ZCPLT.
APPEND IT_RANGETAB.
ENDLOOP.
WHEN 'NE'.
IT_RANGETAB-AND_OR = 'AND'.
IT_RANGETAB-OPERATOR = 'NE'.
IT_RANGETAB-VALUE = S_ZCPLT-LOW.
APPEND IT_RANGETAB.
WHEN OTHERS.
IT_RANGETAB-AND_OR = 'AND'.
IT_RANGETAB-OPERATOR = S_ZCPLT-OPTION.
IT_RANGETAB-VALUE = S_ZCPLT-LOW.
APPEND IT_RANGETAB.
ENDCASE.
ENDLOOP.
ENDCASE.
ENDLOOP.
IF S_ZCPLT[] IS INITIAL.
CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
EXPORTING
ACTION = 'U'
VIEW_NAME = 'ZTAB'
TABLES
DBA_SELLIST = IT_RANGETAB
EXCEPTIONS
CLIENT_REFERENCE = 1
FOREIGN_LOCK = 2
INVALID_ACTION = 3
NO_CLIENTINDEPENDENT_AUTH = 4
NO_DATABASE_FUNCTION = 5
NO_EDITOR_FUNCTION = 6
NO_SHOW_AUTH = 7
NO_TVDIR_ENTRY = 8
NO_UPD_AUTH = 9
ONLY_SHOW_ALLOWED = 10
SYSTEM_FAILURE = 11
UNKNOWN_FIELD_IN_DBA_SELLIST = 12
VIEW_NOT_FOUND = 13
MAINTENANCE_PROHIBITED = 14
OTHERS = 15.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ELSE.
CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
EXPORTING
ACTION = 'U'
VIEW_NAME = 'ZTAB_ZTEST'
TABLES
DBA_SELLIST = IT_RANGETAB
EXCEPTIONS
CLIENT_REFERENCE = 1
FOREIGN_LOCK = 2
INVALID_ACTION = 3
NO_CLIENTINDEPENDENT_AUTH = 4
NO_DATABASE_FUNCTION = 5
NO_EDITOR_FUNCTION = 6
NO_SHOW_AUTH = 7
NO_TVDIR_ENTRY = 8
NO_UPD_AUTH = 9
ONLY_SHOW_ALLOWED = 10
SYSTEM_FAILURE = 11
UNKNOWN_FIELD_IN_DBA_SELLIST = 12
VIEW_NOT_FOUND = 13
MAINTENANCE_PROHIBITED = 14
OTHERS = 15.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
ENDFORM. " frm_get_data
*& Form frm_validations
Validating field values
FORM FRM_VALIDATIONS .
Material number should not be validated (10/17/2005)
CLEAR V_MATNR.
SELECT SINGLE MATNR
INTO V_MATNR
FROM MARA
WHERE MATNR IN S_MATNR.
IF SY-SUBRC <> 0.
MESSAGE E002 WITH 'Material not found'.
ENDIF.
CLEAR V_WERKS.
SELECT SINGLE WERKS
INTO V_WERKS
FROM ZTAB
WHERE WERKS IN S_WERKS.
IF SY-SUBRC <> 0.
MESSAGE E002 WITH 'Plant (WERKS) not found'(002).
ENDIF.
CLEAR V_KONOB.
SELECT SINGLE KONOB
INTO V_KONOB
FROM ZTAB
WHERE KONOB IN S_KONOB.
IF SY-SUBRC <> 0.
MESSAGE E002 WITH ' Product allocation object not found'(003).
ENDIF.
CLEAR V_WERKS.
SELECT SINGLE WERKS
INTO V_WERKS
FROM ZTAB
WHERE WERKS IN S_ZCPLT.
IF SY-SUBRC <> 0.
MESSAGE E002 WITH 'Plant (ZCPLT) not found'(004).
ENDIF.
ENDFORM. " frm_validations
reward points if it is usefull ...
Regarding Table maintanence generator -
How to extract the data from module pool program to Excel Sheet?
Hi Guys
I am having a requirement to transfer the data from Module pool screen to excel sheet directly.
This is an urgent requirement.
So plz reply me with some coding examples.
I will give points for that.This report extract excel file. From that concept you can easily extract data from module pool program also by coding in PAI of the screen.
REPORT ztest1 .
* this report demonstrates how to send some ABAP data to an
* EXCEL sheet using OLE automation.
include ole2incl.
* handles for OLE objects
data: h_excel type ole2_object, " Excel object
h_mapl type ole2_object, " list of workbooks
h_map type ole2_object, " workbook
h_zl type ole2_object, " cell
h_f type ole2_object, " font
h_c type ole2_object. " color
DATA: FILENAME LIKE RLGRAP-FILENAME.
tables: spfli.
data h type i.
* table of flights
data: it_spfli like spfli occurs 10 with header line.
*& Event START-OF-SELECTION
start-of-selection.
* read flights
select * from spfli into table it_spfli.
* display header
uline (61).
write: / sy-vline no-gap,
(3) 'Flg'(001) color col_heading no-gap, sy-vline no-gap,
(4) 'Nr'(002) color col_heading no-gap, sy-vline no-gap,
(20) 'Von'(003) color col_heading no-gap, sy-vline no-gap,
(20) 'Nach'(004) color col_heading no-gap, sy-vline no-gap,
(8) 'Zeit'(005) color col_heading no-gap, sy-vline no-gap.
uline /(61).
* display flights
loop at it_spfli.
write: / sy-vline no-gap,
it_spfli-carrid color col_key no-gap, sy-vline no-gap,
it_spfli-connid color col_normal no-gap, sy-vline no-gap,
it_spfli-cityfrom color col_normal no-gap, sy-vline no-gap,
it_spfli-cityto color col_normal no-gap, sy-vline no-gap,
it_spfli-deptime color col_normal no-gap, sy-vline no-gap.
endloop.
uline /(61).
* tell user what is going on
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
* PERCENTAGE = 0
text = text-007
exceptions
others = 1.
* start Excel
create object h_excel 'EXCEL.APPLICATION'.
* PERFORM ERR_HDL.
set property of h_excel 'Visible' = 1.
* CALL METHOD OF H_EXCEL 'FILESAVEAS' EXPORTING #1 = 'c:kis_excel.xls'
* PERFORM ERR_HDL.
* tell user what is going on
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
* PERCENTAGE = 0
text = text-008
exceptions
others = 1.
* get list of workbooks, initially empty
call method of h_excel 'Workbooks' = h_mapl.
perform err_hdl.
* add a new workbook
call method of h_mapl 'Add' = h_map.
perform err_hdl.
* tell user what is going on
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
* PERCENTAGE = 0
text = text-009
exceptions
others = 1.
* output column headings to active Excel sheet
perform fill_cell using 1 1 1 200 'Carrier id'(001).
perform fill_cell using 1 2 1 200 'Connection id'(002).
perform fill_cell using 1 3 1 200 'City from'(003).
perform fill_cell using 1 4 1 200 'City to'(004).
perform fill_cell using 1 5 1 200 'Dep. Time'(005).
loop at it_spfli.
* copy flights to active EXCEL sheet
h = sy-tabix + 1.
if it_spfli-carrid cs 'AA'.
perform fill_cell using h 1 0 000255000 it_spfli-carrid.
elseif it_spfli-carrid cs 'AZ'.
perform fill_cell using h 1 0 168000000 it_spfli-carrid.
elseif it_spfli-carrid cs 'JL'.
perform fill_cell using h 1 0 168168000 it_spfli-carrid.
elseif it_spfli-carrid cs 'LH'.
perform fill_cell using h 1 0 111111111 it_spfli-carrid.
elseif it_spfli-carrid cs 'SQ'.
perform fill_cell using h 1 0 100100100 it_spfli-carrid.
else.
perform fill_cell using h 1 0 000145000 it_spfli-carrid.
endif.
if it_spfli-connid lt 400.
perform fill_cell using h 2 0 255000255 it_spfli-connid.
elseif it_spfli-connid lt 800.
perform fill_cell using h 2 0 077099088 it_spfli-connid.
else.
perform fill_cell using h 2 0 246156138 it_spfli-connid.
endif.
if it_spfli-cityfrom cp 'S*'.
perform fill_cell using h 3 0 155155155 it_spfli-cityfrom.
elseif it_spfli-cityfrom cp 'N*'.
perform fill_cell using h 3 0 189111222 it_spfli-cityfrom.
else.
perform fill_cell using h 3 0 111230222 it_spfli-cityfrom.
endif.
if it_spfli-cityto cp 'S*'.
perform fill_cell using h 4 0 200200200 it_spfli-cityto.
elseif it_spfli-cityto cp 'N*'.
perform fill_cell using h 4 0 000111222 it_spfli-cityto.
else.
perform fill_cell using h 4 0 130230230 it_spfli-cityto.
endif.
if it_spfli-deptime lt '020000'.
perform fill_cell using h 5 0 145145145 it_spfli-deptime.
elseif it_spfli-deptime lt '120000' .
perform fill_cell using h 5 0 015215205 it_spfli-deptime.
elseif it_spfli-deptime lt '180000' .
perform fill_cell using h 5 0 000215205 it_spfli-deptime.
else.
perform fill_cell using h 5 0 115115105 it_spfli-deptime.
endif.
endloop.
* EXCEL FILENAME
CONCATENATE SY-REPID '_' SY-DATUM+6(2) '_' SY-DATUM+4(2) '_'
SY-DATUM(4) '_' SY-UZEIT '.XLS' INTO FILENAME.
CALL METHOD OF H_MAP 'SAVEAS' EXPORTING #1 = FILENAME.
free object h_excel.
perform err_hdl.
* FORM FILL_CELL *
* sets cell at coordinates i,j to value val boldtype bold *
form fill_cell using i j bold col val.
call method of h_excel 'Cells' = h_zl
exporting
#1 = i
#2 = j.
perform err_hdl.
set property of h_zl 'Value' = val .
perform err_hdl.
get property of h_zl 'Font' = h_f.
perform err_hdl.
set property of h_f 'Bold' = bold .
perform err_hdl.
set property of h_f 'Color' = col.
perform err_hdl.
endform. "FILL_CELL
*& Form ERR_HDL
* outputs OLE error if any *
* --> p1 text
* <-- p2 text
form err_hdl.
if sy-subrc <> 0.
write: / 'OLE-Automation Error:'(010), sy-subrc.
stop.
endif.
endform. " ERR_HDL -
How to call a "Z"module pool program in a "z"report
Hi Guys,
I have two reports .
1. Report : uploads a tab delimited " .Txt1" file and update the "z1" table
".TXT1" : File contains 4 fields
2. Module pool. :Uploads a a tab delimited " .Txt2" file and update another "z2" table
".TXT2" file contains the 4 fileds of ".TXT1" and also 2 extra fields.
I want to merge (call) the module pool program in the Report and perform the upload function using only one ".TXT" file.Please do guide me precisely .
*Report:*
REPORT zrswbgcs009 NO STANDARD PAGE HEADING MESSAGE-ID zwb
LINE-SIZE 185.
TABLES: zgcs_foc. "FOC Parts Table
*data count buffer
DATA: read_cnt(6) TYPE p, "Find read record
update_cnt(6) TYPE p, "OK record
error_cnt(6) TYPE p. "Error record
*file buffer(FOC)
DATA: BEGIN OF FOC_inrec OCCURS 0,
CUSTOMER(10), "Customer
PART_CODE(18), "Parts Code
REF_NO(35), "Ref No.
REF_DATE(10), "Ref Date
QTY(12), "Parts Qty
TEXT(100), "Remark
END OF FOC_inrec.
*file buffer
DATA: BEGIN OF inrec OCCURS 0,
CUSTOMER(10), "Customer
PART_CODE(18), "Parts Code
REF_NO(35), "Ref No.
REF_DATE(10), "Ref Date
QTY(12), "Parts Qty
PRICE(15), "Parts Price
WAERK(5), "Parts Currency
TEXT(100), "Remark
END OF inrec.
DATA : v_file LIKE rlgrap-filename.
DATA gt_zgcs_foc LIKE zgcs_foc OCCURS 0 WITH HEADER LINE.
DATA gs_zgcs_foc LIKE zgcs_foc.
*File name ACCEPT--------------------------------------------------
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
*Company code
PARAMETERS: p_comp LIKE zgcs_imei-company OBLIGATORY.
PARAMETERS: pcfile LIKE rlgrap-filename OBLIGATORY LOWER CASE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.
PARAMETERS: HQfile RADIOBUTTON GROUP b2.
SELECTION-SCREEN COMMENT 7(20) text-101 FOR FIELD HQfile.
SELECTION-SCREEN POSITION 31.
PARAMETERS: SUBfile RADIOBUTTON GROUP b2.
SELECTION-SCREEN COMMENT 37(20) text-102 FOR FIELD SUBfile.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK box WITH FRAME.
SELECTION-SCREEN: COMMENT /2(40) text-011, COMMENT 42(40) text-001,
ULINE,
COMMENT /2(40) text-012, COMMENT 42(40) text-002,
COMMENT /2(40) text-013, COMMENT 42(40) text-003,
COMMENT /2(40) text-014, COMMENT 42(40) text-004,
COMMENT /2(40) text-015, COMMENT 42(40) text-005,
COMMENT /2(40) text-016, COMMENT 42(40) text-006,
COMMENT /2(40) text-017, COMMENT 42(40) text-007,
COMMENT /2(40) text-018, COMMENT 42(40) text-008,
COMMENT /42(40) text-009.
SELECTION-SCREEN END OF BLOCK box.
* -- AT SELECTION SCREEN ON
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pcfile.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = space
def_path = 'C:\'
mask = ',*.txt,*.TXT.'
mode = 'O'
title = ' '
IMPORTING
filename = pcfile
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
*-----------------------------start--------------------------------
START-OF-SELECTION.
CLEAR: read_cnt, update_cnt, error_cnt.
REFRESH gt_zgcs_foc. CLEAR gs_zgcs_foc.
PERFORM file_upload_from_pc.
SORT gt_zgcs_foc.
DELETE ADJACENT DUPLICATES FROM gt_zgcs_foc
COMPARING COMPANY CUSTOMER PART_CODE REF_NO REF_DATE.
*// customer code check
DATA: LT_ZESTD LIKE ZESTD OCCURS 0 WITH HEADER LINE.
IF NOT gt_zgcs_foc[] IS INITIAL.
SELECT COMPANY CUSTOMER CURRENCY
INTO CORRESPONDING FIELDS OF TABLE LT_ZESTD
FROM ZESTD
FOR ALL ENTRIES IN gt_zgcs_foc
WHERE COMPANY = gt_zgcs_foc-COMPANY
AND CUSTOMER = gt_zgcs_foc-CUSTOMER.
ENDIF.
SORT LT_ZESTD BY COMPANY CUSTOMER.
*// part code check
DATA: LT_MARA LIKE MARA OCCURS 0 WITH HEADER LINE.
IF NOT gt_zgcs_foc[] IS INITIAL.
SELECT *
INTO TABLE LT_MARA
FROM MARA
FOR ALL ENTRIES IN gt_zgcs_foc
WHERE MATNR = gt_zgcs_foc-PART_CODE.
ENDIF.
SORT LT_MARA BY MATNR.
LOOP AT gt_zgcs_foc.
*// customer code check
READ TABLE LT_ZESTD WITH KEY
COMPANY = gt_zgcs_foc-COMPANY
CUSTOMER = gt_zgcs_foc-CUSTOMER.
IF SY-SUBRC <> 0.
WRITE:/'Invalid Customer code ',
gt_zgcs_foc-COMPANY, ' ',
gt_zgcs_foc-CUSTOMER.
STOP.
ENDIF.
*// part code check
READ TABLE LT_MARA WITH KEY MATNR = gt_zgcs_foc-PART_CODE
BINARY SEARCH.
IF SY-SUBRC <> 0.
WRITE:/ 'Invalid part code ', gt_zgcs_foc-PART_CODE.
STOP.
ENDIF.
*// REF_NO
TRANSLATE gt_zgcs_foc-REF_NO TO UPPER CASE.
SHIFT gt_zgcs_foc-REF_NO LEFT DELETING LEADING SPACE.
IF gt_zgcs_foc-REF_NO = SPACE.
WRITE:/'Ref No. is blank'.
STOP.
ENDIF.
*// REF_DATE
IF gt_zgcs_foc-REF_DATE = 0.
WRITE:/'Invalid Ref Date'.
STOP.
ENDIF.
*// QTY
* IF gt_zgcs_foc-QTY CO ' 0123456789'.
* ELSE.
* WRITE:/ gt_zgcs_foc-QTY, ' Invalid Qty value'.
* STOP.
* ENDIF.
ENDLOOP.
* Insert/Update table
* MODIFY zgcs_foc FROM TABLE gt_zgcs_foc.
INSERT zgcs_foc FROM TABLE gt_zgcs_foc.
IF sy-subrc EQ 0.
COMMIT WORK.
DESCRIBE TABLE gt_zgcs_foc LINES update_cnt.
error_cnt = read_cnt - update_cnt.
ELSE.
ROLLBACK WORK.
error_cnt = read_cnt - update_cnt.
ENDIF.
ULINE.
FORMAT COLOR 3.
WRITE: / 'Read count :', read_cnt.
WRITE: / 'Insert/Update count :', update_cnt.
WRITE: / 'Error count :', error_cnt.
FORMAT COLOR OFF.
*end-of-selection--------------------------------------------------
END-OF-SELECTION.
*& Form FILE_UPLOAD_FROM_PC
FORM file_upload_from_pc.
IF pcfile IS INITIAL.
WRITE: / 'SELECT UPLOAD FILE !'.
ELSE.
MOVE pcfile TO v_file.
* HQ file upload
IF HQfile EQ 'X'.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
filename = v_file
filetype = 'DAT'
TABLES
data_tab = FOC_inrec
EXCEPTIONS
conversion_error = 1
file_open_error = 2
file_read_error = 3
invalid_type = 4
no_batch = 5
unknown_error = 6
invalid_table_width = 7
gui_refuse_filetransfer = 8
customer_error = 9
OTHERS = 10.
IF sy-subrc <> 0.
WRITE: / 'FILE UPLOAD :', sy-subrc.
ENDIF.
LOOP AT FOC_inrec.
ADD 1 TO read_cnt.
call function 'CONVERSION_EXIT_ALPHA_INPUT'
exporting
input = FOC_inrec-customer
importing
output = FOC_inrec-customer.
call function 'CONVERSION_EXIT_ALPHA_INPUT'
exporting
input = FOC_inrec-part_code
importing
output = FOC_inrec-part_code.
MOVE-CORRESPONDING FOC_inrec TO gs_zgcs_foc.
MOVE p_comp TO gs_zgcs_foc-company.
MOVE gs_zgcs_foc-qty TO gs_zgcs_foc-balan.
MOVE sy-uname TO gs_zgcs_foc-ERNAM.
MOVE sy-datum TO gs_zgcs_foc-ERDAT.
MOVE sy-UZEIT TO gs_zgcs_foc-ERZET.
* Source(1:HQ,2:SUB,0:Etc)
MOVE '1' TO gs_zgcs_foc-source.
APPEND gs_zgcs_foc TO gt_zgcs_foc.
ENDLOOP.
* SGE file upload
ELSE.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
filename = v_file
filetype = 'DAT'
TABLES
data_tab = inrec
EXCEPTIONS
conversion_error = 1
file_open_error = 2
file_read_error = 3
invalid_type = 4
no_batch = 5
unknown_error = 6
invalid_table_width = 7
gui_refuse_filetransfer = 8
customer_error = 9
OTHERS = 10.
IF sy-subrc <> 0.
WRITE: / 'FILE UPLOAD :', sy-subrc.
ENDIF.
LOOP AT inrec.
ADD 1 TO read_cnt.
call function 'CONVERSION_EXIT_ALPHA_INPUT'
exporting
input = inrec-customer
importing
output = inrec-customer.
call function 'CONVERSION_EXIT_ALPHA_INPUT'
exporting
input = FOC_inrec-part_code
importing
output = FOC_inrec-part_code.
MOVE-CORRESPONDING inrec TO gs_zgcs_foc.
MOVE p_comp TO gs_zgcs_foc-company.
MOVE gs_zgcs_foc-qty TO gs_zgcs_foc-balan.
MOVE sy-uname TO gs_zgcs_foc-ERNAM.
MOVE sy-datum TO gs_zgcs_foc-ERDAT.
MOVE sy-UZEIT TO gs_zgcs_foc-ERZET.
* Source(1:HQ,2:SUB,0:Etc)
MOVE '2' TO gs_zgcs_foc-source.
APPEND gs_zgcs_foc TO gt_zgcs_foc.
ENDLOOP.
ENDIF.
ENDIF.
ENDFORM.
*MODULE POOL::*
*& Module Name : Warranty Bill
*& Sub-Module : W/B
*& Description : Parts Q'ty Adjust(Sales & Warranty)
*& Program Name : ZRSWBP004
*& History
*& Date Author Reason
*& 2007.05.08 Song, Ji-Hyun Initial Coding Req.by WH.Song
*& Logic Process
* - CONDITIONS
* Company, Customer, Material
* - PROCESS
* Display,Insert,Update data in the T/B ZESP04
REPORT zrswbp004 NO STANDARD PAGE HEADING
MESSAGE-ID 00
LINE-SIZE 250
LINE-COUNT 50.
* G L O B A L V A R I A B L E S *
TABLES : zesp04.
DATA : BEGIN OF itab_list OCCURS 0,
company LIKE zesp04-company,
customer LIKE zesp04-customer,
material LIKE zesp04-material,
adj_date LIKE zesp04-adj_date,
adjust LIKE zesp04-adjust,
reason LIKE zesp04-reason,
reason_code LIKE zesp04-reason_code,
doc_no LIKE zesp04-doc_no,
in_date LIKE zesp04-in_date,
create_id LIKE zesp04-create_id,
END OF itab_list.
DATA : itab_upload LIKE TABLE OF zesp04 WITH HEADER LINE.
DATA : s_mode(10).
DATA : table_name(10) VALUE 'ZESP04'.
DATA : tot_cnt TYPE i.
DATA : ref_flag(1).
* M A C R O D E F I N E *
DEFINE conversion_kunnr.
call function 'CONVERSION_EXIT_ALPHA_INPUT'
exporting
input = &1
importing
output = &1.
END-OF-DEFINITION.
DEFINE conversion_material.
call function 'CONVERSION_EXIT_MATN1_INPUT'
exporting
input = &1
importing
output = &1.
END-OF-DEFINITION.
* S E L E C T I O N S C R E E N *
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE title1.
PARAMETERS : company LIKE zesp04-company MEMORY ID buk MODIF ID v1
OBLIGATORY.
SELECT-OPTIONS : customer FOR zesp04-customer MEMORY ID kun
MODIF ID v1.
SELECT-OPTIONS : material FOR zesp04-material MEMORY ID mat
MODIF ID v1.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 3.
SELECTION-SCREEN COMMENT 3(12) text-002 MODIF ID v2.
PARAMETERS : up_flag AS CHECKBOX MODIF ID v2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 3(12) text-001 MODIF ID v2.
PARAMETERS : p_fname(300) LOWER CASE MODIF ID v2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE title2.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 3(53) text-003 MODIF ID v2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(10) text-004 MODIF ID v2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(12) text-005 MODIF ID v2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(12) text-006 MODIF ID v2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(15) text-007 MODIF ID v2.
PARAMETERS : df1 TYPE c RADIOBUTTON GROUP grp1.
SELECTION-SCREEN COMMENT 24(13) text-012 MODIF ID v2.
PARAMETERS : df2 TYPE c RADIOBUTTON GROUP grp1.
SELECTION-SCREEN COMMENT 41(11) text-013 MODIF ID v2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(14) text-008 MODIF ID v2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(11) text-009 MODIF ID v2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(14) text-010 MODIF ID v2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(10) text-011 MODIF ID v2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b2.
INCLUDE zrswbp004_pbo.
INCLUDE zrswbp004_pai.
INITIALIZATION.
title1 = ' Parts Quantity Adjustment '.
title2 = ' Text File Layout '.
* S T A R T O F S E L E C T I O N *
TOP-OF-PAGE.
PERFORM write_header.
TOP-OF-PAGE DURING LINE-SELECTION.
PERFORM write_header.
START-OF-SELECTION.
IF up_flag = 'X'.
PERFORM upload_data.
ELSE.
PERFORM select_data.
SET PF-STATUS 'PF01' EXCLUDING 'SAVE'.
PERFORM display_data.
ENDIF.
AT USER-COMMAND.
PERFORM user_command.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.
PERFORM get_filename.
*& Form SELECT_DATA
* Select Data for Display
FORM select_data.
SELECT * FROM (table_name)
INTO CORRESPONDING FIELDS OF TABLE itab_list
WHERE company = company
AND customer IN customer
AND material IN material.
CHECK sy-subrc <> 0.
WRITE: 'No data found with your option.'.
ENDFORM. " SELECT_DATA
*& Form DISPLAY_DATA
* Display Data following Condition
FORM display_data.
LOOP AT itab_list.
FORMAT COLOR 2 INTENSIFIED.
WRITE : / '|' NO-GAP.
WRITE : (07) itab_list-company CENTERED NO-GAP, '|' NO-GAP,
(10) itab_list-customer CENTERED NO-GAP, '|' NO-GAP,
(20) itab_list-material CENTERED NO-GAP, '|' NO-GAP,
(10) itab_list-adj_date CENTERED NO-GAP, '|' NO-GAP,
(15) itab_list-adjust RIGHT-JUSTIFIED NO-GAP, '|'
NO-GAP,
(55) itab_list-reason LEFT-JUSTIFIED NO-GAP, '|' NO-GAP,
(11) itab_list-reason_code CENTERED NO-GAP, '|' NO-GAP,
(10) itab_list-doc_no CENTERED NO-GAP, '|' NO-GAP,
(10) itab_list-in_date CENTERED NO-GAP, '|' NO-GAP,
(12) itab_list-create_id CENTERED NO-GAP, '|' NO-GAP.
FORMAT INTENSIFIED OFF.
HIDE itab_list.
ENDLOOP.
WRITE : / sy-uline(171).
ENDFORM. " DISPLAY_DATA
*& Form WRITE_HEADER
* Write Report Header
FORM write_header.
DATA : line(1024).
CLEAR line WITH '-'.
DESCRIBE TABLE itab_list LINES tot_cnt.
FORMAT INTENSIFIED ON.
WRITE : 15 'Parts Quantity Adjustment'.
SKIP.
WRITE : / 'Total Count : ', tot_cnt.
WRITE : /.
WRITE : (171) sy-uline.
WRITE : / '|' NO-GAP.
WRITE : (07) 'Company' CENTERED NO-GAP, '|' NO-GAP,
(10) 'Customer' CENTERED NO-GAP, '|' NO-GAP,
(20) 'Material' CENTERED NO-GAP, '|' NO-GAP,
(10) 'Adj. Date' CENTERED NO-GAP, '|' NO-GAP,
(15) 'Adjust' CENTERED NO-GAP, '|' NO-GAP,
(55) 'Reason' CENTERED NO-GAP, '|' NO-GAP,
(11) 'Reason Code' CENTERED NO-GAP, '|' NO-GAP,
(10) 'Doc No' CENTERED NO-GAP, '|' NO-GAP,
(10) 'IN DATE' CENTERED NO-GAP, '|' NO-GAP,
(12) 'CREATE ID' CENTERED NO-GAP, '|' NO-GAP.
WRITE : /(171) sy-uline.
FORMAT INTENSIFIED OFF.
ENDFORM. " WRITE_HEADER
*& Form UPLOAD_DATA
* Data Upload from File
FORM upload_data.
DATA : l_filename LIKE rlgrap-filename,
temp_dateformat TYPE dateformat.
IF df1 = 'X'.
temp_dateformat = 'YYYY.MM.DD'.
ELSE.
temp_dateformat = 'DD.MM.YYYY'.
ENDIF.
MOVE p_fname TO l_filename.
CHECK l_filename NE space.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
filename = l_filename
filetype = 'DAT'
dat_d_format = temp_dateformat
TABLES
data_tab = itab_list
EXCEPTIONS
conversion_error = 1
file_open_error = 2
file_read_error = 3
invalid_type = 4
no_batch = 5
unknown_error = 6
invalid_table_width = 7
gui_refuse_filetransfer = 8
customer_error = 9.
IF sy-subrc NE 0.
MESSAGE s000 WITH 'File upload is failed!'.
STOP.
ELSE.
CLEAR : itab_upload, itab_upload[].
LOOP AT itab_list.
MOVE-CORRESPONDING itab_list TO itab_upload.
conversion_kunnr itab_upload-customer.
conversion_material itab_upload-material.
itab_upload-mandt = sy-mandt.
itab_upload-in_date = sy-datum.
itab_upload-create_id = sy-uname.
*>>>>Insert by GSCHOI 2007.11.08
IF itab_list-adj_date+0(6) NE sy-datum+0(6).
MESSAGE i368 WITH 'Adjust month must same as current month!'.
ROLLBACK WORK.
STOP.
ENDIF.
*<<<<End
APPEND itab_upload.
INSERT INTO (table_name) VALUES itab_upload.
IF sy-subrc EQ 0.
CONTINUE.
ELSEIF sy-subrc EQ 4.
MESSAGE s368 WITH 'Duplicated Data Error!'.
ROLLBACK WORK.
STOP.
ELSE.
MESSAGE s368 WITH 'File Error!'.
ROLLBACK WORK.
STOP.
ENDIF.
ENDLOOP.
ENDIF.
IF sy-subrc EQ 0.
MESSAGE s368 WITH 'Uploaded Successfully!'.
ENDIF.
ENDFORM. " UPLOAD_DATA
*& Form USER_COMMAND
* User Command Execution in Screen 1000
FORM user_command.
MOVE-CORRESPONDING itab_list TO zesp04.
CASE sy-ucomm.
WHEN 'INSERT'.
PERFORM insert_item.
WHEN 'UPDATE'.
PERFORM update_item.
WHEN 'DISPLAY'.
PERFORM display_item.
WHEN 'REFRESH'.
PERFORM refresh_list.
ENDCASE.
IF ref_flag = 'Y'.
PERFORM refresh_list.
CLEAR ref_flag.
ENDIF.
ENDFORM. " USER_COMMAND
*& Form INSERT_ITEM
* When Clicking Insert Button
FORM insert_item.
CLEAR : s_mode.
CLEAR : zesp04.
s_mode = 'INSERT'.
CALL SCREEN '100'.
ENDFORM. " INSERT_ITEM
*& Form UPDATE_ITEM
* When Clicking Update Button
FORM update_item.
CLEAR : s_mode.
s_mode = 'UPDATE'.
CALL SCREEN '100'.
ENDFORM. " UPDATE_ITEM
*& Form DISPLAY_ITEM
* When Clicking Display Button
FORM display_item.
CLEAR : s_mode.
s_mode = 'DISPLAY'.
CALL SCREEN '100'.
ENDFORM. " DISPLAY_ITEM
*& Form REFRESH_LIST
* When Clicking Refresh Button or Returning Display Screen
FORM refresh_list.
CLEAR : itab_list, itab_list[].
PERFORM select_data.
sy-lsind = sy-lsind - 1.
PERFORM display_data.
ENDFORM. " REFRESH_LIST
*& Form GET_FILENAME
* Get Filename
FORM get_filename.
DATA: l_fname LIKE ibipparms-path .
DATA : p_name LIKE sy-repid.
p_name = sy-repid.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = p_name
dynpro_number = sy-dynnr
field_name = ''
IMPORTING
file_name = l_fname.
p_fname = l_fname.
ENDFORM. " GET_FILENAME
Edited by: Matt on Nov 24, 2008 11:24 AM - surrounded the ABAP with tagsHi,
Use SUBMIT statement in your first Report zrswbgcs009 at the end, to call the Modulepool program zrswbp004.
do a search in SDN you will get lot of threads on SUBMIT statement with selection screen.
SUBMIT... [VIA SELECTION-SCREEN]
[USING SELECTION-SET <var>]
[WITH <sel> <criterion>]
[WITH FREE SELECTIONS <freesel>]
[WITH SELECTION-TABLE <rspar>].
http://help.sap.com/saphelp_nw04/Helpdata/EN/9f/dba51a35c111d1829f0000e829fbfe/content.htm
Regards
Bala Krishna -
How to validate the field values in module pool program?
Hi Guys
I am working with module pool programming.
Here I want to validate the fields like below.
with out filling all the fields if I click SAVE option it has to show a message that all fields has to be filled. This can be done by checking all the fields individually.
I think it can be done through <b>LOOP AT SCREEN ......ENDLOOP</b>. sequence.
If it is possible, can anyone help me?You need to write the Module in between the CHAIN and ENDCHAIN statment in SE51
If you send a warning or error message from a module <mod> that you called using a FIELD statement as follows:
CHAIN.
FIELD: <f1>, <f 2>,...
MODULE <mod1>.
FIELD: <g1>, <g 2>,...
MODULE <mod2>.
ENDCHAIN.
all of the fields on the screen that belong to the processing chain (all of the fields listed in the field statements) are made ready for input again. Other fields are not ready for input. Whenever the MODULE statement appears within a processing chain, even if there is only one FIELD attached to it, all of the fields in the chain (not only the affected field) are made ready for input again, allowing the user to enter new values. If the fields in the processing chain are only checked once, the PAI processing continues directly after the FIELD statement, and the preceding modules are not called again.
Look at the DEMO program DEMO_DYNPRO_FIELD_CHAIN.
ashish -
Need help in module Pool programming.
Dear gurus
I'm stuck in a step of Module Pool program
Steps i used for enhancement in XK01.
1) i appended a structure in table LFA1 having two fields A and B.
2) then i went to IMG-> Logistic -> Business Partner-> Vendor -> Adoption of Customer's Own Master Data Fields -> Prepare Modification-Free Enhancement of Vendor Master Record ( Here i created my screen group Z1 without Function Code.
3) then i created below module pool program. of screen 9999 and in layout i added to fields to display A and B which i appended.
PROGRAM ZSNAK_XK01.
TABLES: lfa1.
module status_9999 output.
endmodule. " status_9999 OUTPUT
module user_command_9999 input.
endmodule.
4) After this i wen to IMG-> Logistic -> Business Partner-> Vendor -> Adoption of Customer's Own Master Data Fields ->
Business Add-In: Processing of Master Data Enhancements ( Here i created my implementation on method CHECK_ADD_ON_ACTIVE and added this code
if i_screen_group eq 'Z1'.
e_add_on_active = 'X'.
endif.
5) then i went to IMG-> Logistic -> Business Partner-> Vendor -> Adoption of Customer's Own Master Data Fields ->
Business Add-In: Customer Subscreens. and created my implementation on method GET_TAXI_SCREEN where i have written this code.
e_screen = '9999'.
e_program = 'ZSNAK_XK01'.
e_headerscreen_layout = ''.
After activation when i execute t-code XK01 i see my button there after INFORMATION BUTTON when i click on it i get following error.
Incorrect screen type: Screen is incorrectly defined or used.
The attribute screen type with the values 'Normal Screen' and
'Subscreen' determines the use of the screen. If a normal screen is used
as subscreen or vice versa, an error occurs.
The screen "ZSNAK_XK01" 9999 has, in this respect, an inappropriate screen
type.
Please guide me
Regards
Saad Nisar.I think you have defined the screen 9999 as normal screen. go to attributes tab of the screen and make it as "subscreen' (radio button) and activate
a®
Maybe you are looking for
-
How to Use another JSF page that I load by XMLHttpRequest?
Hi everyone, I'm a newbie of JSF and curisous about how to load page content seperately by AJAX. I saw example of Java Blue Print. It's load some data to use in page. What I want is to load another JSF page when click a link or button, (Like include
-
Your computer appears to be infected We believe that your computer is infected with malicious software. If you don't take action, you might not be able to connect to the Internet in the future. Learn how to remove this software.
-
Sending Non-Serializable Objects
I'm trying to make my server program send a non-serializable object to the client program. But I'm getting a 'java.io.NotSerializableException'. Is there any way to send a non-serializable object through an ObjectOutputStream, or through some other t
-
Sound volume changes when I type
The sound icon comes up when I type o, p, [, 9, 0, 0, - in any program and the sound toggles off and on. This started about a month ago. I've run virus check software and found nothing. Any advice?
-
Do I have to purchase the same app twice?!
I purchased Cut The Rope HD for my iPad a while ago. I'm planning to get an iPhone, I see that Cut The Rope HD is not compatible with iPhone. Does this mean that if I want Cut The Rope to work on my iPhone, I have to purchase it a second time?!