Report Programs/Includes
Hi all,
I am looking for the function module that may be used
to create Report Programs/Include files.
I am aware of the INSERT REPORT statement. But it
creates a 'Report Program' of Application type 'Basis'.
I want to create an Include file of other Application
type.
Please help.
Thanks in Advance.
Hi Anandaraja,
don't worry about the program type created - wht ever it is you can INCLUDE it anyway.
If you still want to change, you may modify the object catalog entry after creating.
Regards,
Clemens
Similar Messages
-
REPORT/PROGRAM statement missing, or program type is INCLUDE error upgrade.
Hi Experts,
I have done the recording for FK05 and created functionmodule for the same. But when I use that function module in my custom program or if I try directly execute the FM, I am getting dump like syntax error. So I did syntax check and tried to activate, I am getting "REPORT/PROGRAM statement missing, or program type is INCLUDE error upgrade" error.
Please help me soon to resolve this issue.
Thanks in advance.
ShreyanshHi
Goto main function group include name attributes tab and double click.
once the include is opened, try to activate it. if shows errors then fix.
regards
Shiva -
Hi,
I have created a REPORT Program (Z Program) and also created a TOP INCLUDE. I am NOT using Function module. When I tried to syntex check the INCLUDE, system is giving
following error:
REPORT/PROGRAM statement missing, program type I (Include).
Can you help me in resolving this error.
Currently TOP include has only one statement to declare a Constant.
Thanks,hi,
take your program in se80.
double click on the program name. Right click on it and press Activate. All the include will get activated and the problem will get solved.
Regards,
Renjith Michael.
http://www.sourceveda.com/ -
How to call a Include type Report Program in Executable Program. ?
Hi experts,
I have created a Include type report program and I want to run this include program in other report program. Which abap statement should i use ?
Thanks
SaurabhHi Saurabh,
We can make use of programs of Type - Include(I) in other type of ABAP Programs.
These Include programs cannot be executed directly but can be used as a part of the main program i.e Executable program - Type E.
So after creating your main program of type executable program then use the below line
REPORT ZM_SAMPLE_PROGRAM.
INCLUDE INC_PRG_NAME.
Now the code as availablein INC_PRG_NAME becomes part of the main program ZM_SAMPLE_PROGRAM.le
Also you can make use of this Include program in other executable/include programs too...
Regards,
Rafi -
Need example report program using PNPCE LDB in SAP HR
Need example report program using PNPCE LDB in SAP HR.
and how to create a report category in sap hr for using it as cutomised selection screen.Hi,
Go through the following links, i hope it will help you.....
/people/alvaro.tejadagalindo/blog/2006/02/19/how-to-deal-with-hr-payroll-reports
http://sap.ittoolbox.com/groups/technical-functional/sap-r3-dev/893908#
A sample prog with LDB PNP
*& Report ZH_REPT_PAYMENT *
report zh_rept_payment line-size 80 no standard page
heading.
tables: pernr, " Standard Selections for HR Master Data Reporting
pcl1, " HR Cluster 1
pcl2, " HR Cluster 2
pa0009,
PA9001,
PA9006,
pa0002,
pc260 , " Cluster Directory for Payroll Results
bnka .
Infotypes
infotypes: 0001. " Organizational Assignment
Declaration of Internal Tables
data : bnka1 like bnka occurs 0 with header line .
data: begin of t_int_rep occurs 100,
bankl like pc209-bankl, " Bank Number
zlsch like pc209-zlsch, " Payment method
pernr like pernr-pernr, " Employee Number
ename like pernr-ename, " Employee Name
bankn like pc209-bankn, " Bank Account Number
betrg like pc209-betrg, " Amount to be transfered
zweck like pa0009-zweck, " Purpose
end of t_int_rep.
data: begin of int_rep occurs 100,
bankl like pc209-bankl, " Bank Number
zlsch like pc209-zlsch, " Payment method
pernr like pernr-pernr, " Employee Number
ename like pernr-ename, " Employee Name
bankn like pc209-bankn, " Bank Account Number
betrg like pc209-betrg, " Amount to be transfered
zweck like pa0009-zweck, " Purpose
begda like pa0009-begda, "Begin date
end of int_rep.
Declaration of Data Variables
data: ws_betrg like pc209-betrg, " BT Amount
w_val like spell occurs 0 with header line,
int_rep1(6), " TYPE I, " Employee Number
cnt type i value 0, " Counter
calcmolga like t500l-molga value '40', " Country Grouping
v_id(15),
calc_currency like t001-waers value 'INR'. " Currency
data : ctr type i,
dt_merge like pa0009-begda.
data: ws_totemp(6) type c,
ws_totamt(20) type c,
r_mth(9) type c,
ws_fpbeg(6) type c,
ws_fpend(6) type c,
ws_mthyr(6) type c,
ws_mthyr_r(14) type c,
r_mth_t(3) type c,
ws_amt(8) type c,
ws_bankl(14) type c,
ws_date(6) type c,
amount_word(500),
total_page type i,
pages type i,
remain type i.
data begin of i_spell.
include structure spell .
data end of i_spell .
data : c_molga type t500l-molga value '40',
c_banks type bnka-banks value 'IN'.
Standard Includes
include rpc2cd09. "Cluster CD data definition
include pc2rxin0.
include rpc2rx09.
include rpppxd00. " Data Definition buffer PCL1/PCL2
include rpppxd10. " Common Part buffer PCL1/PCL2
include rpppxm00. " Buffer Handling RoutinePCL1/PCL2
include zrpc2rox2. " Data Definition POCLSTERS (not J,K,U)
Selection Screen
selection-screen begin of block b1 with frame title text-001.
parameter: pa_mth(2) type c default sy-datum+4(2) obligatory,
pa_year(4) type c default sy-datum(4) obligatory,
p_bankl like pc209-bankl, " Bank Number
p_zlsch like pc209-zlsch. " Payment method
selection-screen end of block b1.
save_calc_currency = calc_currency.
count_top = 0.
get_pernr_flag = 0.
Top-Of-Page
top-of-page.
perform convert_month using pa_mth(2) r_mth.
ws_mthyr_r = r_mth.
concatenate ws_mthyr_r pa_year into ws_mthyr_r separated by space.
SKIP 5.
skip 1.
skip 4.
if int_rep-bankl eq ' '.
if int_rep-zlsch eq 'C' or int_rep-zlsch eq 'E' or
int_rep-zlsch eq ' '.
write: /1(85) 'CHEQUE PAYMENT STATEMENT'(047) centered.
elseif int_rep-zlsch eq 'L'.
write: /1(85) 'DEMAND DRAFT STATEMENT'(047) centered.
endif.
else.
write: /1(85) 'BANK TRANSFER STATEMENT'(002) centered.
endif.
skip.
write: /34 ws_mthyr_r,
62 'Page :'(008),69(2) sy-pagno intensified off,
' Of ',78(2) pages intensified off.
clear pages.
read table bnka1 with key bankl = int_rep-bankl .
if sy-subrc = 0.
if int_rep-zlsch eq 'T'.
write:/03(10) 'Bank Name : ', bnka1-banka.
write:/03(10) 'Branch : ', bnka1-brnch.
write:/03(10) 'Address : ', bnka1-stras.
endif.
endif.
skip.
write:/1(80) sy-uline.
write: /1 sy-vline, 2(5) 'Sl.No'(002),
7 sy-vline, 8(8) 'Emp.No.'(003),
16 sy-vline,17(35) 'Employee Name'(004).
*--added for Demand Draft
if ( int_rep-zlsch = 'l' or int_rep-zlsch = 'L' ).
write : 47 sy-vline, 48(15) 'Payable at'(005).
else.
write : 47 sy-vline,48(15) 'Account No.'(005).
endif.
write: 63 sy-vline,64(16) 'Amount'(006),
80 sy-vline.
write:/1(80) sy-uline.
end-of-page.
write:/1(80) sy-uline.
write:/2 'Printed on ', sy-datum.
Start-of-selection.
start-of-selection.
*perform h_headr.
ctr = 0.
set margin 5.
call function 'RP_GET_CURRENCY'
exporting
molga = calcmolga
importing
waers = calc_currency
exceptions
others.
if sy-subrc ne 0.
calc_currency = 'DEM'.
calc_currency = save_calc_currency.
endif.
get pernr.
cd-key-pernr = pernr-pernr.
perform import_cluster.
get_pernr_flag = 1.
check : ocd-version-molga eq calcmolga.
The table 'tabpernr' is filled with the personnel numbers
and is used after selection is finished.
move-corresponding pernr to tabpernr.
append tabpernr.
The table 'tab_rgdir' is filled
loop at rgdir.
rx-key-pernr = pernr-pernr.
unpack rgdir-seqnr to rx-key-seqno.
perform int_tab. "fill tab_rgdir
perform import_bt.
perform validate.
endloop.
End of Selection
end-of-selection.
*perform h_headr.
perform convert_date_a using pa_mth r_mth_t.
sort int_rep by bankl zlsch pernr betrg descending.
delete adjacent duplicates from int_rep
comparing bankl zlsch pernr .
sort int_rep by bankl zlsch bankn . "PERNR.
loop at int_rep.
at new bankl.
select single * into bnka1 from bnka
where banks = c_banks and
bankl = int_rep-bankl .
append bnka1.
clear bnka1.
endat.
endloop.
for Demand Draft - purpose added
loop at int_rep.
concatenate pa_year(4) pa_mth(2) '01' into dt_merge.
select single * "zweck into int_rep-zweck
from pa0009 where
pernr = int_rep-pernr and
bankl = int_rep-bankl and
zlsch = int_rep-zlsch
and begda <= dt_merge and
endda >= dt_merge .
if sy-subrc = 0.
int_rep-zweck = pa0009-zweck.
modify int_rep.
endif.
endloop.
*-for DD and Chq sorted by PAyable at and EMPNO wise
if p_zlsch = 'T' .
sort int_rep by bankl zlsch bankn . "PERNR.
else. "added for "payable at" for DD/Chq
else.
sort int_rep by zweck pernr . "PERNR.
endif.
*delete adjacent duplicates from int_rep.
t_int_rep] = int_rep[.
loop at int_rep.
*-for page of page no.
total_page = 0.
loop at t_int_rep where bankl = int_rep-bankl
and zlsch = int_rep-zlsch.
total_page = total_page + 1.
endloop.
pages = total_page div 25.
remain = total_page mod 25.
comment bcoz its adding one extra page no.
done as on 29/11/2004
if remain > 0.
pages = pages + 1.
endif.
**-end
at new bankl.
ctr = 0 .
new-page.
endat.
at new zlsch.
ctr = 0 .
new-page.
endat.
clear v_id.
select single natio
into pa0002-natio
from pa0002
where pernr eq int_rep-pernr.
*-testing......for soma
if ctr > 24.
ctr = 0 .
write:/1(80) sy-uline.
new-page .
endif.
ctr = ctr + 1 .
cnt = cnt + 1.
pack int_rep-pernr to int_rep1.
write:/1 sy-vline, 2(3) cnt intensified off,
7 sy-vline, 9(6) int_rep1 intensified off,
16 sy-vline,17(35) int_rep-ename intensified off .
if ( int_rep-zlsch = 'l' or int_rep-zlsch = 'L' ).
write : 47 sy-vline,48(15) int_rep-zweck intensified off.
else.
write:
47 sy-vline,48(15) int_rep-bankn intensified off .
endif.
write: 63 sy-vline,64(16) int_rep-betrg
intensified off currency 'INR',
80 sy-vline.
ws_betrg = ws_betrg + int_rep-betrg.
*-testing......for soma
skip.
write :
/1 sy-vline, 7 sy-vline ,16 sy-vline ,47 sy-vline,63 sy-vline,80
sy-vline .
*-end testing......for soma
at end of zlsch.
if int_rep-bankl = ' '.
call function 'HR_IN_CHG_INR_WRDS'
exporting
amt_in_num = ws_betrg
importing
amt_in_words = amount_word
EXCEPTIONS
DATA_TYPE_MISMATCH = 1
OTHERS = 2
w_val-word = amount_word.
concatenate 'INR.' w_val-word into w_val-word
separated by space.
write:/1(80) sy-uline.
write: /1 sy-vline, 7 'Total transfer:'(009),
64(16) ws_betrg intensified off currency 'INR',
80 sy-vline.
write:/1(80) sy-uline.
write: /1 sy-vline, 3 w_val-word+0(76) intensified off,
80 sy-vline.
write :/1 sy-vline, 10 w_val-word+76(70) intensified off,
80 sy-vline.
write:/1(80) sy-uline.
clear: ws_betrg,cnt.
skip 2.
write: /2 'Prepared by :'(010), '_______________'(013),
45 'Checked by :'(011),'_______________'(013).
skip 2.
write: /2 'Printed On ', sy-datum,
45 'Approved by :'(012),'_______________'(013).
clear sy-pagno.
endif.
endat.
at end of bankl.
if int_rep-bankl ' '.
call function 'HR_IN_CHG_INR_WRDS'
exporting
amt_in_num = ws_betrg
importing
amt_in_words = amount_word
EXCEPTIONS
DATA_TYPE_MISMATCH = 1
OTHERS = 2
w_val-word = amount_word.
concatenate 'INR.' w_val-word into w_val-word
separated by space.
write:/1(80) sy-uline.
write: /1 sy-vline, 7 'Total transfer:'(009),
64(16) ws_betrg intensified off currency 'INR',
80 sy-vline.
write:/1(80) sy-uline.
write: /1 sy-vline, 3 w_val-word+0(76) intensified off,
80 sy-vline.
write :/1 sy-vline, 10 w_val-word+76(70) intensified off,
80 sy-vline.
write:/1(80) sy-uline.
clear: ws_betrg,cnt.
skip 2.
write: /2 'Prepared by :'(010), '_______________'(013),
45 'Checked by :'(011),'_______________'(013).
skip 2.
write: /2 'Printed on ', sy-datum,
45 'Approved by :'(012),'_______________'(013).
clear sy-pagno.
NEW-PAGE.
endif.
endat.
endloop.
End of Page
end-of-page.
write: /2 'Prepared by :'(010), '_______________',
45 'Checked by :'(011),'_______________'.
*& Form IMPORT_CLUSTER
Importing Data from Cluster *
form import_cluster.
sy-subrc = 0.
rp-imp-c2-cd.
if sy-subrc eq 0.
if cd-version-number ne ocd-version-number.
endif.
endif. " SY-SUBRC EQ 0
endform. " IMPORT_CLUSTER
*& Form INT_TAB
Filling internal table tab_rgdir form int_tab.
*Fill internal table tab_rgdir.
move-corresponding rgdir to tab_rgdir.
tab_rgdir-pernr = pernr-pernr.
append tab_rgdir.
endform. " INT_TAB
*& Form IMPORT_bt
Import Values from Bank Transactions Table (BT) form import_bt.
rp-init-buffer.
RP-IMP-C2-RX.
rp-imp-c2-in.
if rp-imp-in-subrc eq 0.
if in-version-number ne oin-version-number.
write: / 'Schlüssel des Clusters RX:'(015),
rx-key-pernr, rx-key-seqno.
write: / 'The imported version of the cluster'(016), 'RX',
'is not current'(017).
write: / 'Imported version :'(018),
oin-version-number.
write: / 'Current version of cluster :'(019),
in-version-number.
stop.
else.
sy-subrc = 0.
endif.
else.
sy-subrc = 8.
write: /
'Inconsistencies between cluster directory and directory for'(020).
write: /
'No payroll results found for data in cluster directory'(021).
write : /
'Please contact hotline to solve the current problem'(022).
endif.
ws_fpbeg(2) = versc-fpbeg+4(2).
ws_fpbeg+2(4) = versc-fpbeg(4).
ws_fpend(2) = versc-fpend+4(2).
ws_fpend+2(4) = versc-fpend(4).
ws_mthyr(2) = pa_mth.
ws_mthyr+2(4) = pa_year.
check ws_mthyr = ws_fpbeg.
check ws_mthyr = ws_fpend.
loop at bt. "from pc209
int_rep-pernr = pernr-pernr.
int_rep-ename = pernr-ename.
int_rep-bankl = bt-bankl.
int_rep-bankn = bt-bankn.
int_rep-betrg = bt-betrg.
int_rep-zlsch = bt-zlsch.
append int_rep.
endloop.
IF P_BANKL ' ' AND P_ZLSCH ' '.
DELETE INT_REP WHERE BANKL P_BANKL.
ELSEIF P_BANKL = ' ' AND P_ZLSCH ' '.
DELETE INT_REP WHERE ZLSCH P_ZLSCH.
ELSEIF P_BANKL ' ' AND P_ZLSCH = ' '.
DELETE INT_REP WHERE BANKL P_BANKL.
ENDIF.
endform. " IMPORT_BT
*& Form CONVERT_MONTH
Fetching Month Text form convert_month using mth t_mth.
case mth.
when '01'.
t_mth = 'January'(023).
when '02'.
t_mth = 'February'(024).
when '03'.
t_mth = 'March'(025).
when '04'.
t_mth = 'April'(026).
when '05'.
t_mth = 'May'(027).
when '06'.
t_mth = 'June'(028).
when '07'.
t_mth = 'July'(029).
when '08'.
t_mth = 'August'(030).
when '09'.
t_mth = 'September'(031).
when '10'.
t_mth = 'October'(032).
when '11'.
t_mth = 'November'(033).
when '12'.
t_mth = 'December'(034).
endcase.
endform. " CONVERT_MONTH
*& Form CONVERT_DATE_A
Fetching Month Text * form convert_date_a using mth_t t_mth_t.
case mth_t.
when '01'.
t_mth_t = 'Jan.'(035).
when '02'.
t_mth_t = 'Feb.'(036).
when '03'.
t_mth_t = 'Mar.'(037).
when '04'.
t_mth_t = 'Apr.'(038).
when '05'.
t_mth_t = 'May.'(039).
when '06'.
t_mth_t = 'Jun.'(040).
when '07'.
t_mth_t = 'Jul.'(041).
when '08'.
t_mth_t = 'Aug.'(042).
when '09'.
t_mth_t = 'Sep.'(043).
when '10'.
t_mth_t = 'Oct.'(044).
when '11'.
t_mth_t = 'Nov.'(045).
when '12'.
t_mth_t = 'Dec.'(046).
endcase.
endform. " CONVERT_DATE_A
*& Form VALIDATE
text
--> p1 text
<-- p2 text form validate .
if p_bankl <> ' ' and p_zlsch ' '.
delete int_rep where bankl p_bankl.
elseif p_bankl = ' ' and p_zlsch ' '.
delete int_rep where zlsch p_zlsch.
elseif p_bankl ' ' and p_zlsch = ' '.
delete int_rep where bankl p_bankl.
endif.
endform. " VALIDATE
check this weblog.....
/people/dj.adams/blog/2003/11/13/food-for-thought-ldbs-and-abap-objects
Also , check the following link too.
http://www.datamanagementgroup.com/Resources/Articles/Article_1005_2.asp
Regards,
Harish -
REPORT/PROGRAM statement missing.
Hi,
I have a report with two includes. In both the Include Programs,i am getting a error message 'REPORT/PROGRAM statement missing, or program type is I (INCLUDE).'
Eg.
Report reportname. " program type Report
include program1. " program type Inlude
include program2. " program type Inlude
start-of-selection.
Please Help.
Thanks & Regards,
Jayapal.Hi ,
This will not be any problem Jay. Since it is a Non executable program it will always show that error. You can activate the program.
Do one thing create a test report program and call this include program in that report and execute. It will show you the result.
I've created an example program for this, please have a look
My Report Program :
REPORT ZTEST.
INCLUDE ZTESTINCLUDE.
My Include Program :
*& Include ZTESTINCLUDE
data : a type i,
b type i,
c type i.
a = 3.
b = 2.
c = a + b.
write : / 'Result is :' , c.
Try executing the Report it will show you the result 5. Tell the client this is not a problem. Check in the attributes of your Include program ( program1 ) if it is of type Include.
Regards,
Sai -
Skipping Selection Screen for a report program
Hi guys,
I have a report program that works in 2 modes - Create and modify ( There is a toggle button in the ALV report). Its an editable ALV grid. There are 2 tcodes - zcreate and zmodify to access the same report in 2 above modes. For zmodify, i have a selection screen. How do i skip the selection screen for zcreate ?
Here is my report program
REPORT ZSWR_RCKDVOLS .
INCLUDE ZSWR_RCKDVOLS_TOP.
INCLUDE ZSWR_RCKDVOLS_CLDEF.
INCLUDE ZSWR_RCKDVOLS_CLIMP.
INCLUDE ZSWR_RCKDVOLS_SELSCR. " Selection Options are written in this.
INCLUDE ZSWR_RCKDVOLS_PBO.
INCLUDE ZSWR_RCKDVOLS_PAI.
INCLUDE ZSWR_RCKDVOLS_FORM.
INITIALIZATION
initialization.
perform layout_build.
AT SELECTION-SCREEN
at selection-screen on s_locid.
clear lv_plnt.
select single werk from oijrra
into lv_plnt
where locid in s_locid and rpart = gc_rpart.
perform memory_id_build.
START-OF-SELECTION
start-of-selection .
perform fieldcatalog.
perform fill_internal_table.
perform build_outtab.
END-OF-SELECTION.
CHECK: NOT gi_zswt_rckdvols[] IS INITIAL.
set SCREEN 100. "Main Screen
A sample code will be greatly helpful.
Thanks,
SHKSo if we were to implement this in your program.....
report zswr_rckdvols .
include zswr_rckdvols_top.
include zswr_rckdvols_cldef.
include zswr_rckdvols_climp.
<b> include zswr_rckdvols_selscr. " Selection Options are written in this ".
* Add this line into your selection screen include.
parameters: p_switch type c no-display.</b>
include zswr_rckdvols_pbo.
include zswr_rckdvols_pai.
include zswr_rckdvols_form.
* INITIALIZATION
initialization.
perform layout_build.
* AT SELECTION-SCREEN
<b>at selection-screen output.
if sy-tcode = 'ZCREATE'
and p_switch = space.
submit zswr_rckdvols
with p_switch = 'X'
and return.
leave program.
endif.</b>
at selection-screen on s_locid.
clear lv_plnt.
select single werk from oijrra
into lv_plnt
where locid in s_locid and rpart = gc_rpart.
perform memory_id_build.
* START-OF-SELECTION
start-of-selection .
perform fieldcatalog.
perform fill_internal_table.
perform build_outtab.
end-of-selection.
check: not gi_zswt_rckdvols[] is initial.
set screen 100. "Main Screen
Regards,
Rich Heilman -
Itz possible to call one report program into another program
hi guys,
i had a doubt that can i call a report program into another report program by declaring their name into the second program like as we calling Includes ,function modules and like class and their methods .
if anybody done this or know how to do this, give me the details and explination about this friends
if it possible with screenshots and codings
Thanks & Regards
SaigijeoPlease search before posting, do not ask basic questions here.
Always do your own work before turning to the community with specific problems.
Thread locked.
Thomas
[Asking Good Questions in the Forums to get Good Answers|/people/rob.burbank/blog/2010/05/12/asking-good-questions-in-the-forums-to-get-good-answers] -
Uploading Logo in report program....Urgent
Dear SDN Team Members,
I'm trying to upload the logo into my report program. I've this logo in smartform but i'm not sure how to upload that logo into my Report program.
Could anyone help me send the code for the same.
Thanks in Advance.
Best Regards!
Krishna.Hello Krishna,
I don't think the Logo can be included in ordinary report.
It can be done use ALV grid.
Refer to this sample report <b>BALVST02_GRID</b>
If useful reward.
Vasanth -
Assign Search help in report program
Dear All,
I facing problem to assign search help in report program.
I crated one elementary search help in which three fields i include
-carrid
-carrier name
-booking
all three fields having import and export parameter in search help.
while executing this search help in se11 it gives proper output.
but while assigning this search help in report program it only fetch one carried.
my report is also having three parameter
-carrid
-carrier name
-booking
i assign search help like
PARAMETER : p_carrid TYPE scarr-carrid
MATCHCODE OBJECT z01_carrid,
with all three field but it fetch only carrid ...Hi Chintan,
For such types of requirements you can use this Function Module:
F4IF_INT_TABLE_VALUE_REQUEST.
Use this functiom modue under AT SELECTION-SCREEN ON HELP-REQUEST FOR P_CARRID.
With this function module, you can fill your remainng parameters : P_carriername and booking also.
Sample Code:
DATA : TMP_RETURN_TAB LIKE TABLE OF DDSHRETVAL, TMP_RETURN LIKE DDSHRETVAL,
TMP_FIELD TYPE DFIES-FIELDNAME.
CASE AKIND.
WHEN '1'.
TMP_FIELD = 'AENNR'.
WHEN '2'.
TMP_FIELD = 'VBELN'.
WHEN '3'.
TMP_FIELD = 'ZZTEHAI'.
ENDCASE.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = TMP_FIELD
WINDOW_TITLE = ATITEL
VALUE_ORG = 'S'
TABLES
VALUE_TAB = ATABLES
RETURN_TAB = TMP_RETURN_TAB
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
IF SY-SUBRC = 0.
READ TABLE TMP_RETURN_TAB INDEX 1 INTO TMP_RETUN.
AVALUE = TMP_RETURN-FIELDVAL.
ENDIF.
Jus analyze this code, you can get ur requirement done.
Regards
Sandeep Reddy -
How to place a ABAP report program into a Change Request?
I used to create an ABAP4 report program, but maybe when I created it, I created it as local or $TMP that there is no any Change Request related to this program. Now I want to transport this program from Development to Test, how would create a Change Request that includes this program?
Thanks in advance!Kevin,
Generally objects saved in a local package are not transported. You should always assign those objects to a change request and a developemnt class or package.
Copy your program in to a new program and assign that new program to a CTS and a package. Then you always can rename the new program name to the old programs name once after deleting the old program.
Thanks -
Hi Experts
How to create toolbar in the Report program.
ie how to add gui status and how to code for it.
Pls suggest me.
Thanks in advance.
Regards
rajaramHi
This is my coding part inwhich i want to add a button in toolbar, Can you change this coding that where exactly changes needed and what.
Pls help me.
Regards
Rajaram
REPORT ZSAB_POLY_INVOICE.
tables : vbrp, vbrk, vbap.
DATA : BEGIN OF it_final OCCURS 0.
INCLUDE STRUCTURE ZINV_ORG.
DATA : END OF it_final.
data : wa like line of it_final.
data : mode type string.
data : flag type i,
flag1 type i.
DATA : fm_name TYPE rs38l_fnam.
DATA : w_formname TYPE tdsfname. "form name
w_formname = 'Z_POLY_ORGINAL'.
DATA: LX_OUTPUT TYPE SSFCOMPOP,
LX_CNTL TYPE SSFCTRLOP.
LX_CNTL-NO_DIALOG = 'X'.
LX_OUTPUT-TDDEST = 'LP01'.
SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE text-001.
PARAMETERS vbeln TYPE vbrk-vbeln matchcode object ZINVOICE.
PARAMETERS rtim TYPE vbrk-ERZET.
SELECTION-SCREEN END OF BLOCK bk1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
parameter : p_org as checkbox,
p_dup as checkbox,
p_tri as checkbox,
p_qua as checkbox.
SELECTION-SCREEN END OF BLOCK b2.
select a~vbeln
a~bukrs
b~posnr
b~werks
a~stceg
a~FKDAT
a~INCO1
a~INCO2
b~MATNR
b~ARKTX
b~FKIMG
b~UEPOS
from vbrk as a
inner join vbrp as b on avbeln = bvbeln
into corresponding fields of table it_final
where a~vbeln = vbeln.
break pro01.
if p_org is not initial and p_dup is not initial
and p_tri is not initial and p_qua is not initial.
mode = 'Original for Buyer'.
perform original.
mode = 'Duplicate'.
perform original.
mode = 'Triplicate'.
perform original.
mode = 'Quadruplicate'.
perform original.
elseif p_org is not initial and p_dup is not initial
and p_tri is not initial.
mode = 'Original for Buyer'.
perform original.
mode = 'Duplicate'.
perform original.
mode = 'Triplicate'.
perform original.
elseif p_dup is not initial and p_tri is not initial
and p_qua is not initial.
mode = 'Duplicate'.
perform original.
mode = 'Triplicate'.
perform original.
mode = 'Quadruplicate'.
perform original.
elseif p_org is not initial and p_dup is not initial.
mode = 'Original for Buyer'.
perform original.
mode = 'Duplicate'.
perform original.
elseif p_tri is not initial and p_qua is not initial.
mode = 'Triplicate'.
perform original.
mode = 'Quadruplicate'.
perform original.
elseif p_org is not initial and p_tri is not initial.
mode = 'Original for Buyer'.
perform original.
mode = 'Triplicate'.
perform original.
elseif p_dup is not initial and p_tri is not initial
and p_qua is not initial.
mode = 'Original for Buyer'.
perform original.
mode = 'Duplicate'.
perform original.
mode = 'Triplicate'.
perform original.
elseif p_org is not initial.
mode = 'Original for Buyer'.
perform original.
endif.
*& Form original
text
--> p1 text
<-- p2 text
FORM original .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = w_formname
VARIANT = ' '
DIRECT_CALL = ' '
IMPORTING
FM_NAME = fm_name
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION '/1BCDWB/SF00000447'
EXPORTING
RTIM = RTIM
MODE = MODE
*ARCHIVE_INDEX =
*ARCHIVE_INDEX_TAB =
*ARCHIVE_PARAMETERS =
CONTROL_PARAMETERS = LX_CNTL
*MAIL_APPL_OBJ =
*MAIL_RECIPIENT =
*MAIL_SENDER =
OUTPUT_OPTIONS = LX_OUTPUT
*USER_SETTINGS = 'X'
*BOL_NUM =
*CARRIER_NAME =
*SHIP_FROM_ADR =
*SHIP_TO_ADR =
*THIRD_PARTY_ADR =
*IMPORTING
*DOCUMENT_OUTPUT_INFO =
*JOB_OUTPUT_INFO =
TABLES
it_final = it_final
IF sy-subrc = 0.
*MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. -
Trigger report program if Z table field is modified/created
Hi,
I have a requirement where i want to run the report program ONLY if a particular field ( Dispatch date ) is modified or updated of a 'Z' Table ( Custom Table ).
The report program would fetch data from the same 'Z' table only for those records which are modified/updated. This data is then transferred to an application server.
1. How should i trigger the report program for the above requirement.
2. If a background program is to be created, then what should be the trigerring criteria & where it should be defined.
3. Do i need to set any change pointers etc.
Pointers to the above requirement would be very helpful.
Thanks in advance,
Best regards,
Prashanthi prashant,
i'm working on a similar query as that of ur's.
see the logic is as we proceed in ur case is DISPATCH DATE say are to be modified in the process of inserting 0r changing the contents of a ZTABLE.
so here the logic would be
loop at itab.
MODIFY ZTABLE FROM TABLE ITAB.
endloop.
This is the key reference in our logic .
now it is known that u have a ZTABLE with dispatch date
here the data element will be DATUM .
now in the ZTABLE go to DISPATCH DATE filed i.e its DATA ELEMET double click on data element DATUM .
now if u see here there will be a tick called as Checkbox on change document which is enabling the CDHDR and CDPOS.
*if its not checked get it checked in .
This is the source to the logic.
now what u need to do in ur logic part is
1. collect all the entries of the table.
(im not sure how many entries are there but try to get all the primary keys + one or two more fields so that the time is saved . this we do to check.
2. before the modify comes into affect see if u can store all the content of the table i.e step 1.
3.lets say we have modified the ZTABLE.
4.now collect all the entries i.e newly modified into new inttab with same logic as the basic primary key configurations + two fields .
5. let the two internal tables be compared and based on the comparision derive a new internal table as follows .
REPORT ztemp .
TYPES: BEGIN OF line,
brand(10) TYPE c,
rate(3) TYPE p DECIMALS 2,
gender(1) TYPE c,
sno TYPE i,
desc(30) TYPE c,
END OF line.
DATA: it_lines_1 TYPE TABLE OF line
WITH KEY brand
rate
gender,
wa_lines_1 LIKE LINE OF it_lines_1.
DATA: it_lines_2 TYPE TABLE OF line
WITH KEY brand
rate
gender,
wa_lines_2 LIKE LINE OF it_lines_2.
DATA: gi_counter TYPE i.
START-OF-SELECTION.
PERFORM fill_it_line_1. " not included; tested with your 4 records
SORT it_lines_1.
CLEAR gi_counter.
LOOP AT it_lines_1 INTO wa_lines_1.
wa_lines_2 = wa_lines_1.
ADD 1 TO gi_counter.
AT END OF gender.
IF gi_counter > 1.
APPEND wa_lines_2 TO it_lines_2.
ENDIF.
CLEAR gi_counter.
ENDAT.
ENDLOOP.
This only works if you are able to define the fields of the internal table in this order, so with the key fields first in the right order. Otherwise the AT END OF will not work.
6. now if u can reach upto here then we need not create a background program .
7. u are exactly right change pointers will have to come into picture .
8 .then comes the picture of moving this content to application server using datasets etc.
hope this helps u in building the logic .
i would like to hear from other developers too in this regard.
Thanks and regards,
vijay. -
Is there a way to download all z reports/programs?
Hello experts,
I want to download z reports/programs in my PC. I know I can do this by using the download option but it is tedious.
Again, thank you guys and have a great day!Hi,
Below are the links for program to mass download source code including function groups,text pools and reports:
http://sap.ittoolbox.com/code/archives.asp?d=1623&a=s&i=10
http://sap.ittoolbox.com/code/archives.asp?d=3333&a=s&i=10
http://www.sap-img.com/abap/download-and-upload-your-abap-program.htm
http://www.members.tripod.com/abap4/Upload_and_Download_ABAP_Source_Code.html
http://www.geocities.com/rmtiwari/Resources/Utilities/WebViewer.html
<i>Very helpful thread in your case:</i>
Z program to download all Z programs
<b>Reward if helpful</b>
Rgds,
Shakuntala -
The columns are missed in Backgroup job in report program
Hi experts,
I have a report program and I display it by WRITE statement. The total length of the report is about 550, and I set the line-size to 600. When I run it by backgroup job, it can not display the row completedly, the last 10 columns are missed. Do any one know what happpen and how I fixed it? Thanks in advance.
Best Regards
JoeHi Kiran,
I had completed the program and now I am showing you my solution in brief.
I hvae two programs to meet the solution. First is ZSDR0087 and next is ZSDR0087_RAW_PROGRAM. The former program is just for the purpose of calliing latter program, and latter program is for handling the program logic. The transaction code link to ZSDR0087 They are using a same selection screen.
Below is the cods of selection screen
SELECTION-SCREEN BEGIN OF BLOCK sel1 WITH FRAME TITLE text-001.
PARAMETERS: p_hbad TYPE /bluesky/cshbad-hbad OBLIGATORY MEMORY ID hba."#EC EXISTS
SELECT-OPTIONS: s_airli FOR /bluesky/mdairlz-airline MODIF ID m4,
s_altp FOR /bluesky/mdairlz-altp MODIF ID m4,
s_kunnr FOR knvv-kunnr MODIF ID m4,
s_prsdt FOR /bluesky/fecpost-prsdt MODIF ID m4,
* s_atdat FOR /bluesky/fearde-atdat OBLIGATORY,
s_actyp FOR /bluesky/mdacrt-actyp MODIF ID m4,
s_mtmcat FOR /bluesky/mdacrt-mtomcat MODIF ID m4,
s_regid FOR /bluesky/mdreg-regid MODIF ID m4,
s_fenum FOR /bluesky/fehdr-fenum MODIF ID m4.
PARAMETERS: p_en_ex TYPE c AS LISTBOX VISIBLE LENGTH 10 MODIF ID m4.
SELECTION-SCREEN END OF BLOCK sel1.
SELECTION-SCREEN BEGIN OF BLOCK run WITH FRAME TITLE text-003.
PARAMETERS: p_imm RADIOBUTTON GROUP grp1 DEFAULT 'X' USER-COMMAND comm."Run the program immdiately and show report at frontend
PARAMETERS: p_batch RADIOBUTTON GROUP grp1, "Run in backgroup job, the result will be saved at application server as .txt file
p_file TYPE g_type_file LOWER CASE MODIF ID m1. ".txt File name which will be saved in application server
PARAMETERS: p_ser RADIOBUTTON GROUP grp1. "Read the data from .txt file in application server
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(14) text-004 FOR FIELD p_txt MODIF ID m2.
PARAMETERS: p_txt TYPE g_type_file LOWER CASE MODIF ID m2."Source .txt file in application server
SELECTION-SCREEN COMMENT 50(14) text-005 FOR FIELD p_del MODIF ID m2.
PARAMETERS: p_del AS CHECKBOX MODIF ID m2. "The .txt file will be deleted once the report is generated
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK run.
SELECTION-SCREEN BEGIN OF BLOCK sel2 WITH FRAME TITLE text-002.
PARAMETERS: p_xls AS CHECKBOX DEFAULT '' MODIF ID m3."Generate the excel file in frontend
SELECTION-SCREEN END OF BLOCK sel2.
Main Code in ZSDR0083
REPORT zsdr0087 MESSAGE-ID zbluesky_program LINE-SIZE 530 NO STANDARD PAGE HEADING."#EC *
INCLUDE zsdr0087_top.
INCLUDE zsdr0087_common_blk.
INCLUDE zsdr0087_frm.
START-OF-SELECTION.
PERFORM handle_report.
FORM handle_report .
IF p_imm = 'X' OR p_ser = 'X'.
PERFORM run_program_without_batch.
ELSEIF p_batch = 'X'.
PERFORM submit_to_batch.
ENDIF.
ENDFORM. " handle_report
FORM run_program_without_batch .
DATA: lv_answer TYPE c.
IF p_ser = 'X' AND p_txt IS INITIAL.
MESSAGE s029.
EXIT.
ENDIF.
IF p_ser = 'X' AND p_del = 'X' AND p_xls = ''.
PERFORM popup_to_confirm USING 'Delete file in server' "titlebar
'The file in server will be deleted, are you going to save the data in Excel file?' "question
'SAVE IN EXCEL'"the text in first button
'ICON_XLS' "the icon for first button
'Not Save'
'ICON_WARNING'"the icon for second button
'1'"default button
'X'"display cancel button
CHANGING lv_answer.
CASE lv_answer.
WHEN '1'.
p_xls = 'X'.
WHEN '2'.
p_xls = ''.
WHEN 'A'.
MESSAGE s032.
EXIT.
ENDCASE.
ENDIF.
SUBMIT zsdr0087_raw_program WITH p_hbad = p_hbad
WITH s_airli IN s_airli
WITH s_altp IN s_altp
WITH s_kunnr IN s_kunnr
WITH s_prsdt IN s_prsdt
WITH s_actyp IN s_actyp
WITH s_mtmcat IN s_mtmcat
WITH s_regid IN s_regid
WITH p_en_ex = p_en_ex
WITH p_imm = p_imm
WITH p_batch = p_batch
WITH p_file = p_file
WITH p_ser = p_ser
WITH p_txt = p_txt
WITH p_del = p_del
WITH p_xls = p_xls
AND RETURN.
ENDFORM. " run_program_without_batch
FORM submit_to_batch .
DATA: lv_job_name TYPE tbtcjob-jobname,
lv_job_number TYPE tbtcjob-jobcount.
lv_job_name = p_file.
TRANSLATE lv_job_name TO UPPER CASE.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = lv_job_name
IMPORTING
jobcount = lv_job_number
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE e022.
ENDIF.
SUBMIT zsdr0087_raw_program WITH p_hbad = p_hbad
WITH s_airli IN s_airli
WITH s_altp IN s_altp
WITH s_kunnr IN s_kunnr
WITH s_prsdt IN s_prsdt
WITH s_actyp IN s_actyp
WITH s_mtmcat IN s_mtmcat
WITH s_regid IN s_regid
WITH p_en_ex = p_en_ex
WITH p_imm = p_imm
WITH p_batch = p_batch
WITH p_file = p_file
WITH p_ser = p_ser
WITH p_txt = p_txt
WITH p_xls = p_xls
VIA JOB lv_job_name NUMBER lv_job_number
AND RETURN.
IF sy-subrc NE 0.
MESSAGE e023 WITH 'zsdr0087_raw_program'..
ENDIF.
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = lv_job_number
jobname = lv_job_name
strtimmed = 'X'
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
OTHERS = 8.
IF sy-subrc NE 0.
MESSAGE e025.
ELSE.
MESSAGE s026.
ENDIF.
ENDFORM. " submit_to_batch
:OK, Below is main code in program ZSDR0087_RAW_PROGRAM
REPORT zsdr0087 MESSAGE-ID zbluesky_program LINE-SIZE 530 NO STANDARD PAGE HEADING."#EC *
INCLUDE zsdr0087_top.
INCLUDE zsdr0087_common_blk.
INCLUDE zsdr0087_frm.
START-OF-SELECTION.
IF sy-tcode EQ 'SE38' OR sy-tcode EQ 'SA38'.
MESSAGE s035.
EXIT.
ENDIF.
CREATE OBJECT go_bluesky_program
EXPORTING
i_home_base = p_hbad.
IF p_imm = 'X' OR p_batch = 'X'.
******** Get data from database
PERFORM get_data_from_db.
IF p_batch = 'X'.
*******Save the data the server as .txt file, it will run at backgroup Job
PERFORM save_data_to_server USING <gt_output>
p_hbad
gv_run_time
gv_run_date
sy-uname
gv_top_folder
p_file
go_bluesky_program->gt_fieldcat_lvc.
EXIT.
ENDIF.
ELSE.
******** Get data from server
PERFORM get_data_from_server.
ENDIF.
IF <gt_output> IS ASSIGNED AND <gt_output> IS NOT INITIAL.
IF p_xls = 'X' AND p_batch = ''.
PERFORM output_excel.
ENDIF.
PERFORM display_report.
ELSE.
MESSAGE s004(zbluesky_program).
ENDIF.
If parameter p_batch is check, The subroutine save_data_to_server will save the internal table data as .txt file at server.This is run in backgroup.Please set your focus on the function module C13Z_TEXT_WRITE
FORM save_data_to_server USING ut_internal_table TYPE STANDARD TABLE
u_home_base
u_run_time TYPE syuzeit
u_run_date TYPE sydatum
u_user TYPE syuname
u_top_folder TYPE rsmrgstr-path
u_filename TYPE g_type_file
ut_fieldcat_lvc TYPE lvc_t_fcat.
FIELD-SYMBOLS: <lt_table_dataset> TYPE STANDARD TABLE.
DATA: lv_table_ref TYPE REF TO data.
DATA: lv_filename TYPE rcgiedial-iefile.
DATA: lv_file_pattern TYPE rsmrgstr-name.
CALL METHOD go_bluesky_program->convert_data_to_dataset_format
EXPORTING
it_internal_table = ut_internal_table
it_fieldcat_lvc = ut_fieldcat_lvc
IMPORTING
et_table_ref = lv_table_ref.
ASSIGN lv_table_ref->* TO <lt_table_dataset>.
*******Create file name
PERFORM get_filename USING
u_home_base
u_user
u_run_date
u_run_time
u_filename
CHANGING lv_filename
lv_file_pattern.
******Check filename again
PERFORM check_filename_if_duplicate
USING
lv_filename
u_top_folder
lv_file_pattern.
******Create dataset path
CONCATENATE u_top_folder lv_filename INTO lv_filename.
CALL FUNCTION 'C13Z_TEXT_WRITE'
EXPORTING
i_file = lv_filename
TABLES
i_textdata_tab = <lt_table_dataset>
EXCEPTIONS
no_permission = 1
open_failed = 2
ap_file_exists = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE e021.
ENDIF.
ENDFORM. " save_data_to_server
If parameter p_ser is check, The subroutine get_data_from_server will read the data from .txt file in server and put it into internal table. Please focus on the DO looping in the subroutine.It is the codes for reading data from .txt file into internal table.
FORM get_data_from_server .
FIELD-SYMBOLS: <lt_table_dataset> TYPE STANDARD TABLE,
<ls_line_dataset> TYPE ANY,
<field_runtime> TYPE ANY,
<field_dataset> TYPE ANY.
DATA: lv_table_ref TYPE REF TO data,
lv_line_ref TYPE REF TO data.
DATA: lv_file TYPE string.
DATA: ls_file_record TYPE rsfillst.
DATA: ls_fieldcat_lvc TYPE lvc_s_fcat.
PERFORM build_output_table.
******Get the dataset format(all the fiels are CHAR type)
CALL METHOD go_bluesky_program->convert_data_to_dataset_format
EXPORTING
it_internal_table = <gt_output>
it_fieldcat_lvc = go_bluesky_program->gt_fieldcat_lvc
IMPORTING
et_table_ref = lv_table_ref.
ASSIGN lv_table_ref->* TO <lt_table_dataset>.
CREATE DATA lv_line_ref LIKE LINE OF <lt_table_dataset>.
ASSIGN lv_line_ref->* TO <ls_line_dataset>.
PERFORM get_file_record
USING
sy-mandt
sy-uname
p_hbad
gv_top_folder
CHANGING
ls_file_record.
CONCATENATE ls_file_record-dirname ls_file_record-name INTO lv_file.
OPEN DATASET lv_file FOR INPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc NE 0.
MESSAGE e030 WITH p_txt.
ENDIF.
DO.
READ DATASET lv_file INTO <ls_line_dataset>.
IF sy-subrc EQ 0.
IF <ls_line_dataset> IS NOT INITIAL.
APPEND <ls_line_dataset> TO <lt_table_dataset>.
CLEAR <ls_line_dataset>.
ENDIF.
ELSE.
EXIT.
ENDIF.
ENDDO.
CLOSE DATASET lv_file.
IF p_del = 'X'.
DELETE DATASET lv_file.
ENDIF.
* break chengr.
LOOP AT <lt_table_dataset> ASSIGNING <ls_line_dataset>.
LOOP AT go_bluesky_program->gt_fieldcat_lvc INTO ls_fieldcat_lvc.
ASSIGN COMPONENT ls_fieldcat_lvc-fieldname
OF STRUCTURE <ls_line_dataset> TO <field_dataset>.
ASSIGN COMPONENT ls_fieldcat_lvc-fieldname
OF STRUCTURE <gs_output> TO <field_runtime>.
<field_runtime> = <field_dataset>.
ENDLOOP.
APPEND <gs_output> TO <gt_output>.
ENDLOOP.
At last, I think you understand how to display it in ALV .
Maybe you are looking for
-
View Crystal Report Layout for my UDO Form
Hi all, I try to view a report created for my UDO form. I set all settings in Administration -> Setup -> General -> Report and Layout Manager. Now I wonder what should be assigned to eventInfo.LayoutKey. I tried assigned report's DocCode from RDOC,
-
I just went to update my iPhone 5S as it asked me to, and it got to the point with the apple logo on the screen and the black loading bar underneath, but then the screen went black and the phone now won't turn on? I went to plug it into my computer a
-
Update was terminated on WSM8 " POSTING_ILLEGAL_STATEMENT"
Hi all our system is ecc6 with IS -retail activated. support Stack level is 12 and database is oracle , os is windows. We are getting express document error " Update was terminated " when executing WSM8 . on ST22, we are getting following error POSTI
-
First off, here's the code. It's a simple socket client that I want to talk to my server client. I would love for this to end up being more like a telnet type application. import java.io.*; import java.net.*; public class Wire public static void
-
Is this scam - spam???
SKYPE Communications 2 Waterhouse Sq (140 Holborn), London, Greater London, EC1N 2ST, United KingdomDear Skype User,Your Lucky number #3598# has won for you £259,000.00 GBP via the first quarter raffle draw on the on-going SKYPE AWARD PROMO.Please pr