Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема 7.7 Дата+время в удобоваримом виде для SQL (число прочтений - 5233 )
mrgreen
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 32
Зарегистрирован: 01. Августа 2009
7.7 Дата+время в удобоваримом виде для SQL
07. Декабря 2009 :: 16:05
Печать  
Как известно DATE_TIME_IDDOC содержит мало того что полную дату и ИД документа но и количество миллисекунд прошедших с начала даты в  36-ричном представлении

Вопрос в том как в среде 1С получить это смещение для формирования параметра @DATE_TIME_IDDOC ?

т.е. мне нельзя привязываться к записаным документам... мне нужно свою временную позицию для запроса сформировать
  
Наверх
 
IP записан
 
mrgreen
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 32
Зарегистрирован: 01. Августа 2009
Re: 7.7 Дата+время в удобоваримом виде для SQL
Ответ #1 - 07. Декабря 2009 :: 16:47
Печать  
выкрутился формированием сначала части с полной датой а потом доформировываю строкой-результатом

Код
Выбрать все
	Ч = "";
	М = "";
	С = "";
	Текущеевремя(Ч,М,С);
	МилДес = Число(Ч)*60*60*10000+Число(М)*60*10000+Число(С)*10000;
	Результат = _IdToStr(МилДес);
		    Формат(Результат ,"С6") 

  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: 7.7 Дата+время в удобоваримом виде для SQL
Ответ #2 - 08. Декабря 2009 :: 05:47
Печать  
mrgreen писал(а) 07. Декабря 2009 :: 16:47:
выкрутился формированием сначала части с полной датой а потом доформировываю строкой-результатом

Код
Выбрать все
	Ч = "";
	М = "";
	С = "";
	Текущеевремя(Ч,М,С);
	МилДес = Число(Ч)*60*60*10000+Число(М)*60*10000+Число(С)*10000;
	Результат = _IdToStr(МилДес);
		    Формат(Результат ,"С6") 


Так это же время того компьютера откуда идет выполнение.
Откуда Вы знаете что время на всех компьютерах синхронизированно ?
Для mssql лучше использовать getdate()
  
Наверх
 
IP записан
 
mrgreen
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 32
Зарегистрирован: 01. Августа 2009
Re: 7.7 Дата+время в удобоваримом виде для SQL
Ответ #3 - 08. Декабря 2009 :: 08:14
Печать  
это пока не принципиально... принципиально было получение итогов на разные моменты времени одной и той же станции

хотя и даже если разные то не беда - они в домене и синхронизированы
  
Наверх
 
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: 7.7 Дата+время в удобоваримом виде для SQL
Ответ #4 - 08. Декабря 2009 :: 09:06
Печать  
Вот так можно сделать, причем врем берется с SQL - сервера

Код
Выбрать все
declare @sdate CHAR(8)
declare @ddate DateTime
declare @ddatetime DateTime
set @ddatetime = getdate()
set @sdate = CONVERT(CHAR(8),@ddatetime,112)
set @ddate = CAST(@sdate  as DateTime)

Select

  --  @sdate+dbo.ConvSyst(DATEDIFF(millisecond,@ddate,@ddatetime),36)

    @sdate+Right('     '+dbo.ConvSyst(DATEDIFF(millisecond,@ddate,@ddatetime),36),6)

 



dbo.ConvSyst(ДесятичноеЧисло,СистемаСчисления) - функция преобразует десятичное число в любую сист. счисления (в нашем случае 36-ричную)

Код
Выбрать все
IF object_id('ConvSyst') is null
exec('CREATE FUNCTION ConvSyst(@num int, @syst int)
RETURNS varchar(99) AS
BEGIN
declare @r varchar(99) set @r='''';
while @num>0 select @r=char(case when @num%@syst < 10 then @num%@syst + ascii(''0'') else @num%@syst + ascii(''A'')-10 end)+@r,@num=@num / @syst
return @r END')

 

  
Наверх
 
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: 7.7 Дата+время в удобоваримом виде для SQL
Ответ #5 - 08. Декабря 2009 :: 09:18
Печать  
Забыл что на время отводится 6 символов исправьте

Код
Выбрать все
@sdate+dbo.ConvSyst(DATEDIFF(millisecond,@ddate,@ddatetime),36) 



на

Код
Выбрать все
@sdate+Right('     '+dbo.ConvSyst(DATEDIFF(millisecond,@ddate,@ddatetime),36),6) 

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать