You've already forked lazarus-ccr
fpspreadsheet: Add unit tests for some of the recently fixed formulas.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6541 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -4445,16 +4445,15 @@ begin
|
|||||||
rtInteger : Result := Arg.ResInteger;
|
rtInteger : Result := Arg.ResInteger;
|
||||||
rtFloat : Result := Arg.ResFloat;
|
rtFloat : Result := Arg.ResFloat;
|
||||||
rtBoolean : if Arg.ResBoolean then Result := 1.0;
|
rtBoolean : if Arg.ResBoolean then Result := 1.0;
|
||||||
rtString,
|
rtHyperlink,
|
||||||
rtHyperlink : begin
|
rtString : begin
|
||||||
fs := (Arg.Worksheet as TsWorksheet).Workbook.FormatSettings;
|
fs := ExprFormatSettings; //(Arg.Worksheet as TsWorksheet).Workbook.FormatSettings;
|
||||||
TryStrToDateTime(ArgToString(Arg), Result, fs);
|
TryStrToDateTime(ArgToString(Arg), Result, fs);
|
||||||
end;
|
end;
|
||||||
rtCell : begin
|
rtCell : begin
|
||||||
cell := ArgToCell(Arg);
|
cell := ArgToCell(Arg);
|
||||||
if Assigned(cell) then
|
if Assigned(cell) and (cell^.ContentType = cctDateTime) then
|
||||||
if (cell^.ContentType = cctDateTime) then
|
Result := cell^.DateTimeValue;
|
||||||
Result := cell^.DateTimeValue;
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -4712,6 +4711,11 @@ initialization
|
|||||||
ExprFormatSettings := DefaultFormatSettings;
|
ExprFormatSettings := DefaultFormatSettings;
|
||||||
ExprFormatSettings.DecimalSeparator := '.';
|
ExprFormatSettings.DecimalSeparator := '.';
|
||||||
ExprFormatSettings.ListSeparator := ',';
|
ExprFormatSettings.ListSeparator := ',';
|
||||||
|
ExprFormatSettings.DateSeparator := '/';
|
||||||
|
ExprFormatSettings.TimeSeparator := ':';
|
||||||
|
ExprFormatSettings.ShortDateFormat := 'yyyy/m/d'; // the parser returns single digits
|
||||||
|
ExprFormatSettings.LongTimeFormat := 'h:n:s';
|
||||||
|
ExprFormatSettings.ShortTimeFormat := 'h:n';
|
||||||
|
|
||||||
RegisterStdBuiltins(BuiltinIdentifiers);
|
RegisterStdBuiltins(BuiltinIdentifiers);
|
||||||
|
|
||||||
|
@ -421,13 +421,15 @@ procedure fpsDAY(var Result: TsExpressionResult; const Args: TsExprParameterArra
|
|||||||
// date_value can be a serial number or a string
|
// date_value can be a serial number or a string
|
||||||
var
|
var
|
||||||
y,m,d: Word;
|
y,m,d: Word;
|
||||||
|
dt: TDateTime;
|
||||||
begin
|
begin
|
||||||
if (Args[0].ResultType in [rtDateTime, rtFloat, rtInteger, rtString, rtCell])
|
Result := ErrorResult(errWrongType);
|
||||||
then begin
|
if (Args[0].ResultType in [rtDateTime, rtFloat, rtInteger, rtString, rtCell]) then
|
||||||
DecodeDate(ArgToFloat(Args[0]), y, m, d);
|
begin
|
||||||
|
dt := ArgToDateTime(Args[0]);
|
||||||
|
DecodeDate(dt, y, m, d);
|
||||||
Result := IntegerResult(d);
|
Result := IntegerResult(d);
|
||||||
end else
|
end;
|
||||||
Result := ErrorResult(errWrongType);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure fpsHOUR(var Result: TsExpressionResult; const Args: TsExprParameterArray);
|
procedure fpsHOUR(var Result: TsExpressionResult; const Args: TsExprParameterArray);
|
||||||
@ -435,28 +437,30 @@ procedure fpsHOUR(var Result: TsExpressionResult; const Args: TsExprParameterArr
|
|||||||
// time_value can be a number or a string.
|
// time_value can be a number or a string.
|
||||||
var
|
var
|
||||||
h, m, s, ms: Word;
|
h, m, s, ms: Word;
|
||||||
t: double;
|
dt: TDateTime;
|
||||||
begin
|
begin
|
||||||
|
Result := ErrorResult(errWrongType);
|
||||||
if (Args[0].ResultType in [rtDateTime, rtFloat, rtInteger, rtString, rtCell]) then
|
if (Args[0].ResultType in [rtDateTime, rtFloat, rtInteger, rtString, rtCell]) then
|
||||||
begin
|
begin
|
||||||
DecodeTime(trunc(ArgToFloat(Args[0])), h,m,s,ms);
|
dt := ArgToDateTime(Args[0]);
|
||||||
|
DecodeTime(dt, h, m, s, ms);
|
||||||
Result := IntegerResult(h);
|
Result := IntegerResult(h);
|
||||||
end else
|
end;
|
||||||
Result := ErrorResult(errWrongType);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure fpsMINUTE(var Result: TsExpressionResult; const Args: TsExprParameterArray);
|
procedure fpsMINUTE(var Result: TsExpressionResult; const Args: TsExprParameterArray);
|
||||||
// MINUTE( serial_number or string )
|
// MINUTE( serial_number or string )
|
||||||
var
|
var
|
||||||
h, m, s, ms: Word;
|
h, m, s, ms: Word;
|
||||||
t: double;
|
dt: TDateTime;
|
||||||
begin
|
begin
|
||||||
|
Result := ErrorResult(errWrongType);
|
||||||
if (Args[0].ResultType in [rtDateTime, rtFloat, rtInteger, rtString, rtCell]) then
|
if (Args[0].ResultType in [rtDateTime, rtFloat, rtInteger, rtString, rtCell]) then
|
||||||
begin
|
begin
|
||||||
DecodeTime(ArgToFloat(Args[0]), h,m,s,ms);
|
dt := ArgToDateTime(Args[0]);
|
||||||
|
DecodeTime(dt, h, m, s, ms);
|
||||||
Result := IntegerResult(m);
|
Result := IntegerResult(m);
|
||||||
end else
|
end;
|
||||||
Result := ErrorResult(errWrongType);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure fpsMONTH(var Result: TsExpressionResult; const Args: TsExprParameterArray);
|
procedure fpsMONTH(var Result: TsExpressionResult; const Args: TsExprParameterArray);
|
||||||
@ -465,12 +469,13 @@ var
|
|||||||
y,m,d: Word;
|
y,m,d: Word;
|
||||||
dt: TDateTime;
|
dt: TDateTime;
|
||||||
begin
|
begin
|
||||||
|
Result := ErrorResult(errWrongType);
|
||||||
if (Args[0].ResultType in [rtDateTime, rtFloat, rtInteger, rtString, rtCell]) then
|
if (Args[0].ResultType in [rtDateTime, rtFloat, rtInteger, rtString, rtCell]) then
|
||||||
begin
|
begin
|
||||||
DecodeDate(ArgToFloat(Args[0]), y,m,d);
|
dt := ArgToDateTime(Args[0]);
|
||||||
|
DecodeDate(dt, y, m, d);
|
||||||
Result := IntegerResult(m);
|
Result := IntegerResult(m);
|
||||||
end else
|
end;
|
||||||
Result := ErrorResult(errWrongType);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure fpsNOW(var Result: TsExpressionResult; const Args: TsExprParameterArray);
|
procedure fpsNOW(var Result: TsExpressionResult; const Args: TsExprParameterArray);
|
||||||
@ -486,14 +491,15 @@ procedure fpsSECOND(var Result: TsExpressionResult; const Args: TsExprParameterA
|
|||||||
// SECOND( serial_number )
|
// SECOND( serial_number )
|
||||||
var
|
var
|
||||||
h, m, s, ms: Word;
|
h, m, s, ms: Word;
|
||||||
t: Double;
|
dt: TDateTime;
|
||||||
begin
|
begin
|
||||||
if (Args[0].ResultType in [rtDateTime, rtFloat, rtInteger, rtString, rtCell])
|
Result := ErrorResult(errWrongType);
|
||||||
then begin
|
if (Args[0].ResultType in [rtDateTime, rtFloat, rtInteger, rtString, rtCell]) then
|
||||||
DecodeTime(ArgToFloat(Args[0]), h,m,s,ms);
|
begin
|
||||||
|
dt := ArgToDateTime(Args[0]);
|
||||||
|
DecodeTime(dt, h, m, s, ms);
|
||||||
Result := IntegerResult(s);
|
Result := IntegerResult(s);
|
||||||
end else
|
end;
|
||||||
Result := ErrorResult(errWrongType);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure fpsTIME(var Result: TsExpressionResult; const Args: TsExprParameterArray);
|
procedure fpsTIME(var Result: TsExpressionResult; const Args: TsExprParameterArray);
|
||||||
@ -563,12 +569,13 @@ var
|
|||||||
y,m,d: Word;
|
y,m,d: Word;
|
||||||
dt: TDateTime;
|
dt: TDateTime;
|
||||||
begin
|
begin
|
||||||
if Args[0].ResultType in [rtDateTime, rtFloat, rtInteger, rtString, rtCell]
|
Result := ErrorResult(errWrongType);
|
||||||
then begin
|
if (Args[0].ResultType in [rtDateTime, rtFloat, rtInteger, rtString, rtCell]) then
|
||||||
DecodeDate(ArgToFloat(Args[0]), y,m,d);
|
begin
|
||||||
|
dt := ArgToDateTime(Args[0]);
|
||||||
|
DecodeDate(dt, y, m, d);
|
||||||
Result := IntegerResult(y);
|
Result := IntegerResult(y);
|
||||||
end else
|
end;
|
||||||
Result := ErrorResult(errWrongType);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
@ -41,6 +41,25 @@ type
|
|||||||
procedure AddCells_OOXML;
|
procedure AddCells_OOXML;
|
||||||
procedure AddCells_ODS;
|
procedure AddCells_ODS;
|
||||||
|
|
||||||
|
procedure RoundConst1_ODS;
|
||||||
|
procedure RoundConst2_ODS;
|
||||||
|
procedure RoundCell1_ODS;
|
||||||
|
procedure RoundCell2_ODS;
|
||||||
|
|
||||||
|
procedure YearConst_BIFF8;
|
||||||
|
procedure YearCell_BIFF8;
|
||||||
|
procedure MonthConst_BIFF8;
|
||||||
|
procedure MonthCell_BIFF8;
|
||||||
|
procedure DayConst_BIFF8;
|
||||||
|
procedure DayCell_BIFF8;
|
||||||
|
|
||||||
|
procedure HourConst_BIFF8;
|
||||||
|
procedure HourCell_BIFF8;
|
||||||
|
procedure MinuteConst_BIFF8;
|
||||||
|
procedure MinuteCell_BIFF8;
|
||||||
|
procedure SecondConst_BIFF8;
|
||||||
|
procedure SecondCell_BIFF8;
|
||||||
|
|
||||||
procedure SumRange_BIFF2;
|
procedure SumRange_BIFF2;
|
||||||
procedure SumRange_BIFF5;
|
procedure SumRange_BIFF5;
|
||||||
procedure SumRange_BIFF8;
|
procedure SumRange_BIFF8;
|
||||||
@ -63,6 +82,11 @@ type
|
|||||||
procedure SumMultiSheetRange_FlippedSheetsAndCells_OOXML;
|
procedure SumMultiSheetRange_FlippedSheetsAndCells_OOXML;
|
||||||
procedure SumMultiSheetRange_FlippedSheetsAndCells_ODS;
|
procedure SumMultiSheetRange_FlippedSheetsAndCells_ODS;
|
||||||
|
|
||||||
|
procedure CountIfRange_BIFF8;
|
||||||
|
procedure CountIfRangeSheet_BIFF8;
|
||||||
|
|
||||||
|
procedure SumIfRangeSheetSheet_BIFF8;
|
||||||
|
|
||||||
procedure NonExistantSheet_BIFF5;
|
procedure NonExistantSheet_BIFF5;
|
||||||
procedure NonExistantSheet_BIFF8;
|
procedure NonExistantSheet_BIFF8;
|
||||||
procedure NonExistantSheet_OOXML;
|
procedure NonExistantSheet_OOXML;
|
||||||
@ -137,7 +161,7 @@ begin
|
|||||||
// Create test workbook and write test formula and needed cells
|
// Create test workbook and write test formula and needed cells
|
||||||
workbook := TsWorkbook.Create;
|
workbook := TsWorkbook.Create;
|
||||||
try
|
try
|
||||||
workbook.FormatSettings.DecimalSeparator := '.';
|
workbook.FormatSettings := ExprFormatSettings;
|
||||||
workbook.Options := workbook.Options + [boCalcBeforeSaving, boAutoCalc];
|
workbook.Options := workbook.Options + [boCalcBeforeSaving, boAutoCalc];
|
||||||
workSheet:= workBook.AddWorksheet(SHEET1);
|
workSheet:= workBook.AddWorksheet(SHEET1);
|
||||||
|
|
||||||
@ -147,6 +171,9 @@ begin
|
|||||||
worksheet.WriteNumber(3, 2, -2.0); // C4
|
worksheet.WriteNumber(3, 2, -2.0); // C4
|
||||||
worksheet.WriteNumber(4, 2, 1.5); // C5
|
worksheet.WriteNumber(4, 2, 1.5); // C5
|
||||||
worksheet.WriteNumber(2, 3, 15.0); // D3
|
worksheet.WriteNumber(2, 3, 15.0); // D3
|
||||||
|
|
||||||
|
worksheet.WriteDateTime( 9, 1, EncodeDate(2012, 2, 5), nfShortDate); // B10
|
||||||
|
worksheet.WriteDateTime(10, 1, EncodeTime(14, 20, 41, 0), nfLongTime); // B11
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if ATestKind in [ftkCellRangeSheet, ftkCellRangeSheetRange] then begin
|
if ATestKind in [ftkCellRangeSheet, ftkCellRangeSheetRange] then begin
|
||||||
@ -185,7 +212,7 @@ begin
|
|||||||
// Read file
|
// Read file
|
||||||
workbook := TsWorkbook.Create;
|
workbook := TsWorkbook.Create;
|
||||||
try
|
try
|
||||||
workbook.FormatSettings.DecimalSeparator := '.';
|
workbook.FormatSettings := ExprFormatSettings;
|
||||||
workbook.Options := workbook.Options + [boReadFormulas, boAutoCalc];
|
workbook.Options := workbook.Options + [boReadFormulas, boAutoCalc];
|
||||||
workbook.ReadFromFile(TempFile, AFormat);
|
workbook.ReadFromFile(TempFile, AFormat);
|
||||||
worksheet := workbook.GetFirstWorksheet;
|
worksheet := workbook.GetFirstWorksheet;
|
||||||
@ -261,6 +288,110 @@ end;
|
|||||||
|
|
||||||
{ ------ }
|
{ ------ }
|
||||||
|
|
||||||
|
procedure TSpreadSingleFormulaTests.RoundConst1_ODS;
|
||||||
|
begin
|
||||||
|
TestFormula('ROUND(1234.56789,2)', '1234.57', ftkConstants, sfOpenDocument);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSpreadSingleFormulaTests.RoundConst2_ODS;
|
||||||
|
begin
|
||||||
|
TestFormula('ROUND(1234.56789,-2)', '1200', ftkConstants, sfOpenDocument);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSpreadSingleFormulaTests.RoundCell1_ODS;
|
||||||
|
begin
|
||||||
|
TestFormula('ROUND(1234.56789,C3)', '1234.6', ftkCells, sfOpenDocument); // C3 = 1
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSpreadSingleFormulaTests.RoundCell2_ODS;
|
||||||
|
begin
|
||||||
|
TestFormula('ROUND(1234.56789,C4)', '1200', ftkCells, sfOpenDocument); // C4 = -2
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ ------ }
|
||||||
|
|
||||||
|
procedure TSpreadSingleFormulaTests.YearConst_BIFF8;
|
||||||
|
var
|
||||||
|
s: String;
|
||||||
|
begin
|
||||||
|
s := FormatDateTime(ExprFormatSettings.ShortDateFormat, EncodeDate(2012,2,5), ExprFormatSettings);
|
||||||
|
TestFormula(Format('YEAR("%s")', [s]), '2012', ftkConstants, sfExcel8);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSpreadSingleFormulaTests.YearCell_BIFF8;
|
||||||
|
begin
|
||||||
|
TestFormula('YEAR(B10)', '2012', ftkCells, sfExcel8); // B10: 2012/02/05
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSpreadSingleFormulaTests.MonthConst_BIFF8;
|
||||||
|
var
|
||||||
|
s: String;
|
||||||
|
begin
|
||||||
|
s := FormatDateTime(ExprFormatSettings.ShortDateFormat, EncodeDate(2012,2,5), ExprFormatSettings);
|
||||||
|
TestFormula(Format('MONTH("%s")', [s]), '2', ftkConstants, sfExcel8);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSpreadSingleFormulaTests.MonthCell_BIFF8;
|
||||||
|
begin
|
||||||
|
TestFormula('MONTH(B10)', '2', ftkCells, sfExcel8); // B10: 2012/02/05
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSpreadSingleFormulaTests.DayConst_BIFF8;
|
||||||
|
var
|
||||||
|
s: String;
|
||||||
|
begin
|
||||||
|
s := FormatDateTime(ExprFormatSettings.ShortDateFormat, EncodeDate(2012,2,5), ExprFormatSettings);
|
||||||
|
TestFormula(Format('DAY("%s")', [s]), '5', ftkConstants, sfExcel8);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSpreadSingleFormulaTests.DayCell_BIFF8;
|
||||||
|
begin
|
||||||
|
TestFormula('DAY(B10)', '5', ftkCells, sfExcel8); // B10: 2012/02/05
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ ----- }
|
||||||
|
|
||||||
|
procedure TSpreadSingleFormulaTests.HourConst_BIFF8;
|
||||||
|
var
|
||||||
|
s: String;
|
||||||
|
begin
|
||||||
|
s := FormatDateTime(ExprFormatSettings.LongTimeFormat, EncodeTime(14, 20, 41, 0), ExprFormatSettings);
|
||||||
|
TestFormula(Format('HOUR("%s")', [s]), '14', ftkConstants, sfExcel8);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSpreadSingleFormulaTests.HourCell_BIFF8;
|
||||||
|
begin
|
||||||
|
TestFormula('HOUR(B11)', '14', ftkCells, sfExcel8); // B11: 14:20:41
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSpreadSingleFormulaTests.MinuteConst_BIFF8;
|
||||||
|
var
|
||||||
|
s: String;
|
||||||
|
begin
|
||||||
|
s := FormatDateTime(ExprFormatSettings.LongTimeFormat, EncodeTime(14, 20, 41, 0), ExprFormatSettings);
|
||||||
|
TestFormula(Format('MINUTE("%s")', [s]), '20', ftkConstants, sfExcel8);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSpreadSingleFormulaTests.MinuteCell_BIFF8;
|
||||||
|
begin
|
||||||
|
TestFormula('MINUTE(B11)', '20', ftkCells, sfExcel8); // B11: 14:20:41
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSpreadSingleFormulaTests.SecondConst_BIFF8;
|
||||||
|
var
|
||||||
|
s: String;
|
||||||
|
begin
|
||||||
|
s := FormatDateTime(ExprFormatSettings.LongTimeFormat, EncodeTime(14, 20, 41, 0), ExprFormatSettings);
|
||||||
|
TestFormula(Format('SECOND("%s")', [s]), '41', ftkConstants, sfExcel8);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSpreadSingleFormulaTests.SecondCell_BIFF8;
|
||||||
|
begin
|
||||||
|
TestFormula('SECOND(B11)', '41', ftkCells, sfExcel8); // B11: 14:20:41
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ ---- }
|
||||||
|
|
||||||
procedure TSpreadSingleFormulaTests.SumRange_BIFF2;
|
procedure TSpreadSingleFormulaTests.SumRange_BIFF2;
|
||||||
begin
|
begin
|
||||||
TestFormula('SUM(C3:C5)', '0.5', ftkCellRange, sfExcel2);
|
TestFormula('SUM(C3:C5)', '0.5', ftkCellRange, sfExcel2);
|
||||||
@ -363,6 +494,23 @@ end;
|
|||||||
|
|
||||||
{ --- }
|
{ --- }
|
||||||
|
|
||||||
|
procedure TSpreadSingleFormulaTests.CountIfRange_BIFF8;
|
||||||
|
begin
|
||||||
|
TestFormula('COUNTIF(C3:C5,">1")', '1', ftkCellRange, sfExcel8);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSpreadSingleFormulaTests.CountIfRangeSheet_BIFF8;
|
||||||
|
begin
|
||||||
|
TestFormula('COUNTIF(Sheet2!C3:C5,">10")', '1', ftkCellRangeSheet, sfExcel8);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSpreadSingleFormulaTests.SumIfRangeSheetSheet_BIFF8;
|
||||||
|
begin
|
||||||
|
TestFormula('SUMIF(Sheet2!C3:C5,">10",Sheet3!C3:C5)', '150', ftkCellRangeSheetRange, sfExcel8);
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ ---- }
|
||||||
|
|
||||||
procedure TSpreadSingleFormulaTests.NonExistantSheet_BIFF5;
|
procedure TSpreadSingleFormulaTests.NonExistantSheet_BIFF5;
|
||||||
begin
|
begin
|
||||||
TestFormula('Missing!C3', '#REF!', ftkCellRangeSheet, sfExcel5, '#REF!');
|
TestFormula('Missing!C3', '#REF!', ftkCellRangeSheet, sfExcel5, '#REF!');
|
||||||
@ -703,11 +851,10 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
// Register to include these tests in a full run
|
// Register to include these tests in a full run
|
||||||
RegisterTest(TSpreadSingleFormulaTests);
|
RegisterTest(TSpreadSingleFormulaTests);
|
||||||
|
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -1810,7 +1810,7 @@
|
|||||||
RPNFunc('DATE', nil))))))
|
RPNFunc('DATE', nil))))))
|
||||||
else
|
else
|
||||||
MyWorksheet.WriteFormula(Row, 1, formula);
|
MyWorksheet.WriteFormula(Row, 1, formula);
|
||||||
MyWorksheet.WriteDateTime(Row, 2, EncodeDate(2014,7,1));
|
MyWorksheet.WriteDateTime(Row, 2, EncodeDate(2014,7,1), nfShortDate);
|
||||||
SetLength(sollValues, Row+1);
|
SetLength(sollValues, Row+1);
|
||||||
sollValues[Row] := DateTimeResult(EncodeDate(2014,7,1));
|
sollValues[Row] := DateTimeResult(EncodeDate(2014,7,1));
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user