Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) как получить время из Date_Time_IDDoc (число прочтений - 8151 )
egorover
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 8
Зарегистрирован: 14. Сентября 2007
как получить время из Date_Time_IDDoc
14. Сентября 2007 :: 12:45
Печать  
не могу получить время из Date_Time_IDDoc
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: как получить время из Date_Time_IDDoc
Ответ #1 - 14. Сентября 2007 :: 12:54
Печать  
Оно идет сразу после даты (8 знаков) и перед Иддок (9 знаков)
А всего 23 - 17 = 6 знаков в 36 формате
Функции перевода поищи поиском
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
egorover
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 8
Зарегистрирован: 14. Сентября 2007
Re: как получить время из Date_Time_IDDoc
Ответ #2 - 14. Сентября 2007 :: 13:29
Печать  
спасибо, вот только как раз в этом и проблема строку времени то я получить в скл запросе могу SUBSTRING(Жур.Date_Time_IDDoc, 9, 6), а вот впоследствии конвертировать в формат времени 00:00:00.000 прямо в СКЛ запросе не получается, время необходимо для правильной сортировки документов из регистра
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: как получить время из Date_Time_IDDoc
Ответ #3 - 14. Сентября 2007 :: 16:07
Печать  
Поищи поиском convert36to10
Далее надо разобрать на человеческое время
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: как получить время из Date_Time_IDDoc
Ответ #4 - 14. Сентября 2007 :: 16:22
Печать  
egorover писал(а) 14. Сентября 2007 :: 13:29:
спасибо, вот только как раз в этом и проблема строку времени то я получить в скл запросе могу SUBSTRING(Жур.Date_Time_IDDoc, 9, 6), а вот впоследствии конвертировать в формат времени 00:00:00.000 прямо в СКЛ запросе не получается, время необходимо для правильной сортировки документов из регистра

А зачем приводить к человеческому виду - для правильной сортировки
вполне хватить просто сортировки по date_time_iddoc.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: как получить время из Date_Time_IDDoc
Ответ #5 - 14. Сентября 2007 :: 19:09
Печать  
Точно Улыбка
Что-то дальше я не дочитал
Автор, если устраивает такой порядок как в журнале доков - бери полностью позицию и не парься
Даже представить трудно как там еще по-другому отсортировать можно... больше инфы ведь нет (наносекунды и проч.)
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
egorover
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 8
Зарегистрирован: 14. Сентября 2007
Re: как получить время из Date_Time_IDDoc
Ответ #6 - 17. Сентября 2007 :: 09:27
Печать  
А зачем приводить к человеческому виду - для правильной сортировки
вполне хватить просто сортировки по date_time_iddoc.

может быть Вы и правы, только сортировать по date_time, у меня в выборке различные iddoc

Поищи поиском convert36to10
Далее надо разобрать на человеческое время

вот то что нужно -  http://www.1cpp.ru/forum/YaBB.pl?num=1160124341/0
вот только с разделение на батчи командой "GO" прямо в запросе непонятно как описывать...
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: как получить время из Date_Time_IDDoc
Ответ #7 - 17. Сентября 2007 :: 10:30
Печать  
egorover писал(а) 17. Сентября 2007 :: 09:27:
может быть Вы и правы, только сортировать по date_time, у меня в выборке различные iddoc

Ну так и сортируй:
Код
Выбрать все
ORDER BY date_time, iddoc 


или
Код
Выбрать все
ORDER BY iddoc, date_time  


  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: как получить время из Date_Time_IDDoc
Ответ #8 - 17. Сентября 2007 :: 14:21
Печать  
egorover писал(а) 17. Сентября 2007 :: 09:27:
вот только с разделение на батчи командой "GO" прямо в запросе непонятно как описывать...

Запрос.ВыполнитьИнструкцию("если существует - дроп");
Запрос.ВыполнитьИнструкцию("создать функцию конверт...");

  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
egorover
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 8
Зарегистрирован: 14. Сентября 2007
Re: как получить время из Date_Time_IDDoc
Ответ #9 - 18. Сентября 2007 :: 06:33
Печать  
вроде всё, всем спасибо      

               RS = СоздатьОбъект("ODBCRecordset");
     RS.УстБД1С();
     ТекстЗапроса = "
     |IF EXISTS (SELECT * from sysobjects WHERE name = 'Convert36To10f')
     |      drop function dbo.Convert36To10f
     |"; 
     RS.ВыполнитьИнструкцию(ТекстЗапроса);
     
     RS = СоздатьОбъект("ODBCRecordset");
     RS.УстБД1С();
     ТекстЗапроса = "
     |CREATE FUNCTION dbo.Convert36To10f(@Val_36 varchar(9)) Returns int
     |Begin
     |      DECLARE @j int, @len int, @Val_10 int
     |      DECLARE @Arr36 char(36)
     |      SET @Arr36 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
     |      SET @Val_10 = 0
     |      SET @j = 1
     |      SET @Val_36 = LTrim(RTrim(@Val_36))
     |      SET @len = Len(@Val_36)
     |      while @j <= @len
     |      begin
     |            if @j <> 1
     |                  SET @Val_10 = @Val_10 * 36
     |            SET @Val_10 = @Val_10 + CharIndex(Substring(@Val_36, @j ,1), @Arr36) - 1
     |            SET @j = @j+1
     |      end
     |      Return @Val_10
     |End
     |"; 
     RS.ВыполнитьИнструкцию(ТекстЗапроса);
     
     RS = СоздатьОбъект("ODBCRecordset");
     RS.УстБД1С();
     ТекстЗапроса = "
     |IF EXISTS (SELECT * from sysobjects WHERE name = 'TimaDocToStr' )
     |      drop function dbo.TimaDocToStr
     |"; 
     RS.ВыполнитьИнструкцию(ТекстЗапроса); 
     
     RS = СоздатьОбъект("ODBCRecordset");
     RS.УстБД1С();
     ТекстЗапроса = "
     |CREATE FUNCTION dbo.TimaDocToStr (@DateTime char(23), @Delimiter char(1)) Returns varchar(8)
     |Begin
     |      DECLARE @strTime char(6), @hours int, @minutes int, @sec int
     |      SET @strTime = Substring(@DateTime, 9, 6)
     |      SET @sec = dbo.Convert36To10f(@strTime) / 10000
     |      SET @hours = @sec / 3600
     |      SET @sec = @sec - (@hours * 3600)
     |      SET @minutes = @sec / 60
     |      SET @sec = @sec - (@minutes * 60)
     |      DECLARE @res varchar(8)
     |      if @hours < 10
     |            SET @res = '0' + CAST(@hours as char(1))
     |      else
     |            SET @res = CAST(@hours as char(2))
     |      if @minutes < 10
     |            SET @res = @res + @Delimiter + '0' + CAST(@minutes as char(1))
     |      else
     |            SET @res = @res + @Delimiter + CAST(@minutes as char(2))
     |      if @sec < 10
     |            SET @res = @res + @Delimiter + '0' + CAST(@sec as char(1))
     |      else
     |            SET @res = @res + @Delimiter + CAST(@sec as char(2))
     |      return @res
     |End
     |"; 
     RS.ВыполнитьИнструкцию(ТекстЗапроса);
     
     RS = СоздатьОбъект("ODBCRecordset");
     RS.УстБД1С();
     ТекстЗапроса = "
     |SELECT
     |  case
     |    when Жур.IDDocDef='27226' then (SELECT sp28975 as DateTime from DH27226 where iddoc=ЖУР.iddoc)
     |    when Жур.IDDocDef='27304' then (CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime))
     |  end as ДатаОплаты,
     |   
     |    Рег.IDDoc as [Док $Документ],
     |    Жур.IDDocDef as Док_вид,
     |       dbo.TimaDocToStr(Жур.Date_Time_iddoc,':') as ДокВремя,
     |    LEFT(Жур.Date_Time_IDDoc,14) as ДокВремя1,
     |    $Рег.Контрагент as [Контрагент $Справочник.Контрагенты],
     |    $Рег.Сумма as Сумма 
     |FROM
     |    $Регистр.Взаиморасчеты101 as Рег
     |INNER JOIN
     |    _1Sjourn as Жур ON Жур.IDDoc = Рег.IDDoc
     |WHERE
     |    (Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND Жур.IDDocDef = $ВидДокумента.ОказаниеУслуг) OR
     |    (Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладная)
     |ORDER BY $Рег.Контрагент, ДатаОплаты, ДокВремя
     |"; 
     
     RS.УстановитьТекстовыйПараметр("НачДата", ВыбНачПериода);
     RS.УстановитьТекстовыйПараметр("КонДата", ВыбКонПериода);
     
     
     RS.Отладка(1);
     ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса);
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: как получить время из Date_Time_IDDoc
Ответ #10 - 18. Сентября 2007 :: 10:35
Печать  
может условие where по другому написать
WHERE
     |    (Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ )  AND
     | ( Жур.IDDocDef = $ВидДокумента.ОказаниеУслуг  OR
     |    Жур.IDDocDef = $ВидДокумента.РасходнаяНакладная )
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать