Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Выполнение запроса с отбором по времени (число прочтений - 2428 )
Dr. DelProg
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 22. Мая 2010
Выполнение запроса с отбором по времени
23. Мая 2010 :: 19:58
Печать  
Существует ли стандартная функция 1С++ или что-то вроде на получение времени для передачи в запрос? Либо эта задача решается только путем ручного преобразования текущего времени к миллисекундам и пропускания через _IDtoStr?
Речь идет об отборе документов по дате+времени документа для DBF базы:

SELECT TOP 1
'1'  Выражение  
ORDER BY РасходнаяНакладная.IDDOC
FROM $Документ.РасходнаяНакладная AS РасходнаяНакладная

INNER JOIN 1SJOURN AS Журнал
ON РасходнаяНакладная.IDDOC = Журнал.IDDOC

WHERE (РасходнаяНакладная.IDDOC <> :Ссылка)
AND $РасходнаяНакладная.Клиент = :Клиент
AND Журнал.DATE <= :ДатаДок~~
AND Журнал.TIME <:ВремяДок
AND Журнал.ISMARK = ''

(определяем наличие документов ранее текущего по выбранному клиенту)
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Выполнение запроса с отбором по времени
Ответ #1 - 23. Мая 2010 :: 20:17
Печать  
На текущий момент функции для SQL можно найти в сети. Как они для DBF я сказать не могу, не пользуюсь.
Можно попробовать 1sqlite там есть функции _id2str и наоборот, соответственно полбеды решается.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Выполнение запроса с отбором по времени
Ответ #2 - 24. Мая 2010 :: 05:01
Печать  
(0) пользуйся всегда позицией и привет.. +ПолучитьДатуВремяИдДок
ЗЫ: а позицию можешь сам создать какую угодно.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Выполнение запроса с отбором по времени
Ответ #3 - 24. Мая 2010 :: 06:55
Печать  
[quote author=Dr_DelProg link=1274644710/0#0 date=1274644710]
AND Журнал.DATE <= :ДатаДок~~
AND Журнал.TIME <:ВремяДок
[/quote]
В корне неверно!!!
Надо хотя бы
[code]
AND Журнал.DATE < :ДатаДок~~
OR (Журнал.DATE = :ДатаДок~~ AND Журнал.TIME <:ВремяДок)
[/code]

Для фокса чтобы попасть в индекс надо
[code]
Журнал.DATE + Журнал.Time + Журнал.iddoc < :НужнаяПозиция~
[/code]

Для 1sqlite для попадания в индекс нужно
[code]
Журнал.IDX_Date_Time_iddoc < :НужнаяПозиция~
[/code]

Ну и естественно, перед запросом:
Для фокса
[code]
Запрос.УстановитьТекстовыйПараметр("НужнаяПозиция", СформироватьПозициюДокумента(день, час, мин, сек));
[/code]

Для 1sqlite
[code]
Запрос.Подставлять("НужнаяПозиция", СформироватьПозициюДокумента(день, час, мин, сек));
[/code]
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Выполнение запроса с отбором по времени
Ответ #4 - 24. Мая 2010 :: 07:18
Печать  
Eprst писал(а) 24. Мая 2010 :: 05:01:
(0)

Здесь не работает Улыбка
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Выполнение запроса с отбором по времени
Ответ #5 - 24. Мая 2010 :: 07:25
Печать  
orefkov писал(а) 24. Мая 2010 :: 07:18:
Eprst писал(а) 24. Мая 2010 :: 05:01:
(0)

Здесь не работает Улыбка


ЭЭ.. всмысле  не работает ?

Код
Выбрать все
|Where DTOS(Жур.date)+Жур.time+Жур.iddoc <:ПозДок

ПозицияДокСтр=Мд.ПолучитьДатуВремяИдДок(Позиция);
Запрос.УстановитьТекстовыйПараметр("ПозДок",ПозицияДокСтр);
 



вот это работает..

  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Выполнение запроса с отбором по времени
Ответ #6 - 24. Мая 2010 :: 07:30
Печать  
Эм....
Я про обращение "(0)"
Мистофишка. Тут не работает.

И таки да, "DTOS(Date) + " для попадания в индекс в фоксе я забыл.

А вот насчет "ПолучитьДатуВремяИдДок" - эт ты забыл про первый модификатор текстового параметра типа "Строка"
  
Наверх
 
IP записан
 
Dr. DelProg
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 22. Мая 2010
Re: Выполнение запроса с отбором по времени
Ответ #7 - 24. Мая 2010 :: 08:02
Печать  
Пока ждал ответов забацал свой вариант:
условие в СКВЛ:

Код
Выбрать все
AND Журнал.DATE <= :ДатаДок~~
AND IIF(Журнал.DATE = :ДатаДок~~, (Журнал.TIME <= :ВремяДок)  AND (Журнал.IDDOC < :Ссылка),  1=1)
 



где ВремяДок формируется функцией:

Код
Выбрать все
Функция стрПолучитьВремяДокумента32(дДокумент) Экспорт
	чЧасы = 0;
	чМинуты = 0;
	чСекунды = 0;

	дДокумент.ПолучитьВремя(чЧасы,чМинуты,чСекунды);

	чКоличествоМиллиСекунд = (чЧасы * 3600 + чМинуты * 60 + чСекунды) * 10000;
	стрКоличествоМСек32 = _IDToStr(чКоличествоМиллиСекунд);

	Если Отладка = 1 Тогда

		Сообщить("Мсек: " + чКоличествоМиллиСекунд + " = " + стрКоличествоМСек32);

	КонецЕсли;

	Возврат стрКоличествоМСек32;
КонецФункции
 


Пока вроде работает, сейчас еще потыкаю...
...
Потыкал Улыбка
Вариант с
DTOS(Журнал.date)+Журнал.time+Журнал.iddoc
и
МД.ПолучитьДатуВремяИДдок(Ссылка.ПолучитьПозицию())
- куда красивее и короче Улыбка
Спасибо Eprst за подсказку!
Пытался сделать что-то подобное но не удалось найти функцию DTOS Улыбка
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Выполнение запроса с отбором по времени
Ответ #8 - 24. Мая 2010 :: 08:24
Печать  
Dr. DelProg писал(а) 24. Мая 2010 :: 08:02:
Пока ждал ответов забацал свой вариант:
условие в СКВЛ:

Код
Выбрать все
AND Журнал.DATE <= :ДатаДок~~
AND IIF(Журнал.DATE = :ДатаДок~~, (Журнал.TIME <= :ВремяДок)  AND (Журнал.IDDOC < :Ссылка),  1=1)
 


Пока вроде работает, сейчас еще потыкаю...


Работать то оно конечно работает, только в индекс плохо попадает.
Для точного попадания в индекс надо сравнивать
Код
Выбрать все
And (DTOS(Date) + Time + Iddoc) < А тут конкатенация даты времени ссылки 


Кроме того, если тебе надо именно до заданного документа, а не произвольного времени, то еще проще:
Код
Выбрать все
запрос.УстановитьТекстовыйПараметр("ВыбДок", выбДок);
...
And (DTOS(Date) + Time + Iddoc) < :ВыбДок~~~~
 



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