Why dont we like hard coded literald
Hello Abapler,
I am planning a workshop for developers concerning guidelines. They shall use less hard coding.
But... Why ?
It is clear for me in cases of translation. But what other reasons are there.
Do you have any source, ideas, examples ?
We are working with classic Abap and little OO
Thanks for every help !
Simone
>
Paul Chapman wrote:
> Also, if you have to change it and it's used in more then one place, you only need change it in one.
And if you used hard coding you will have to change it not only in several places but in all places. And most likely you will forget to change one place. The results can be strange...
One thing I would like to add: Most likely your developers will produce bugs once in a while. Or if they are perfect someone will try to use their programs for something they were not developed for. In the end you (or them) will have to debug the source code. And it's helping a lot if you can just search for a constant by it's name. If you just see in the code of somebody else that a 'magic' parameter is set to 42 you will have a really bad time to find all other places where 42 is used with the same intention.
But this are all reasons that are not restricted to ABAP. It's true in every programming language. And there is one easy way to teach a programmer not to use hard coding whenever he can avoid it without major performance drawbacks: Just let him do maintainance for some weeks...
Best regards,
Jan Stallkamp
Similar Messages
-
How could I replace hard coded value in my sql query with constant value?
Hi all,
Could anyone help me how to replace hardcoded value in my sql query with constant value that might be pre defined .
PROCEDURE class_by_day_get_bin_data
in_report_parameter_id IN NUMBER,
in_site_id IN NUMBER,
in_start_date_time IN TIMESTAMP,
in_end_date_time IN TIMESTAMP,
in_report_level_min IN NUMBER,
in_report_level_max IN NUMBER
IS
bin_period_length NUMBER(6,0);
BEGIN
SELECT MAX(period_length)
INTO bin_period_length
FROM bin_data
JOIN site_to_data_source_lane_v
ON bin_data.data_source_id = site_to_data_source_lane_v.data_source_id
JOIN bin_types
ON bin_types.bin_type = bin_data.bin_type
WHERE site_to_data_source_lane_v.site_id = in_site_id
AND bin_data.start_date_time >= in_start_date_time - numtodsinterval(1, 'DAY')
AND bin_data.start_date_time < in_end_date_time + numtodsinterval(1, 'DAY')
AND bin_data.bin_type = 2
AND bin_data.period_length <= 60;
--Clear the edr_class_by_day_bin_data temporary table and populate it with the data for the requested
--report.
DELETE FROM edr_class_by_day_bin_data;
SELECT site_to_data_source_lane_v.site_id,
site_to_data_source_lane_v.site_lane_id,
site_to_data_source_lane_v.site_direction_id,
site_to_data_source_lane_v.site_direction_name,
bin_data_set.start_date_time,
bin_data_set.end_date_time,
bin_data_value.bin_id,
bin_data_value.bin_value
FROM bin_data
JOIN bin_data_set
ON bin_data.bin_serial = bin_data_set.bin_serial
JOIN bin_data_value
ON bin_data_set.bin_data_set_serial = bin_data_value.bin_data_set_serial
JOIN site_to_data_source_lane_v
ON bin_data.data_source_id = site_to_data_source_lane_v.data_source_id
AND bin_data_set.lane = site_to_data_source_lane_v.data_source_lane_id
JOIN (
SELECT CAST(report_parameter_value AS NUMBER) lane_id
FROM report_parameters
WHERE report_parameters.report_parameter_id = in_report_parameter_id
AND report_parameters.report_parameter_group = 'LANE'
AND report_parameters.report_parameter_name = 'LANE'
) report_lanes
ON site_to_data_source_lane_v.site_lane_id = report_lanes.lane_id
JOIN (
SELECT CAST(report_parameter_value AS NUMBER) class_id
FROM report_parameters
WHERE report_parameters.report_parameter_id = in_report_parameter_id
AND report_parameters.report_parameter_group = 'CLASS'
AND report_parameters.report_parameter_name = 'CLASS'
) report_classes
ON bin_data_value.bin_id = report_classes.class_id
JOIN edr_rpt_tmp_inclusion_table
ON TRUNC(bin_data_set.start_date_time) = TRUNC(edr_rpt_tmp_inclusion_table.date_time)
WHERE site_to_data_source_lane_v.site_id = in_site_id
AND bin_data.start_date_time >= in_start_date_time - numtodsinterval(1, 'DAY')
AND bin_data.start_date_time < in_end_date_time + numtodsinterval(1, 'DAY')
AND bin_data_set.start_date_time >= in_start_date_time
AND bin_data_set.start_date_time < in_end_date_time
AND bin_data.bin_type = 2
AND bin_data.period_length = bin_period_length;
END class_by_day_get_bin_data;In the above code I'm using the hard coded value 2 for bin type
bin_data.bin_type = 2But I dont want any hard coded number or string in the query.
How could I replace it?
I defined conatant value like below inside my package body where the actual procedure comes.But I'm not sure whether I have to declare it inside package body or inside the procedure.
bin_type CONSTANT NUMBER := 2;But it does't look for this value. So I'm not able to get desired value for the report .
Thanks.
Edited by: user10641405 on May 29, 2009 1:38 PMDeclare the constant inside the procedure.
PROCEDURE class_by_day_get_bin_data(in_report_parameter_id IN NUMBER,
in_site_id IN NUMBER,
in_start_date_time IN TIMESTAMP,
in_end_date_time IN TIMESTAMP,
in_report_level_min IN NUMBER,
in_report_level_max IN NUMBER) IS
bin_period_length NUMBER(6, 0);
v_bin_type CONSTANT NUMBER := 2;
BEGIN
SELECT MAX(period_length)
INTO bin_period_length
FROM bin_data
JOIN site_to_data_source_lane_v ON bin_data.data_source_id =
site_to_data_source_lane_v.data_source_id
JOIN bin_types ON bin_types.bin_type = bin_data.bin_type
WHERE site_to_data_source_lane_v.site_id = in_site_id
AND bin_data.start_date_time >=
in_start_date_time - numtodsinterval(1, 'DAY')
AND bin_data.start_date_time <
in_end_date_time + numtodsinterval(1, 'DAY')
AND bin_data.bin_type = v_bin_type
AND bin_data.period_length <= 60;
--Clear the edr_class_by_day_bin_data temporary table and populate it with the data for the requested
--report.
DELETE FROM edr_class_by_day_bin_data;
INSERT INTO edr_class_by_day_bin_data
(site_id,
site_lane_id,
site_direction_id,
site_direction_name,
bin_start_date_time,
bin_end_date_time,
bin_id,
bin_value)
SELECT site_to_data_source_lane_v.site_id,
site_to_data_source_lane_v.site_lane_id,
site_to_data_source_lane_v.site_direction_id,
site_to_data_source_lane_v.site_direction_name,
bin_data_set.start_date_time,
bin_data_set.end_date_time,
bin_data_value.bin_id,
bin_data_value.bin_value
FROM bin_data
JOIN bin_data_set ON bin_data.bin_serial = bin_data_set.bin_serial
JOIN bin_data_value ON bin_data_set.bin_data_set_serial =
bin_data_value.bin_data_set_serial
JOIN site_to_data_source_lane_v ON bin_data.data_source_id =
site_to_data_source_lane_v.data_source_id
AND bin_data_set.lane =
site_to_data_source_lane_v.data_source_lane_id
JOIN (SELECT CAST(report_parameter_value AS NUMBER) lane_id
FROM report_parameters
WHERE report_parameters.report_parameter_id =
in_report_parameter_id
AND report_parameters.report_parameter_group = 'LANE'
AND report_parameters.report_parameter_name = 'LANE') report_lanes ON site_to_data_source_lane_v.site_lane_id =
report_lanes.lane_id
JOIN (SELECT CAST(report_parameter_value AS NUMBER) class_id
FROM report_parameters
WHERE report_parameters.report_parameter_id =
in_report_parameter_id
AND report_parameters.report_parameter_group = 'CLASS'
AND report_parameters.report_parameter_name = 'CLASS') report_classes ON bin_data_value.bin_id =
report_classes.class_id
JOIN edr_rpt_tmp_inclusion_table ON TRUNC(bin_data_set.start_date_time) =
TRUNC(edr_rpt_tmp_inclusion_table.date_time)
WHERE site_to_data_source_lane_v.site_id = in_site_id
AND bin_data.start_date_time >=
in_start_date_time - numtodsinterval(1, 'DAY')
AND bin_data.start_date_time <
in_end_date_time + numtodsinterval(1, 'DAY')
AND bin_data_set.start_date_time >= in_start_date_time
AND bin_data_set.start_date_time < in_end_date_time
AND bin_data.bin_type = v_bin_type
AND bin_data.period_length = bin_period_length;
END class_by_day_get_bin_data; -
How to avoid hard coding in Programming
Hi,
For preparing a Sales report we need to fetch Excise, Tax and
Education cess.
While doing the programming condition types of excise, tax and education cess were given to technical consultants.
It is like hard coding the programming. In future if a new condition type is created then it wont be calculated.
What are the ways to avoid hard coding?
regards,
sathyaYou can create a Z-Table that you are using for referencing your data e.g. condition type. This way this is customizable.
In a project I worked before we even had a more sophisticated way for avoiding hardcoding. We had one generic table including Program name, "Function to be exextued" (e.g. determination of condition) and the key value. And we had a function module reading these parameters from the gerneric table. Everytime you would need a specific value from this table you called this table via the function module.This way you had a customizable table and no more hardcoding was needed, the function module provided you with the values. -
why dont you?
I agree with Kurt; your question makes little sense. What sort of "power" are you referring to?
And please note that you are not communicating with Apple when you post in these forums. We're all just fellow users here.
Regards. -
Why is itunes so hard to use - and why can't apple fix it?
why is itunes so hard to use - and why can't apple fix it
I dont know anybody who likes the way itunes works.'
This last version is beyond awful. It took an already hard to use program - but one that I had at least figured out and made it even harder.Wendy,
If you are experiencing a particular problem, please post specifics, and most likely someone here will be able to help. -
Error in setting final variable using properties vs hard coding
I am getting the following error when trying to use this line of code
public static final String MESSAGES_BUNDLE_NAME = System.getProperty("messages");
java.lang.ExceptionInInitializerError: java.lang.NullPointerException
When I change the above line to
public static final String MESSAGES_BUNDLE_NAME = "messages_usa";
the program works fine.
Any ideas as to why this is happening would be greatly appreciated.
Thanks,
BorisI am sorry, but I realized now that I did notdiscribe
the problem fully.
The error is happening on the following line
return APPLICATION_RESOURCE_BUNDLE.getString(key);
So it looks like APPLICATION_RESOURCE_BUNDLE is
becoming null.
No that is not what is happening.
This is the error that you posted.....
java.lang.ExceptionInInitializerError:
java.lang.NullPointerException
The first part is the exception, not the second part
(although the second causes the first.)
The java docs specifically point out that a
NullPointerException is returned if the base name is
null - the parameter to getBundle().
The initialization exception occurs because when it
tries to excecute the initialization expression for
the final, then the getBundle() is throwing the null
pointer exception.
It is is not clear what you code is actually supposed
to be doing but I think you suggested that your are
using a system property. If so then it means that
that system property is not defined. And it works
when you use a hard coded value because the hard coded
value is defined.From this explanation I don't understand why initializing the bundle name from System.getProperty() works in the same class with the bundle obejct initialization, but does not work when it is in another class from bundle object initialization. -
Hard coded SQL string doesn't run with error PLS-00103
I have created a package with 34 stored procedures [pre]to create some materialized view with hard coded SQL [pre]string (client required for this hard coding). The [pre]first part with 21 simple create statements has
[pre]worked fine. 2nd part with 11 complicated create [pre]statements, only first one has worked. all others [pre]have not worked.
[pre]
I used dbms_output.put_line (sql_string) to check the [pre]individual create statement, it has looked fine. I [pre]have run individual SP within package. I have got [pre]error message as ORA-06550: line 1, column 45:
[pre]PLS-00103: Encountered the symbol "end-of-file" when [pre]expecting one of the following: ; [pre]
<an identifier> <a double-quoted delimited-identifier> [pre]The symbol ";" was substituted for "end-of-file" to [pre]continue.
[pre]I have checked SQL string between 1st part and 2nd [pre]part. They are the same and all with ';' to end SQL [pre]string and END SP name in the end. Please help me to [pre]identify where the problems are. Thanks. Followings [pre]are some sample SQL string:
[pre]PROCEDURE sp_1st_string
[pre]IS
[pre]BEGIN
[pre] EXECUTE IMMEDIATE 'CREATE MATERIALIZED VIEW
[pre]mv_name1 TABLESPACE space_name PARALLEL ( DEGREE [pre]DEFAULT INSTANCES DEFAULT ) BUILD IMMEDIATE REFRESH [pre]COMPLETE ON DEMAND WITH PRIMARY KEY AS SELECT col1, [pre]col2,col3, col4, col5 FROM tableone A, table_two B [pre]WHERE A.id = B.id';
[pre]COMMIT;
[pre]END sp_1st_string;
[pre]PROCEDURE sp_2nd_string
[pre]IS
[pre]BEGIN
[pre] EXECUTE IMMEDIATE ' CREATE MATERIALIZED VIEW
[pre]mv_name2 TABLESPACE PDE_DATA PARALLEL ( DEGREE [pre]DEFAULT INSTANCES DEFAULT ) BUILD IMMEDIATE REFRESH [pre]COMPLETE ON DEMAND WITH PRIMARY KEY AS select col1 .. [pre]col10 from tableone a, tabletwo b, tablethree c, [pre]tablefour d, tablefive e, tablesix f where clause;
[pre]COMMIT;
[pre]END sp_2nd_string;
Message was edited by:
citicbj
Message was edited by:
citicbjstevencallan:
Thanks for your advice. I have been thinking the above problem may be [pre]caused by this. If I run 'Create MV statement' in SQL PLUS or Toad, single quote [pre]will work. But when I put hard coded SQL string in package and stored [pre]procedure, it will cause compiling error. After I took off single quote, SP will be [pre][pre]compiled successfully. When I run package.sp, it will cause the problem. [pre]Here is the sample code:[pre]
[pre]CREATE MATERIALIZED VIEW my_mv TABLESPACE space_name [pre][pre]PARALLEL (DEGREE DEFAULT INSTANCES DEFAULT) BUILD IMMEDIATE [pre]REFRESH COMPLETE ON DEMAND WITH PRIMARY KEY AS select A.ID , [pre]A.CNTL_NUM, C.XX_CODE, D.FIRST_NAME, D.MDL_NAME, [pre]D.LAST_NAME, H.XX_DESC, TO_DATE(TO_CHAR(C.CREAT_TS, [pre]'MM/DD/YYYY'),'MM/DD/YY'), F.STATE, CASE WHEN A.XX_CODE IS NOT NULL [pre]THEN X END, E.X_DESC from TABLE1 A, TABLE2 B, TABLE3 C, TABLE4 [pre]D, TABLE5 E, TABLE6 F, TABLE7 G, TABLE8 H
[pre]where D.X_SW = 'X' and B.X_SW = X' and G.X_SW = 'X' and B.CNTL_ID = [pre]A.CNTL_ID and B.CNTL_ID = D.CNTL_ID and B.X_ID = C.X_ID and B.X_ID = [pre]G.X_ID and B.X_ID = F.X_ID and G.X_CD = H.X_CD and B.X_CD = E.X_CD [pre]and E.X_CD = '25' and C.ENRLMT_ID NOT LIKE 'O%'; [pre]
[pre]When I hard coded this statement in package and sp, I have to take off single [pre]quote ' ' form 'MM/DD/YYYY', 'MM/DD/YY', X_SW ='X', X_CD = '25' AND NOT [pre]LIKE 'O%', Then I can compile whole package successfully. This is why I [pre]mentioned that 1st part 21 simple create statement work because they don't have [pre]these single quote in the statement. In 2nd part with 13 complicated create [pre]statements, some of them have no single quote in the statement. They will [pre]run. Some of them with single quote in statement. They will have the problem [pre]to run if I take off single for compiling. [pre]
[pre]Please give me some idea what is the reason. Thanks a lot. -
User Logic for Conversion Type Instead of Hard coding in query.
Hello , Good response from SDN but thats all standard which I know. Please help me to resolve the problem as stated below. SDN friends are always best help.
Requirement: User will select the Target Currency; Will select the Exchange Rate like Monthly Avg 002M. Now there has to be a variable in Conversion which tells the logic to pick Conversion Type ZVHGR if Exchange Rate = 002M, but if Exchange Rate = 001, then Conversion Type ZVHMR.
<u><b>
Approach to solve abo</b></u>ve
1. I have created a Currency Translation Type " FiscperConversion" "ZVHGR" now this has Exchange Rate Type from Variable "ZVARN" (Which is a variable single value manual input on 0RTYPE Infoobject for exchange rate.)
2. Now Currency Tab: Target Currency is selected from Variable placed in the Report. ZRPVAR.
3. Now the Variable Time Reference is used. Standard Infoobject 0FISCPER
which is beginning of period.
Now all the above is done. Let go to the query and For Value of kEYFIGURE "Audit Balance" in Conversion Tab Conversion Type is specified is "FiscperConversion" ZVHGR"same as above and thats it. But the problem is here user want a variable that user can select the Conversion Type Instead of Hard coding.
<b>Please suggest how to create this variable for Conversion Type and specify in query designer since In Conversion Tab this is not allowed to have variable.</b>
Please help me very soon
Thanks
Soniya Kapoor
nullHello soniya
CTK ( currency translation key) includes
1. Exchange rate type - variable
2. Time base - Variable
3. Source abd TGT currency - variable
if all the things are given in variable why and what extra you need by selecting currency translation key from user input. I think you should ask business user again abt their requirement.
I can think of inputing CTK if say you have choosen time base as static ( Fix value)...say in one key u r using fiscal period as base and in other u r using calday as base...
Thanks
Tripple k -
Best way to deal with hard coded variables in a package
There is a plsql package that reads a line from a file, parses the data, does a ton of sql operation with it (select update, inserts, calculations) and then writes the output to an output file.
The file names and the firectories are retieved from a database table.
Example:
select location,file_name into loc_in,file_in from temp_tbl;
p_File_handle := utl_file.fopen (loc_in, file_in, 'W');
My co worker is suggesting that getting the variable values from the table is not a good practice. He suggests that the values should be hard-coded in the program. Now you might ask what would happen if the file name or directory changes. His suggestion is to have a build file and do a token substitution of those hard coded values in the program and then load in to the DB. In short the process will involve the following steps:
-Get the package from the repostory.
-Change the file name and directory in the token file.
-Run the build process that will replace the values in the package .
-Load the new file (with the updated values) in to the DB.
Example:
This way the program will be initially coded like this:
p_File_handle := utl_file.fopen ('${loc_in}', '${file_in}', 'W');
After the build file runs, it will replace the values as
p_File_handle := utl_file.fopen ('C:/test', 'testfile.dat', 'W');
Once the file has changed with the new updated values, compile that into the database.
Ideas/comments?Re: Best way to deal with hard coded variables in a package: why have you reposted using a new profile?
Neither post provides enough clear information on what the actual requirement is. We need more data in order to comment on your idea, your co-worker's, or to suggest alternatives.
My co worker is suggesting that getting the variable
values from the table is not a good practice.His reasons for this are...?
"variable values": Why do they vary? How often do they change?
The file names and the directories are retrieved from
a database table.How do the values get into the table? What is the volume of the data?
Oracle version? Operating system? -
Passing hard-coded string parameters into a FUNCTION
I created a Function that accepts two INT and two VARCHAR2 parameters. I want to access it in a SELECT statement and manually pass in parameters to it.
For example,
SELECT FN_MYFUNC(10, 20, 'string1', 'string2') FROM DUAL;
However, when I do this the hard-coded strings don't seem to be recognized by the Function. But, if I were to pass in a Fieldname from a TABLE then the above function works. Is there something extra I need to do to pass in hard-coded strings into a function?I have pasted the function where this problem is occuring below. If I use it in a SELECT, for example....
SELECT fn_GetRegValueFromRegData(3, 3, 'REG', '119') FROM DUAL;
.....it returns blank everytime when it should return a numeric value. However, this only occurs if I hard-code the parameter values (like above). However, if I pass in fieldnames from a TABLE, for example.....
SELECT fn_GetRegValueFromRegData(RegLink, EeLink, ChqType, RegCode) FROM RegData;
......then I get data back! Any idea why data is returned when I pass in fieldnames but not when I pass in hard-coded parameter values?
=================================================
CREATE OR REPLACE FUNCTION fn_GetRegValueFromRegData
(p_RegLink INT,
p_EELink INT,
p_ChequeType VARCHAR2,
p_RegCode1 VARCHAR2,
p_RegCode2 VARCHAR2 := '-1')
RETURN NUMBER
AS
v_regvalue NUMBER(14,5);
BEGIN
BEGIN
--retrieve data using the REGCODE1 value
SELECT a.regvalue INTO v_regvalue
FROM regdata a
WHERE a.RegCode = p_RegCode1
AND a.RegLink = p_RegLink
AND a.eeLink = p_EELink
AND a.ChqType = p_ChequeType
AND a.EndDate IS NULL;
EXCEPTION
WHEN OTHERS
THEN
--retrieve data using the REGCODE2 value
SELECT a.regvalue INTO v_regvalue
FROM regdata a
WHERE a.RegCode = p_RegCode2
AND a.RegLink = p_RegLink
AND a.eeLink = p_EELink
AND a.ChqType = p_ChequeType
AND a.EndDate IS NULL;
END;
RETURN v_regvalue;
END;
/ -
Query runs slower when using variables & faster when using hard coded value
Hi,
My query runs slower when i use variables but it runs faster when i use hard coded values. Why it is behaving like this ?
My query is in cursor definition in a procedure. Procedure runs faster when using hard coded valus and slower when using variables.
Can anybody help me out there?
Thanks in advance.Hi,
Thanks for ur reply.
here is my code with Variables:
Procedure populateCountryTrafficDetails(pWeekStartDate IN Date , pCountry IN d_geography.country_code%TYPE) is
startdate date;
AR_OrgId number(10);
Cursor cTraffic is
Select
l.actual_date, nvl(o.city||o.zipcode,'Undefined') Site,
g.country_code,d.customer_name, d.customer_number,t.contrno bcn,
nvl(r.dest_level3,'Undefined'),
Decode(p.Product_code,'820','821','821','821','801') Product_Code ,
Decode(p.Product_code,'820','Colt Voice Connect','821','Colt Voice Connect','Colt Voice Line') DProduct,
sum(f.duration),
sum(f.debamount_eur)
from d_calendar_date l,
d_geography g,
d_customer d, d_contract t, d_subscriber s,
d_retail_dest r, d_product p,
CPS_ORDER_DETAILS o,
f_retail_revenue f
where
l.date_key = f.call_date_key and
g.geography_key = f.geography_key and
r.dest_key = f.dest_key and
p.product_key = f.product_key and
--c.customer_key = f.customer_key and
d.customer_key = f.customer_key and
t.contract_key = f.contract_key and
s.SUBSCRIBER_KEY = f.SUBSCRIBER_KEY and
o.org_id(+) = AR_OrgId and
g.country_code = pCountry and
l.actual_date >= startdate and
l.actual_date <= (startdate + 90) and
o.cli(+) = s.area_subno and
p.product_code in ('800','801','802','804','820','821')
group by
l.actual_date,
o.city||o.zipcode, g.country_code,d.customer_name, d.customer_number,t.contrno,r.dest_level3, p.product_code;
Type CountryTabType is Table of country_traffic_details.Country%Type index by BINARY_INTEGER;
Type CallDateTabType is Table of country_traffic_details.CALL_DATE%Type index by BINARY_INTEGER;
Type CustomerNameTabType is Table of Country_traffic_details.Customer_name%Type index by BINARY_INTEGER;
Type CustomerNumberTabType is Table of Country_traffic_details.Customer_number%Type index by BINARY_INTEGER;
Type BcnTabType is Table of Country_traffic_details.Bcn%Type index by BINARY_INTEGER;
Type DestinationTypeTabType is Table of Country_traffic_details.DESTINATION_TYPE%Type index by BINARY_INTEGER;
Type ProductCodeTabType is Table of Country_traffic_details.Product_Code%Type index by BINARY_INTEGER;
Type ProductTabType is Table of Country_traffic_details.Product%Type index by BINARY_INTEGER;
Type DurationTabType is Table of Country_traffic_details.Duration%Type index by BINARY_INTEGER;
Type DebamounteurTabType is Table of Country_traffic_details.DEBAMOUNTEUR%Type index by BINARY_INTEGER;
Type SiteTabType is Table of Country_traffic_details.Site%Type index by BINARY_INTEGER;
CountryArr CountryTabType;
CallDateArr CallDateTabType;
Customer_NameArr CustomerNameTabType;
CustomerNumberArr CustomerNumberTabType;
BCNArr BCNTabType;
DESTINATION_TYPEArr DESTINATIONTYPETabType;
PRODUCT_CODEArr PRODUCTCODETabType;
PRODUCTArr PRODUCTTabType;
DurationArr DurationTabType;
DebamounteurArr DebamounteurTabType;
SiteArr SiteTabType;
Begin
startdate := (trunc(pWeekStartDate) + 6) - 90;
Exe_Pos := 1;
Execute Immediate 'Truncate table country_traffic_details';
dropIndexes('country_traffic_details');
Exe_Pos := 2;
/* Set org ID's as per AR */
case (pCountry)
when 'FR' then AR_OrgId := 81;
when 'AT' then AR_OrgId := 125;
when 'CH' then AR_OrgId := 126;
when 'DE' then AR_OrgId := 127;
when 'ES' then AR_OrgId := 123;
when 'IT' then AR_OrgId := 122;
when 'PT' then AR_OrgId := 124;
when 'BE' then AR_OrgId := 132;
when 'IE' then AR_OrgId := 128;
when 'DK' then AR_OrgId := 133;
when 'NL' then AR_OrgId := 129;
when 'SE' then AR_OrgId := 130;
when 'UK' then AR_OrgId := 131;
else raise_application_error (-20003, 'No such Country Code Exists.');
end case;
Exe_Pos := 3;
dbms_output.put_line('3: '||to_char(sysdate, 'HH24:MI:SS'));
populateOrderDetails(AR_OrgId);
dbms_output.put_line('4: '||to_char(sysdate, 'HH24:MI:SS'));
Exe_Pos := 4;
Open cTraffic;
Loop
Exe_Pos := 5;
CallDateArr.delete;
FETCH cTraffic BULK COLLECT
INTO CallDateArr, SiteArr, CountryArr, Customer_NameArr,CustomerNumberArr,
BCNArr,DESTINATION_TYPEArr,PRODUCT_CODEArr, PRODUCTArr, DurationArr, DebamounteurArr LIMIT arraySize;
EXIT WHEN CallDateArr.first IS NULL;
Exe_pos := 6;
FORALL i IN 1..callDateArr.last
insert into country_traffic_details
values(CallDateArr(i), CountryArr(i), Customer_NameArr(i),CustomerNumberArr(i),
BCNArr(i),DESTINATION_TYPEArr(i),PRODUCT_CODEArr(i), PRODUCTArr(i), DurationArr(i),
DebamounteurArr(i), SiteArr(i));
Exe_pos := 7;
dbms_output.put_line('7: '||to_char(sysdate, 'HH24:MI:SS'));
EXIT WHEN ctraffic%NOTFOUND;
END LOOP;
commit;
Exe_Pos := 8;
commit;
dbms_output.put_line('8: '||to_char(sysdate, 'HH24:MI:SS'));
lSql := 'CREATE INDEX COUNTRY_TRAFFIC_DETAILS_CUSTNO ON country_traffic_details (CUSTOMER_NUMBER)';
execDDl(lSql);
lSql := 'CREATE INDEX COUNTRY_TRAFFIC_DETAILS_BCN ON country_traffic_details (BCN)';
execDDl(lSql);
lSql := 'CREATE INDEX COUNTRY_TRAFFIC_DETAILS_PRODCD ON country_traffic_details (PRODUCT_CODE)';
execDDl(lSql);
lSql := 'CREATE INDEX COUNTRY_TRAFFIC_DETAILS_SITE ON country_traffic_details (SITE)';
execDDl(lSql);
lSql := 'CREATE INDEX COUNTRY_TRAFFIC_DETAILS_DESTYP ON country_traffic_details (DESTINATION_TYPE)';
execDDl(lSql);
Exe_Pos:= 9;
dbms_output.put_line('9: '||to_char(sysdate, 'HH24:MI:SS'));
Exception
When Others then
raise_application_error(-20003, 'Error in populateCountryTrafficDetails at Position: '||Exe_Pos||' The Error is '||SQLERRM);
End populateCountryTrafficDetails;
In the above procedure if i substitute the values with hard coded values i.e. AR_orgid = 123 & pcountry = 'Austria' then it runs faster.
Please let me know why it is so ?
Thanks in advance. -
Why is it so hard to do things right the first time?
My company is no longer providing Blackberry phones to its employees. So I decided to upgrade my personal phone, change my plan and try to minimize my monthly bill increase. I went with the S4, share everything with 4GB of data. I questioned the sales associate, "will this work with Good Messaging service? I have the feature number if needed." The associate said, "No it will work fine." He then asked another associate, "Right, Good Messaging will work with this share everything plan?" and the other associate confirmed. Walked out with my new phone, plan change and a $10 a month increase. When I got home I set up the Good Messaging app and work emails were available. I didn't have a good feeling about the associate having to ask again and before I decommissioned the Blackberry I wanted to triple check the Good Messaging/Enterprise data feature was part of my plan. I opened up a chat with an online associate and asked the same question... "Can you please verify the feature...?" Online associate again confirmed, "Yes, this feature is included in your plan.". I arrived at work the next day and received an email from the company support team stating that my Good Messaging service had been set up, but that my wireless plan did not appear to have the "feature" included. The email requested that I call Verizon and ask them to add the feature. I contacted Verizon immediately, informed them of the situation and conversations with other associates, the phone associate verified that I did not have the feature on my plan. She then added the feature and noted that this would increase my monthly bill by $15, asked if there was anything else, nope, and asked that I have a great day!
I'm frustrated simply because 3 Verizon employees verified that this feature was included in my plan! I'm not sure why it is so hard to do things right the first time.Update: A couple of weeks ago I called Verizon back again after speaking with my company. The woman on the phone was very apologetic after hearing the story above. I then stated that people at my company reconfirmed that the service should be $5 not $15. She took a minute to look up the feature and said it didn't appear to be available to me for $5, but was fully aware of the feature being available for $5. She stated that she would credit my account for $10 and find out how to add the service at $5 and contact me when this was done. Finally, I felt like I got some progress.
A couple of days later I received a phone from a VZW specialist (or some other title, don't recall). The gentlemen asked about the past issues if I still had any concerns. I stated the previous person I had spoke with provided me with a $10 credit and was working on adding the feature for $5. I asked if he could confirm. He pulled up my account and stated the feature was not available to me for $5. I read him the announcement from my company regarding the "special plan" they had worked out with Verizon and he stated my account was still showing under a previous company that I had worked for. He then proceeded to say that this was probably the reason why the $5 feature was not available to me and that I should which my account to my current company. The next day I tried to switch my account to my current company and I kept getting an error message stating that I needed to contact support.
I finally got around to contacting support today and mentioned that I was trying to switch my account to my current company discount plan. I told him that I was unsuccessful trying on line. He pulled up my account and checked if my current company had a discount available. He couldn't find any discounts. While he was on the phone I went online and filled out the getdiscounts form. Got the email to my corp email and read off the discount amounts from the email. I then tried to make the changes online again and it worked. He verified the change had taken place and I asked him to confirm that the good messaging service was showing at $5. Nope it was still showing as $15. I briefly informed him of the history and asked me to hold. Came back about 30 seconds later and stated the feature is $15 for my account and there is no $5 feature.
So after 10+ years of loyal service to Verizon, I've almost completely lost all confidence in their ability to service correctly the first time. -
In the past month, I've spoken to dozens of Verizon reps on the phone, been disconnected a few times, been at 4 different stores, been told several different things by EVERYONE, been told "oh sure, we can do that" only to be told by someone else "no we can't" ... how can you run a business like this??!!!
I AM SO FRUSTRATED RIGHT NOW I COULD SCREAM!!!!!!!!!!!!!!!!!!!!!
First, it was because our account was listed as a monthly paid cash account,
then, it was because we were trying to get phones at a franchise store,
then, it was because our account was set up as a business account (according to the Verizon rep I met at Wal-Mart, even though the Vz reps on the phone tell me it's listed as a personal account AND I sign onto our account as a personal account)
then, we were told to order our upgrades on over the phone (but then we were told we would have to pay for the phones and wait for a debit card rebate to be mailed to us, which my husband does not want to do)
then, we were told to order the upgrade phones online, but every time I try I get a processing error,
then, the computer tells us to call a specific phone number if we believe the error was not right,
then, the phone recording message repeats itself through multiple options TWICE and then hangs up on me,
then, I call another Verizon number and get a "helpful" rep who tells me we can order them on the phone ... only to come back to me after being on hold and telling me they have gone home for the day,
then, I try to get help online at Verizon.com and NO ONE IS AVAILABLE TO HELP ME.
I've been to Wal-Mart 3 or 4 times, been to the local franchise store, been to a store in the Chicago area, and have spoken with Verizon reps on the phone until I'm blue, and, still ... STILL ... I don't have new phones.
(removed) ALL I WANT IS TO UPGRADE OUR 2 PHONES ... WHY IS THIS SO HARD???!!!
We have been a Verizon customer for over 16 years, apparently that means NOTHING.
Edited as required by the Verizon Wireless Terms of Service
Message was edited by: Admin ModeratorThat is because the people who edit the posts are NOT CS agents but instead are people who are employed by the vendor Verizon has contracted to host the forum. I don't even believe they are Verizon employees, but employees of the Jive forum platform.
For example, if a Verizon store had an electrician repairing the lighting in one of their stores, you wouldn't necessarily walk in and expect them to get off their ladder to assist you with information about a phone since they had nothing better to do than to work on the lights. First of all, they aren't salesmen or CS agents. Second, they may not even have the capability to give you the assistance you are requesting. -
Why is it so hard to get Verizon to offer an alternative phone?
Hello,
I've been lurking this board for a long time, and my Fascinate has had nothing but problems.
1. The phone randomly decides to hit the back button on it's own multiple times, resulting in screencaptures. This has not been fixed for me no matter what apps I use or how many times I reset my phone. Have you ever been in a college library and tried to put your phone in standby only to hear the camera shutter noise? Everyone thinks you're creepy and that you're taking pictures of strangers. It's an embarassment.
2. Sometimes when I hit the phone icon it takes me to a black screen. Let me tell you: My cellPHONE will not let me make PHONE calls. This makes the device completely useless.
3. Sometimes I send texts to about 15 different people to confirm plans for the night, get no response at all. No texts from anybody. I wake up the next morning thinking I did something wrong and ruined relationships until I do a battery pull. Then when it starts back up it SENDS THEM THEN. Then I get a ton of confused friends wondering where I was and why they never heard back from me.
4. I have 4 different friends with the SAME EXACT ISSUES on this SAME EXACT MODEL of phone.
I am fully updated and I have never rooted this phone.
Why is it so hard for verizon to just send me a refurbished Droid X2 or Incredible 2? It can't cost that much more!
Please, if any verizon employee sees this I would love if you could help me out. The people I've spoken to on the phone only offered to send me another Fascinate. It's NOT what I need. I have been a Verizon customer for a long time and I'm thoroughly disappointed that you can't help me out by kicking me a refurb of a different model.Hello ILikeColdPizza!
Sounds like you've gone through a great deal of trouble with your device. I would like to see if we can get your phone working the way it should.
The manufacturers warranty is a no cost option that replaces the device with the same make and model, considering the device is experiencing an electrical/mechanical defect. This is what the manufacturers cover under the standard one year warranty. When your device does not function as intended and is defective, we intern lift this up to the manufacturer to recoup our losses. This is the reason for the same model exchange policy. In the meantime, I would like to further troubleshoot your device to ensure we've resolved all the issues you're experiencing.
Have you confirmed your Fascinate is running the most recent software version? The current version would be i500.EH03, which is Gingerbread. If not, please update software. A lot of the issues you are experiencing were resolved in the latest update. If you are still experiencing issues with your device after updating the software, please let me know so I can go over other options. -
Output type for the managed codes cut letter is hard coded
Hello,
Very Good afternoon!
I have a requirement to create new Output Types for a Smart Form.
The already existing Output types are hard coded as shown Below :
CONSTANTS : c_kschl_order LIKE nast-kschl
VALUE 'ZUS0',
c_kschl_order1 LIKE nast-kschl
VALUE 'ZUS1',
Now they do not want to use ZUS1. Insted they wnat to use New Output Types.
u2022 Remove ZUS1 as we no longer use this one.
u2022 Add ZAU0
u2022 Add ZNZ0
u2022 Add ZJP0
u2022 Add ZCN0
u2022 Add ZKR0
How to add these Output types without Hardcoding as shown ABove.
Any Suggestions will be appreciated.....
For reference..I will paste the code of the Program here.
Here is the code :
PROGRAM DECLARATION
PROGRAM ID Z_RVADOR01_SALES_CUT_LETTER
TABLES: vbak, "Sales Document: Header Data
vbap, "Sales Document: Item Data
vbpa, "Sales Document: Partner
vbep, "Sales Document: Schedule Line Data
kna1, "General Data in Customer Master
MARA, "Material Master
KOMK, "Communicationarea for conditions
KOMP, "Communicationarea for conditions
KOMVD, "Communicationarea for conditions
VBCO3, "Communicationarea for view
VBDKA, "Headerview
VBDPA, "Itemview
VBDPAU, "Subitemnumbers
CONF_OUT, "Configuration data
SADR, "Addresses
TVAG, "Reason for rejection
VEDKA, "Servicecontract head data
VEDPA, "Servicecontract position data
VEDKN, "Servicecontract head notice data
VEDPN, "Servicecontract pos. notice data
RISERLS, "Serialnumbers
KOMSER, "Serialnumbers for print
TVBUR, "Sales office
TVKO, "Sales organisation
ADRS, "Communicationarea for Address
FPLTDR, "billing schedules
WTAD_ADDIS_IN_SO_PRINT, "additional
WTAD_BUYING_PRINT_EXTRA_TEXT, "texts belonging to additional
adrc,
adr6,
t247.
INCLUDE RVADTABL.
INCLUDE RVDIREKT.
INCLUDE VEDADATA.
data for access to central address maintenance
INCLUDE SDZAVDAT.
TYPE-POOLS: ADDI.
DATA PRICE_PRINT_MODE(1) TYPE C. "Print-mode
DATA: RETCODE LIKE SY-SUBRC. "Returncode
DATA: REPEAT(1) TYPE C.
DATA: XSCREEN(1) TYPE C. "Output on printer or screen
DATA: BEGIN OF STEU, "Controldata for output
VDKEX(1) TYPE C,
VDPEX(1) TYPE C,
KBKEX(1) TYPE C,
KBPEX(1) TYPE C,
END OF STEU.
DATA: BEGIN OF TVBDPA OCCURS 0. "Internal table for items
INCLUDE STRUCTURE VBDPA.
DATA: END OF TVBDPA.
DATA: BEGIN OF TKOMV OCCURS 50.
INCLUDE STRUCTURE KOMV.
DATA: END OF TKOMV.
DATA: BEGIN OF TKOMVD OCCURS 50.
INCLUDE STRUCTURE KOMVD.
DATA: END OF TKOMVD.
DATA: BEGIN OF TVBDPAU OCCURS 5.
INCLUDE STRUCTURE VBDPAU.
DATA: END OF TVBDPAU.
DATA: BEGIN OF TKOMCON OCCURS 50.
INCLUDE STRUCTURE CONF_OUT.
DATA: END OF TKOMCON.
DATA: BEGIN OF TKOMSERVH OCCURS 1.
INCLUDE STRUCTURE VEDKA.
DATA: END OF TKOMSERVH.
DATA: BEGIN OF TKOMSERVP OCCURS 5.
INCLUDE STRUCTURE VEDPA.
DATA: END OF TKOMSERVP.
DATA: BEGIN OF TKOMSERVHN OCCURS 5.
INCLUDE STRUCTURE VEDKN.
DATA: END OF TKOMSERVHN.
DATA: BEGIN OF TKOMSERVPN OCCURS 5.
INCLUDE STRUCTURE VEDPN.
DATA: END OF TKOMSERVPN.
DATA: BEGIN OF TKOMSER OCCURS 5.
INCLUDE STRUCTURE RISERLS.
DATA: END OF TKOMSER.
DATA: BEGIN OF TKOMSER_PRINT OCCURS 5.
INCLUDE STRUCTURE KOMSER.
DATA: END OF TKOMSER_PRINT.
DATA: BEGIN OF TFPLTDR OCCURS 5.
INCLUDE STRUCTURE FPLTDR.
DATA: END OF TFPLTDR.
DATA: TADDI_PRINT TYPE ADDI_SO_PRINT_ITAB WITH HEADER LINE.
TYPES:BEGIN OF ty_orders ,
xblnr LIKE mkpf-xblnr, "delivery number
erfmg LIKE mseg-erfmg, "goods issue quantity
custname LIKE kna1-name1, "customer name
bstnk LIKE vbak-bstnk, "purchase order number
ean11 LIKE vbap-ean11, "upc
kdmat LIKE vbap-kdmat, "customer material code
arktx LIKE vbap-arktx, "description
csrno LIKE kna1-kunnr, "customer service rep number
spras LIKE kna1-spras, "customer language key
csrname LIKE kna1-name1, "customer service rep name
csremail LIKE adr6-smtp_addr, "csr email
csrphone LIKE kna1-telf1, "csr telephone
csrext LIKE adrc-tel_extens, "csr extension
csrfax LIKE kna1-telfx, "csr fax
total LIKE lips-lfimg, "cut quantity
ldate(18) TYPE c,
END OF ty_orders.
CONSTANTS: c_kschl_order LIKE nast-kschl
VALUE 'ZUS0',
c_kschl_order1 LIKE nast-kschl
VALUE 'ZUS1', c_parvw_shipto LIKE vbpa-parvw
VALUE 'WE',
c_parvw_csr LIKE vbpa-parvw
VALUE 'ZS',
c_eng(1) TYPE c VALUE 'E',
c_sep(1) TYPE c VALUE '/',
c_sale(25) type c VALUE 'Sales Order'.
DATA: WA_VBAK TYPE VBAK,
tbl_ord TYPE ty_orders OCCURS 0 WITH HEADER LINE,
w_csrname(30) TYPE c,
w_csrno(30) TYPE c,
w_email LIKE adr6-smtp_addr,
f_shipto_found TYPE c,
w_custname(30) TYPE c,
w_month(2),
w_ldate(18),
w_total LIKE lips-lfimg,
w_lines TYPE i VALUE 0,
f_mail(1) TYPE c,
cnt_1 TYPE i VALUE 0,
cnt_2 TYPE i VALUE 0,
tbl_otf LIKE itcoo OCCURS 0 WITH HEADER LINE,
w_type(25) TYPE c,
st_doc_data LIKE sodocchgi1,
tbl_objtxt LIKE solisti1 OCCURS 10 WITH HEADER LINE,
tbl_line LIKE tline OCCURS 0 WITH HEADER LINE,
tbl_attach LIKE solisti1 OCCURS 10 WITH HEADER LINE,
tbl_objhead LIKE solisti1 OCCURS 10 WITH HEADER LINE,
tbl_proc_para LIKE soparai1 OCCURS 10 WITH HEADER LINE,
tbl_maillist LIKE somlreci1 OCCURS 10 WITH HEADER LINE,
tbl_pack_list LIKE sopcklsti1 OCCURS 10 WITH HEADER LINE,
tbl_cpo LIKE itcpo OCCURS 0 WITH HEADER LINE,"SAPscript output
" interface
tbl_cpp LIKE itcpp OCCURS 0 WITH HEADER LINE,"SAPscript output
" parameters
tbl_smtp TYPE szadr_adsmtp_line OCCURS 0 WITH HEADER LINE,
tbl_cdhdpos LIKE cdshw OCCURS 0 WITH HEADER LINE,
tbl_cdpos LIKE cdshw OCCURS 0 WITH HEADER LINE,
wrk_lines LIKE sy-tabix,
hltlines TYPE i,
off1 TYPE p,
fle1(2) TYPE p,
fle2(2) TYPE p,
htabix LIKE sy-tabix,
hfeld(500) TYPE c.
FORM ENTRY USING RETURN_CODE US_SCREEN.
if sy-tcode = 'VA01'.
IF nast-kschl = c_kschl_order.
SELECT SINGLE * FROM VBAK INTO WA_VBAK WHERE vbeln = nast-objky.
IF SY-SUBRC = 0.
CLEAR RETCODE.
XSCREEN = US_SCREEN.
PERFORM PROCESSING USING us_screen.
IF RETCODE NE 0.
RETURN_CODE = 1.
ELSE.
RETURN_CODE = 0.
ENDIF.
ELSE.
retcode = sy-subrc.
syst-msgid = 'ZVERROR'.
syst-msgno = '000'.
syst-msgty = 'E'.
syst-msgv1 = NAST-KSCHL.
syst-msgv1 = 'Sales Order cut letter
for this order already issued'.
syst-msgv2 = ' '.
PERFORM protocol_update.
ENDIF.
ELSE.
CLEAR retcode.
xscreen = us_screen.
PERFORM processing USING us_screen.
IF retcode NE 0.
return_code = 1.
ELSE.
return_code = 0.
ENDIF.
ENDIF.
endif.
ENDFORM.
FORM PROCESSING *
FORM PROCESSING USING proc_screen.
CASE nast-kschl.
WHEN c_kschl_order.
PERFORM get_orders.
CHECK retcode = 0.
PERFORM openform USING proc_screen vbak-landtx.
CHECK retcode = 0.
PERFORM layout.
CHECK retcode = 0.
CHECK proc_screen NE 'X'.
w_type = c_sale.
PERFORM send_email USING proc_screen.
WHEN c_kschl_order1.
PERFORM get_orders.
CHECK retcode = 0.
CHECK proc_screen NE 'X'.
w_type = c_sale.
PERFORM send_email USING proc_screen.
WHEN OTHERS.
retcode = 1.
syst-msgid = 'E0'.
syst-msgno = '430'.
syst-msgty = 'E'.
PERFORM protocol_update.
ENDCASE.
IF retcode EQ 0.
syst-msgid = '69'.
syst-msgno = '254'.
syst-msgty = 'S'.
syst-msgv1 = nast-kschl.
PERFORM protocol_update.
ELSE.
syst-msgid = 'CKCC'.
syst-msgno = '036'.
syst-msgty = 'E'.
PERFORM protocol_update.
ENDIF.
ENDFORM.
FORM PROTOCOL_UPDATE *
The messages are collected for the processing protocol. *
FORM PROTOCOL_UPDATE.
IF xscreen EQ space.
CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
EXPORTING
MSG_ARBGB = SYST-MSGID
MSG_NR = SYST-MSGNO
MSG_TY = SYST-MSGTY
MSG_V1 = SYST-MSGV1
MSG_V2 = SYST-MSGV2
MSG_V3 = SYST-MSGV3
MSG_V4 = SYST-MSGV4
EXCEPTIONS
OTHERS = 1.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
*& Form get_orders
text
--> p1 text
<-- p2 text
FORM get_orders.
DATA : f_csr_found TYPE c.
SELECT SINGLE vbeln vkorg vdatu bstnk kunnr
FROM vbak
INTO (vbak-vbeln,vbak-vkorg,vbak-vdatu,vbak-bstnk,vbak-kunnr)
WHERE vbeln EQ nast-objky.
IF sy-subrc NE 0.
retcode = sy-subrc.
syst-msgid = 'VN'.
syst-msgno = '203'.
syst-msgty = 'E'.
syst-msgv1 = 'VBAK'.
syst-msgv2 = sy-subrc.
PERFORM protocol_update.
ENDIF.
SELECT vbeln posnr matnr pmatn arktx abgru kdmat werks
FROM vbap
INTO (vbap-vbeln,vbap-posnr,vbap-matnr,vbap-pmatn,
vbap-arktx,vbap-abgru,vbap-kdmat,vbap-werks)
WHERE vbeln = vbak-vbeln
AND abgru NE space "select items havng Rejection Reason
and PSTYV NE 'ZHDR'.
to check whether the reason for rejection was picked from the
managed codes tables
data: war_abgru type abgru,
w_exist type c.
clear : war_abgru, w_exist.
select single abgru from ZMAT_REJ002
into war_abgru
where vkorg = vbak-vkorg
and kunnr <> vbak-kunnr
and MATNR = vbap-matnr
and datef <= vbak-vdatu
and datet >= vbak-vdatu.
if sy-subrc <> 0.
select single abgru from ZMAT_REJ003
into war_abgru
where vkorg = vbak-vkorg
and kunnr <> vbak-kunnr
and MATNR = vbap-matnr
and datef <= vbak-vdatu
and datet >= vbak-vdatu.
if sy-subrc <> 0.
select single abgru from ZMAT_REJ001
into war_abgru
where vkorg = vbak-vkorg
and werks <> vbap-werks
and matnr = vbap-matnr
and datef <= vbak-vdatu
and datet >= vbak-vdatu.
if sy-subrc <> 0.
select single abgru from ZMAT_REJ004
into war_abgru
where vkorg = vbak-vkorg
and matnr = vbap-matnr
and datef >= vbak-vdatu
and datet <= vbak-vdatu.
if sy-subrc <> 0.
else.
w_exist = 'X'.
endif.
else.
w_exist = 'X'.
endif.
else.
w_exist = 'X'.
endif.
else.
w_exist = 'X'.
endif.
if w_exist = 'X'.
end for check from managed codes table
*to find the quantity fields
SELECT SINGLE wmeng bmeng
FROM vbep
INTO (vbep-wmeng,vbep-bmeng)
WHERE vbeln EQ vbap-vbeln
AND posnr EQ vbap-posnr.
*to get info about the customer
SELECT SINGLE kunnr
FROM vbpa
INTO vbpa-kunnr
WHERE vbeln EQ vbak-vbeln
AND parvw EQ c_parvw_shipto.
IF sy-subrc EQ 0.
f_shipto_found = 'X'.
SELECT SINGLE name1 spras
FROM kna1
INTO (kna1-name1,kna1-spras)
WHERE kunnr EQ vbpa-kunnr.
IF sy-subrc EQ 0.
w_custname = kna1-name1.
CLEAR kna1-name1.
ENDIF.
ENDIF.
SELECT SINGLE kunnr
FROM vbpa
INTO vbpa-kunnr
WHERE vbeln EQ vbak-vbeln
AND parvw EQ c_parvw_csr.
IF SY-SUBRC EQ 0.
f_csr_found = 'X'.
SELECT SINGLE kunnr name1 name2 adrnr
FROM kna1
INTO (kna1-kunnr,kna1-name1,kna1-name2,
kna1-adrnr)
WHERE kunnr EQ vbpa-kunnr.
IF sy-subrc EQ 0.
w_csrno = kna1-kunnr.
w_csrname = kna1-name1.
CLEAR kna1-name1.
SELECT SINGLE tel_number tel_extens fax_number
FROM adrc
INTO (adrc-tel_number,adrc-tel_extens,
adrc-fax_number)
WHERE addrnumber EQ kna1-adrnr.
CLEAR: adr6, w_email.
SELECT SINGLE * FROM adr6 WHERE addrnumber = kna1-adrnr.
IF sy-subrc = 0.
w_email = adr6-smtp_addr.
ENDIF.
ENDIF.
ENDIF.
*to get the date format in french
IF kna1-spras NE c_eng.
w_month = sy-datum+4(2).
SELECT SINGLE ltx
FROM t247
INTO t247-ltx
WHERE spras EQ kna1-spras
AND mnr EQ w_month.
CONCATENATE sy-datum+6(2)
t247-ltx
sy-datum+0(4)
INTO w_ldate
SEPARATED BY space.
ELSE.
CONCATENATE sy-datum+4(2)
sy-datum+6(2)
sy-datum+0(4)
INTO w_ldate
SEPARATED BY c_sep.
ENDIF.
w_total = vbep-wmeng - vbep-bmeng.
IF w_total GT 0.
PERFORM fill_orders.
ELSE.
IF vbap-abgru NE space.
w_total = vbep-wmeng.
PERFORM fill_orders.
ENDIF.
ENDIF.
CLEAR vbap.
endif. " check for w_exist for Managed Codes entry
ENDSELECT.
IF tbl_ord[] IS INITIAL.
retcode = 1.
syst-msgid = 'FZ'.
syst-msgno = '027'.
syst-msgty = 'E'.
PERFORM protocol_update.
ENDIF.
IF f_csr_found IS INITIAL.
syst-msgid = '8B'.
syst-msgno = '127'.
syst-msgty = 'W'.
syst-msgv1 = c_parvw_csr.
PERFORM protocol_update.
ENDIF.
IF f_shipto_found IS INITIAL.
syst-msgid = '8B'.
syst-msgno = '127'.
syst-msgty = 'W'.
syst-msgv1 = c_parvw_shipto.
PERFORM protocol_update.
ENDIF.
ENDFORM. " get_orders
*& Form layout
text
--> p1 text
<-- p2 text
FORM layout.
SORT tbl_ord BY bstnk kdmat.
LOOP AT tbl_ord.
AT FIRST.
PERFORM writeform_text.
ENDAT.
PERFORM writeform.
AT LAST.
PERFORM writeform_footer.
ENDAT.
ENDLOOP.
CLEAR : cnt_1,cnt_2.
PERFORM closeform.
ENDFORM. " layout
*& Form openform
text
FORM openform USING us_screen us_country.
DESCRIBE TABLE tbl_ord LINES w_lines.
IF w_lines EQ 0.
retcode = '1'.
syst-msgid = 'FE'.
syst-msgno = '078'.
syst-msgty = 'E'.
PERFORM protocol_update.
ENDIF.
CHECK retcode EQ 0.
INCLUDE zrvadopfo.
ENDFORM. " openform
*& Form send_email
text
-->P_PROC_SCREEN text
FORM send_email USING PROC_SCREEN.
f_mail = 'X'.
PERFORM openform USING proc_screen vbak-landtx.
LOOP AT tbl_ord.
AT FIRST.
PERFORM writeform_text.
ENDAT.
PERFORM writeform.
AT LAST.
PERFORM writeform_footer.
ENDAT.
ENDLOOP.
CLEAR cnt_2.
PERFORM closeform.
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF' "'ASCII'
IMPORTING
bin_filesize = st_doc_data-doc_size
TABLES
otf = tbl_otf
lines = tbl_line
EXCEPTIONS "DEVK912166
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
OTHERS = 4.
IF sy-subrc NE 0.
retcode = sy-subrc.
syst-msgid = 'OA'. "DEVK912166
syst-msgno = '186'. "DEVK912166
syst-msgty = 'E'. "DEVK912166
PERFORM protocol_update.
ENDIF.
REFRESH tbl_objtxt.
CLEAR tbl_objtxt.
CLEAR tbl_proc_para.
REFRESH tbl_proc_para.
CLEAR tbl_maillist.
REFRESH tbl_maillist.
CLEAR tbl_pack_list.
REFRESH tbl_pack_list.
st_doc_data-obj_name = 'Sales Order Cut Letter'.
st_doc_data-obj_langu = 'E'. "DEVK905849
st_doc_data-sensitivty = 'F'. "DEVK905849
st_doc_data-obj_prio = 1. "DEVK905849
CONCATENATE w_type 'Cut Letter' INTO "#EC NOTEXT
st_doc_data-obj_descr SEPARATED BY space.
DATA w_line(3) TYPE c.
PERFORM format_pdf. "DEVK905849
concatenate VBAK-VBELN '.PDF' into tbl_objhead.
tbl_objhead = 'Sales Order Cut Letter.PDF'.
APPEND tbl_objhead.
"DEVK905849
CLEAR wrk_lines.
DESCRIBE TABLE tbl_attach LINES wrk_lines.
fields needed for email
tbl_maillist-com_type = 'INT'.
tbl_maillist-receiver = w_email.
tbl_maillist-rec_type = 'U'.
APPEND tbl_maillist.
send email
CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
STARTING NEW TASK 'MAIL'
EXPORTING
document_data = st_doc_data
document_type = 'PDF'
COMMIT_WORK = 'X' " added after ECC6.0 upgrade
TABLES
object_header = tbl_objhead
object_content = tbl_objtxt
receivers = tbl_maillist
EXCEPTIONS "DEVK912166
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8
IF sy-subrc NE 0.
retcode = sy-subrc.
syst-msgid = 'ZA_G'. "DEVK912166
syst-msgno = '922'. "DEVK912166
syst-msgty = 'E'. "DEVK912166
syst-msgv1 = sy-subrc. "DEVK912166
syst-msgv2 = tbl_smtp-adsmtp-smtp_addr. "DEVK912166
PERFORM protocol_update.
syst-msgid = 'VW'.
syst-msgno = '001'.
syst-msgty = 'E'.
syst-msgv1 = 'Print successful:email Recepient Invalid'."#EC NOTEXT
PERFORM protocol_update.
ENDIF.
ENDFORM. " send_email
*& Form fill_orders
text
--> p1 text
<-- p2 text
FORM fill_orders.
tbl_ord-bstnk = vbak-bstnk.
tbl_ord-kdmat = vbap-kdmat.
tbl_ord-xblnr = vbak-vbeln.
tbl_ord-ean11 = vbap-pmatn.
tbl_ord-arktx = vbap-arktx.
tbl_ord-csrno = w_csrno .
tbl_ord-csremail = w_email.
tbl_ord-spras = kna1-spras .
tbl_ord-csrphone = adrc-tel_number.
tbl_ord-csrfax = adrc-fax_number.
tbl_ord-csrext = adrc-tel_extens.
tbl_ord-total = w_total.
tbl_ord-custname = w_custname.
tbl_ord-csrname = w_csrname .
tbl_ord-ldate = w_ldate.
APPEND tbl_ord.
CLEAR tbl_ord.
CLEAR w_total.
CLEAR w_ldate.
ENDFORM. " fill_orders
*& Form writeform_text
text
--> p1 text
<-- p2 text
FORM writeform_text.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'WTEXT'
window = 'WINDOW2'
EXCEPTIONS
element = 1
window = 2.
IF sy-subrc NE 0.
retcode = sy-subrc.
syst-msgid = 'EBR'.
syst-msgno = '056'.
syst-msgty = 'E'.
syst-msgv1 = 'WTEXT'.
syst-msgv2 = 'WINDOW2'.
PERFORM protocol_update.
ENDIF.
ENDFORM. " writeform_text
*& Form writeform
text
--> p1 text
<-- p2 text
FORM writeform.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'EMAIN'
window = 'MAIN'
EXCEPTIONS
element = 1
window = 2.
IF sy-subrc NE 0.
retcode = sy-subrc.
syst-msgid = 'EBR'.
syst-msgno = '056'.
syst-msgty = 'E'.
syst-msgv1 = 'WTEXT'.
syst-msgv2 = 'WINDOW2'.
PERFORM protocol_update.
ENDIF.
ENDFORM. " writeform
*& Form writeform_footer
text
--> p1 text
<-- p2 text
FORM writeform_footer.
IF nast-spras = 'N'.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'FOOTER'
window = 'MAIN'
EXCEPTIONS
element = 1
window = 2.
ENDIF.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'WFOOTER'
window = 'WINDOW12'
EXCEPTIONS
element = 1
window = 2.
IF sy-subrc NE 0.
retcode = sy-subrc.
syst-msgid = 'EBR'.
syst-msgno = '056'.
syst-msgty = 'E'.
syst-msgv1 = 'WFOOTER'.
syst-msgv2 = 'WINDOW12'.
PERFORM protocol_update.
ENDIF.
ENDFORM. " writeform_footer
*& Form closeform
text
--> p1 text
<-- p2 text
FORM closeform.
CALL FUNCTION 'CLOSE_FORM'
TABLES
otfdata = tbl_otf
EXCEPTIONS
unopened = 1
bad_pageformat_for_print = 2
OTHERS = 3.
IF sy-subrc NE 0.
retcode = sy-subrc.
syst-msgid = 'PS'.
syst-msgno = '005'.
syst-msgty = 'E'.
PERFORM protocol_update.
ENDIF.
ENDFORM. " closeform
*& Form format_pdf
text
--> p1 text
<-- p2 text
FORM format_pdf.
FIELD-SYMBOLS <fs>.
DESCRIBE TABLE tbl_line LINES hltlines.
DESCRIBE FIELD tbl_line LENGTH fle1 IN BYTE MODE . Defect#1579-
DESCRIBE FIELD tbl_objtxt LENGTH fle2 IN BYTE MODE . Defect#1579-
Start of Defect#1579+
DESCRIBE FIELD tbl_line LENGTH fle1 IN CHARACTER MODE.
DESCRIBE FIELD tbl_objtxt LENGTH fle2 IN CHARACTER MODE.
End of Defect#1579+
CLEAR tbl_objtxt.
REFRESH tbl_objtxt.
LOOP AT tbl_line.
htabix = sy-tabix.
MOVE tbl_line TO hfeld+off1.
IF htabix = hltlines.
fle1 = strlen( tbl_line ).
ENDIF.
off1 = off1 + fle1.
IF off1 GE fle2.
CLEAR tbl_objtxt.
tbl_objtxt = hfeld(fle2).
APPEND tbl_objtxt.
SHIFT hfeld BY fle2 PLACES.
off1 = off1 - fle2.
ENDIF.
IF htabix = hltlines.
IF off1 GT 0.
CLEAR tbl_objtxt.
tbl_objtxt = hfeld(off1).
APPEND tbl_objtxt.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " format_pdf
ANy Suggestion or help will be appreciated!
Regards,
Kittu
Edited by: Kittu on Jun 30, 2008 12:32 PMHello Julie Waller,
Very Good evening!
Thank you very much for your response!
Sometimes...I miss the basic things and start concentarcting on typical ways to fix the issue. ....which will only make my issue critical.
Hello Sathya,
Thank you for your response!
POints are rewarded..
Have a great day ahead!
Regards,
Kittu
Maybe you are looking for
-
How to change the master page and theme dynamically in sharepoint2013 anonymous site
hi I have to change the master page and theme dynamically in sharepoint2013 anonymous site. i have to show one master page to authenticated user another master page to anonymous user through code Srinivas
-
Added another router to UC320 W network
We are currently using a UC320W for our router, phone system, and wireless. We are wanting to add a device for VPN connections. I was wanting to find out if we could disable the routing on the UC320 W and just have it on the lan and the wireless as
-
Itunes volume turned all way down
hey today i receave a message on my macbook pro that,(itunes volume turned all way down) i had tring to solve it bye moving plist file in prefrence but there is no flie like this com.itunes.apple.plist please help guys to solve it
-
Insert Company logo to WEBI CSS
Hello All, I am trying to add a company logo to the webi template. I'm working with BusinessObjects 4.0. To develop the right CSS I am using Web Intelligence Rich Client. The CSS i am trying is: /* Settings for PAGE_HEADER */ REPORT > PAGE_HEADER
-
I don't know who will see this, but i'm writing this here, because i cound't find any problem report places anywhere. Your site are too confusing. I just wanna say that css3 isn't working properly in mozilla. It lags. Other transitions doesn't work a