Имя: Пароль:
1C
1С v8
Запрос: отбор документов по времени
, , ,
0 Gemini
 
26.09.18
16:21
Задача: если передаваемая в запрос дата находится в диапазоне от 8.30 до 20.30, тогда выбрать все документы с этой датой и в со временем от 8.30 до 20.30. Если время от 20.30 до 08.30 - соответственно документы с этой датой и в этом диапазоне. Как реализовать это в Запросе?
1 s03
 
26.09.18
16:22
параметры НачалоПериода и КонецПериода и заполняй их по твоему условию
2 Gemini
 
26.09.18
16:23
Это в этом виде? С помощью конструкции ВЫБОР и сравнивая входит ли в диапазон ЧАСА и МИНУТ
ВЫБОР
    КОГДА ЧАС(&Дата) >8 И ЧАС(&Дата) < 21
        ТОГДА ВЫБОР
                КОГДА ЧАС(ОтчетПроизводстваЗаСмену.Дата) > 8 И (ОтчетПроизводстваЗаСмену.Дата)<21
                    ТОГДА ОтчетПроизводстваЗаСмену.Ссылка
            КОНЕЦ
КОНЕЦ
3 Gemini
 
26.09.18
17:21
Можно конечно в коде поставить условие и передавать в запрос уже готовый период со временем. Но хотелось бы все в запросе попробовать сделать
4 FIXXXL
 
26.09.18
17:29
(2) РазностьДат() между переданной и НачалоПериода(ПереданнаяДата)?
5 Gemini
 
26.09.18
17:48
Что то вроде этого сделать, но в условии запроса, тут же не как с числами, тут и по минутам условие отдельно нужно писать
Если ЧАС(&Дата) => 8.30 И ЧАС(&Дата) <= 20.30 Тогда
ЧАС(ДатаДокумента) МЕЖДУ 8.30 И 20.30
ИначеЕсли ЧАС(&Дата) >20.30 И ЧАС(&Дата) >24.00 Тогда
ЧАС(ДатаДокумента) МЕЖДУ 20.30 И 24.00 И ЧАС(ДатаДокумента) МЕЖДУ 00.00 И 08.30
ИначеЕсли ЧАС(&Дата) >00.00 И ЧАС(&Дата) >08.30 Тогда
ЧАС(ДатаДокумента) МЕЖДУ 20.30 И 24.00 И ЧАС(ДатаДокумента) МЕЖДУ 00.00 И 08.30
КонецЕсли
6 yavasya
 
26.09.18
17:53
(0) что за херню ты несешь . . .
7 Gemini
 
26.09.18
17:56
(6) сам ты херня, понятно что это не чистый код, это просто алгоритм своими словами а не код 1С. От того какими словами я напишу цикл или переменные - смысл алгоритма не поменяется, или ты только на 1С умеешь кодить?!
8 HardBall
 
26.09.18
18:09
время от 20.30 до 08.30 это разные дни?
9 Gemini
 
26.09.18
18:14
(8) нет, день один. Просто одни документы в диапазоне от 00.00 до 8.30 И плюс 20.30 и до 00.00 это ночная смена, а дневная от 8.30 до 20.30. Знаю муторно, но уже до меня придумали. Хотя доков от 00.00 до 8.30 почти не бывает, можно и убрать этот диапазон
10 Gemini
 
26.09.18
18:17
Вернее по логике и не может быть, спасибо)) сразу не сообразила
11 Вафель
 
26.09.18
18:20
именно в запросе? это тестовое задание?
12 Вафель
 
26.09.18
18:20
иначе проще вычислить кодом датанач и датакон и уже их передавать
13 Gemini
 
26.09.18
18:24
(11) я тоже думаю проще вычислить кодом - я знаю как это сделать, но думала может грамотнее попробовать в запросе все это реализовать. Или прописывать сложное условие не очень грамотно?
14 Gemini
 
26.09.18
18:40
Как-то так, только с минутами не стала заморачиваться
ОтчетПроизводстваЗаСмену.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&ВыбДата, ДЕНЬ) И КОНЕЦПЕРИОДА(&ВыбДата, ДЕНЬ)
    И ВЫБОР
            КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ОтчетПроизводстваЗаСмену.Дата, ДЕНЬ), &ВыбДата, ЧАС) > 8
                    И РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ОтчетПроизводстваЗаСмену.Дата, ДЕНЬ), &ВыбДата, ЧАС) < 21
                ТОГДА ЧАС(ОтчетПроизводстваЗаСмену.Дата) >= 8
                        И ЧАС(ОтчетПроизводстваЗаСмену.Дата) < 20
            ИНАЧЕ ЧАС(ОтчетПроизводстваЗаСмену.Дата) >= 20
                    И ЧАС(ОтчетПроизводстваЗаСмену.Дата) < 24
        КОНЕЦ
15 Gemini
 
26.09.18
18:46
и РАЗНОСТЬДАТ тут излишняя