Dialog Programming......its urgent
Hi Guys
I have a requirement like this
i have to create a z* table similar to mara and i will take 5 fields of mara.
Suppose there is two sreens designed using SE51
1- one contain three buttons as CREATE,DISPLAY,CHANGE
2- second contain 5 text fields to enter the value and one save button.
now if i will click on the create button it will display the second screen where after entering the appropriate data if i will press save than it would save in the ztable.
again if i will press the display button it will go to the second screen and display the data in the text fields.
Any kind of suggestion is welcome.If anybody have face such kind of issue than he can share with me.
Thanks a lot to all
Mrutyun
Hi Mrityunjaya,
I think this would help.
On user command of the first screen..(PAI)
module user_command_1200 input.
case ok_code_1200.
when 'CREA'.
call screen 1201.
when 'DISP'.
call screen 1202.
when 'SAV1'.
insert zmara
endcase.
endmodule. " USER_COMMAND_1200 INPUT
Hope I understood the issue correct.
If it helps then good otherwise plz state the issue once again, focussing on what exactly is the issue.
Regards,
Suruchi
Similar Messages
-
hi all,
i want to stop the get pernr after some lines and want to run the remaining lines of the programm which is not in logical database.
ITS URGENT.....
Thx in advance
SunilHi,
Try the REJECT statement followed by the name of the logical database.
Example:
REJECT 'PERNR'.
Don't forget to assign points and close the thread when you are finished.
Best regards,
Guillaume -
!!!! Urgent !!!!!!!!Dialog Programming
In Dialog Programming i have 3 fields, if one field is validated if it is true the next two fields should become gray,so no one can enter the values in those two fields how can i do it.
HI,
Go thru this docu.
<b>Changing The Screen During Runtime</b>
The attributes are assigned to the screen field when the screen is designed in full screen editor. Such kind of assignment is static, which means that these attributes are fixed. But many times the need to change the attributes of the screen arises. And this has to be done during runtime.
Need To Change Screen
There can be a requirement in the transaction that, certain fields on the screen
Appear only in certain conditions.
Are in Change/display mode according to user inputs
Become mandatory subject to specific inputs.
Changes its format depending upon certain conditions.
Modifying the screen
At the runtime, attributes for each screen field is stored in system defined internal table, with header line, called as SCREEN TABLE. It contains name of field and its attributes. This tab le can be modified during the runtime i.e. through module pool program. Screen table has following fields:
Field Name Length Description
NAME 30 Name of screen field
GROUP1 3 Field belongs to field group1
GROUP2 3 Group 2
GROUP3 3 Group 3
GROUP4 3 Group 4
ACTIVE 1 Hide/Show
REQUIRED 1 Field input is mandatory
INPUT 1 Enable/Disable
OUTPUT 1 Field for display only
INTENSIFIED 1 Field is highlighted.
INVISIBLE 1 Field is suppressed.
LENGTH 1 Field output length is reduced
DISPLAY 3D 1 Field is displayed with 3-D Frame
VALUE_HELP 1 Field is displayed with Value help
E.g., SCREEN-ACTIVE = 0 has the same effect as the following statements.
SCREEN- INPUT = 0.
SCREEN-OUTPUT = 0.
SCREEN-INVISIBLE = 1.
The fields SCREEN-NAME and SCREEN-GROUP 1 through SCREEN-GROUP4 tell you which field and / or field group has the attributes.
You can assign up to 4 groups to a field.
You need to program screen modifications in module, which is processed during the event PROCESS BEFORE OUTPUT.
`SCREEN is an internal table and, in order to change the field values, LOOP statement has to be used so that the header-line can be populated with the new values, changing the earlier values, the SCREEN table consisted for the specific screen. Finally the changed record in the header-line is NOT APPENDED, but is MODIFIED to the SCREEN table. That is, we first use `LOOP AT SCREEN and then assign the values. And finally PRIOR TO ENDLOPP give `MODIFY SCREEN.
PROCESS BEFORE OUTPUT.
MODULE MODIFY_SCREEN OUTPUT.
MODULE MODIFY_SCREEN.
LOOP AT SCREEN.
IF SCREEN-NAME = SFLIGHT-CARRID.
SCREEN-INPUT = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
Thanks
Sunil -
Hi All, How we can handle a table control in bdc - in detail its urgent pls
Hi All, How we can handle a table control in bdc - in detail its urgent. Please send me the explanation in detail.
Thanks®ards.
Bharathi,
Create Table Control
Step 1 (Create new structure for table control)
Type is name of structure (ZTC_EKKO) and press create
Step 2 (Create Program)
Goto transaction SE80(Object Navigator) -> Repository Browser -> Program.
Enter your program name, please ensure that is begins with SAPMZ as this is a module pool (dialog program).
Press enter to create, and press yes!
Ensure that you create a top include, and press Enter.
Accept the name created for the top include.
Press Enter.
Press Save
Step 3 (Create TOP include)
Double click on the top include and enter following ABAP code:
Tables: ZTC_EKKO.
controls: tc100 type tableview using screen 100.
data: ok_code type sy-ucomm.
data: it_ekko type standard
table of ZTC_EKKO initial size 0,
wa_ekko type ZTC_EKKO.
data: ok_code type sy-ucomm.
Press Save and Activate
Step 4 (Create screen)
Right click the program to create a screen 100 for the dialog. Enter Short description, set screen type to Normal and enter 0 or blank into Next screen. Then move to Element List tab and enter the OK code as OK_CODE (i.e. the same as what you declared in the top include with data: ok_code type sy-ucomm).
Step 5 (Create table control)
Press the Layout button to bring up the screen painter editor.
Press table control button and drag it on to the screen, enter the name of table control created in TOP include (TC100). Now press the yellow button for attributes and set the table control as below options
Step 6 (Populate table control )
Press the orange button (Fields). On the next screen enter ZTC_EKKO and press the Get from Dict button. Select the fields you want (all) and press enter. Now drag them onto your Table Control.
Below is the result, there will been syntax errors if we check now! So Save and go back into the flow logic tab.
Step 7 (Create flow control )
Within the flow logic of screen 100 and create two modules, one to select the data from the database and the other to move the selected fields into the table control. Also insert the two loop statements to populate and retrieve the lines of the table control.
PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
module data_retrieval.
loop at it_ekko into wa_ekko with control TC100.
module populate_screen.
endloop.
PROCESS AFTER INPUT.
loop at it_ekko.
endloop.
MODULE USER_COMMAND_0100.
Double click the module data_retrieval to create and click yes to get past the popup. Ensure that a new include is created to hold all the PBO modules (default). Press enter.
Select 10 rows of data from the EKKO table and load into the internal table it_ekko. Go back to the flow logic to load this data into the Table Control.
check this one
REPORT ZCALL_TRANS_TAB1 .
TABLES: LFA1,LFBK,lfb1.
data: BEGIN OF it_vendor occurs 0,
LIFNR LIKE LFA1-LIFNR,
bukrs like lfb1-bukrs,
END OF it_vendor.
DATA: BEGIN OF IT_BANK occurs 0,
LIFNR LIKE LFA1-LIFNR,
BANKS LIKE LFBK-BANKS,
BANKL LIKE LFBK-BANKL,
BANKN LIKE LFBK-BANKN,
koinh like lfbk-koinh,
END OF IT_BANK.
data: it_bdcdata like bdcdata occurs 0 with header line.
data: it_messages like bdcmsgcoll occurs 0 with header line.
*selection screen.
selection-screen: begin of block b1 with frame.
parameters: p_file like rlgrap-filename default 'c:/vendor.txt'
obligatory.
parameters: p_file1 like rlgrap-filename default 'c:/xyz.txt'
obligatory.
selection-screen: end of block b1.
*at selection screen.
at selection-screen on value-request for p_file.
perform f4_help using p_file.
at selection-screen on value-request for p_file1.
perform f4_help1 using p_file1.
*start of selection
start-of-selection.
*******uploading file
perform upload_file using p_file P_FILE1.
******open session.
perform populate_data.
*& Form f4_help
form f4_help using p_p_file.
data: l_file type ibipparms-path.
call function 'F4_FILENAME'
importing
file_name = l_file.
p_file = l_file.
endform. " f4_help
*& Form POPULATE_DATA
form populate_data .
DATA: L_STRING TYPE STRing.
DATA: L_COUNTER(2) TYPE n.
loop at it_vendor.
perform bdc_dynpro using 'SAPMF02K' '0106'.
perform bdc_field using 'BDC_CURSOR'
'RF02K-D0130'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'RF02K-LIFNR'
it_vendor-lifnr.
perform bdc_field using 'RF02K-BUKRS'
it_vendor-bukrs.
perform bdc_field using 'RF02K-D0130'
'X'.
perform bdc_dynpro using 'SAPMF02K' '0130'.
perform bdc_field using 'BDC_CURSOR'
'LFBK-bankn(03)'.
perform bdc_field using 'BDC_OKCODE'
'=UPDA'.
*********bank details
CLEAR l_COUNTER.
LOOP AT IT_BANK WHERE LIFNR = IT_VENDOR-LIFNR.
l_COUNTER = l_COUNTER + 1.
clear l_string.
CONCATENATE 'lfbk-banks(' l_counter ')' into l_string.
perform bdc_field using l_string
it_bank-banks.
clear l_string.
CONCATENATE 'lfbk-bankl(' l_counter ')' into l_string.
perform bdc_field using l_string
it_bank-bankl.
clear l_string.
CONCATENATE 'lfbk-bankn(' l_counter ')' into l_string.
perform bdc_field using l_string
it_bank-bankn.
endloop.
******CALL TRANSACTION.
call transaction 'FK02' using it_bdcdata mode 'A'
messages into it_messages.
write:/ sy-subrc.
perform format_messages.
clear it_bdcdata.
refresh it_bdcdata.
endloop.
endform. " POPULATE_DATA
*& Form FORMAT_MESSAGES
form format_messages .
data: l_msg(100).
loop at it_messages.
call function 'FORMAT_MESSAGE'
exporting
id = it_messages-msgid
lang = sy-langu
no = it_messages-msgnr
v1 = it_messages-msgv1
v2 = it_messages-msgv2
v3 = it_messages-msgv3
v4 = it_messages-msgv4
importing
msg = l_msg
exceptions
not_found = 1
others = 2
write:/ l_msg.
endloop.
endform. " FORMAT_MESSAGES
*& Form bdc_dynpro
form bdc_dynpro using value(p_program)
value(p_screen).
it_bdcdata-program = p_program.
it_bdcdata-dynpro = p_screen.
it_bdcdata-dynbegin = 'X'.
append it_bdcdata.
clear it_bdcdata.
endform. " bdc_dynpro
*& Form bdc_field
form bdc_field using value(p_fnam)
value(p_fval).
it_bdcdata-fnam = p_fnam.
it_bdcdata-fval = p_fval.
append it_bdcdata.
clear it_bdcdata.
endform. " bdc_field
*& Form upload_file
form upload_file using p_p_file
p_p_file1.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
CODEPAGE = ' '
FILENAME = P_P_FILE
FILETYPE = 'DAT'
HEADLEN = ' '
LINE_EXIT = ' '
TRUNCLEN = ' '
USER_FORM = ' '
USER_PROG = ' '
DAT_D_FORMAT = ' '
IMPORTING
FILELENGTH =
TABLES
data_tab = IT_VENDOR
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
NO_AUTHORITY = 10
OTHERS = 11
IF sy-subrc <> 0.
MESSAGE I000(ZZ) WITH 'UNABLE TO UPLOAD'.
STOP.
ENDIF.
*******UPLOADING BANK DETAILS
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
CODEPAGE = ' '
FILENAME = P_P_FILE1
FILETYPE = 'DAT'
HEADLEN = ' '
LINE_EXIT = ' '
TRUNCLEN = ' '
USER_FORM = ' '
USER_PROG = ' '
DAT_D_FORMAT = ' '
IMPORTING
FILELENGTH =
TABLES
data_tab = IT_BANK
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
NO_AUTHORITY = 10
OTHERS = 11
IF sy-subrc <> 0.
MESSAGE I000(ZZ) WITH 'UNABLE TO UPLOAD'.
STOP.
ENDIF.
endform. " upload_file
*& Form f4_help1
-->P_P_FILE1 text
form f4_help1 using p_p_file1.
data:l_file1 type ibipparms-path.
CALL FUNCTION 'F4_FILENAME'
IMPORTING
FILE_NAME = l_file1.
p_file1 = l_file1.
endform. " f4_help1
http://sap-img.com/abap/bdc-example-using-table-control-in-bdc.htm
Regards,
Sankar -
What is difference between report programming and dialog programming?
hi,
what is difference between report programming and dialog programming? plz provide some example code
byeABAP programming
Basically reports are used to read database and represent the results in lists.
Reports are collections of processing blocks that the system calls depending on events.
We can use reports to evaluate data from database tables.
Reports are stand alone programs and controlled by events.
A report itself never creates events
steps in report:
Processing the selection screen
Reading the database
Evaluating the data and creating lists
Outputting a list.
1st u write simple logics, after that u can enhance the code as step by step.
http://venus.imp.mx/hilario/Libros/TeachYrslfAbap4/index.htm
http://help.sap.com/saphelp_47x200/helpdata/en/d1/802cfc454211d189710000e8322d00/frameset.htm
http://www.sapdev.co.uk/reporting/reportinghome.htm
Dialog Programming
Structure of a Dialog Program
A dialog program consists of the following basic components:
Screens (dynpros)
Each dialog in an SAP system is controlled by dynpros. A dynpro (DYnamic PROgram) consists of a screen and its flow logic and controls exactly one dialog step. The flow logic determines which processing takes place before displaying the screen (PBO-Process Before Output) and after receiving the entries the user made on the screen (PAI-Process After Input).
The screen layout fixed in the Screen Painter determines the positions of input/output fields, text fields, and graphical elements such as radio buttons and checkboxes. In addition, the Menu Painter allows to store menus, icons, pushbuttons, and function keys in one or more GUI statuses. Dynpros and GUI statuses refer to the ABAP/4 program that control the sequence of the dynpros and GUI statuses at runtime.
ABAP/4 module pool
Each dynpro refers to exactly one ABAP/4 dialog program. Such a dialog program is also called a module pool, since it consists of interactive modules. The flow logic of a dynpro contains calls of modules from the corresponding module pool. Interactive modules called at the PBO event are used to prepare the screen template in accordance to the context, for example by setting field contents or by suppressing fields from the display that are not needed. Interactive modules called at the PAI event are used to check the user input and to trigger appropriate dialog steps, such as the update task.
All dynpros to be called from within one transaction refer to a common module pool. The dynpros of a module pool are numbered. By default, the system stores for each dynpro the dynpro to be displayed next. This dynpro sequence or chain can be linear as well as cyclic. From within a dynpro chain, you can even call another dynpro chain and, after processing it, return to the original chain.
Check this link for basics.
http://sap.mis.cmich.edu/sap-abap/abap09/index.htm
Check this link for Dialog Programming/Table Control
http://www.planetsap.com/Tips_and_Tricks.htm#dialog
Check this SAP Help for Dialog Program doc.
http://help.sap.com/saphelp_nw04/helpdata/en/9f/db9cdc35c111d1829f0000e829fbfe/content.htm
Check this SAP Help link for Subscreens.
http://help.sap.com/saphelp_nw70/helpdata/en/9f/dbabfe35c111d1829f0000e829fbfe/content.htm
Check this link for subscreen demo program.
http://abapcode.blogspot.com/2007/05/demo-program-to-create-subscreen-in.html
Also check this link too.
http://abapcode.blogspot.com/2007/06/dialog-programming-faq.html
http://help.sap.com/saphelp_nw04/helpdata/en/9f/db9cdc35c111d1829f0000e829fbfe/frameset.htm
http://sap.mis.cmich.edu/sap-abap/abap09/sld004.htm
http://help.sap.com/saphelp_nw04/helpdata/en/52/670ba2439b11d1896f0000e8322d00/frameset.htm
http://help.sap.com/saphelp_nw04/helpdata/en/52/670c17439b11d1896f0000e8322d00/frameset.htm
http://help.sap.com/saphelp_nw04/helpdata/en/52/670c17439b11d1896f0000e8322d00/frameset.htm
http://help.sap.com/saphelp_nw04/helpdata/en/9f/db9ccf35c111d1829f0000e829fbfe/frameset.htm
http://abapprogramming.blogspot.com/ -
Making attributes of field dynamic in dialog program in layout editor.
hi,
to make a field required or possible or hidden, we define its attributes in attributes in layout editor.
is it possible to make attributes of fields that we define in layout editor dynamic ?
if functional people want to make some field non-mandatory or mandatory then they go in configuration, and do it. so does this mean that the attributes of the fields that we define in layout editor during dialog program can be made dynamic.
how is this possible ? because attributes are selected using dropdown, its not a code ?
please help in solving this mystery...Screen Modifications --
<u>demo_dynpro_modify_simple
demo_dynpro_modify_screen</u>
<b><u>Please dont forget to reward points</u></b>
Sudheer -
Hi All,Please send me abap-hr material .Its urgent please.
Hi All,Please send me abap-hr material .Its urgent please.
These are the FAQ's that might helps you
http://www.sap-img.com/human/hr-faq.htm
http://www.sapgenie.com/faq/hr.htm
http://www.sapgenie.com/sapfunc/index.htm
http://www.sap-img.com/abap/sample-hr-reports-allocate-petrol-allowance.htm
http://www.sap-img.com/hr021.htm
http://www.sap-img.com/human/hr-faq.htm
http://www.sap-img.com/human/finding-the-list-of-hr-module-tables.htm
additional info......
Download the ABAP e-book for HR in the below link under the section 'Free ABAP eBook Download'
http://www.sap-img.com
Also have a look at the following links-
http://www.sapbrain.com/TUTORIALS/FUNCTIONAL/HR_tutorial.html
http://www.sapdevelopment.co.uk/hr/hrhome.htm
http://planetsap.com/index.htm
http://www.atomhr.com/library_full.htm
http://www.sap-basis-abap.com/saphr.htm
http://help.sap.com/saphelp_erp2005/helpdata/en/60/d8d8c7576311d189270000e8322f96/frameset.htm
http://www.sapfriends.com/sapstuff.html
http://www.atomhr.com/know_preview/Reading_Payroll_Results_with_ABAP.htm
http://searchsap.techtarget.com/originalContent/0,289142,sid21_gci1030179,00.html?track=NL-142&ad=500911#Payroll
http://www.sap-press.com/product.cfm?account=&product=H967
http://www.sapdevelopment.co.uk/hr/payres_abap.htm
http://www.sapdevelopment.co.uk/hr/payres_tcode.htm
http://help.sap.com/printdocu/core/Print46c/en/Data/Index_en.htm
http://help.sap.com/printdocu/core/Print46c/en/data/pdf/PAPA/PAPA.pdf
http://help.sap.com/printdocu/core/Print46c/en/data/pdf/PAPD/PAPD.pdf
http://help.sap.com/printdocu/core/Print46c/en/data/pdf/PYINT/PYINT_BASICS.pdf
http://www.atomhr.com/training/Technical_Topics_in_HR.htm
http://www.planetsap.com/hr_abap_main_page.htm
you can see some Standard Program examples in this one..
http://www.sapdevelopment.co.uk/programs/programshr.htm
http://searchsap.techtarget.com/originalContent/0,289142,sid21_gci1030179,00.html?Offer=SAlgwn12604#Certification -
Hi All requirement on Purchase Order.Its Urgent
Hi All,
Pls provide me the soure code for the following requirement ASAP. Its urgent.
Program: Z_PO_PRINT_MAIL
Transaction: ZPOP
Purchase order number: (should be a parameter not a select option) (Code the lookup using search help MEKK)
Radio button for: 1. Print Preview
2. Print
3. E-mail
Additional parameters based on above selection:
1. No additional parameters needed
2. Printer (code the F4 to search printers)(default users default printer)
3. E-mail address, cc (should also have same validations as e-mail address)
Description:
On pressing enter, use the Purchase order number to look up vendor number and name and display either to the right or below the purchase order number.
Vendor Number: EKPO-LIFNR
Vendor Name: LFA1-NAME1
1. Print Preview: Use function ME_DISPLAY_PURCHASE_DOCUMENT with 2 parameters only:
I_EBELN = PO Number
I_PREVIEW = X
2. Print: For this we have to do a BDC.Use transaction ME9F. Enter the purchase order number, blank out the rest. Select the first message, hit Message details. Enter a new message via Edit>new Entries. For new entries, you will need to enter NEU for Output type with Medium 1 (Print output). Hit enter. Select the message and click on further data. Set dispatch time to 4. Green arrow back. Select the message and click on Communication method. Enter the Logical destination as the printer, select Print Immediately and Release after output. Green arrow back and save.
3. E-mail: Use the following function modules:
ECP_PO_OTF_CREATE
CONVERT_OTF_2_PDF
SO_NEW_DOCUMENT_ATT_SEND_API1Hi,
You can explore following link for more details;
http://www.sap-basis-abap.com/sapmo017.htm
http://www.erpgenie.com/sap/sapfunc/purchasing.htm
Bye,
Muralidhara -
Maximize Purchase Order -- Error -- Its Urgent!!!!
Hai To All,
Iam customizing Purchase Order Form. There iam adding one button near cancel button. If i maximum purchase order form i got the following error and SAP Application is closed.
The instruction at "0x77fcb333" referenced memory at "0x000c0101". The memeory could not be "written".
Click on OK to terminate the program
Click on CANCEL to debug the program
OK CANCEL
Can anyone help me........... Its Urgent
Regards,
Anitha
Edited by: ani nazir on Mar 27, 2008 11:43 AMHello Petr,
S where i change place also its showing error.
The following code i used to place the button
oItem = PO_Frm.Items.Add("rm", SAPbouiCOM.BoFormItemTypes.it_BUTTON)
oItem.Left = PO_Frm.Items.Item("2").Left + 75 '150 '
oItem.Width = PO_Frm.Items.Item("2").Width '65 'PO_Frm.Items.Item("51").Width
oItem.Height = PO_Frm.Items.Item("2").Height '20 '
oItem.Top = PO_Frm.Items.Item("2").Top + 10 '505 '
oItem.Visible = True
oItem.Enabled = True
Dim d As SAPbouiCOM.Button = oItem.Specific
d.Caption = "RateMaster"
Regards,
Anitha -
How to create Background job for Dialog program
Hi Experts,
I have copied Standard tcode to Z-tcode (CS12 tcode).
Now my requirement is to create background job for this program (but program is not a 'E' type its 'I').
How we can schedule Dialog program to Background.
Pls suggest me.
Regards
SKHi do as below :
Reefer below :
Bakcground Job Creation
You will have to submit your report using Submit statement ,
then inside the submitted report write open_job.
Regards,
Uma -
Field value not updated in Dialog Programming
Hi experts
My problem is when i change the field value in dialog programming, the text value is not updated, its showing the same value what exist in database.
I have done coding as follows, what i need to change in coding, Pls give me the suggestion.
PROCESS BEFORE OUTPUT.
MODULE STATUS_1200.
PROCESS AFTER INPUT.
CHAIN .
FIELD : zrecpt-zrno.
MODULE vali_zrno ON CHAIN-INPUT.
ENDCHAIN.
module header_data10.
MODULE STATUS_1200 OUTPUT.
SET PF-STATUS 'ZRECT'.
SET TITLEBAR 'ZRECT'.
ENDMODULE.
MODULE vali_zrno INPUT.
if zrecpt-zrno is not initial.
select single * from zrecpt
where zrno = zrecpt-zrno.
endif.
ENDMODULE.
MODULE header_data10 INPUT.
CLEAR : it_zrecpt.
REFRESH : it_zrecpt.
MOVE-CORRESPONDING zrecpt TO it_zrecpt.
APPEND it_zrecpt.
ENDMODULE.
Thanks in advance.
Regards
RajaramHello...
IN PAI,,
You were not updating into any database..
you were just appending to an internal table...
now either move the internal table values to the database ...
or you can simply move from the values entered...[text boxes ]
pls chk..... -
Calling dialog program from report
Hi All,
I need to call dialog program from report and do not want the initial screen to be shown and execute the dialog program. can this be possible, if yes please let me know this to do this, when I tried using leave to transaction its showing the initial dialog screen.
Thanks in advane
jogHi,
Create a Z trnsaction Code for the Transaction you want to call.
Go to SE93. Give Transaction name and click on create.
Select start object as 'Transaction with Variant' or 'Transaction with Parameter'.
On second screen give transaction name and check the <b>check box for 'Skip initial screen'</b>.
Find out the initial screen for the transaction and mention it.
Now, you can call this Z transaction in your program. -
Table control...? its urgent
Hi friends,
Can anyone gve me example table control program..
My requirement is I have to display blank table control.....but when user enetrs value.. and submits it should be added to the inetrnal table in my program please help......
Also if he wants to see the records in table control..which he enetered earlier the table should be displayed as populated..
Please help its urgent....points will be rewarded....Seet he following ex:
Created table control using wizard.
*& Module pool ZTEST_TBLCTRL
PROGRAM ZTEST_TBLCTRL.
***&SPWIZARD: DATA DECLARATION FOR TABLECONTROL 'TC1'
*&SPWIZARD: DEFINITION OF DDIC-TABLE
TABLES: ZFG_SRNO, ZFIH0004.
*&SPWIZARD: TYPE FOR THE DATA OF TABLECONTROL 'TC1'
*TYPES: BEGIN OF T_TC1,
ZSRNO LIKE ZFG_SRNO-ZSRNO,
SCRNAME LIKE ZFIH0004-SCRNAME,
END OF T_TC1.
*TYPES: BEGIN OF T_TC1.
STRUCTURE ZFG_SRNO.
END OF T_TC1.
*&SPWIZARD: INTERNAL TABLE FOR TABLECONTROL 'TC1'
*DATA: G_TC1_ITAB TYPE T_TC1 OCCURS 0 WITH HEADER LINE,
G_TC1_WA TYPE T_TC1. "work area
DATA: G_TC1_ITAB LIKE ZFG_SRNO OCCURS 0 WITH HEADER LINE,
G_TC1_WA LIKE G_TC1_ITAB. "work area
DATA: G_TC1_COPIED. "copy flag
*&SPWIZARD: DECLARATION OF TABLECONTROL 'TC1' ITSELF
CONTROLS: TC1 TYPE TABLEVIEW USING SCREEN 0100.
*&SPWIZARD: LINES OF TABLECONTROL 'TC1'
DATA: G_TC1_LINES LIKE SY-LOOPC.
DATA: OK_CODE LIKE SY-UCOMM,
S_CODE LIKE SY-UCOMM,
MARK.
DATA: T1(10).
*&SPWIZARD: OUTPUT MODULE FOR TC 'TC1'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: COPY DDIC-TABLE TO ITAB
MODULE TC1_INIT OUTPUT.
IF G_TC1_COPIED IS INITIAL.
*&SPWIZARD: COPY DDIC-TABLE 'ZFG_SRNO'
*&SPWIZARD: INTO INTERNAL TABLE 'g_TC1_itab'
SELECT * FROM ZFG_SRNO
INTO CORRESPONDING FIELDS
OF TABLE G_TC1_ITAB.
G_TC1_COPIED = 'X'.
REFRESH CONTROL 'TC1' FROM SCREEN '0100'.
IF T1 <> SPACE.
G_TC1_ITAB-ZSRNO = T1.
CLEAR T1.
APPEND G_TC1_ITAB.
REFRESH CONTROL 'TC1' FROM SCREEN '0100'.
ENDIF.
*TC1-TOP_LINE = 1.
ENDIF.
ENDMODULE.
*&SPWIZARD: OUTPUT MODULE FOR TC 'TC1'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: MOVE ITAB TO DYNPRO
MODULE TC1_MOVE OUTPUT.
MOVE-CORRESPONDING G_TC1_WA TO ZFG_SRNO.
if sy-subrc ne 0.
*append G_TC1_WA to G_TC1_ITAB.
*endif.
READ TABLE G_TC1_ITAB INDEX TC1-CURRENT_LINE.
IF SY-SUBRC = 0.
G_TC1_WA-ZSRNO = G_TC1_ITAB-ZSRNO.
ENDIF.
MOVE-CORRESPONDING G_TC1_ITAB TO ZFG_SRNO.
REFRESH CONTROL 'TC1' FROM SCREEN '8001'.
tc1-lines = G_TC1_LINES + 100.
ENDMODULE.
*&SPWIZARD: OUTPUT MODULE FOR TC 'TC1'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GET LINES OF TABLECONTROL
MODULE TC1_GET_LINES OUTPUT.
G_TC1_LINES = SY-LOOPC.
ENDMODULE.
*&SPWIZARD: INPUT MODULE FOR TC 'TC1'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: MODIFY TABLE
MODULE TC1_MODIFY INPUT.
*break-point.
MOVE-CORRESPONDING ZFG_SRNO TO G_TC1_ITAB.
MODIFY G_TC1_ITAB INDEX TC1-CURRENT_LINE.
G_TC1_COPIED = 'X'.
REFRESH CONTROL 'TC1' FROM SCREEN '8001'.
MOVE-CORRESPONDING ZFG_SRNO TO G_TC1_WA.
MODIFY G_TC1_ITAB
FROM G_TC1_WA
INDEX TC1-CURRENT_LINE.
G_TC1_COPIED = 'X'.
if sy-subrc ne 0.
append G_TC1_WA to G_TC1_ITAB.
endif.
*modify G_TC1_ITAB INDEX TC1-CURRENT_LINE.
ENDMODULE.
*&SPWIZARD: INPUT MODULE FOR TC 'TC1'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: PROCESS USER COMMAND
MODULE TC1_USER_COMMAND INPUT.
OK_CODE = SY-UCOMM.
PERFORM USER_OK_TC USING 'TC1'
'G_TC1_ITAB'
'FLAG'
CHANGING OK_CODE.
SY-UCOMM = OK_CODE.
ENDMODULE.
INCLUDE TABLECONTROL_FORMS *
*& Form USER_OK_TC *
FORM USER_OK_TC USING P_TC_NAME TYPE DYNFNAM
P_TABLE_NAME
P_MARK_NAME
CHANGING P_OK LIKE SY-UCOMM.
&SPWIZARD: BEGIN OF LOCAL DATA----
DATA: L_OK TYPE SY-UCOMM,
L_OFFSET TYPE I.
&SPWIZARD: END OF LOCAL DATA----
*&SPWIZARD: Table control specific operations *
*&SPWIZARD: evaluate TC name and operations *
SEARCH P_OK FOR P_TC_NAME.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
L_OFFSET = STRLEN( P_TC_NAME ) + 1.
L_OK = P_OK+L_OFFSET.
*&SPWIZARD: execute general and TC specific operations *
CASE L_OK.
WHEN 'INSR'. "insert row
PERFORM FCODE_INSERT_ROW USING P_TC_NAME
P_TABLE_NAME.
CLEAR P_OK.
WHEN 'DELE'. "delete row
PERFORM FCODE_DELETE_ROW USING P_TC_NAME
P_TABLE_NAME
P_MARK_NAME.
CLEAR P_OK.
WHEN 'P--' OR "top of list
'P-' OR "previous page
'P+' OR "next page
'P++'. "bottom of list
PERFORM COMPUTE_SCROLLING_IN_TC USING P_TC_NAME
L_OK.
CLEAR P_OK.
WHEN 'L--'. "total left
PERFORM FCODE_TOTAL_LEFT USING P_TC_NAME.
WHEN 'L-'. "column left
PERFORM FCODE_COLUMN_LEFT USING P_TC_NAME.
WHEN 'R+'. "column right
PERFORM FCODE_COLUMN_RIGHT USING P_TC_NAME.
WHEN 'R++'. "total right
PERFORM FCODE_TOTAL_RIGHT USING P_TC_NAME.
WHEN 'MARK'. "mark all filled lines
PERFORM FCODE_TC_MARK_LINES USING P_TC_NAME
P_TABLE_NAME
P_MARK_NAME .
CLEAR P_OK.
WHEN 'DMRK'. "demark all filled lines
PERFORM FCODE_TC_DEMARK_LINES USING P_TC_NAME
P_TABLE_NAME
P_MARK_NAME .
CLEAR P_OK.
WHEN 'SASCEND' OR
'SDESCEND'. "sort column
PERFORM FCODE_SORT_TC USING P_TC_NAME
l_ok.
ENDCASE.
ENDFORM. " USER_OK_TC
*& Form FCODE_INSERT_ROW *
FORM fcode_insert_row
USING P_TC_NAME TYPE DYNFNAM
P_TABLE_NAME .
&SPWIZARD: BEGIN OF LOCAL DATA----
DATA L_LINES_NAME LIKE FELD-NAME.
DATA L_SELLINE LIKE SY-STEPL.
DATA L_LASTLINE TYPE I.
DATA L_LINE TYPE I.
DATA L_TABLE_NAME LIKE FELD-NAME.
FIELD-SYMBOLS <TC> TYPE CXTAB_CONTROL.
FIELD-SYMBOLS <TABLE> TYPE STANDARD TABLE.
FIELD-SYMBOLS <LINES> TYPE I.
&SPWIZARD: END OF LOCAL DATA----
ASSIGN (P_TC_NAME) TO <TC>.
*&SPWIZARD: get the table, which belongs to the tc *
CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
ASSIGN (L_TABLE_NAME) TO <TABLE>. "not headerline
*&SPWIZARD: get looplines of TableControl *
CONCATENATE 'G_' P_TC_NAME '_LINES' INTO L_LINES_NAME.
ASSIGN (L_LINES_NAME) TO <LINES>.
*&SPWIZARD: get current line *
GET CURSOR LINE L_SELLINE.
IF SY-SUBRC <> 0. " append line to table
L_SELLINE = <TC>-LINES + 1.
*&SPWIZARD: set top line *
IF L_SELLINE > <LINES>.
<TC>-TOP_LINE = L_SELLINE - <LINES> + 1 .
ELSE.
<TC>-TOP_LINE = 1.
ENDIF.
ELSE. " insert line into table
L_SELLINE = <TC>-TOP_LINE + L_SELLINE - 1.
L_LASTLINE = <TC>-TOP_LINE + <LINES> - 1.
ENDIF.
*&SPWIZARD: set new cursor line *
L_LINE = L_SELLINE - <TC>-TOP_LINE + 1.
*&SPWIZARD: insert initial line *
INSERT INITIAL LINE INTO <TABLE> INDEX L_SELLINE.
<TC>-LINES = <TC>-LINES + 1.
*&SPWIZARD: set cursor *
SET CURSOR LINE L_LINE.
ENDFORM. " FCODE_INSERT_ROW
*& Form FCODE_DELETE_ROW *
FORM fcode_delete_row
USING P_TC_NAME TYPE DYNFNAM
P_TABLE_NAME
P_MARK_NAME .
&SPWIZARD: BEGIN OF LOCAL DATA----
DATA L_TABLE_NAME LIKE FELD-NAME.
FIELD-SYMBOLS <TC> TYPE cxtab_control.
FIELD-SYMBOLS <TABLE> TYPE STANDARD TABLE.
FIELD-SYMBOLS <WA>.
FIELD-SYMBOLS <MARK_FIELD>.
&SPWIZARD: END OF LOCAL DATA----
ASSIGN (P_TC_NAME) TO <TC>.
*&SPWIZARD: get the table, which belongs to the tc *
CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
ASSIGN (L_TABLE_NAME) TO <TABLE>. "not headerline
*&SPWIZARD: delete marked lines *
DESCRIBE TABLE <TABLE> LINES <TC>-LINES.
LOOP AT <TABLE> ASSIGNING <WA>.
*&SPWIZARD: access to the component 'FLAG' of the table header *
ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>.
IF <MARK_FIELD> = 'X'.
DELETE <TABLE> INDEX SYST-TABIX.
IF SY-SUBRC = 0.
<TC>-LINES = <TC>-LINES - 1.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " FCODE_DELETE_ROW
*& Form COMPUTE_SCROLLING_IN_TC
text
-->P_TC_NAME name of tablecontrol
-->P_OK ok code
FORM COMPUTE_SCROLLING_IN_TC USING P_TC_NAME
P_OK.
&SPWIZARD: BEGIN OF LOCAL DATA----
DATA L_TC_NEW_TOP_LINE TYPE I.
DATA L_TC_NAME LIKE FELD-NAME.
DATA L_TC_LINES_NAME LIKE FELD-NAME.
DATA L_TC_FIELD_NAME LIKE FELD-NAME.
FIELD-SYMBOLS <TC> TYPE cxtab_control.
FIELD-SYMBOLS <LINES> TYPE I.
&SPWIZARD: END OF LOCAL DATA----
ASSIGN (P_TC_NAME) TO <TC>.
*&SPWIZARD: get looplines of TableControl *
CONCATENATE 'G_' P_TC_NAME '_LINES' INTO L_TC_LINES_NAME.
ASSIGN (L_TC_LINES_NAME) TO <LINES>.
*&SPWIZARD: is no line filled? *
IF <TC>-LINES = 0.
*&SPWIZARD: yes, ... *
L_TC_NEW_TOP_LINE = 1.
ELSE.
*&SPWIZARD: no, ... *
CALL FUNCTION 'SCROLLING_IN_TABLE'
EXPORTING
ENTRY_ACT = <TC>-TOP_LINE
ENTRY_FROM = 1
ENTRY_TO = <TC>-LINES
LAST_PAGE_FULL = 'X'
LOOPS = <LINES>
OK_CODE = P_OK
OVERLAPPING = 'X'
IMPORTING
ENTRY_NEW = L_TC_NEW_TOP_LINE
EXCEPTIONS
NO_ENTRY_OR_PAGE_ACT = 01
NO_ENTRY_TO = 02
NO_OK_CODE_OR_PAGE_GO = 03
OTHERS = 0.
ENDIF.
*&SPWIZARD: get actual tc and column *
GET CURSOR FIELD L_TC_FIELD_NAME
AREA L_TC_NAME.
IF SYST-SUBRC = 0.
IF L_TC_NAME = P_TC_NAME.
*&SPWIZARD: et actual column *
SET CURSOR FIELD L_TC_FIELD_NAME LINE 1.
ENDIF.
ENDIF.
*&SPWIZARD: set the new top line *
<TC>-TOP_LINE = L_TC_NEW_TOP_LINE.
ENDFORM. " COMPUTE_SCROLLING_IN_TC
*& Form FCODE_TC_MARK_LINES
marks all TableControl lines
-->P_TC_NAME name of tablecontrol
FORM FCODE_TC_MARK_LINES USING P_TC_NAME
P_TABLE_NAME
P_MARK_NAME.
&SPWIZARD: EGIN OF LOCAL DATA----
DATA L_TABLE_NAME LIKE FELD-NAME.
FIELD-SYMBOLS <TC> TYPE cxtab_control.
FIELD-SYMBOLS <TABLE> TYPE STANDARD TABLE.
FIELD-SYMBOLS <WA>.
FIELD-SYMBOLS <MARK_FIELD>.
&SPWIZARD: END OF LOCAL DATA----
ASSIGN (P_TC_NAME) TO <TC>.
*&SPWIZARD: get the table, which belongs to the tc *
CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
ASSIGN (L_TABLE_NAME) TO <TABLE>. "not headerline
*&SPWIZARD: mark all filled lines *
LOOP AT <TABLE> ASSIGNING <WA>.
*&SPWIZARD: access to the component 'FLAG' of the table header *
ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>.
<MARK_FIELD> = 'X'.
ENDLOOP.
ENDFORM. "fcode_tc_mark_lines
*& Form FCODE_TC_DEMARK_LINES
demarks all TableControl lines
-->P_TC_NAME name of tablecontrol
FORM FCODE_TC_DEMARK_LINES USING P_TC_NAME
P_TABLE_NAME
P_MARK_NAME .
&SPWIZARD: BEGIN OF LOCAL DATA----
DATA L_TABLE_NAME LIKE FELD-NAME.
FIELD-SYMBOLS <TC> TYPE cxtab_control.
FIELD-SYMBOLS <TABLE> TYPE STANDARD TABLE.
FIELD-SYMBOLS <WA>.
FIELD-SYMBOLS <MARK_FIELD>.
&SPWIZARD: END OF LOCAL DATA----
ASSIGN (P_TC_NAME) TO <TC>.
*&SPWIZARD: get the table, which belongs to the tc *
CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
ASSIGN (L_TABLE_NAME) TO <TABLE>. "not headerline
*&SPWIZARD: demark all filled lines *
LOOP AT <TABLE> ASSIGNING <WA>.
*&SPWIZARD: access to the component 'FLAG' of the table header *
ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>.
<MARK_FIELD> = SPACE.
ENDLOOP.
ENDFORM. "fcode_tc_mark_lines
*& Module D20XX_INIT OUTPUT
text
MODULE D20XX_INIT OUTPUT.
*if screen-name = 'ZSRNO'.
SCREEN-INPUT = 0.
SCREEN-COLOR = 0.
MODIFY SCREEN.
endif.
ENDMODULE. " D20XX_INIT OUTPUT
*& Module STATUS_0100 OUTPUT
text
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'xxxxxxxx'.
SET TITLEBAR 'xxx'.
*CLEAR R1_REF.
DO 30 TIMES.
APPEND G_TC1_ITAB.
ENDDO.
DESCRIBE TABLE G_TC1_ITAB LINES TC1-LINES.
ENDMODULE. " STATUS_0100 OUTPUT
*& Module TAB1_INIT OUTPUT
text
MODULE TAB1_INIT OUTPUT.
ENDMODULE. " TAB1_INIT OUTPUT
*& Module USER_COMMAND_0100 INPUT
text
MODULE USER_COMMAND_0100 INPUT.
ENDMODULE. " USER_COMMAND_0100 INPUT
*& Module MESSAGE INPUT
text
MODULE MESSAGE INPUT.
OK_CODE = SY-UCOMM.
S_CODE = OK_CODE.
CLEAR OK_CODE.
if S_CODE = 'DELE'.
loop at G_TC1_ITAB.
if G_TC1_ITAB-scrname = 'X'.
delete g_tc1_itab.
endif.
endloop.
ELSEIF S_CODE = 'SAVE'.
G_TC1_WA-ZSRNO = T1.
MOVE-CORRESPONDING G_TC1_WA TO ZFG_SRNO.
REFRESH CONTROL 'TC1' FROM SCREEN '0100'.
ENDIF.
ENDMODULE. " MESSAGE INPUT
*& Module DELETE_RECORD INPUT
text
MODULE DELETE_RECORD INPUT.
IF MARK = 'X' AND S_CODE = 'DELE'.
DELETE TABLE G_TC1_ITAB FROM ZFG_SRNO.
DESCRIBE TABLE G_TC1_ITAB LINES TC1-LINES.
ENDIF.
ENDMODULE. " DELETE_RECORD INPUT
*********************Screen modules*********************
PROCESS BEFORE OUTPUT.
*&SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'TC1'
MODULE TC1_INIT.
*&SPWIZARD: MODULE TC1_CHANGE_TC_ATTR.
*&SPWIZARD: MODULE TC1_CHANGE_COL_ATTR.
LOOP AT G_TC1_ITAB
INTO G_TC1_WA
WITH CONTROL TC1
CURSOR TC1-CURRENT_LINE.
*&SPWIZARD: MODULE TC1_CHANGE_FIELD_ATTR
MODULE TC1_MOVE.
MODULE TAB1_INIT.
MODULE TC1_GET_LINES.
ENDLOOP.
MODULE D20XX_INIT.
MODULE STATUS_0100.
PROCESS AFTER INPUT.
*&SPWIZARD: PAI FLOW LOGIC FOR TABLECONTROL 'TC1'
*BREAK POINT.
LOOP AT G_TC1_ITAB.
CHAIN.
FIELD ZFG_SRNO-ZSRNO.
MODULE TC1_MODIFY ON CHAIN-REQUEST.
MODULE TC1_MODIFY.
ENDCHAIN.
MODULE MESSAGE .
MODULE DELETE_RECORD.
ENDLOOP.
MODULE TC1_USER_COMMAND.
*&SPWIZARD: MODULE TC1_CHANGE_TC_ATTR.
*&SPWIZARD: MODULE TC1_CHANGE_COL_ATTR.
MODULE USER_COMMAND_0100. -
Material on dialog programming
Hi al,
does anybody have good material on dialog programming.
SPECIALLY ON TABLE CONTROL
THANKSHi
Go thru this docu
TRANSACTIONS
TABLE OF CONTENTS
TABLE OF CONTENTS 2
GENERAL INTRODUCTION TO TRANSACTION 5
Logical Unit of Work (LUW) 5
DYNPRO concept 6
SCREEN PAINTER 7
Using Screen Painter 7
Creating a new Screen 7
Designing of Screen 8
Selecting Screen Fields 9
Attributes of Screen Elements 9
Field List 10
Screen Flow Logic 10
MODULE POOL PROGRAMMING 12
Creation of Module Pool Program 12
Communication between Dynpro and Module Program 12
CREATION OF A COMPLETE TRANSACTION 12
Steps involved to create a complete transaction 12
Handling Function Code 13
THE FIELD CHECKS 14
Automatic Field Checks 14
About at Exit Command 15
In module pool program. 15
Flow Logic Validations 16
Module assign. 16
Module Pool Program Validations 17
DYNAMICALLY CALLING THE SCREENS 19
About Displaying Next Screen 19
Set Screen 20
Call Screen 20
Leave to screen 21
SUBSCREENS 22
TABLE CONTROLS 23
Features of Table Controls 23
Declaring of Table Control in the Module Pool Program 24
Designing Table Control on Screen 24
Passing data to Table Control 24
STEP LOOPS 27
Types of Step Loops 27
Switching To List Mode 28
Returning back from LIST mode 28
Process on HELP-REQUEST event 29
Value Request 30
THE SCREEN DISPLAYED IS POP-UP SCREEN AND CODE FOR THE FLOW LOGIC AND MODULE IS WRITTEN BELOW: 32
Need To Change Screen 34
Modifying the screen 34
Field Name Length Description 34
MODULE MODIFY_SCREEN. 35
LOOP AT SCREEN. 35
ENDMODULE.WORKING WITH MATCHCODE OBJECTS 35
WORKING WITH MATCHCODE OBJECTS 36
Creating Matchcode object 36
Creating Matchcode ids. 37
Using Matchcode 38
Creating Lock Objects 39
Activation of Lock Object 40
GENERAL INTRODUCTION TO TRANSACTION
Transaction, in R/3 system is an operation that lets the user make necessary changes to the database. The entire R/3 system is nothing but set of business transaction. The data transfer from old system to SAP R/3 database, or modifying data, or deleting data, which is not required, is done through transaction.
For SAP system, Transaction is nothing but sequence of steps called as dialog steps and for user it is sequence of screens that appears one after the other depending upon the option he selects. The special transaction monitor called the SAP dispatcher handles the sequence of steps that takes place in any transaction. The main task of transaction is to update database table. The database table is not updated until a transaction is completed. All changes can be rolled back if the transaction has not finished.
The transaction contains two steps which are as following:
Interactive phase: In this step, user enters the data, which needs to be inserted or deleted or modified on to the screen. There can be single screen or multiple screens depending upon the transaction. So this step can consist of single step or multiple steps. In this phase you prepare database record.
Update phase: This phase processes the database record and updates the database table. Actual updating of database table takes place in this phase.
All the transactions are associated with transaction code. And all these codes are stored in a table TSTC.
Logical Unit of Work (LUW)
The R/3 system is multi user system and many users access the same information at the same time, which is mainly DATA. Consider the case where one user is modifying a record, and second user is trying to delete the same record. If the second user is successful in deleting the record then the first user will face problem for modifying the record that is already deleted. The avoid such situation, R/3 system has provided Logical Unit of Work, which is defined as a locking mechanism to protect transaction integrity. Of course, there are other measures, which ensures data integrity like check table i.e. foreign key relationship. Within SAP system there are three types of transaction and may be distinguished as:
Database transaction known as LUW. It can be defined as a period in which operation requested must be performed as a unit, i.e. all or nothing operation. At the end of LUW, either of the database changes are committed or rolled back.
Update transaction or SAP LUW. One SAP LUW can have several databases LUW. So a set of a database is either committed or rolled back. The special ABAP/4 command COMMIT WORK, marks the end of a SAP LUW.
ABAP/4 transaction. Is made up of a set of related task combined under one transaction code. ABAP/4 transactions are for programming environment, in which ABAP/4 transaction functions like one complete object containing screens, menus and transaction codes.
R/3 system has provided in built locking mechanism, which defines the Logical Unit of Work. Also user can set his own locking mechanism. The LUW starts when a lock entry in the system table is created, and it ends when the lock is released.
To provide the user the facility to communicate with the table in order to modify or delete or insert data, R/3 has provided tool called SCREEN PAINTER. This tool allows you to design screen, process screen through program and update the database table. SAP has provided one and only one way to update the database table, i.e. transaction. Though you can update database table by using open SQL statement through program, SAP usually doesnt recommend this kind of updating. Many standard transactions are available to update standard table but if the need arises, the developer should be able to develop new transaction, which allows the updating of database tables. This can be achieved by using various components of screen painter.
Following are the few concepts and steps for creating entire new transaction.
DYNPRO concept
A dynpro refers to the screen + flow logic. With screen painter you can develop screen and flow logic. The relationship between screen, flow logic, and program can be shown as follows:
Dynpro, as figure indicates consist of screen and flow logic and places exactly one call to module pool program. A transaction consists of many screens and for each screen flow logic is attached. When the transaction is executed, the screen places a call to flow logic and flow logic in turn places a call to module pool program.
A module program is usual ABAP/4 program that consist of modules and data declaration.
ABAP/4 is an event driven language. In module pool program too, events get triggered and these events are handled in flow logic. Flow logic editor is subset of ABAP/4 editor. The system automatically displays the two important events for the flow logic.
Screen is the important component of dynpro and can be created, designed by screen painter.
Screen Painter
A screen painter can be started by
Development workbench  Screen Painter
Or
SE51 transaction code.
Using Screen Painter
The process of creating a dynpro includes the creation and definition of all the needed screen components.
The steps involved in creating the dynpro are as follows:
Create screen and attributes by using screen attribute screen.
Select and place the needed fields within the screen by using dict/program fields.
Establish the field attributes to which the screen belongs by using field list.
Define the flow logic respect to the transaction to which it belongs by using flow logic.
Creating a new Screen
Steps involved are as follows:
Enter the name of program and number of the screen
Click on Create
On screen attribute screen enter short description
Enter screen type. Normally, you select NORMAL option for usual R/3 screen. Other options available are SUBSCREEN & MODAL DIALOG BOX. Modal dialog box is used to establish independent and interactive dialog box while subscreen is screen within screen.
Next attribute to be passed is NEXT SCREEN. Here you need to specify the next screen number, which must be processed after the current one.
Designing of Screen
Screen can be designed by using FULL SCREEN EDITOR. You can go to full screen editor.
From screen attribute screen
By pressing full screen editor pushbutton
Or
From initial screen of screen painter.
There are two modes available with full screen editor.
Graphical mode. The graphical mode works similarly to typical window application.
Alphanumeric mode (rarely used).
Elements of screen
Text Standard text or field labels.
Entry - display field.
Radiobutton All radiobutton must be associated with one group.
Checkbox Normally used for YES/NO operations.
Pushbutton Used for activating particular function.
Boxes grouping together many screen elements.
Subscreens This is a screen area in which you can display another screen.
Table controls This area of screen is similar to table but should be treated as a loop.
Status - Display output fields containing icon.
All these elements are on the control bar of full screen editor and can be placed on the screen work area by clicking and placing them wherever needed.
Selecting Screen Fields
Screen field can be either dictionary objects or program fields. Steps involved in the placing of fields on the screen are as follows:
Click the pushbutton Dict/program fields on the full screen editor
Or
Goto  dict/prog fields.
Enter table name.
Click Get from dictionary.
Select fields.
Click copy pushbutton.
Position the cursor where you want those fields to be placed.
To adjust various screen elements, you can use drag and drop facility for screen elements.
Attributes of Screen Elements
The entire element of a screen has some attributes, which determines their behavior.
General These attributes are directly managed by the screen painter like name of the element, or text of element or column width and various things associated with the screen.
Dictionary These attributes are applicable to fields, which are from dictionary. Various components of dictionary can be attached to this element like search help, foreign key.
Program.
Display Behavior of the element with respect to their display feature.
Attribute dialog box can be displayed by
Clicking on the ATTRIBUTE push button on the application tool bar.
Double clicking on the element.
Field List
This list displays a list of all screen elements together with their screen attributes. One important element of Field list is OKCODE. Any pushbutton is associated with function code as in menu item in menu painter. When the user clicks the pushbutton this code is stored in OKCODE. This OKCODE is created by system without a name and is not visible on the screen. In ABAP/4 this field is work field and is nothing but an area wherein system stores the variable and is the last field of the field list and is invisible, hence user needs to give the name OKCODE. It is not mandatory to give the name OKCODE; developer can give any name to this field.
Screen Flow Logic
You can go to this screen either by
Initial screen of Screen painter  Flow logic
Or
From Screen attribute screen  Flow logic
When transaction is executed, the screen is displayed, user enters few fields, selects few functions. Later the screen is processed and processing of screen is done by flow logic. The events that are associated with screen are as follows:
Process before Output (PBO)
Process after input (PAI)
Process on value request (POV)
Process on help request (POH)
The system automatically displays two very important events or modules in flow logic i.e. PAI and PBO
PBO event
This event is triggered before the screen is displayed. The processing of screen before the display of screen is done in this event. For example, filling in default values in the screen fields.
PAI event
This event is responsible for processing of screen after the user enters the data and clicks the pushbutton. The processing of screen can include displaying another screen, or just displaying list or quitting the transaction itself and many more things. Usually it is displaying another screen. These operations can be carried out in the PAI event. OKCODE plays an important role in this operation.
POV event
Process on value request is triggered when the user clicks F4 key. You can handle this event when the user presses F4 key by writing code for the same in module pool program. Normally when the user presses F4, list of possible values is displayed. The standard list produced by system is adequate for applications you develop yourself. However, you can also have the option of setting up your own documentation and lists of possible values that are more detailed.
POH event
Normally when the user places the cursor on the field and presses F1 function key, the system displays its own Help for that particular field. You can add your own functionality to the Help button by writing code for the same in the POH event.
Module Pool Programming
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.
A complete example for transaction is shown below:
If you have a screen like the one below:
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.
But this doesnt happen always. If you have many pushbuttons on the screen like the one in the following case:
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.
Subscreens
A subscreen is a screen within screen. Consider the following case.
If user clicks on FIRST pushbutton, you want to display details of MARA table and if user clicks on the SECOND pushbutton, you want to display details of MARD table. You can do this by calling two different screens. But the information will be displayed on the next screen. Displaying data on the same screen is possible by using SUBSCREENS.
Step to create a subscreen are as follows:
Create a subscreen area on MAIN screen and name it.
Create a separate screen of subscreen type.
Arrange the fields on this screen so that they fit in subscreen area exactly. Only when it is larger, the part of the screen that fits in the main area will be visible.
Write code for calling subscreen in flow logic.
To call subscreen, from your flow logic, you need to include the statement both in PAI and PBO.
Syntax
PBO.
Call subscreen <area> including <prg name> <screen no>.
PAI.
Call subscreen <area>.
Area - is the name of the area on main screen.
Prg. Name - is the name of the module pool program.
Screen number - is subscreen screen number.
Some of the donts with subscreen are:
GUI status cannot be set to the subscreen
OKCODE is not applicable to the subscreen.
Subscreen cannot call another screen.
It cannot contain AT EXIT-COMMAND.
You can call multiple subscreen in the same area (at any given point of time, only one subscreen can be called in the subscreen area) and is done dynamically during runtime by using variable screen number.
Table Controls
A table can be created in transaction. These tables when designed on the screen are called as SCREEN TABLES. These screen tables are of two types viz.
Table controls
Step loops
Though these are tables when code is written to handle them, the tables are treated as loops.
Features of Table Controls
Data is displayed in the form of table when many records match the criteria.
Table control gives user the feeling of an actual table.
You can scroll through the table vertically and horizontally.
You can select rows and columns
Resize the width of a column
You can have separator lines in between rows and columns
Automatic resizing of the table when the user resizes the window.
In general table control includes all the features of an actual table and user gets the feeling that he is actually working with table. You can update information in table control and it can be updated in the database table by writing code for it.
Steps associated for creating complete screen table are as follows:
Declaration of table control in module pool program.
Designing of table control on the screen.
Passing data to table in flow logic.
Declaring of Table Control in the Module Pool Program
Syntax
Controls TCI type Tableview using screen <screen no.>
When you use table control in a screen you must declare the structure in module pool program. Important fields of tableview are as follows:
Lines number of displayable rows in a table.
Top_line the row of table where the screen displays start.
Current_line The row currently being processed inside a loop.
When you process the table control in flow logic depending upon where you want to start display of rows, you need to use these variables.
Designing Table Control on Screen
To design table control on the screen, you need to click on Table in control bar and place it on the screen. You can adjust the length and width of table control.
Name the table control. (Here you need to use same name which you have used for declaration of table control in module pool program)
From dictionary object, select table fields and place them in the table control.
Passing data to Table Control
As already mentioned, table controls are tables but are treated like loops. Usually transfer of data from program to screen is automatic. But in case of table control, transfer of data is not automatic. You need to explicitly transfer the data to table control. ABAP/4 provides loop statement, which is associated with flow logic to transfer the data. Because table control is treated like a loop, data from where it is transferred should be a loop. You cannot transfer the data by only select statement; you need to put the data into internal table. ABAP/4 provides the LOOP statement, which is associated with the flow logic and allows you to loop through the table control and internal tables. In between LOOP-ENDLOOP, you can use most of the flow logic keywords like field values. Module etc.
You need to code a LOOP statement in both PBO and PAI event of the screen. With LOOP statement, you can transfer the data from program to table control and vice versa. That is, if user updates the value in the table control, you can update database table with its value. And this can be done in PAI event. So even if you are not updating database table through the table control, you need to put the LOOP statement in the PAI event also.
Syntax
PBO.
LOOP AT <internal table> with control <table control name> cursor <scroll variable>
PAI.
Loop at itab.
Proper usage of Table Control is as follows:
In flow logic.
PBO.
LOOP AT ITAB WITH CONTROL TC1 CURSOR TC1-TOP_LINE.
MODULE ASSIGN.
ENDLOOP.
PAI.
LOOP AT ITAB.
ENDLOOP.
Considering, we have following fields in table control and the screen looks like this:
In module pool program
CONTROL TC1 Type tableview using screen 200.
Module assign.
Sflight carrid = itab carrid.
Sflight - connid= itab - connid.
Sflight - fldate= itab fldate.
Endmodule.
The transfer of the data from program to table control takes place in steps and these steps are as follows:
With LOOP AT statement the first row is picked up and placed in the header of the internal table.
Whatever statements you have in between LOOP-ENDLOOP are executed. In this case, you have Module statement. In Module statement, value of internal table is assigned to table control field.
The row in internal table is transferred to the first line of the table control as stated in the LOOP AT statement.
The system encounters the ENDLOOP statement and Control is passed to the next line of the internal table.
In the same way, all the records of the internal table are passed to the table control.
STEP LOOPS
Step Loops are type of screen table as already mentioned. Step loops are repeated blocks of field in a screen. Each block contains one or more fields and these blocks are repeated. Step loops arent like actual table. You can scroll vertically but not horizontally. Three steps are associated with creation of step loops:
Creation of step loops on screen, which includes declaring fields on the screen and then defining the step, loops for these fields.
Passing data to the step loop is exactly similar to the passing of data to table controls.
In step loop, you dont need to define the step loop as such in the module pool program but the cursor needs to be defined in the program.
Types of Step Loops
Static Static Step Loop (SSL) have fixed size that cannot be changed during the runtime. If user resizes the window, the size of the static step loop is not changed.
Dynamic Dynamic Step Loop (DSL) is variable in size. When the user resizes the window, the system increases or decreases the number of the step loop blocks.
You can have only one dynamic step loop and can have as many static loops in your transaction.
Programming with the Static and dynamic step loop is exactly same. For the system or for the user it doesnt make any difference whether it is static or dynamic step loop. Only attribute, which you fix during designing of the step loop, is type attribute for step loop F for fixed i.e static and V for variable i.e. dynamic.
Writing code for Step Loop in the flow logic.
PBO.
Loop at itab cursor cl.
Module set.
Endloop.
PAI.
Loop at itab.
Endloop.
Empty loop is must for both table control and step loop
LOOP AT statement for step loops and Table controls is similar. Loop At statement transfers the data to screen table. You need to have the Module to assign the values for the screen table.
In module pool program you need to define the cursor.
Date: CL TYPE i.
Cursor parameter tells which line of step loop display should start.
Module Set in module pool program assigns the values to step loop fields, which is similar to table controls.
Branching to List Processing
Switching To List Mode
You can display a list within a transaction.
You can produce a list from module pool program by using the command
Leave to List-Processing.
This statement switches the system from dialog mode to list mode. And from this point onwards until you return to dialog mode, you can use all the normal report statement like write, select or any other event.
Returning back from LIST mode
You can return back to dialog mode by clicking the BACK button.
You can have your GUI status and write code for the same. You can include the command LEAVE LIST-PROCESSING. When the system reaches this command, it leaves the list mode and returns to the dialog mode.
Help & Value Request
In any transaction, When the user presses F1 or ? on a field, System provides the help facility for that particular field. In dialog program, when F1 is pressed, help provided by R3 system is sourced from data element documentation. If this documentation is not present for that particular field or if user needs to display additional information for that particular field, then user defined help can be provided through PROCESS ON HELP REQUEST.
In ABVP/4 help can be provided to the user by:
Data element documentation: The F1 help can be enhanced, by adding an additional text for the data element in ABAP/4 dictionary.
It can be done with the help of following steps:
Place cursor on the screen field,
GOTO  DOCUMENTATION  DATA ELEMENT DOCUMENT
You can now extend the existing help.
USING THE PROCESS ON HELP-REQUEST.
If you dont have this event in a program, then the documentation of the field in the ABAP/4 dictionary is taken into consideration. If this event exits in the program then it is executed.
Process on HELP-REQUEST event
This event is triggered when user presses F1 on a screen field. You need to handle this event in flow-logic by specifying the fields and attaching the module to it.
Syntax
PROCESS ON HELP REQUEST.
FIELD SFLIGHT-CARRID MODULE HELP-FOR-CARRID.
In module pool program
MODULE HELP.
Write : `This is field is from sflight table
Write : / It is of four Character.
ENDMODULE.
When the user presses F1 on this particular field, then this message will be displayed on the screen.
Value Request
Whenever the user presses F4 on the screen field list of possible values, particular fields are displayed. If the standard value-help is inadequate or if you want to display additional fields or with different combination of fields, developer can program this in PROCESS ON VALUE-REQUEST event in the flow-logic and subsequent module in the module pool program. When the user presses F4, list of possible values are displayed either from matchcode objects or check table or help view or domain. Each one of them is explained briefly.
Matchcode objects: Are aggregated dictionary objects and detailed procedure to create these objects is explained in the later part of the material.
Check Table: If a check table is assigned to the table field and if the user presses F4 for that particular field, then all the key fields are displayed.
Domain Values: The values defined in the domain are displayed. These values are set in domain when the domain is created in the dictionary.
Help views: In cases where the check table is not sufficient, you can create a help view with this check table, which gives additional information like explanatory text for the fields of the check table.
PROCESS ON VALUE_REQUEST.
Each time the user presses F4 on the screen field, following algorithm is called internally.
When the user presses F4 on flight number, the following screen is displayed.
The screen displayed is pop-up screen and code for the flow logic and module is written below:
Flow-logic code -
Its urgent pls help me .
how can i call a portal from webdynpro application
my requirment is
i was created webdynpro application.
in that i was created one view . in that i was created one button (go).
if i click that button i want move some other portal.
how can i acchive pls help me.
its urgent.
pls send any example programe
Message was edited by:
madipadiga nagaraju
Message was edited by:
madipadiga nagarajuhi,
there is no direct tcode for going to webdynpro component/interfaces in ecc 6.0.
but u have se58 in ecc 5.0,as webdynpro convertor.u give ur program name and click web dynpro convertor button then it takes u to se80 .but this wda(webdynpro abap) component comes as in application tree hierarchy .
i can say in wda component refers a class .if u select webdynpro component/interface,it ask u to create a class or interface.
after that it automatically generate component controller(it is also a class),
interface view and windows.all these 3 are classes.for every window one interface view will be created.ie.. window is internal visible where as interface view is external visible.
u create view and embed these views in windows.by going to the window layout,right click on the window name and click embed view.u can enbed as many view as u wish.in order to navigate from one view to other view ,click "create navigation" by right clicking the view plugs.
by default windows and view have inbound plugs.this is literally a event of that class.
if u want to navigate from view1 to view2 ,create outbound plug for view1,the click outbound plug of view1 and right click the click create navigation the select inbound plug of view2.
then create a application .this is simillar of creating an object.
click on this object and test .this will open in browser.
for deploying u have use "sap webdynpro iview". -
hai friends
my reequirement is extracting data from 4.6 c for purchase order me21 into flat file format.(tab delimitter) .currently we are working on ecc 6 version.i had already written bdc code for me21 in ecc6 version for uploading data.
please help me its urgent.
give any sample code for writing extract programHi Friend,
if it help full to u please give me max point.i am sending code.
REPORT ZMXX0295 LINE-SIZE 132 NO STANDARD PAGE HEADING.
+
Comparisom of PIR or Contract price with latest PO price
+
This program was created to compare PIR prices or contract prices
with the latest PO price.
It reads the source lists for the specified materials to determine
the PIR or contract prices. Afterwards it reads the PO history to
get the purchase order prices.
The material to be processed can either be selected from the data
base (material master) or via an PC upload file.
The output can be sorted in different variants.
+
+
*eject
Definition of database tables --------------------------------------+
TABLES: EINA, "Purchasing Info Record: General Data
EINE, "PIR: Purchasing Organization Data
EIPA, "Order Price History, Info Record
EKAB, "Contract Release Documentation
*EKKO, "Contract / PO header
EKKO, "Contract / PO header
*EKPO, "Contract / PO item
EKPO, "Contract / PO item
EORD, "Source list
TCURC. "Currency codes
*eject
Definition of internal tables / data -------------------------------+
DATA: BEGIN OF MAT_PRICE OCCURS 0,
VRTYP LIKE EORD-VRTYP, "Document type
INFNR LIKE EINE-INFNR, "Info record / Contract
MATNR LIKE EINA-MATNR, "Material
WERKS LIKE EINE-WERKS, "Plant
EKORG LIKE EINE-EKORG, "Purch. organization
LIFNR LIKE EINA-LIFNR, "Vendor
FLIFN LIKE EORD-FLIFN, "Fix Vendor
IRPRS LIKE EINE-NETPR, "Info record price
PEINH LIKE EINE-PEINH, "Price unit
EBELN LIKE EIPA-EBELN, "PO header
EBELP LIKE EIPA-EBELP, "PO item
BEDAT LIKE EIPA-BEDAT, "PO date
POPRS LIKE EIPA-LPREI, "PO price
LPEIN LIKE EIPA-LPEIN, "Price unit
MENGE LIKE EKPO-MENGE, "PO quantity
MEINS LIKE EKPO-MEINS, "PO unit of measure
END OF MAT_PRICE.
DATA: BEGIN OF MAT_SEL OCCURS 0,
MATNR LIKE EINA-MATNR,
END OF MAT_SEL.
DATA: T_EORD LIKE EORD OCCURS 0 WITH HEADER LINE.
DATA: CURSORFIELD(15), "Fieldname of Cusor pos
INV_DATE LIKE SY-DATUM, "Inverted date
W_EFFPR LIKE EINE-EFFPR. "Hiwi price
DATA: W_FILE TYPE STRING. "JAN29NOV05
CONSTANTS: C_0(01) TYPE C VALUE '0',
C_F(01) TYPE C VALUE 'F',
C_I(01) TYPE C VALUE 'I',
C_K(01) TYPE C VALUE 'K',
C_X(01) TYPE C VALUE 'X'.
CONSTANTS: C_ASC(10) TYPE C VALUE 'ASC'. "JAN29NOV05
*eject
Definition of selection screen -------------------------------------+
SELECTION-SCREEN BEGIN OF BLOCK B01 WITH FRAME TITLE TEXT-B01.
PARAMETERS: P_DBASE RADIOBUTTON GROUP R01. "Read mat's via select.
SELECT-OPTIONS: S_MATNR FOR EINA-MATNR. "Material
SELECTION-SCREEN ULINE.
PARAMETERS: P_XFILE RADIOBUTTON GROUP R01, "Read mat's via PC file
P_DATEI LIKE RLGRAP-FILENAME. "PC file with MATNR's
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: S_MATKL FOR EINA-MATKL, "Material group
S_WERKS FOR EINE-WERKS, "Plant
S_EKORG FOR EINE-EKORG, "Purch. organization
S_BEDAT FOR EIPA-BEDAT. "PO price date
PARAMETERS: P_WAERS LIKE EINE-WAERS "Output currency
OBLIGATORY.
SELECTION-SCREEN END OF BLOCK B01.
*eject
Process after input ------------------------------------------------+
AT SELECTION-SCREEN ON P_WAERS.
PERFORM READ_TCURC.
AT SELECTION-SCREEN ON P_DATEI.
IF NOT P_XFILE IS INITIAL
AND P_DATEI IS INITIAL.
MESSAGE E999(ZZ) WITH 'Please sepcify PC file name'.
ENDIF.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_DATEI.
PERFORM CALL_WS_EXPLORER.
*eject
Start of main program ----------------------------------------------+
START-OF-SELECTION.
IF NOT P_XFILE IS INITIAL.
PERFORM UPLOAD_MATERIAL_SELECTION. "Read mat's from file
IF MAT_SEL[] IS INITIAL.
MESSAGE E999(ZZ) WITH
'No records were found in file'(E01) P_DATEI(40).
ELSE.
PERFORM GET_MATERIAL_SELECTION. "Process upload file
ENDIF.
ENDIF.
PERFORM SOME_REWORK.
PERFORM PROCESS_MATERIALS. "Process mat. selection
END-OF-SELECTION.
End of Main program ------------------------------------------------+
SET PF-STATUS 'LIST'.
SORT MAT_PRICE BY MATNR WERKS EKORG POPRS.
PERFORM AUSGABE.
IF SY-SUBRC EQ 0.
MESSAGE I999(ZZ) WITH TEXT-002.
MESSAGE S999(ZZ) WITH TEXT-001
'Material/Plant/PurchOrg/PO Price'(003).
ENDIF.
*eject
User commands - interactive reporting ...
AT USER-COMMAND.
IF SY-UCOMM EQ 'ORDR'.
PERFORM DISPLAY_ORDER.
ENDIF.
AT LINE-SELECTION.
PERFORM CHANGE_SORT_SEQUENCE.
*eject
+
TOP-OF-PAGE
+
TOP-OF-PAGE.
PERFORM LIST_HEADER.
*eject
+
TOP-OF-PAGE during line-selection.
+
TOP-OF-PAGE DURING LINE-SELECTION.
PERFORM LIST_HEADER.
*eject
Form CALL_WS_EXPLORER
FORM CALL_WS_EXPLORER.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_FILENAME = '*.txt,' "JAN29NOV05
DEF_FILENAME = '*.txt' "JAN29NOV05
DEF_PATH = 'D:\'
MASK =
Block Changed From Here JAN29NOV05
'Text files,.txt,Data files,.dat,All files,.,.'(MSK)
' Text files,.txt,Data files,.dat,All files,.,.'(MSK)
Block Changed Till Here JAN29NOV05
MODE = 'O'
TITLE = 'Upload Materials to be processed'(004)
IMPORTING
FILENAME = P_DATEI
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4.
ENDFORM. " CALL_WS_EXPLORER
*eject
Form PROCESS_MATERIALS
Read source list for specified materials and then process
either PIR or contracts.
FORM PROCESS_MATERIALS.
PERFORM READ_MATERIAL_SOURCE_LIST.
LOOP AT T_EORD.
CLEAR W_EFFPR.
TRANSLATE T_EORD-VRTYP USING ' I'. "Set I = Infor record
IF T_EORD-VRTYP EQ C_I.
PERFORM GET_PIR_INFORMATION.
ELSE.
T_EORD-FLIFN = T_EORD-FEBEL.
PERFORM GET_CONTRACT_INFORMATION.
ENDIF.
ENDLOOP.
ENDFORM. " PROCESS_MATERIALS
*eject
Form GET_MATERIAL_SELECTION
FORM GET_MATERIAL_SELECTION.
SORT MAT_SEL.
CLEAR S_MATNR.
S_MATNR-OPTION = 'EQ'.
S_MATNR-SIGN = 'I'.
LOOP AT MAT_SEL WHERE
MATNR CO ' 0123456789'.
SHIFT MAT_SEL-MATNR RIGHT DELETING TRAILING ' '.
TRANSLATE MAT_SEL-MATNR USING ' 0'.
S_MATNR-LOW = MAT_SEL-MATNR.
APPEND S_MATNR.
ENDLOOP.
ENDFORM. " GET_MATERIAL_SELECTION
Form READ_EIPA
FORM READ_EIPA.
SELECT EBELN EBELP BEDAT
INTO CORRESPONDING FIELDS OF EIPA
FROM EIPA
UP TO 1 ROWS
WHERE INFNR EQ EINA-INFNR
AND WERKS EQ T_EORD-WERKS
AND EKORG EQ T_EORD-EKORG
AND BEDAT IN S_BEDAT
ORDER BY BEDAT DESCENDING.
PERFORM READ_ADDITIONAL_PO_DATA
USING EIPA-EBELN EIPA-EBELP.
CHECK SY-SUBRC EQ 0.
PERFORM FILL_MAT_PRICE USING 'X' EINA-INFNR
EINE-EFFPR EINE-PEINH EINE-WAERS.
APPEND MAT_PRICE.
ENDSELECT.
ENDFORM. " READ_EIPA
*eject
Form FILL_MAT_PRICE
FORM FILL_MAT_PRICE USING
*ID X_EBELN X_EFFPR X_PEINH X_WAERS "JAN29NOV05
Block added from here JAN29NOV05
ID TYPE C
X_EBELN TYPE C
X_EFFPR TYPE EINE-EFFPR
X_PEINH TYPE EINE-PEINH
X_WAERS TYPE EINE-WAERS.
Block added till here JAN29NOV05
CLEAR MAT_PRICE.
IF X_WAERS NE P_WAERS.
PERFORM CONVERT_TO_OTHER_CURRENCY USING
X_EFFPR X_WAERS P_WAERS.
ENDIF.
MAT_PRICE-VRTYP = T_EORD-VRTYP. "PIR / Contract no.
MAT_PRICE-INFNR = X_EBELN. "PIR / Contract no.
MAT_PRICE-MATNR = T_EORD-MATNR. "Material
MAT_PRICE-LIFNR = T_EORD-LIFNR. "Vendor
MAT_PRICE-FLIFN = T_EORD-FLIFN. "Fix Vendor
MAT_PRICE-WERKS = T_EORD-WERKS. "Plant
MAT_PRICE-EKORG = T_EORD-EKORG. "Purch. organization
MAT_PRICE-IRPRS = X_EFFPR. "PIR / Contract price
MAT_PRICE-PEINH = X_PEINH. "PIR / Contract pr.unit
CHECK ID NE SPACE. "PO history found ?
latest PO data ...
IF EKKO-WAERS NE P_WAERS.
PERFORM CONVERT_TO_OTHER_CURRENCY USING
EKPO-EFFWR EKKO-WAERS P_WAERS.
ENDIF.
MAT_PRICE-EBELN = EKPO-EBELN. "PO number
MAT_PRICE-EBELP = EKPO-EBELP. "PO item
MAT_PRICE-BEDAT = EKKO-BEDAT. "PO date
IF EKPO-MENGE NE 0.
MAT_PRICE-POPRS = EKPO-EFFWR / ( EKPO-MENGE "Last PO price = value
EKPO-BPUMZ / EKPO-BPUMN ). " / Qty. in sales unit
ELSE.
MAT_PRICE-POPRS = EKPO-EFFWR. "Last PO value
ENDIF. "PO price unit
MAT_PRICE-LPEIN = EKPO-PEINH. "PO price unit
MAT_PRICE-MENGE = EKPO-MENGE. "PO quantity
MAT_PRICE-MEINS = EKPO-MEINS. "PO unit of measure
ENDFORM. " FILL_MAT_PRICE
*eject
Form CONVERT_TO_OTHER_CURRENCY
FORM CONVERT_TO_OTHER_CURRENCY USING
XVALUE FR_CURR TO_CURR. "JAN29NOV05
Block added from here JAN29NOV05
XVALUE TYPE ANY
FR_CURR TYPE EKKO-WAERS
TO_CURR TYPE EINE-WAERS.
Block added till here JAN29NOV05
CALL FUNCTION 'MS_CONVERT_TO_OTHER_CURRENCY'
EXPORTING
DATE = SY-DATUM
FROM_CURRENCY = FR_CURR
FROM_AMOUNT = XVALUE
TO_CURRENCY = TO_CURR
COMPANY_CURRENCY = 'EUR'
IMPORTING
TO_AMOUNT = XVALUE
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC NE 0.
MESSAGE E999(ZZ) WITH 'Currency conversion error from'(E02)
FR_CURR 'to' TO_CURR.
ENDIF.
ENDFORM. " CONVERT_TO_OTHER_CURRENCY
*eject
Form UPLOAD_MATERIAL_SELECTION
FORM UPLOAD_MATERIAL_SELECTION.
Block commented from here JAN29NOV05
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = P_DATEI
FILETYPE = 'DAT'
TABLES
DATA_TAB = MAT_SEL
EXCEPTIONS
CONVERSION_ERROR = 1
FILE_OPEN_ERROR = 2
FILE_READ_ERROR = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7
OTHERS = 8.
Block commented till here JAN29NOV05
Block added from here JAN29NOV05
MOVE P_DATEI TO W_FILE.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = W_FILE
FILETYPE = C_ASC
HAS_FIELD_SEPARATOR = C_X
TABLES
DATA_TAB = MAT_SEL
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17.
Block added till here JAN29NOV05
IF SY-SUBRC NE 0.
MESSAGE E999(ZZ) WITH 'Error uploading from file'
P_DATEI(40).
ENDIF.
ENDFORM. " UPLOAD_MATERIAL_SELECTION
*eject
Form AUSGABE
FORM AUSGABE.
LOOP AT MAT_PRICE.
FORMAT COLOR 1 INTENSIFIED OFF.
WRITE: /01 MAT_PRICE-VRTYP, "Document type
03 MAT_PRICE-INFNR, "Info record / Contract
14 MAT_PRICE-MATNR, "Material
23 MAT_PRICE-WERKS, "Plant
28 MAT_PRICE-EKORG, "Purch. organization
33 MAT_PRICE-LIFNR, "Vendor
44 MAT_PRICE-FLIFN, "Fixed Vendor
46 MAT_PRICE-IRPRS NO-SIGN, "Info record price
61 MAT_PRICE-PEINH NO-SIGN. "IR price unit
FORMAT COLOR 2 INTENSIFIED.
IF NOT MAT_PRICE-EBELN IS INITIAL.
WRITE: 68 MAT_PRICE-POPRS NO-SIGN, "PO price
83 MAT_PRICE-LPEIN NO-SIGN, "PO price unit
90 MAT_PRICE-MENGE, "PO quantity
107 MAT_PRICE-MEINS, "PO unit of measure
111 MAT_PRICE-EBELN, "PO number
123 MAT_PRICE-BEDAT. "PO date
ELSE.
WRITE: 74 'No PO price was found'(005),
132 ' '.
ENDIF.
HIDE MAT_PRICE-VRTYP.
AT END OF MATNR.
SKIP.
ENDAT.
ENDLOOP.
CLEAR MAT_PRICE.
ENDFORM. " AUSGABE
*eject
Form READ_TCURC
FORM READ_TCURC.
CLEAR TCURC.
TCURC-WAERS = P_WAERS.
READ TABLE TCURC.
IF SY-SUBRC NE 0.
MESSAGE E999(ZZ) WITH P_WAERS 'Currency code invalid'(E03).
ENDIF.
ENDFORM. " READ_TCURC
*eject
Form LIST_HEADER
FORM LIST_HEADER.
FORMAT INTENSIFIED.
WRITE: /01 'Output currency'(006), 25 ': ', P_WAERS,
122 'Page'(007), SY-PAGNO,
/01 'Plant'(008), 25 ': from '(009), S_WERKS-LOW,
46 'to '(010), S_WERKS-HIGH,
/01 'Purchasing Organization'(011),
25 ': from '(009), S_EKORG-LOW,
46 'to '(010), S_EKORG-HIGH,
/01 'PO date'(012), 25 ': from '(009), S_BEDAT-LOW,
46 'to '(010), S_BEDAT-HIGH.
ULINE.
FORMAT COLOR 1.
WRITE: /01 TEXT-T01.
ULINE.
ENDFORM. " LIST_HEADER
*eject
Form CHANGE_SORT_SEQUENCE
FORM CHANGE_SORT_SEQUENCE.
GET CURSOR FIELD CURSORFIELD.
CASE CURSORFIELD+10(5).
WHEN 'EKORG'.
SORT MAT_PRICE BY MATNR EKORG POPRS.
PERFORM AUSGABE.
MESSAGE S999(ZZ) WITH TEXT-001
'Material/Purch.Organization/Info Rec.Price'(013).
WHEN 'BEDAT'.
SORT MAT_PRICE BY MATNR BEDAT POPRS.
PERFORM AUSGABE.
MESSAGE S999(ZZ) WITH TEXT-001
'Material/PO Date/Info Rec.Price'(014).
WHEN 'IRPRS'.
SORT MAT_PRICE BY MATNR IRPRS.
PERFORM AUSGABE.
MESSAGE S999(ZZ) WITH TEXT-001
'Material/Plant/Info Rec.Price'(015).
WHEN 'POPRS'.
SORT MAT_PRICE BY MATNR POPRS.
PERFORM AUSGABE.
MESSAGE S999(ZZ) WITH TEXT-001
'Material/Plant/PO Price'(016).
WHEN 'LIFNR'.
SORT MAT_PRICE BY MATNR LIFNR POPRS.
PERFORM AUSGABE.
MESSAGE S999(ZZ) WITH TEXT-001
'Material/Vendor/PO Price'(017).
WHEN OTHERS.
SORT MAT_PRICE BY MATNR WERKS EKORG POPRS.
PERFORM AUSGABE.
MESSAGE S999(ZZ) WITH TEXT-001
'Material/Plant/PurchOrg/PO Price'(018).
ENDCASE.
SY-LSIND = 0.
ENDFORM. " CHANGE_SORT_SEQUENCE
*eject
Form DISPLAY_ORDER
FORM DISPLAY_ORDER.
DATA: X_BELNR(10) TYPE C.
CLEAR CURSORFIELD.
GET CURSOR FIELD CURSORFIELD.
IF CURSORFIELD+10(5) NE 'EBELN' AND
CURSORFIELD+10(5) NE 'INFNR'.
MESSAGE I999(ZZ) WITH 'Invalid cursor position'.
EXIT.
ENDIF.
GET CURSOR FIELD CURSORFIELD VALUE X_BELNR.
CASE CURSORFIELD+10(5).
WHEN 'EBELN'. "Purchase order
SET PARAMETER ID 'BES' FIELD X_BELNR.
CALL TRANSACTION 'ME23' AND SKIP FIRST SCREEN.
WHEN 'INFNR'. "Info rec. / Contract
IF MAT_PRICE-VRTYP EQ C_I. "Info Record ...
SET PARAMETER ID 'INF' FIELD X_BELNR.
CALL TRANSACTION 'ME13' AND SKIP FIRST SCREEN.
ELSE. "Contract ...
SET PARAMETER ID 'VRT' FIELD X_BELNR.
CALL TRANSACTION 'ME33' AND SKIP FIRST SCREEN.
ENDIF.
ENDCASE.
CLEAR MAT_PRICE.
ENDFORM.
*eject
Form SOME_REWORK
FORM SOME_REWORK.
IF NOT S_BEDAT-LOW IS INITIAL AND "Align date for output
S_BEDAT-HIGH IS INITIAL.
S_BEDAT-HIGH = S_BEDAT-LOW.
MODIFY S_BEDAT INDEX 1.
ENDIF.
CONVERT DATE SY-DATUM INTO INVERTED-DATE "today's inverted date
INV_DATE.
ENDFORM. " SOME_REWORK
*eject
Form READ_ADDITIONAL_PO_DATA
FORM READ_ADDITIONAL_PO_DATA USING
X_EBELN X_EBELP. "JAN29NOV05
Block added from here JAN29NOV05
X_EBELN TYPE EIPA-EBELN
X_EBELP TYPE EIPA-EBELP.
Block added till here JAN29NOV05
SELECT SINGLE WAERS BEDAT
INTO CORRESPONDING FIELDS OF EKKO
FROM EKKO
WHERE EBELN EQ X_EBELN.
SELECT SINGLE EBELN EBELP MENGE MEINS
PEINH EFFWR BPUMZ BPUMN
INTO CORRESPONDING FIELDS OF EKPO
FROM EKPO
WHERE EBELN EQ X_EBELN
AND EBELP EQ X_EBELP
AND LOEKZ NE 'L'.
ENDFORM. " READ_ADDITIONAL_PO_DATA
*eject
Form READ_MATERIAL_SOURCE_LIST
Read source list entries for specified materials
FORM READ_MATERIAL_SOURCE_LIST.
SELECT * INTO CORRESPONDING FIELDS OF TABLE T_EORD
FROM EORD
WHERE MATNR IN S_MATNR
AND WERKS IN S_WERKS
AND EKORG IN S_EKORG
AND VDATU LE SY-DATUM
AND BDATU GE SY-DATUM
AND ( VRTYP EQ SPACE
OR VRTYP EQ C_K ).
IF SY-SUBRC NE 0 OR
T_EORD[] IS INITIAL.
MESSAGE S999(ZZ) WITH 'No data found for this selection'(S01).
ENDIF.
ENDFORM. " READ_MATERIAL_SOURCE_LIST
*eject
Form GET_PIR_INFORMATION
Process purchase info records --> purchase order history
FORM GET_PIR_INFORMATION.
SELECT INFNR
INTO EINA-INFNR
FROM EINA
WHERE LIFNR EQ T_EORD-LIFNR
AND MATNR EQ T_EORD-MATNR
AND MATKL IN S_MATKL
AND LOEKZ EQ SPACE.
SELECT SINGLE EFFPR PEINH WAERS
INTO CORRESPONDING FIELDS OF EINE
FROM EINE
WHERE INFNR EQ EINA-INFNR
AND EKORG EQ T_EORD-EKORG
AND ESOKZ EQ C_0
AND WERKS EQ T_EORD-WERKS
AND LOEKZ EQ SPACE.
CHECK SY-SUBRC EQ 0.
PERFORM READ_EIPA. "Read PO history
IF SY-SUBRC NE 0.
PERFORM FILL_MAT_PRICE USING ' ' EINA-INFNR
EINE-EFFPR EINE-PEINH EINE-WAERS.
APPEND MAT_PRICE.
ENDIF.
ENDSELECT.
ENDFORM. " GET_PIR_INFORMATION
*eject
Form GET_CONTRACT_INFORMATION
text
FORM GET_CONTRACT_INFORMATION.
SELECT SINGLE WAERS
INTO *EKKO-WAERS
FROM EKKO
WHERE EBELN EQ T_EORD-EBELN
AND LOEKZ EQ SPACE.
SELECT SINGLE EBELN EBELP EFFWR PEINH
KTMNG BPUMZ BPUMN
INTO CORRESPONDING FIELDS OF *EKPO
FROM EKPO
WHERE EBELN EQ T_EORD-EBELN
AND EBELP EQ T_EORD-EBELP
AND LOEKZ EQ SPACE.
CHECK SY-SUBRC EQ 0.
Get effective price in sales unit ...
IF *EKPO-KTMNG EQ 0 OR
*EKPO-BPUMN EQ 0.
W_EFFPR = *EKPO-EFFWR.
ELSE.
W_EFFPR = *EKPO-EFFWR / *EKPO-KTMNG
*EKPO-BPUMZ / *EKPO-BPUMN.
ENDIF.
PERFORM READ_EKAB.
IF SY-SUBRC NE 0.
PERFORM FILL_MAT_PRICE USING ' ' *EKPO-EBELN
W_EFFPR *EKPO-PEINH *EKKO-WAERS.
APPEND MAT_PRICE.
ENDIF.
ENDFORM. " GET_CONTRACT_INFORMATION
*eject
Form READ_EKAB
Read released document (PO's) of contract
FORM READ_EKAB.
SELECT EBELN EBELP BEDAT
INTO CORRESPONDING FIELDS OF EKAB
FROM EKAB
UP TO 1 ROWS
WHERE KONNR EQ T_EORD-EBELN
AND KTPNR EQ T_EORD-EBELP
AND WERKS EQ T_EORD-WERKS
AND EKORG EQ T_EORD-EKORG
AND BEDAT IN S_BEDAT
AND BSTYP EQ C_F
ORDER BY BEDAT DESCENDING.
PERFORM READ_ADDITIONAL_PO_DATA
USING EKAB-EBELN EKAB-EBELP.
CHECK SY-SUBRC EQ 0.
PERFORM FILL_MAT_PRICE USING 'X' T_EORD-EBELN
W_EFFPR *EKPO-PEINH *EKKO-WAERS.
APPEND MAT_PRICE.
ENDSELECT.
ENDFORM. " READ_EKAB
Maybe you are looking for
-
One line item delivery for 3rd party sales order
Hello Experts, We have configured a 3rd party sales order process where the PR gets created. We are using scheduling agreement(PO) and creating Schedule line and doing a GR for partial line items. The stock is recieved as a Sales Order stock. But wh
-
Adapter blew up on iPod touch!
My sons adapter blew up on him! Has anyone else had this happen?
-
Numbered headers with centered text: the numbers are off to the side.
Hi, I'm trying to create typical numbered headers as they appear in law reviews. For example, (I used underscore characters here to represent characters): ___________________III.Judge-made law However, Pages seems to only do this: III._______________
-
The "activity you're trying to do is unavailable" error is now almost 24 hours old. portraying this as an "upgrade to our system" is complete hogwash. that they've been the victim of a cyber attack is fairly obvious now....how long (if ever) will i
-
Macbook Air late 2008 boot and sleep/wake issues
First off I have a booting issue. When I press the power button when it's off, the little front light comes on for a second, I hear the little non solid state hard drive spin up, then the little front light turns on again, but nothing else happens. T