CREATE FUNCTION CDATE(@DATE_TIME_IDDOC char(23)) RETURNS datetime AS BEGIN DECLARE @HH INT DECLARE @MM INT DECLARE @SS INT DECLARE @result datetime DECLARE @str_result char(8) DECLARE @ЗНАЧЕНИЕ_В_ДЕСЯТИТЫСЯЧНЫХ_СЕКУНДЫ BIGINT
DECLARE @TIME36 CHAR(23)
SET @TIME36=LEFT(@DATE_TIME_IDDOC,CHARINDEX(' ',@DATE_TIME_IDDOC)) SET @TIME36=RIGHT(RTRIM(@TIME36),LEN(RTRIM(@TIME36))-8) SET @ЗНАЧЕНИЕ_В_ДЕСЯТИТЫСЯЧНЫХ_СЕКУНДЫ=dbo.Convert36to10f(@TIME36) SET @HH=@ЗНАЧЕНИЕ_В_ДЕСЯТИТЫСЯЧНЫХ_СЕКУНДЫ/10000/60/60 SET @MM=@ЗНАЧЕНИЕ_В_ДЕСЯТИТЫСЯЧНЫХ_СЕКУНДЫ/10000/60-60*@HH SET @SS=@ЗНАЧЕНИЕ_В_ДЕСЯТИТЫСЯЧНЫХ_СЕКУНДЫ/10000-3600*@HH-60*@MM set @str_result=''+CAST(@HH as CHAR(2))+':'+CAST(@MM as CHAR(2))+':'+CAST(@SS as CHAR(2)) set @result=CAST(@str_result as datetime) return @result END
Хранение времени:
Время может храниться в двух форматах: Числовое представление, Строковое представление.
В случае числового хранения времени отсчитывается от начала суток в десятиcячных долях секунды. Т.е. фактически будет получено число: (Часы*3600+Минуты*60+секунды)*10000. Т.е. Для времени 19:05:36 – 687360000 (1С умеет учитывать время до 1000 долей секунды, как в случае с документами).
В случае числовго хранения времени время с числового значения (Часы*3600+Минуты*60+секунды)*10000 переводиться в 36-ричный формат. Так для времени 19:05:36 - BD8IDC.
только при присвоении времени менее секунды от начала дня(типа 1 десятитысячную) 1С не видит таких записей.... мои наблюдения
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший