diff --git a/src/ScriptEngine/Machine/ValueFactory.cs b/src/ScriptEngine/Machine/ValueFactory.cs index f6186a5a1..96bd60987 100644 --- a/src/ScriptEngine/Machine/ValueFactory.cs +++ b/src/ScriptEngine/Machine/ValueFactory.cs @@ -99,7 +99,7 @@ public static IValue Add(IValue op1, IValue op2) return Create(s + op2.AsString()); } - if (op1 is BslDateValue date && op2.SystemType == BasicTypes.Number) + if (op1 is BslDateValue date) { return Create(date + op2.AsNumber()); } @@ -117,15 +117,15 @@ public static IValue Sub(IValue op1, IValue op2) { return Create(n - op2.AsNumber()); } - if (op1 is BslDateValue date && op2 is BslNumericValue num) - { - var result = date - num; - return Create(result); - } - if (op1 is BslDateValue d1 && op2 is BslDateValue d2) + + if (op1 is BslDateValue date) { - var diff = d1 - d2; - return Create(diff); + if (op2 is BslDateValue d2) + { + return Create(date - d2); + } + + return Create(date - op2.AsNumber()); } // все к числовому типу. diff --git a/tests/engine-behaviors.os b/tests/engine-behaviors.os index 764ed02c0..cf75eadd6 100644 --- a/tests/engine-behaviors.os +++ b/tests/engine-behaviors.os @@ -54,6 +54,10 @@ ВсеТесты.Добавить("ТестДолжен_ПроверитьСравнениеНаБольшеМеньше"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧто_ЭтотОбъект_НедоступенДляЗаписи"); + ВсеТесты.Добавить("ТестДолжен_ПроверитьОперацииСДатой_Сложение"); + ВсеТесты.Добавить("ТестДолжен_ПроверитьОперацииСДатой_Вычитание"); + ВсеТесты.Добавить("ТестДолжен_ПроверитьОперацииСДатой_СложениеДат"); + Возврат ВсеТесты; КонецФункции @@ -696,3 +700,40 @@ Процедура ТестДолжен_ПроверитьЧто_ЭтотОбъект_НедоступенДляЗаписи() Экспорт юТест.ПроверитьКодСОшибкой("ЭтотОбъект = 8", "Свойство 'ЭтотОбъект' недоступно для записи"); КонецПроцедуры + +Процедура ТестДолжен_ПроверитьОперацииСДатой_Сложение() Экспорт + + ТекущееВремя = ТекущаяДата(); + Попытка + ЧерезЧас = ТекущееВремя + "3600"; + юТест.ПроверитьРавенство(ЧерезЧас,ТекущееВремя+3600); + Исключение + ВызватьИсключение("Не работает сложение даты со строкой"); + КонецПопытки; + +КонецПроцедуры + +Процедура ТестДолжен_ПроверитьОперацииСДатой_Вычитание() Экспорт + + ТекущееВремя = ТекущаяДата(); + Попытка + ЧасомРанее = ТекущееВремя - "3600"; + юТест.ПроверитьРавенство(ЧасомРанее,ТекущееВремя-3600); + Исключение + ВызватьИсключение("Не работает вычитание даты и строки"); + КонецПопытки; + +КонецПроцедуры + +Процедура ТестДолжен_ПроверитьОперацииСДатой_СложениеДат() Экспорт + + ТекущееВремя = ТекущаяДата(); + + Попытка + ТекущееВремя = ТекущееВремя + '00010101'; + Исключение + Возврат; + КонецПопытки; + + ВызватьИсключение "Не должно работать сложение дат"; +КонецПроцедуры