Имя: Пароль:
1C
1С v8
запрос время между двумя значениями
, ,
0 jenny_tea
 
24.09.12
12:30
Как в запросе в условии поставить что ВремяСправочника между ВремяНач и ВремяКон.
т.е. у меня есть параметр справочника в котором фиксируется время, и на вход подаются ДатаНач и ДатаКон.

На выходе условия мне нужно получить как времясправочника между время(Датанач) и время(ДатаКон)
Например: в нашем справочнике задается время 10:00:00,
если на вход подать ДатаНач 01/09/2012 09:55:00 а ДатаКон 31/08/2012 10:05:00 То выдалось бы Истина
а если ДатаНач 31/08/2012 10:05:00 а ДатаКон 01/09/2012 10:10:00 То выдалось бы ложь
1 Ant1773
 
24.09.12
12:33
Э...

(ДатаСправочник > ДатаНач и ДатаСправочник < ДатаКон) ?
2 Нуф-Нуф
 
24.09.12
12:33
разность дат
3 HouseCD
 
24.09.12
12:34
Можно использовать "МЕЖДУ", можно "РАЗНОСТЬДАТ"
4 Ненавижу 1С
 
гуру
24.09.12
12:34
МЕЖДУ
5 jenny_tea
 
24.09.12
12:35
меня именно время интересует. т.е. мне по сути либо надо в запросе привести все даты к одному дню и тогда разност лат и все такое либо как-то еще
6 jenny_tea
 
24.09.12
12:35
посмотрите пример между выдаст ложь
7 jump if overflow
 
24.09.12
12:38
справочник с самим собой соединяешь
по створой таблице фильтруешь,
там где NULL бдет Ложь
8 HouseCD
 
24.09.12
12:39
Функция РАЗНОСТЬДАТ
Функция предназначена для получения разницы между двумя датами.

Первый параметр — выражение типа ДАТА;

Второй параметр — выражение типа ДАТА;

Третий параметр – тип разности, одно из: СЕКУНДА, МИНУТа, ЧАС, ДЕНЬ, МЕСЯЦ, КВАРТАЛ, ГОД.

Примеры:
ВЫБРАТЬ РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2002, 10, 12, 10, 15, 34), ДАТАВРЕМЯ(2002, 10, 14, 9, 18, 06), ДЕНЬ)

Результат:

Поле1

2


ВЫБРАТЬ РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2002, 10, 12), (ДАТАВРЕМЯ(2002, 11, 03), МЕСЯЦ)

Результат:

Поле1

1


Внимание! Функция рассчитывает календарную разницу между двумя датами, поэтому ее нельзя использовать в местах, где необходимо рассчитать количество банковских или рабочих дней между двумя датами.
9 jenny_tea
 
24.09.12
12:55
понятно что есть функция РазностьДат, есть функция ДобавитьКДате, есть НачалоПериода, как это привести к получению условия
10 Rovan
 
гуру
24.09.12
12:57
(9) а чем (1) не нравиться ?
11 jenny_tea
 
24.09.12
13:00
потому что даты не обязаны быть между
12 Ant1773
 
24.09.12
13:00
(6) Т.е. в одном случае есть датавремя, в другом только время?
Так нужно обрезать даты и оставить только время.

ДОБАВИТЬКДАТЕ(ДатаНачала,РазностьДат(ПустаяДата,ДатаНачала,День),День)
13 jenny_tea
 
24.09.12
13:05
ДОБАВИТЬКДАТЕ(&ДатаНач, ДЕНЬ, РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1, 1, 1), &ДатаНач, ДЕНЬ)) сделала такое поле, при вызове запроса выдает неверные параметры
14 jenny_tea
 
24.09.12
13:11
почему разность кстати по дню а не по секунде. я до этого пыталась сделать так: ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ДатаНач, ДЕНЬ), СЕКУНДА, РАЗНОСТЬДАТ(&ДатаНач, НАЧАЛОПЕРИОДА(&ДатаНач, ДЕНЬ), СЕКУНДА)) КАК ПолеНач,
   ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ДатаНач, ДЕНЬ), СЕКУНДА, РАЗНОСТЬДАТ(Графики.Время, НАЧАЛОПЕРИОДА(Графики.Время, ДЕНЬ), СЕКУНДА)) КАК Поле1,
   ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ДатаНач, ДЕНЬ), СЕКУНДА, РАЗНОСТЬДАТ(&ДатаКон, НАЧАЛОПЕРИОДА(&ДатаКон, ДЕНЬ), СЕКУНДА)) КАК полеКон

но почему то выдавал немного не то что я ожидала:
при графики.время = 10:00:00, датанач = 24/09/2012 09:55:00 а датакон 24/09/2012 10:05:00
выдает ПолеНач = 23/09/2012 14:05:00, Поле1=23/09/2012 14:00:00 а полеКон=23/09/2012 13:55:00
15 jenny_tea
 
24.09.12
13:12
почему-то надо перед разность дат ставить - и тогда получилось
16 jenny_tea
 
24.09.12
13:14
итого чтобы привести дату время к одной дате и смотреть только в разрезе времени надо написать ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ДатаПриведения, ДЕНЬ), СЕКУНДА, -РАЗНОСТЬДАТ(ДатаНужная, НАЧАЛОПЕРИОДА(ДатаНужная, ДЕНЬ), СЕКУНДА))
17 jenny_tea
 
24.09.12
13:14
если есть более простой способ напишите пожалуйста
18 vmv
 
24.09.12
13:17
работа со времеными рядами и вообще со временем в контексте какого-либо алглоритма в 1С - это полет фантазии, ибо разработчики положили болт на функционал работы со временем, который есть в современных языках программирования
19 vmv
 
24.09.12
13:22
(16) чего-то вы недогововариваете. подозреваю, что в запрос в качестве сравнения "уходит" только время, т.е. даты

Дата(1, 1, 1, 10, 5, 0) и т.д.

если в запрос передавать ДатуИВремя, то вопрос в (0) вообще не возникает. А вот если на форме/в настройках/параметрах нужно показывать только время, то формат поможет
20 jenny_tea
 
24.09.12
13:39
вопрос в том, что мне в запросе в одном месте  надо сравнивать дату, а в другом время
21 НЕА123
 
24.09.12
13:39
ЧАС(ДД1)>ЧАС(ДД2) ИЛИ (ЧАС(ДД1)=ЧАС(ДД2) И Минута(ДД1)>Минута(ДД2))
22 jenny_tea
 
24.09.12
13:50
и сравнивать не между а по отдельности?
23 jenny_tea
 
24.09.12
13:50
ну вариант
24 vmv
 
24.09.12
13:55
я совсем перестал понимать женскую логику, что мешает получать(все равно где: код, запрос, фантазии) ДатаИВремя и сравнивать?
25 jenny_tea
 
24.09.12
13:58
ДатаВремя() не берется датавремя(год(дата1),месяц(дата1) и тп)
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn