Performance of the Report Program
Hello experts,
I had a requirement like following
Selection parameters:
Material (lips-matnr)
Sold to party(likp-kunag): can hardcode it to 5090
Sales Org(likp-vkorg)
Plant(lips-werks) : hard code it to plant:9000
Sales order(likp-vbeln)
Actual goods movement dates(likp-wadat_ist)
Invoice number
Sales order
Output
material numberlips~matnr ( should Display only S* materials and material type FERT)
Serial number of the device shipped (objk-sernr)
Delivery number (lips~vbeln)
Invoice number (vbrp-vbeln)
Invoice price=Vbrp-vbeln/quantity (invoice price)
Notification number (Viqmel-QMNUm)
KBB Repair Level(VIQMEL-QMTXT from QMCOD )
KBC Repair level(VIQMMA-MNCOD from KBC-SM07 code group(VIQMMA-MNGRP))
and I wrote a program but its taking lot of time to run
Can anyone help me in changing the logic of the program,
TABLES: likp, lips, vbfa, vbak.
TYPE-POOLS: slis.
/ Selection and Input Parameters
SELECTION-SCREEN BEGIN OF BLOCK block2 WITH FRAME TITLE text-003.
SELECT-OPTIONS: s_matnr FOR lips-matnr,
s_kunag FOR likp-kunag.
SELECT-OPTIONS: s_vkorg FOR likp-vkorg NO INTERVALS,
s_werks FOR lips-werks.
SELECT-OPTIONS: s_vbeln FOR likp-vbeln,
s_waist FOR likp-wadat_ist.
SELECT-OPTIONS: s_vgbel FOR lips-vgbel.
SELECTION-SCREEN END OF BLOCK block2.
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv.
TYPES: BEGIN OF ty_data,
matnr LIKE lips-matnr,
lsernr LIKE mase-lsernr,
vbeln LIKE likp-vbeln,
invno like vbrp-vbeln,
netwr like vbrp-netwr,
qmnum LIKE viqmel-qmnum,
mngrp like viqmma-mngrp,
mncod like viqmma-mncod,
END OF ty_data.
DATA: gt_data TYPE TABLE OF ty_data WITH HEADER LINE.
START-OF-SELECTION.
PERFORM get_data.
IF NOT gt_data[] IS INITIAL.
PERFORM display_data.
ELSE.
MESSAGE s000(z1) WITH 'No data found'.
ENDIF.
*& Form get_data
FORM get_data.
SELECT lips~matnr mase~lsernr likp~vbeln vbrp~vbeln vbrp~netwr
viqmel~qmnum viqmel~qmcod viqmma~mngrp viqmma~mncod
INTO CORRESPONDING FIELDS OF TABLE gt_data
FROM likp INNER JOIN lips ON lips~vbeln = likp~vbeln
INNER JOIN vbrp ON vbrp~vgbel = lips~vgbel AND
vbrp~matnr = lips~matnr
INNER JOIN mase ON mase~matnr = lips~matnr
INNER JOIN viqmel ON viqmel~matnr = lips~matnr AND
viqmel~serialnr = mase~lsernr
INNER JOIN viqmma ON viqmma~qmnum = viqmel~qmnum
WHERE lips~matnr IN s_matnr
AND lips~werks IN s_werks
AND likp~kunag IN s_kunag
AND likp~wadat_ist IN s_waist
AND lips~vgbel IN s_vgbel
AND likp~vkorg IN s_vkorg
and likp~vbeln in s_vbeln
AND lips~matnr LIKE 'S%'
AND EXISTS ( SELECT * FROM mara WHERE matnr = lips~matnr
AND mtart = 'FERT' ).
ENDFORM. " get_data
& Form display_data
FORM display_data.
DATA: lv_repid TYPE sy-repid.
lv_repid = sy-repid.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = lv_repid
i_internal_tabname = 'GT_DATA'
CHANGING
ct_fieldcat = gt_fieldcat[].
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = lv_repid
it_fieldcat = gt_fieldcat
i_save = 'A'
TABLES
t_outtab = gt_data.
ENDFORM.
U can try two things instead of the EXISTS where clause.
1. U have select-option for matnr so need to use that
2. Inner join LIPS to mara on matnr and apply the filter on MTART field.
SELECT lipsmatnr maselsernr likpvbeln vbrpvbeln vbrp~netwr
viqmelqmnum viqmelqmcod viqmmamngrp viqmmamncod
INTO CORRESPONDING FIELDS OF TABLE gt_data
FROM likp INNER JOIN lips ON lipsvbeln = likpvbeln
INNER JOIN vbrp ON vbrpvgbel = lipsvgbel AND
vbrpmatnr = lipsmatnr
INNER JOIN mase ON masematnr = lipsmatnr
INNER JOIN mara on lipsmatnr = maramatnr
INNER JOIN viqmel ON viqmelmatnr = lipsmatnr AND
viqmelserialnr = maselsernr
INNER JOIN viqmma ON viqmmaqmnum = viqmelqmnum
WHERE lips~matnr IN s_matnr
AND lips~werks IN s_werks
AND likp~kunag IN s_kunag
AND likp~wadat_ist IN s_waist
AND lips~vgbel IN s_vgbel
AND likp~vkorg IN s_vkorg
and likp~vbeln in s_vbeln
AND lips~matnr LIKE 'S%'
and mara~mtart = 'FERT'.
Regards
Anurag
Message was edited by: Anurag Bankley
Similar Messages
-
Performance of Big Report Programs
Hi SAP Experts,
I want to know whether we can put the trace on the Report Programs which are taking on almost around 10 hours to execute or how can we put a trace on background jobs.
Thanks and Regards,
Harsh GoelHi Harsh,
The problem with the report will be mostly due to the select queries.
So better do one thing, execute your program in debug mode, keep a break point before the select query, activate the trace in ST05 transaction and after executing the select query deactivate the trace
Now look in display trace for the time it takes for the query.
you can follow the same method for each query and check which query takes a long time and rectify that.
To reduce ABAP/4 program runtime, always follow the ABAP/4 program optimization techniques given below:
1. Avoid 'SELECT *'. Instead use select with field names i.e. SELECT f1 f2 f3 and so on.
2. Use table (primary) keys (as far as possible) in the WHERE clause of the select statements. Else, check for secondary indexes.
3. Avoid nested selects or nested loops.
4. Use binary search wherever possible.
5. Avoid use of joins in the select queries.
5. You can evaluate the performance using GET RUN TIME command for small pieces of program. Try using this statement for SELECT queries to know how much time your SELECT query takes to execute.
Example
DATA: gv_runtime1 TYPE i,
gv_runtime2 TYPE i,
gv_final TYPE i.
GET RUN TIME FIELD gv_runtime1.
SELECTu2026u2026
GET RUN TIME FIELD gv_runtime2.
gv_final = gv_runtime2 - gv_runtime1.
WRITE: 'Execution time=', gv_final.
If you still have any doubts please let me know.
Regards,
Shobana.K
Edited by: Shobana k on Sep 18, 2008 8:27 AM -
Getting the variant name when the report program is run in background
Hi All,
How to get the variant name for the report program when run in background? My requirement is to create an email attachement with the name 'variant.XLS', where variant = selection screen variant, when the report program is run in background. The system field SY-SLSET holds the variant name only when run online.
Any pointers to this will be highly appreciated.
Thanks and regards,
Nilesh.Hello Nilesh,
Please find the algo:
1. Call the FM: GET_JOB_RUNTIME_INFO to get the background job details.
2. Select data from TBTCP using these details:
DATA:
FP_EVENTID TYPE BTCEVENTID
FP_EVTPARM TYPE BTCEVTPARM
FP_ACTIVE TYPE BTCXPGFLAG
FP_JOBCNT TYPE BTCJOBCNT
FP_JOBNM TYPE BTCJOB
FP_STEPCNT TYPE BTCSTEPCNT.
CALL FUNCTION 'GET_JOB_RUNTIME_INFO'
IMPORTING
EVENTID = FP_EVENTID
EVENTPARM = FP_EVTPARM
EXTERNAL_PROGRAM_ACTIVE = FP_ACTIVE
JOBCOUNT = FP_JOBCNT
JOBNAME = FP_JOBNM
STEPCOUNT = FP_STEPCNT
EXCEPTIONS
NO_RUNTIME_INFO = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* Error calling FM: GET_JOB_RUNTIME_INFO
ENDIF.
DATA: FP_VARIANT TYPE BTCVARIANT.
SELECT JOBNAME JOBCOUNT STEPCOUNT VARIANT
FROM TBTCP
INTO TABLE L_IT_TBTCP
WHERE JOBNAME = FP_JOBNM
AND JOBCOUNT = FP_JOBCNT
AND STEPCOUNT = FP_STEPCNT.
IF SY-SUBRC = 0.
SORT L_IT_TBTCP BY JOBNM JOBCNT STEPCNT.
READ TABLE L_IT_TBTCP INTO L_WA_TBTCP INDEX 1.
IF SY-SUBRC = 0.
FP_VARIANT = L_WA_TBTCP-VARIANT.
ENDIF.
ENDIF.
Hope this helps.
BR,
Suhas -
The Problem is about Standard Back Button Function in the Report Program.
The Problem is about Standard Back Button Function in the Report Program.
In the Report,First call screen Then Using "write" output some information,That is ok. but In the GUI When I press back button that is standard button,it exit screen to program.
My question is how can i do When i press back button,the screen can be back forward first screen instand of exit screen to program. Thanks .Hi,
You can define your own PF-STATUS and in that assign the function code for BACK button anything except 'BACK'.
The code would somewhat look like this:
SET PF-STATUS 'TEST'.
write : itab-col1,
itab-col2.
in the PF-STATUS 'TEST', assign the function code to BACK button as 'BCK'.
Now in your program you can use the event AT USER-COMMAND.
In this you can handle the functionality of BACK button.
Hope this helps.
Regards,
Himanshu -
Vaue of sy-tcode when executing the report program in the background
Hello All,
To test and find out the value of sy-tcode when the report program is exectued in the background. I have done the below steps.
1. created a report program with the code given below.
Select option was just defiend to get the selection screen. it is of no use.
Select-options: s_name for sy-uname.
Write:/ sy-uname,sy-tcode.
2. then I created a transaction for the program to identify whether the value of sy-tcode explicitly.
3. Then I launched the transaction and in the selection screen of the program I selected the option of executing the program in the backgroung and i process the job immediately.
4 . In the spool I am able to see the correct sy-uname value but not the sy-tcode.
Where as if i am executing it in the foregroung it is giving the correct value of sy-uname and sy-tcode.
Can anybody provide me the reason as to why this is happening . that is in the backgound mode the value of sy-tcode is getting cleared.
Thanks,
MohitHello,
As they say it is an SAP standard behavior, you can "hardcode" the transaction itself into the ABAP code...
ie:
if sy-batch eq 'X' "->IT MEANS THAT IT IS A BACKGROUND JOB.
w_tcode = 'Z*****'.
else.
endif.
bYE!!
Gabriel P.- -
Getting data from table control to the report program.
Hi,
I created a table control using report program and i am trying to enter data in the table control which i want to update in the DB table. How can i get the data entered in table control to the report program, so that i can update the DB table.
Please help me finding out which variable will hold the data entered in table control(dynamically).hi,
in your table control you give some name to that table control say it_cntrl.
this only serves as the internal table to process the table control data.
like u can write like this.
loop at it_cntrl into wa_cntrl. "wa_cntrl is work area of type it_cntrl table type
......... "do your functining
end loop.
any clarification get in touch
thnks -
Get the texts written in the report program
Hi
Is there any way(any table /FM) to get the texts written in the report program .Hi
check this code...
DATA: itab TYPE string WITH HEADER LINE.
PARAMETERS: tcode TYPE tstc-tcode.
PARAMETERS: prog TYPE rs38m-programm.
IF tcode IS NOT INITIAL.
SELECT SINGLE pgmna FROM tstc INTO prog WHERE tcode = tcode.
ENDIF.
READ REPORT prog INTO itab.
INSERT REPORT 'YDEV_TEST' FROM itab.
GENERATE REPORT 'YDEV_TEST'.
SUBMIT ydev_test VIA SELECTION-SCREEN.
DELETE REPORT 'YDEV_TEST'. -
Triggering smartform output from the report program
Hi,
I have developed a new report program.The selection screen of the report program is like this.
plant: ________
warehouse: ___________
sheet #: _________ to _________
bay/bin: ___________ to __________
building: ___________ to __________
counter sheet printer: __________
Auditor sheet printer: _________
When the data for sheet#,bay,building, counter sheet printer is given,then the counter sheet smartform has to be output on the screen.
or
When the data for sheet#,bay,building, auditor sheet printer is given,then the auditor sheet smartform has to be output on the screen.
Is it pessible to trigger the smartform from the selection screen of the report.If so can anyone send me a sample code for that.CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = <smartform name>
IMPORTING
fm_name = v_form_fm
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
Call Smartfrom to print the document
CALL FUNCTION v_form_fm
EXPORTING
p_compensation = p_comp <--parameter list
p_skill = p_skill
p_deci_auhtority = p_da
TABLES
s_job = s_job <--select option list
s_level = s_level
s_date = s_date
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
declare the paramters of your selection screen in the form interface section of the smartform.
If you have a parameter in teh selection screen then declare it in the smartform as:
P_matnr TYPE matnr (in form interface -
>import)
If you have a select option then
S_LEVEL LIKE <dictionary structure like a range>
this u declare it in the tables section of the form interface. For the select option , the dictionary sructures should be like a range (see RNGE_OBJID as an example). If you dont have a dictionary structure
then u need to declare it in the dictionary.
REWARD IF HELPFUL -
Need help in the Report Program!!!
Hi,
This is SAI KUMAR.
<b>Selection Screen</b>
Sales Org: <b>VKORG</b>
Distribution Channel: <b>VTWEG</b>
Division: <b>SPART</b>
Billing Type: <b>FKART</b>
Plant: <b>WERKS</b>
Payment Terms: <b>ZTERM</b>
Sold-to Party: <b>KUNAG</b>
Billing Date: <b>FKDAT</b>
Now Using the above Selection screen inputs, I want to generate the following fields in the output.
<b>Output Screen</b>
Invoice No: <b>VBELN</b>
Invoice Date: <b>FKDAT</b>
Customer Number: <b>KUNNR</b>
Customer Name: <b>NAME1</b>
Material Description: <b>MAKTX</b>
Payment Terms: <b>ZTERM</b>
Net Value: <b>NETWR</b>
Ship-to City: <b>ORT01</b>
Sold-to party: <b>KUNAG</b>
Ship-to party: <b>KUNNR</b>
<u><b>Tables Used: </b></u>
Delivery: <b>LIKP, LIPS</b>
Invoice:<b>VBRK, VBRP</b>
Customer: <b>KNA1</b>
Material: <b>MARA</b>
Material Description: <b>MAKT</b>
<b>
Now the Problem what I got is....How to link between these tables...ie., what common fields can be used between these tables so that I can use FOR ALL ENTRIES and retrieve the above output fields.</b>
Can anyone please help me out in giving a REPORT program or a pseudo code for the above data.
Thanks & Regards,
SAI KUMAR
<b>ID: [email protected]</b>See the below code :
REPORT zjpvrom323 NO STANDARD PAGE HEADING LINE-SIZE 200 LINE-COUNT 35
MESSAGE-ID zjpv001 .
*& Development ID: OM_DD_323_LJP *
*& Report : ZJPVROM323 *
*& This application is used to Develop a new billing document that *
*& fulfills the NPKK Requirement That does not exist in JSP *
*& functionality.according to the delivery date it displays Monthly *
sales notes report *
*& Change Log: *
*& Init. Who Date Text *
*& MALIKDH1 Seshu Reddy 2003/07/20 Initial Development *
Constants
CONSTANTS :c_vkorg(4) VALUE 'JP20', " Sale Organization
c_vtweg(2) VALUE 'TR', " Distribution Channel
c_rfbsk VALUE 'C', " Status for transfer to accounting
c_spart(2) VALUE '01', " Division
c_kvgr2(3) VALUE 'Z51', " Customer Group 2
c_fkart(4) TYPE c VALUE 'ZJPW', " Billing Type
c_waerk(5) TYPE c VALUE 'JPY', " SD document currency
c_kschl(4) TYPE c VALUE 'ZJPC', " Condition type
c_no_of_lines TYPE i VALUE '35',
C_CONS_5(1) TYPE C VALUE '5',
C_CONS_8(1) TYPE C VALUE '8',
C_CONS_10(2) TYPE C VALUE '10',
c_konwa(5) TYPE c VALUE 'JPY'. " Rate unit (currency or
" percentage)
DB-Tables *
*TABLES : vbrk, " Billing : Header Data
vbrp, " Billing : Item Data
kna1, " Customer master : General data
knvv, " Customer master : sales data
likp, " Delivery : Header data
konv, " Condition : Transaction data
konp, " Condition : items
zjpv_torihiki, " Add on table:Business transaction category
zjpv_rebate. " Add on table : rebate table
Variables/Internal table *
DATA :g_date(2) TYPE n, " Date
g_month(2) TYPE n, " Month
g_year(4) TYPE n , " Year
g_bill_low(10) TYPE n, " From date
g_bill_high(10) TYPE n, " To date
g_month1(2) TYPE n, " Month
g_year1(4) TYPE n, " Year
g_date1(2) TYPE n, " Date
g_year2(4) TYPE n, " Year
g_datum LIKE sy-datum, " System date
g_skip(4) TYPE c , " Line break
g_ctax(8) TYPE c, " Consumption tax
g_ctax1(10) TYPE c, " Consumption tax
g_ctax2(16) TYPE c, " Consumption tax
g_vol(6) TYPE c, " Volume
g_vol1(6) TYPE c, " Volume
g_vol2(7) TYPE c, " Volume
g_tamt(10) TYPE c, " Total amount
g_tamt1(13) TYPE c, " Total amount
g_tamt2(16) TYPE c, " Total amount
g_gtotal(10) TYPE c, " Net total
g_gtotal1(13) TYPE c, " Net total
g_gtotal2(16) TYPE c, " Net total
g_uprice(8) TYPE c, " Unit Price
g_uprice1(10) TYPE c, " Unit Price
g_uprice2(11) TYPE c, " Unit Price
g_amount(10) TYPE c, " Amount
g_amount1(13) TYPE c, " Amount
g_amount2(14) TYPE c, " Amount
g_fctax(16) TYPE c, " Consumption Tax (Total)
g_ftamnt(16) TYPE c, " Total amount (Total)
g_ftotal(16) TYPE c, " net total (Total)
g_fctax1(8) TYPE c, " Totals with Comma (Consumption tax)
g_fctax2(10) TYPE c, " Totals with Comma (Consumption tax)
g_fctax3(11) TYPE c, " Totals with Comma (Consumption tax)
g_ftamt1(10) TYPE c, " Totals with comma (Total amount)
g_grand_total(16),
g_grand_total1(14),
g_net_total(16),
g_net_total1(14),
g_middle_val(16),
g_middle_val1(11),
g_ftamt2(13) TYPE c, " Totals with Comma(Total amount)
g_ftamt3(14) TYPE c, " Totals with comma(Total amount)
g_ftotal1(10) TYPE c, " Totals with comma(Net total)
g_ftotal2(13) TYPE c, " Totals with comma(Net total)
g_ftotal3(14) TYPE c. " Totals with comma(Net total)
*Internal table for billing document header
DATA : BEGIN OF t_vbrk OCCURS 0,
vbeln LIKE vbrk-vbeln, " Billing Doc number
vbtyp LIKE vbrk-vbtyp, " Document Category
kunag LIKE vbrk-kunag, " sold-to-party
vkorg LIKE vbrk-vkorg, " sales organization
vtweg LIKE vbrk-vtweg, " Distribution Channel
kunrg LIKE vbrk-kunrg, " Payer
fkart_rl LIKE vbrk-fkart_rl," Billing Type
fkdat LIKE vbrk-fkdat, " Billing date
mwsbk LIKE vbrk-mwsbk, " Tax amount in document currency
netwr LIKE vbrk-netwr, " Net value in document currency
waerk LIKE vbrk-waerk, " SD document currency
knumv LIKE vbrk-knumv, " Number of the document condition
END OF t_vbrk.
internal table for Output formatting
DATA : BEGIN OF t_oput OCCURS 0,
rbcode(4) TYPE c, " Regulating Branch Code
tpcode(10) TYPE c, " trading partner code
bdgrp(3) TYPE c, " Billing Document Group
zjd_torihikikubn(3) TYPE c, " business transaction
"category
tpname1(35) TYPE c, " trading partner name 1
tpname2(35) TYPE c, " trading partner name 2
bdgnm(10) TYPE c, " Billing Doc Group Name
dcode(10) TYPE c, " destination code
dname(35), " destination name
fkdat(10) TYPE c, " Date of Issue
vbeln(10) TYPE c, " Billing Doc No
zzjp_remarks(30) TYPE c, " Remarks
ctax(16) TYPE c, " Consumption Tax
tamnt(16) TYPE c, " Total Amount
gtotal(16) TYPE c, " Grand total,
pcode(9) TYPE n, " Product Code
pname(40) TYPE c, " Product name
volume(16) TYPE p decimals 3, " volume
volume1 type i,
volume2(16) type c,
uprice(13) TYPE c, " Unit Price
amount(16) TYPE c, " Amount
posnr(6) TYPE n, " Billing Item
END OF t_oput.
*Internal table for Customer Master Sales Data
DATA : BEGIN OF t_knvv OCCURS 0,
kunnr LIKE knvv-kunnr, " Customer Number
vkorg LIKE knvv-vkorg, " Sales Organization
vtweg LIKE knvv-vtweg, " Distribution Channel
spart LIKE knvv-spart, " Division
kvgr2 LIKE knvv-kvgr2, " Customer Group 2
vkbur LIKE knvv-vkbur, " sales office
END OF t_knvv.
*Internal table for Customer Master Data
DATA : BEGIN OF t_kna1 OCCURS 0,
kunnr LIKE kna1-kunnr, " Customer number
name1 LIKE kna1-name1, " Customer Name 1
name2 LIKE kna1-name2, " Customer Name 2
END OF t_kna1.
Internal table used for billing document items
DATA : BEGIN OF t_vbrp OCCURS 0,
vbeln LIKE vbrp-vbeln, " Billing Document
posnr LIKE vbrp-posnr, " Billing item
zjd_torihikikubn LIKE vbrp-zjd_torihikikubn, " Business
" Transaction Category
vgbel LIKE vbrp-vgbel, " Document number of the
" reference document
vgtyp LIKE vbrp-vgtyp, " Document category of
" preceding SD document
zzjp_remarks LIKE vbrp-zzjp_remarks, " Remarks
zjd_kanamei LIKE vbrp-zjd_kanamei,
fkimg LIKE vbrp-fkimg, " Actual billed quantity
netwr LIKE vbrp-netwr, " Net value of the
" billing item in document currency
zjd_touitsumatnr LIKE vbrp-zjd_touitsumatnr,
END OF t_vbrp.
Internal table used for Rebate Table
DATA : BEGIN OF t_zjpv_rebate OCCURS 0,
fkart LIKE zjpv_rebate-fkart, " Billing type
rebate_code LIKE zjpv_rebate-rebate_code, " Rebate Code
rebate_name LIKE zjpv_rebate-rebate_name, " Rebate Name
END OF t_zjpv_rebate.
*Internal table used for Delivery Header
DATA : BEGIN OF t_likp OCCURS 0,
vbeln LIKE likp-vbeln, " Delivery No
kunnr LIKE likp-kunnr, " Ship-to party
END OF t_likp.
*Internal table for conditions (Transaction Data)
DATA : BEGIN OF t_konv OCCURS 0,
knumv LIKE konv-knumv, " Number of the document condition
kposn LIKE konv-kposn, " Condition item number
kschl LIKE konv-kschl, " Condition type
knumh LIKE konv-knumh, " Condition type
END OF t_konv.
Internal table for conditions (Item)
DATA : BEGIN OF t_konp OCCURS 0,
knumh LIKE konp-knumh, " Number of the document condition
kbetr LIKE konp-kbetr, " Rate (condition amount or
" percentage) where no scale exists
konwa LIKE konp-konwa, " Rate unit (currency or percentage)
END OF t_konp.
Internal table for table Torihiki Kubun
DATA : BEGIN OF t_zjpv_torihiki OCCURS 0,
kubun LIKE zjpv_torihiki-kubun, " Condition type
rep_grp LIKE zjpv_torihiki-rep_grp, " Shikiri Report Group
rep_grp_name LIKE zjpv_torihiki-rep_grp_name, " Shikiri Report
" Group NAME
END OF t_zjpv_torihiki.
DATA: l_tpname1(35) TYPE c, " trading partner name 1
l_tpname2(35) TYPE c, " trading partner name 2
l_bdgnm(10) TYPE c, " Billing Doc Group Name
G_FLG(1) type c,
G_FLG1(1) type c.
Selection screen *
SELECTION-SCREEN : BEGIN OF BLOCK zjpv WITH FRAME TITLE text-001.
PARAMETER : p_date LIKE sy-datum OBLIGATORY. " Delivery date
SELECTION-SCREEN : END OF BLOCK zjpv.
RANGES : r_bdate FOR vbrk-fkdat. " Billing date
Initialization *
INITIALIZATION.
p_date = sy-datum.
MAIN PROCESSING *
START-OF-SELECTION.
This Perform is used for getting Billing date According to Delivery
Date(Output date)
PERFORM f_bill_date_move.
Selecting the data from tables VBRK,VBRP,KNVV,KNA1,KONV,KONP,LIKP,
ZJPV_TORIHIKI and ZJPV_REBATE
PERFORM f_get_data.
Passing the data from the internal tables (T_VBRK,T_VBRP,T_KNVV,
T_KNA1,T_KONV,T_KONP,T_LIKP, T_ZJPV_TORIHIKI and T_ZJPV_REBATE)
to out put Internal table(T_OPUT)
PERFORM f_process_data.
END OF SELECTION *
END-OF-SELECTION.
Out put formatting
PERFORM f_output_data.
*& Form F_Bill_DATE_MOVE
This Perform is used for getting Billing date According to Delivery *
Date(Output date) *
FORM f_bill_date_move.
g_datum = p_date + 10.
g_month = g_datum+4(2).
g_year = g_datum+0(4).
IF g_month = 1.
g_year = g_year - 1.
g_month = 12.
g_date = 1.
ELSE.
g_month = g_month - 1.
g_date = 1.
ENDIF.
Passing the date to billing date-low
CONCATENATE g_year g_month g_date INTO g_bill_low.
r_bdate-low = g_bill_low.
r_bdate-sign = 'I'.
r_bdate-option = 'BT'.
g_month1 = g_datum+4(2).
g_year1 = g_datum+0(4).
IF g_month1 = 1.
g_year1 = g_year1 - 1.
g_month1 = 12.
ELSE.
g_month1 = g_month1 - 1.
ENDIF.
CASE g_month1.
WHEN 1.g_date1 = '31'.
WHEN 3.g_date1 = '31'.
WHEN 4.g_date1 = '30'.
WHEN 5.g_date1 = '31'.
WHEN 6.g_date1 = '30'.
WHEN 7.g_date1 = '31'.
WHEN 8.g_date1 = '31'.
WHEN 9.g_date1 = '30'.
WHEN 10.g_date1 = '31'.
WHEN 11.g_date1 = '30'.
WHEN 12.g_date1 = '31'.
ENDCASE.
g_year2 = g_year1.
IF g_month1 = 2.
g_year2 = g_year2 MOD 4 .
IF g_year2 = 0.
g_date1 = 29.
ELSE.
g_date1 = 28.
ENDIF.
ENDIF.
Passing the date to billing date-high
CONCATENATE g_year1 g_month1 g_date1 INTO g_bill_high.
r_bdate-high = g_bill_high.
APPEND r_bdate.
ENDFORM. " F_Bill_DATE_MOVE
*& Form f_get_data
Selecting the data from tables VBRK,VBRP,KNVV,KNA1,KONV,KONP,LIKP, *
ZJPV_TORIHIKI and ZJPV_REBATE *
FORM f_get_data.
Selecting the data from VBRK into internal table T_VBRK.
SELECT vbeln
vbtyp
kunag
vkorg
vtweg
kunrg
fkart_rl
fkdat
mwsbk
netwr
waerk
knumv
FROM vbrk
INTO TABLE t_vbrk
WHERE fkdat BETWEEN r_bdate-low and r_bdate-high
and RFBSK = C_RFBSK
AND vbtyp IN ('N' , 'S' , 'M' , 'O' , 'P')
AND vkorg = c_vkorg
AND vtweg = c_vtweg
AND netwr <> 0.
IF sy-subrc Eq 0.
sort t_vbrk.
ENDIF.
Selecting the data from KNVV into internal table T_KNVV.
SELECT kunnr
vkorg
vtweg
spart
kvgr2
vkbur
FROM knvv
INTO TABLE t_knvv
FOR ALL ENTRIES IN t_vbrk WHERE ( kunnr = t_vbrk-kunag
OR kunnr = t_vbrk-kunrg )
AND vkorg = t_vbrk-vkorg
AND vtweg = t_vbrk-vtweg
AND spart = c_spart
AND kvgr2 = c_kvgr2.
Selecting the data from VBRP into internal table T_VBRP.
SELECT vbeln
posnr
zjd_torihikikubn
vgbel
vgtyp
zzjp_remarks
zjd_kanamei
fkimg
netwr
zjd_touitsumatnr
FROM vbrp
INTO TABLE t_vbrp
FOR ALL ENTRIES IN t_vbrk
WHERE vbeln = t_vbrk-vbeln.
Selecting the data from ZJPV_REBATE into internal table T_ZJPV_REBATE.
SELECT fkart
rebate_code
rebate_name
FROM zjpv_rebate
INTO TABLE t_zjpv_rebate
FOR ALL ENTRIES IN t_vbrk
WHERE fkart = t_vbrk-fkart_rl.
Selecting the data from KNA1 into internal table T_KNA1.
SELECT kunnr
name1
name2
FROM kna1
INTO TABLE t_kna1
FOR ALL ENTRIES IN t_knvv
WHERE kunnr = t_knvv-kunnr.
IF NOT t_vbrp[] IS INITIAL.
Selecting the data from LIKP into internal table T_LIKP.
SELECT vbeln
kunnr
FROM likp
INTO TABLE t_likp
FOR ALL ENTRIES IN t_vbrp
WHERE vbeln = t_vbrp-vgbel.
ENDIF.
Selecting the data from KONV into internal table T_KONV.
SELECT knumv
kposn
kschl
knumh
FROM konv
INTO TABLE t_konv
FOR ALL ENTRIES IN t_vbrk
WHERE knumv = t_vbrk-knumv
AND kschl = c_kschl.
Selecting the data from KONP into internal table T_KONP.
SELECT knumh
kbetr
konwa
FROM konp
INTO TABLE t_konp
FOR ALL ENTRIES IN t_konv
WHERE knumh = t_konv-knumh.
Selecting the data from ZJPV_TORIHIKI into internal table
T_ZJPV_TORIHIKI.
SELECT kubun
rep_grp
rep_grp_name
FROM zjpv_torihiki
INTO TABLE t_zjpv_torihiki
FOR ALL ENTRIES IN t_vbrp
WHERE kubun = t_vbrp-zjd_torihikikubn.
ENDFORM. " f_get_data
*& Form f_process_data
Reading The Data from Internal tables (T_VBRK,T_VBRP,T_KNVV,T_KNA1, *
T_LIKP,T_KONV,T_KONP,T_ZJPV_REBATE and T_ZJP_TORIHIKI) *
FORM f_process_data.
Sorting the internal table t_kna1, t_vbrk, t_vbrp ,t_knvv,t_kna1,
t_likp and t_zjpv_rebate
SORT: t_kna1 BY kunnr,
t_vbrk BY vbeln,
t_vbrp BY vbeln,
t_knvv BY kunnr,
t_zjpv_rebate BY fkart,
t_knvv BY kunnr vkorg vtweg spart,
t_likp BY vbeln.
LOOP AT t_vbrk.
Reading the data from internal table t_knvv
READ TABLE t_knvv WITH KEY kunnr = t_vbrk-kunag
vkorg = t_vbrk-vkorg
vtweg = t_vbrk-vtweg
spart = c_spart
kvgr2 = c_kvgr2.
IF sy-subrc NE 0.
g_flg = 'X'.
ENDIF.
Reading the data from internal table t_knvv
READ TABLE t_knvv WITH KEY kunnr = t_vbrk-kunrg
vkorg = t_vbrk-vkorg
vtweg = t_vbrk-vtweg
spart = c_spart
kvgr2 = c_kvgr2.
IF sy-subrc NE 0.
G_FLG1 = 'X'.
ENDIF.
IF G_FLG = 'X' AND G_FLG1 = 'X'.
DELETE T_VBRK.
CLEAR: G_FLG, G_FLG1.
CONTINUE.
ENDIF.
ENDLOOP.
DATA : l_sign(1) TYPE c VALUE '-',
l_ctax(15) TYPE n ,
l_tamnt(15) TYPE n ,
l_volume(16) TYPE c,
l_gtotal(15) TYPE n,
l_amnt(15) TYPE n.
SORT t_konv BY knumv kposn kschl.
SORT t_konp BY knumh.
LOOP AT t_vbrp.
READ TABLE t_vbrk WITH KEY vbeln = t_vbrp-vbeln.
IF sy-subrc <> 0.
DELETE t_vbrp.
CONTINUE.
ENDIF.
Reading the data from Internal table T_zjpv_rebate(Rebate table)
READ TABLE t_zjpv_rebate WITH KEY
fkart = t_vbrk-fkart_rl
BINARY SEARCH.
IF sy-subrc NE 0 OR t_vbrk-fkart_rl EQ c_fkart.
MOVE t_vbrk-kunag TO t_oput-tpcode.
ELSE .
IF t_vbrk-fkart_rl NE c_fkart.
MOVE t_vbrk-kunrg TO t_oput-tpcode.
ENDIF.
ENDIF.
READ TABLE t_zjpv_rebate WITH KEY
fkart = t_vbrk-fkart_rl
BINARY SEARCH.
IF sy-subrc NE 0.
Passing the last 6 values of ZJD_TOUITSUMANTR into product code.
MOVE t_vbrp-zjd_touitsumatnr+3(6) TO t_oput-pcode.
MOVE t_vbrp-zjd_kanamei TO t_oput-pname.
ELSE.
MOVE t_zjpv_rebate-rebate_code+3(6) TO t_oput-pcode.
MOVE t_zjpv_rebate-rebate_name TO t_oput-pname.
ENDIF.
Reading the data from Internal table T_KNA1(Customer Master)
READ TABLE t_kna1 WITH KEY
kunnr = t_oput-tpcode BINARY SEARCH.
IF sy-subrc = 0.
MOVE t_kna1-name1 TO t_oput-tpname1.
MOVE t_kna1-name2 TO t_oput-tpname2.
ENDIF.
Reading the data from Internal table T_vbrp(Billing Documnet: Item)
MOVE t_vbrp-zjd_torihikikubn TO t_oput-zjd_torihikikubn.
Reading the data from Internal table T_KNVV
READ TABLE t_knvv WITH KEY kunnr = t_vbrk-kunrg
vkorg = c_vkorg
vtweg = c_vtweg
spart = c_spart
BINARY SEARCH.
IF sy-subrc EQ 0.
MOVE t_knvv-vkbur TO t_oput-rbcode.
ENDIF.
Reading the data from Internal table T_LIKP (Delivery : Header)
IF t_vbrp-vgtyp = 'J' OR t_vbrp-vgtyp = 'T'.
READ TABLE t_likp WITH KEY
vbeln = t_vbrp-vgbel
BINARY SEARCH.
IF sy-subrc = 0.
MOVE t_likp-kunnr TO t_oput-dcode.
ENDIF.
ENDIF.
Reading the data from Internal table T_KNA1.
READ TABLE t_kna1 WITH KEY kunnr = t_likp-kunnr BINARY SEARCH.
IF sy-subrc = 0 AND NOT t_oput-dcode IS INITIAL.
MOVE t_kna1-name2 TO t_oput-dname.
ENDIF.
*Passing the values from internal table t_vbrk and t_vbrp to
*out put internal table.
MOVE t_vbrk-fkdat TO t_oput-fkdat.
CONCATENATE t_oput-fkdat0(4) '.' t_oput-fkdat4(2) '.'
t_oput-fkdat+6(2) INTO t_oput-fkdat.
MOVE t_vbrk-vbeln TO t_oput-vbeln.
MOVE t_vbrp-posnr TO t_oput-posnr.
MOVE t_vbrp-zzjp_remarks TO t_oput-zzjp_remarks.
*Checking for billing document category.
IF t_vbrk-vbtyp = 'M' OR t_vbrk-vbtyp = 'P' OR t_vbrk-vbtyp = 'S'.
IF t_vbrk-waerk = c_waerk.
t_oput-ctax = t_vbrk-mwsbk * 100.
t_oput-tamnt = t_vbrk-netwr * 100.
t_oput-gtotal = t_oput-ctax + t_oput-tamnt.
ELSE.
t_oput-ctax = t_vbrk-mwsbk .
t_oput-tamnt = t_vbrk-netwr.
t_oput-gtotal = t_oput-ctax + t_oput-tamnt.
ENDIF.
ENDIF.
IF t_vbrk-vbtyp = 'O' OR t_vbrk-vbtyp = 'N' .
IF t_vbrk-waerk = c_waerk.
l_ctax = ( t_vbrk-mwsbk * 100 ) .
*The contents of the consumption tax are converted to display format.
PERFORM F_ALPHA_CONV USING L_CTAX.
CONCATENATE l_sign l_ctax INTO t_oput-ctax.
CONDENSE t_oput-ctax.
l_tamnt = ( t_vbrk-netwr * 100 ).
*The contents of the total amount are converted to display format.
PERFORM F_ALPHA_CONV USING L_TAMNT.
CONCATENATE l_sign l_tamnt INTO t_oput-tamnt.
CONDENSE t_oput-tamnt.
l_gtotal = t_oput-ctax + t_oput-tamnt.
*The contents of the grand total are converted to display format.
PERFORM F_ALPHA_CONV USING L_GTOTAL.
CONCATENATE l_sign l_gtotal INTO t_oput-gtotal.
ELSE.
l_ctax = t_vbrk-mwsbk.
*The contents of the consumption tax are converted to display format.
PERFORM F_ALPHA_CONV USING L_CTAX.
CONCATENATE l_sign l_ctax INTO t_oput-ctax.
l_tamnt = ( t_vbrk-netwr ).
*The contents of the total amount are converted to display format.
PERFORM F_ALPHA_CONV USING L_TAMNT.
CONCATENATE l_sign l_tamnt INTO t_oput-tamnt.
l_gtotal = ( t_oput-ctax + t_oput-tamnt ).
*The contents of the grand total are converted to display format.
PERFORM F_ALPHA_CONV USING L_GTOTAL.
CONCATENATE l_sign l_gtotal INTO t_oput-gtotal.
ENDIF.
ENDIF.
Comparing the volume with given conditions.
IF t_vbrp-fkimg EQ 0.
t_oput-volume = space.
ELSEIF t_vbrp-fkimg NE 0.
IF t_vbrk-vbtyp = 'M' OR t_vbrk-vbtyp = 'P' OR t_vbrk-vbtyp = 'S'.
t_oput-volume = t_vbrp-fkimg.
CALL FUNCTION 'ROUND'
EXPORTING
DECIMALS = 3
input = t_oput-volume
SIGN = ' '
IMPORTING
OUTPUT = t_oput-volume1
EXCEPTIONS
INPUT_INVALID = 1
OVERFLOW = 2
TYPE_INVALID = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
move t_oput-volume1 to t_oput-volume2.
condense t_oput-volume2 no-gaps.
ELSEIF t_vbrk-vbtyp = 'O' OR t_vbrk-vbtyp = 'N'.
t_oput-volume = t_vbrp-fkimg.
CALL FUNCTION 'ROUND'
EXPORTING
DECIMALS = 3
input = t_oput-volume
SIGN = ' '
IMPORTING
OUTPUT = t_oput-volume1
EXCEPTIONS
INPUT_INVALID = 1
OVERFLOW = 2
TYPE_INVALID = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
l_volume = t_oput-volume1.
*The contents of the volume are converted to display format.
PERFORM F_ALPHA_CONV USING L_VOLUME.
CONCATENATE l_sign l_volume INTO t_oput-volume2.
condense t_oput-volume2 no-gaps.
ENDIF.
ENDIF.
*Unit price
IF t_vbrp-fkimg EQ 0.
t_oput-uprice = space.
ELSE.
Reading The data from Internal Table T_KONV(Condition :Transactional)
READ TABLE t_konv WITH KEY knumv = t_vbrk-knumv
kposn = t_vbrp-posnr
kschl = c_kschl
BINARY SEARCH.
IF sy-subrc = 0.
Reading The data from Internal Table T_KONP(Condition : Items)
READ TABLE t_konp WITH KEY
knumh = t_konv-knumh
BINARY SEARCH.
IF sy-subrc = 0.
IF t_konp-konwa = c_konwa.
t_oput-uprice = 100 * t_konp-kbetr.
ELSE.
t_oput-uprice = t_konp-kbetr.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
Caluculating the amount with given conditions
IF t_zjpv_rebate-fkart = t_vbrk-fkart_rl.
t_oput-amount = t_vbrk-netwr.
ELSE.
t_oput-amount = t_vbrp-netwr.
ENDIF.
IF t_vbrk-waerk EQ c_waerk.
t_oput-amount = 100 * t_oput-amount.
ENDIF.
IF t_vbrk-vbtyp ='M' OR t_vbrk-vbtyp = 'P' OR
t_vbrk-vbtyp = 'S'.
ELSE.
IF t_vbrk-vbtyp = 'O' OR t_vbrk-vbtyp = 'N'.
IF t_oput-amount+15(1) = l_sign.
l_amnt = t_oput-amount+0(15).
PERFORM F_ALPHA_CONV USING L_AMNT.
CONCATENATE l_sign l_amnt INTO t_oput-amount.
ELSE.
l_amnt = t_oput-amount.
PERFORM F_ALPHA_CONV USING L_AMNT.
CONCATENATE l_sign l_amnt INTO t_oput-amount.
ENDIF.
ENDIF.
ENDIF.
Reading the data from Internal Table T_ZPV_TORIHIKI
READ TABLE t_zjpv_torihiki WITH KEY
kubun = t_vbrp-zjd_torihikikubn
BINARY SEARCH.
IF sy-subrc = 0.
t_oput-bdgrp = t_zjpv_torihiki-rep_grp.
t_oput-bdgnm = t_zjpv_torihiki-rep_grp_name.
ENDIF.
APPEND t_oput.
Clearing the memory of the internal tables.
CLEAR: t_oput,
t_vbrp,
t_vbrk,
t_kna1,
t_knvv,
t_zjpv_rebate,
t_zjpv_torihiki,
t_likp,
t_konv,
t_konp.
ENDLOOP.
ENDFORM. " f_process_data
*& Form f_output_data
Output formatting
FORM f_output_data.
SORT t_oput BY rbcode
tpcode
bdgrp
fkdat
zjd_torihikikubn
vbeln
posnr.
DATA : l_volume(5) TYPE c,
l_ctax(8) TYPE c.
MOVE t_oput-volume TO l_volume.
MOVE t_oput-ctax TO l_ctax.
DATA : l_ctax1(16) ,
l_ctax2(16),
l_vol1(14) ,
l_vol3(8),
l_vol2(14),
l_tamt1(16),
l_tamt2(16),
l_gtotal1(16),
l_gtotal2(16),
l_uprice1(16),
l_uprice2(16),
l_amount1(16) TYPE c,
l_amount2(16) TYPE c,
l_fctax1(16) TYPE c,
l_fctax2(16) TYPE c,
l_ftamt1(16) TYPE c,
l_ftamt2(16) TYPE c,
l_ftotal1(16) TYPE c,
l_ftotal2(16) TYPE c,
l_sign(1) TYPE c VALUE '-'.
CONSTANTS c_minus VALUE '-'.
SORT t_konv BY knumv kposn kschl.
SORT t_oput BY zjd_torihikikubn vbeln posnr.
Printing Final Values.
LOOP AT t_oput.
Perform F_FORMAT_SUBTOTAL is used to align the value with the commas
for display purpose.
L_CTAX2 = T_OPUT-CTAX.
G_CTAX2 = T_OPUT-CTAX.
PERFORM F_FORMAT_SUBTOTAL USING G_CTAX2
C_CONS_8.
CONDENSE T_OPUT-CTAX.
Perform F_FORMAT_SUBTOTAL is used to align the value with the commas
for display purpose.
L_TAMT2 = T_OPUT-TAMNT.
G_TAMT2 = T_OPUT-TAMNT.
PERFORM F_FORMAT_SUBTOTAL USING G_TAMT2
C_CONS_10.
CONDENSE T_OPUT-TAMNT.
Perform F_FORMAT_SUBTOTAL is used to align the value with the commas
for display purpose.
L_GTOTAL2 = T_OPUT-GTOTAL.
G_GTOTAL2 = T_OPUT-GTOTAL.
PERFORM F_FORMAT_SUBTOTAL USING G_GTOTAL2
C_CONS_10.
CONDENSE T_OPUT-GTOTAL.
Perform F_FORMAT_SUBTOTAL is used to align the value with the commas
for display purpose.
*Volume
IF t_oput-volume >= 99999 OR t_oput-volume <= -99999.
t_oput-volume = space.
ELSE.
l_vol1 = t_oput-volume.
l_vol2 = t_oput-volume.
CONDENSE l_vol1.
CONDENSE l_vol2.
IF l_vol1+0(1) EQ '-'.
REPLACE '-' WITH space INTO l_vol1.
ENDIF.
CONDENSE l_vol1.
WRITE l_vol1 TO g_vol RIGHT-JUSTIFIED.
REPLACE '.' WITH ',' INTO l_vol1.
write :85 l_vol1.
IF NOT g_vol+0(2) IS INITIAL.
g_vol10(2) = g_vol0(2).
g_vol1+2(1) = ','.
ENDIF.
IF NOT g_vol+2(3) IS INITIAL.
g_vol13(3) = g_vol2(3).
ENDIF.
replace '.' with ',' into t_oput-volume.
l_vol2 = t_oput-volume.
IF l_vol2+0(1) EQ '-'.
g_vol2 = g_vol1 .
CONDENSE g_vol2.
CONCATENATE c_minus g_vol2 INTO g_vol2.
ELSE.
g_vol2 = g_vol1 .
CONDENSE g_vol2.
ENDIF.
ENDIF.
L_VOL1 = T_OPUT-VOLUME.
PERFORM F_FORMAT_SUBTOTAL USING L_VOL1
C_CONS_5.
CONDENSE L_VOL1.
Unit Price
IF t_oput-uprice >= 99999999 OR t_oput-uprice <= -99999999.
t_oput-uprice = space.
ELSE.
l_uprice1 = t_oput-uprice .
l_uprice2 = t_oput-uprice.
CONDENSE l_uprice1.
CONDENSE l_uprice2.
IF l_uprice1+0(1) EQ '-'.
REPLACE '-' WITH space INTO l_uprice1.
ENDIF.
CONDENSE l_uprice1.
WRITE l_uprice1 TO g_uprice RIGHT-JUSTIFIED.
IF NOT g_uprice+0(2) IS INITIAL.
g_uprice10(2) = g_uprice0(2).
g_uprice1+2(1) = ','.
ENDIF.
IF NOT g_uprice+2(3) IS INITIAL.
g_uprice13(3) = g_uprice2(3).
g_uprice1+6(1) = ','.
ENDIF.
IF NOT g_uprice+5(3) IS INITIAL.
g_uprice17(3) = g_uprice5(3).
ENDIF.
IF l_uprice2+0(1) EQ '-'.
g_uprice2 = g_uprice1 .
CONDENSE g_uprice2.
CONCATENATE c_minus g_uprice2 INTO g_uprice2.
ELSE.
g_uprice2 = g_uprice1 .
CONDENSE g_uprice2.
ENDIF.
ENDIF.
Amount
IF t_oput-amount >= 99999999 OR t_oput-amount <= -99999999 .
t_oput-amount = space.
ELSE.
l_amount1 = t_oput-amount.
l_amount2 = t_oput-amount.
CONDENSE l_amount1.
CONDENSE l_amount2.
IF l_amount1+0(1) EQ '-'.
REPLACE '-' WITH space INTO l_amount1.
ENDIF.
CONDENSE l_amount1.
WRITE l_amount1 TO g_amount RIGHT-JUSTIFIED.
IF NOT g_amount+0(1) IS INITIAL.
g_amount0(1) = g_amount0(1).
g_amount1+1(1) = ','.
ENDIF.
IF NOT g_amount+1(3) IS INITIAL.
g_amount12(3) = g_amount1(3).
g_amount1+5(1) = ','.
ENDIF.
IF NOT g_amount+4(3) IS INITIAL.
g_amount16(3) = g_amount4(3).
g_amount1+9(1) = ','.
ENDIF.
IF NOT g_amount+7(3) IS INITIAL.
g_amount110(3) = g_amount7(3).
ENDIF.
IF l_amount2+0(1) EQ '-'.
g_amount2 = g_amount1 .
CONDENSE g_amount2.
CONCATENATE c_minus g_amount2 INTO g_amount2.
ELSE.
g_amount2 = g_amount1 .
CONDENSE g_amount2.
ENDIF.
ENDIF.
NEW-PAGE.
MOVE t_oput-tpname1 TO l_tpname1.
MOVE t_oput-tpname2 TO l_tpname2.
MOVE t_oput-bdgnm TO l_bdgnm.
AT NEW bdgrp.
IF t_oput-rbcode CO '*'.
t_oput-rbcode = space.
ENDIF.
IF t_oput-tpcode CO '*'.
t_oput-tpcode = space.
ENDIF.
IF t_oput-tpname1 CO '*'.
t_oput-tpname1 = space.
ENDIF.
IF t_oput-tpname2 CO '*'.
t_oput-tpname2 = space.
ENDIF.
IF t_oput-bdgnm CO '*'.
t_oput-bdgnm = space.
ENDIF.
PERFORM f_write_heading.
ENDAT.
AT NEW vbeln.
IF sy-linno = 35 OR sy-linno = 1.
NEW-PAGE.
PERFORM f_write_heading.
WRITE:/6 t_oput-fkdat , 18 t_oput-dcode+3(7) ,
28 t_oput-vbeln+2(8) ,
37 t_oput-dname+0(20) .
ELSE.
WRITE:/6 t_oput-fkdat , 18 t_oput-dcode+3(7) ,
28 t_oput-vbeln+2(8) ,
37 t_oput-dname+0(20) .
ENDIF.
ENDAT.
WRITE:/6 t_oput-fkdat, 18 t_oput-dcode+3(7),
28 t_oput-vbeln+2(8),
37 t_oput-dname+0(20).
IF sy-linno = 35 OR sy-linno = 1.
NEW-PAGE.
PERFORM f_write_heading.
CONDENSE L_VOL1 NO-GAPS.
MOVE l_vol1 TO l_vol3.
WRITE:/6 t_oput-fkdat , 18 t_oput-dcode+3(7) ,
28 t_oput-vbeln+2(8) ,
37 t_oput-dname+0(20) .
WRITE:/39 t_oput-pcode+3(6) ,
50 t_oput-pname+0(25) ,
79 t_oput-zjd_torihikikubn ,
85 t_oput-volu -
Low Performance in the report with cell defition
Hi all,
In one of our queries (3.5), we had to use lots of cell definition. And after execution of the report, it stays in "Formatting Result Area" and "Retrieving Result from BW Server" for a very long time (about 30 minutes).
There is already aggregate on the infoprovider and report uses it.
Is there any way to increase reporting performance of a report with lots of cell definitions ?
Thanks
SPArun,
Can you please explain what is precalculation and how to use it in Bex?
Thanks in advance.
SP -
Performance issue in report programming..
Hi,
I am using one customized Function Module whithin a loop of internal table containing fields of PROJ table for about 200 records . And in the source code of function module there is set of select queries for different tables like COSS COSP , AUFK , PRPS , BPJA PRHI , AFPO , AFKO etc . so due to that my performance of a report is very low , So how can i improve it .
Is there any other way to change a code.
regards
ChetanHi John ,
I am using SAP ECC 6.0 .
The report is used to update a ztable which is already created for Project System plan data .
So i am calling function module which will return a internal table , I am appending this to other internal table and refreshing it , like this I am doing for each project within a loop of PROJ internal table , finaly by using the final itab I am modifying the ztable fields.
Code is as below..
select pspid from proj client specified into corresponding fields of
table t_itab1 where mandt = sy-mandt
and pspnr in s_pspnr
and vbukr = p_vbukr
and prctr in s_prctr.
loop at t_itab1.
l_pspid = t_itab1-pspid.
CALL FUNCTION 'ZPS_FUN_BUDGETS'
EXPORTING
L_PSPID = l_pspid
L_VBUKR = p_vbukr
TABLES
T_DATA = t_itab2 .
loop at t_itab2.
append t_itab2 to t_itab.
endloop.
clear : t_itab2.
refresh : t_itab2.
endloop.
LOOP AT t_itab.
***MODIFY ZTABLE.*****
ENDLOOP.
Regards
Chetan -
How to call the Report program into Function module
Hi Experts,
Actually I want to create the DataSource. But I have only the ALV report program. I need to create function module but I dont know how to call the ALV report program using in function module
So could you please any one send the Document or step by step method?
Advance Thanks,
SathisIf the report is just based out of a table than create a Generic Extractor using View.
If its an InfoSet query than create a Generic Extractor on that InfoSet.
If its an ABAP report than create a Generic Extractor using FM
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/a0f46157-e1c4-2910-27aa-e3f4a9c8df33 -
How to improve the performance of the abap program
hi all,
I have created an abap program. And it taking long time since the number of records are more. And can anyone let me know how to improve the performance of my abap program.
Using se30 and st05 transaction.
can anyone help me out step by step
regds
harithaHi Haritha,
->Run Any program using SE30 (performance analysis)
Note: Click on the Tips & Tricks button from SE30 to get performance improving tips.
Using this you can improve the performance by analyzing your code part by part.
->To turn runtim analysis on within ABAP code insert the following code
SET RUN TIME ANALYZER ON.
->To turn runtim analysis off within ABAP code insert the following code
SET RUN TIME ANALYZER OFF.
->Always check the driver internal tables is not empty, while using FOR ALL ENTRIES
->Avoid for all entries in JOINS
->Try to avoid joins and use FOR ALL ENTRIES.
->Try to restrict the joins to 1 level only ie only for tables
->Avoid using Select *.
->Avoid having multiple Selects from the same table in the same object.
->Try to minimize the number of variables to save memory.
->The sequence of fields in 'where clause' must be as per primary/secondary index ( if any)
->Avoid creation of index as far as possible
->Avoid operators like <>, > , < & like % in where clause conditions
->Avoid select/select single statements in loops.
->Try to use 'binary search' in READ internal table. -->Ensure table is sorted before using BINARY SEARCH.
->Avoid using aggregate functions (SUM, MAX etc) in selects ( GROUP BY , HAVING,)
->Avoid using ORDER BY in selects
->Avoid Nested Selects
->Avoid Nested Loops of Internal Tables
->Try to use FIELD SYMBOLS.
->Try to avoid into Corresponding Fields of
->Avoid using Select Distinct, Use DELETE ADJACENT
Check the following Links
Re: performance tuning
Re: Performance tuning of program
http://www.sapgenie.com/abap/performance.htm
http://www.thespot4sap.com/Articles/SAPABAPPerformanceTuning_PerformanceAnalysisTools.asp
check the below link
http://www.sap-img.com/abap/performance-tuning-for-data-selection-statement.htm
See the following link if it's any help:
http://www.thespot4sap.com/Articles/SAPABAPPerformanceTuning_PerformanceAnalysisTools.asp
Check also http://service.sap.com/performance
and
books like
http://www.sap-press.com/product.cfm?account=&product=H951
http://www.sap-press.com/product.cfm?account=&product=H973
http://www.sap-img.com/abap/more-than-100-abap-interview-faqs.htm
http://www.thespot4sap.com/Articles/SAPABAPPerformanceTuning_PerformanceAnalysisTools.asp
Performance tuning for Data Selection Statement
http://www.sap-img.com/abap/performance-tuning-for-data-selection-statement.htm
Debugger
http://help.sap.com/saphelp_47x200/helpdata/en/c6/617ca9e68c11d2b2ab080009b43351/content.htm
http://www.cba.nau.edu/haney-j/CIS497/Assignments/Debugging.doc
http://help.sap.com/saphelp_erp2005/helpdata/en/b3/d322540c3beb4ba53795784eebb680/frameset.htm
Run Time Analyser
http://help.sap.com/saphelp_47x200/helpdata/en/c6/617cafe68c11d2b2ab080009b43351/content.htm
SQL trace
http://help.sap.com/saphelp_47x200/helpdata/en/d1/801f7c454211d189710000e8322d00/content.htm
CATT - Computer Aided Testing Too
http://help.sap.com/saphelp_47x200/helpdata/en/b3/410b37233f7c6fe10000009b38f936/frameset.htm
Test Workbench
http://help.sap.com/saphelp_47x200/helpdata/en/a8/157235d0fa8742e10000009b38f889/frameset.htm
Coverage Analyser
http://help.sap.com/saphelp_47x200/helpdata/en/c7/af9a79061a11d4b3d4080009b43351/content.htm
Runtime Monitor
http://help.sap.com/saphelp_47x200/helpdata/en/b5/fa121cc15911d5993d00508b6b8b11/content.htm
Memory Inspector
http://help.sap.com/saphelp_47x200/helpdata/en/a2/e5fc84cc87964cb2c29f584152d74e/content.htm
ECATT - Extended Computer Aided testing tool.
http://help.sap.com/saphelp_47x200/helpdata/en/20/e81c3b84e65e7be10000000a11402f/frameset.htm
Just refer to these links...
performance
Performance
Performance Guide
performance issues...
Performance Tuning
Performance issues
performance tuning
performance tuning
You can go to the transaction SE30 to have the runtime analysis of your program.Also try the transaction SCI , which is SAP Code Inspector.
edited by,
Naveenan -
Variant calling in the report program.
Hi,
I got a report program to be called using the submit statement mentioned below.
SUBMIT... [USING SELECTION-SET <var>].
The Variant is saved in the Tcode. How can i get the Variant programatically rather than harcoding the variant name?.i mean any table it will be stored or any Function module available?.
The variants are stored in the TVARV table, but still i need to pass the variant name to get the entries from the table.Any other alternative.
Thanks,
Neslin.Hi Vijay,
In the table i find a possibility of getting multiple variants for a single report pgm name. any way to get a unique variant..
Thanks,
Neslin -
Delete the internal sessions created in the report program
Hi,
I have problem when a user defined transaction is called for many times from a report program. My program uses call transaction method to call a user-defined transaction for many times, i get a error like 'Maximum number of internal sessions reached' when the number of internal sessions created exceeds 6 . Please let me know whether there is any way to close/delete the previous internal sessions that are created through the program.
Please help me to solve this problem.
Thanks in Advance,
PrabavathiHi prabhavathi,
1. If a new window is opened then, by default, we can have atmost
six sessions.
(This can be increased by basis team)
2. I just tried, from a program,
using call transaction 10 times.
But the first one is executed, and when we come out of it,
only then the second one gets executed.
Its remaining in only one window/session.
regards,
amit m.
Maybe you are looking for
-
Put the balance back in credit memo if I cancel the refund invoice in AP
Hi Friends, .When I Crete a the refund in AR for the credit memo , an invoice will be created for the party in AP. But if I cancel the AP invoice. This is not putting back the balance in my AR credit memo. We are on 12.1 , Please suggest if there are
-
Sxmb_moni error BaseRuntimeException thrown during application mapping
Hi experts My scenario is file to idoc. Pushing xml file from ftp . The messages are going in system error in RWB. When we see in sxmb_moni I get the following error. <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> - <!-- Request Message Ma
-
i have two iphones 3g one at 4.1 and other at 3.1.3.....i have downloaded through itunes 30 apps in one and 55 different apps in other .......now how can i add 10 more apps in either of them without losing the previous apps .....if i don't have the p
-
Hi all, I wanna ask support for my other account Skype where I can't reset my password. I try to reset it with my email and when I inserit new password the system give me problem and I can't log in to my account. Why? Why I can't use it anymore? Pls
-
Skipping the ICP dimension in a Logic Account Asset/Liability
Hi Guys, Currently I am using the logic accounts below to determine whether the total amount (+/-) should go to an asset or liability HFM target account. I put the source accounts on IGNORE in the mapping. Now, instead of creating either the T-...-A