Имя: Пароль:
1C
 
Как вычленить время записи документа из даты в _1SJOURN
0 DK_L
 
17.01.08
16:39
После даты аброкадабра какая-то там - как преобразовать тот формат в удобочитаемый.
Допустим
200701017Т364G вот что мы получаем из SQL
1 akaBrr
 
17.01.08
16:41
Left
2 akaBrr
 
17.01.08
16:42
Левые 8 символов это дата
3 akaBrr
 
17.01.08
16:43
(0) Извини тебе же время надо, проглядел я
4 sapphire
 
17.01.08
16:44
остально - время в 36-ричной ситеме (1/10000 с)
5 dk
 
17.01.08
16:45
6 sapphire
 
17.01.08
16:45
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
7 sapphire
 
17.01.08
16:46
CREATE FUNCTION Convert36to10f
  (@Res36 char(9) )
RETURNS bigint
AS
BEGIN
--SET NOCOUNT ON
DECLARE @j INT
declare @Deci bigint
DECLARE @Arr36 CHAR(36)
SELECT @Arr36 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
SELECT @Deci = 0
SELECT @j = 1
while @j <= LEN(LTRIM(RTRIM(@Res36)))
begin
if @j <> 1
SELECT @Deci = @Deci*36
SELECT @Deci = @Deci + CHARINDEX(SUBSTRING(LTRIM(RTRIM(@Res36)), @j,1),@Arr36) -1
SELECT @j = @j+1
end
return @Deci
END
8 Cthulhu
 
17.01.08
16:46
Хранение времени:
Время может храниться в двух форматах: Числовое представление, Строковое представление.
В случае числового хранения времени отсчитывается от начала суток в десятиcячных долях секунды. Т.е. фактически будет получено число: (Часы*3600+Минуты*60+секунды)*10000. Т.е. Для времени 19:05:36 – 687360000 (1С умеет учитывать время до 1000 долей секунды, как в случае с документами).
В случае числовго хранения времени время с числового значения (Часы*3600+Минуты*60+секунды)*10000 переводиться в 36-ричный формат. Так для времени 19:05:36 - BD8IDC.
9 DK_L
 
17.01.08
16:54
всем спасибо...
10 mikecool
 
17.01.08
17:21
только при присвоении времени менее секунды от начала дня(типа 1 десятитысячную) 1С не видит таких записей.... мои наблюдения
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший