Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Date_Time_IDDoc - оптимальная работа в секции where? (число прочтений - 1641 )
Kateryne
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Зарегистрирован: 30. Марта 2010
Пол: Женский
Date_Time_IDDoc - оптимальная работа в секции where?
05. Июня 2011 :: 12:38
Печать  
День добрый!
Чувствую, что вопрос из FAQ, но как обычно время поджимает... перечитала уже кучу доки, но четкого понимания не получила.

Нужно отобрать движения из регистра за период, в том числе должны зачитываться реквизиты регистра. Регистр оборотный. Соответственно, использую таблицу $Регистр.<Имя регистра>.

Для отбора по периоду, видимо, отбирать придется по дурацкому полю Date_Time_IDDoc. Ну что стоило разработчикам добавить нормальные два поля - документ и дата со временем?

Не могу понять, как лучше отбирать по нему, если есть только две даты - дата начала и дата окончания. По идее, даты надо преобразовать вне запроса в строку, наверное, чтобы индекс не угробить? А может есть стандартые 1С++ методы для этого?

Я сейчас сделала так:
Date_Time_IDDoc >= :ДатаНач and Date_Time_IDDoc < :ДатаОконч

где ДатаНач = дата начала в строке
а ДатаОконч = дата окончания + 1 в строке

По идее, возвращать будет то, что надо. Но будет ли это оптимальным выходом?
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Date_Time_IDDoc - оптимальная работа в секции where?
Ответ #1 - 05. Июня 2011 :: 13:51
Печать  
Kateryne писал(а) 05. Июня 2011 :: 12:38:
Для отбора по периоду, видимо, отбирать придется по дурацкому полю Date_Time_IDDoc. Ну что стоило разработчикам добавить нормальные два поля - документ и дата со временем?

Так и есть. Документ = iddoc, позция документа на шкале времени = date_time_iddoc.

Kateryne писал(а) 05. Июня 2011 :: 12:38:
По идее, даты надо преобразовать вне запроса в строку, наверное, чтобы индекс не угробить? А может есть стандартые 1С++ методы для этого?

Отдельно преобразовывать не нужно. Метод УстановитьТекстовыйПараметр сделает всё, что надо.

Kateryne писал(а) 05. Июня 2011 :: 12:38:
а ДатаОконч = дата окончания + 1 в строке

Чтобы не писать +1 при сравнении с date_time_iddoc, можно написать в запросе

:ДатаОконч ~

Kateryne писал(а) 05. Июня 2011 :: 12:38:
По идее, возвращать будет то, что надо. Но будет ли это оптимальным выходом?

Вполне.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Date_Time_IDDoc - оптимальная работа в секции where?
Ответ #2 - 06. Июня 2011 :: 05:16
Печать  
Ммм, может, для понимания стоит рассказать, что поле Date_Time_IdDoc представляет собой строку в 23 символа, собранную следующим образом:

первые 8 символов - дата документа в формат ГГГГММДД
следующие 6 - время документа в миллисекундах, преобразованное в 36-ричную систему
последние 9 - IDDoc

сооответственно, сортировка по этому полю разложит документы по возрастанию даты, внутри даты - по возрастанию времени, внутри времени (наше любимое 23:59:59, например) - по IDDoc (т.е. по порядку физического ввода документов).

соответсвенно, для наложения условния достаточно сравнивать со строкой в формате ГГГГММДД.
Преобразование DateTime -> Char(8), емнип, скуль делает автоматически (равно как и Char(8) -> DateTime).
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать