Commit e4968b83 authored by Dmitry.Shahtanov's avatar Dmitry.Shahtanov

fix: Bug 19896 - Ошибка VALUE при вычислении формулы TIME

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@49248 954022d7-b5bf-4e40-9824-e11837661b57
parent dbf74c85
...@@ -36,48 +36,37 @@ cFormulaFunction.DateAndTime = { ...@@ -36,48 +36,37 @@ cFormulaFunction.DateAndTime = {
r.Calculate = function(arg){ r.Calculate = function(arg){
var arg0 = arg[0], arg1 = arg[1], arg2 = arg[2], year, month, day; var arg0 = arg[0], arg1 = arg[1], arg2 = arg[2], year, month, day;
for (var i = 0; i<this.argumentsCurrent;i++){ if ( arg0 instanceof cArea || arg0 instanceof cArea3D ) {
var arg0 = arg[i]; arg0 = arg0.cross( arguments[1].first );
if( arg0 instanceof cArray ){ }
arg0 = arg0.getElement(0); else if( arg0 instanceof cArray ){
} arg0 = arg0.getElement(0);
else if( arg0 instanceof cArea || arg0 instanceof cArea3D ){ }
arg0 = arg0.cross(arguments[1].first).tocNumber(); if ( arg1 instanceof cArea || arg1 instanceof cArea3D ) {
} arg1 = arg1.cross( arguments[1].first );
}
if(arg0 instanceof cError){ else if( arg1 instanceof cArray ){
return this.setCA(arg0,true); arg1 = arg1.getElement(0);
} }
else if( arg0 instanceof cNumber || arg0 instanceof cBool){ if ( arg2 instanceof cArea || arg2 instanceof cArea3D ) {
if(i==0)year = arg0.tocNumber().getValue(); arg2 = arg2.cross( arguments[1].first );
if(i==1)month = arg0.tocNumber().getValue(); }
if(i==2)day = arg0.tocNumber().getValue(); else if( arg2 instanceof cArray ){
} arg2 = arg2.getElement(0);
else if ( arg0 instanceof cRef || arg0 instanceof cRef3D ){
var val = arg0.getValue();
if(val instanceof cError) return this.setCA(val,true);
else if( val instanceof cNumber || val instanceof cBool ){
if(i==0)year = arg0.tocNumber().getValue();
if(i==1)month = arg0.tocNumber().getValue();
if(i==2)day = arg0.tocNumber().getValue();
}
else{
return this.setCA(new cError( cErrorType.wrong_value_type ),true);
}
}
else if(arg0 instanceof cString || arg0 instanceof cEmpty){
var val = arg0.tocNumber();
if(val instanceof cError){
return this.setCA(val,true);
}
else {
if(i==0)year = arg0.tocNumber().getValue();
if(i==1)month = arg0.tocNumber().getValue();
if(i==2)day = arg0.tocNumber().getValue();
}
}
} }
arg0 = arg0.tocNumber();
arg1 = arg1.tocNumber();
arg2 = arg2.tocNumber();
if ( arg0 instanceof cError ) return this.setCA(arg0,true);
if ( arg1 instanceof cError ) return this.setCA(arg1,true);
if ( arg2 instanceof cError ) return this.setCA(arg2,true);
year = arg0.getValue();
month = arg1.getValue();
day = arg2.getValue();
if( year >= 0 && year <= 1899) if( year >= 0 && year <= 1899)
year+=1900; year+=1900;
if( month == 0 ){ if( month == 0 ){
...@@ -856,44 +845,39 @@ cFormulaFunction.DateAndTime = { ...@@ -856,44 +845,39 @@ cFormulaFunction.DateAndTime = {
r.setArgumentsMin(3); r.setArgumentsMin(3);
r.setArgumentsMax(3); r.setArgumentsMax(3);
r.Calculate = function(arg){ r.Calculate = function(arg){
var hour,minute,second; var hour = arg[0], minute = arg[1], second = arg[2];
for (var i = 0; i<this.argumentsCurrent;i++){
var arg0 = arg[i];
if( arg0 instanceof cArray ){
arg0 = arg0.getElement(0);
}
else if ( arg0 instanceof cArea || arg0 instanceof cArea3D ){
arg0 = arg0.cross(arguments[1].first).tocNumber();
}
if(arg0 instanceof cError) return this.setCA( arg0 ,true); if ( hour instanceof cArea || hour instanceof cArea3D ) {
else if( arg0 instanceof cNumber || arg0 instanceof cBool){ hour = hour.cross( arguments[1].first );
if(i==0)hour = arg0.tocNumber().getValue(); }
if(i==1)minute = arg0.tocNumber().getValue(); else if( hour instanceof cArray ){
if(i==2)second = arg0.tocNumber().getValue(); hour = hour.getElement(0);
} }
else if ( arg0 instanceof cRef || arg0 instanceof cRef3D ){ if ( minute instanceof cArea || minute instanceof cArea3D ) {
var val = arg0.getValue(); minute = minute.cross( arguments[1].first );
if(val instanceof cError) return this.setCA( val ,true); }
else if( val instanceof cNumber || val instanceof cBool ){ else if( minute instanceof cArray ){
if(i==0)hour = arg0.tocNumber().getValue(); minute = minute.getElement(0);
if(i==1)minute = arg0.tocNumber().getValue(); }
if(i==2)second = arg0.tocNumber().getValue(); if ( second instanceof cArea || second instanceof cArea3D ) {
} second = second.cross( arguments[1].first );
else{
return this.setCA( new cError( cErrorType.wrong_value_type ) ,true);
}
}
else if(arg0 instanceof cString || arg0 instanceof cEmpty){
var val = arg0.tocNumber();
if(val instanceof cError) return this.setCA( val ,true);
else {
if(i==0)hour = arg0.tocNumber().getValue();
if(i==1)minute = arg0.tocNumber().getValue();
if(i==2)second = arg0.tocNumber().getValue();
}
}
} }
else if( second instanceof cArray ){
second = second.getElement(0);
}
hour = hour.tocNumber();
minute = minute.tocNumber();
second = second.tocNumber();
if ( hour instanceof cError ) return this.setCA(hour,true);
if ( minute instanceof cError ) return this.setCA(minute,true);
if ( second instanceof cError ) return this.setCA(second,true);
hour = hour.getValue();
minute = minute.getValue();
second = second.getValue();
var v = (hour*60*60+minute*60+second)/c_sPerDay; var v = (hour*60*60+minute*60+second)/c_sPerDay;
this.setCA( new cNumber( v - Math.floor(v) ) ,true); this.setCA( new cNumber( v - Math.floor(v) ) ,true);
if( arguments[1].getNumFormatStr().toLowerCase() === "general" ) if( arguments[1].getNumFormatStr().toLowerCase() === "general" )
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment