|
Условие в запросе с датами | ☑ | ||
---|---|---|---|---|
0
Сержант ВДВ Онегин
17.05.18
✎
15:59
|
Пишу отчет.
Запрос состоит из регистра состояние Сотрудников, в котором есть даты периода болезни начало болезни и конец болезни. Затруднение получил вот в какой момент. Итак, ввожу в отчете период 01.05.2018 - 31.05.2018 И вот туда должны попасть вот все эти записи: Болезнь1 01.04.2018 - 03.05.2018 Болезнь2 28.05.2018 - 06.06.2018 Болезнь3 04.05.2018 - 12.05.2018 Болезнь4 01.01.2018 - 31.10.2018 Как видите, первая запись попадает так как человек болел до 3 мая, а 3 мая у нас входит в отбор. Вторая запись , человек болел 3 последние три дня мая Третья запись вполне все ясно А четвертая декрет почти весь год, но на выбранные период он тоже вне работы. Какое поставить условие? |
|||
1
Волшебник
17.05.18
✎
16:02
|
ГДЕ НачалоБолезни <= КонецПериода И ОкончаниеБолезни >= НачалоПериода
|
|||
2
Good_Smile
17.05.18
✎
16:05
|
ГДЕ НачалоБолезни Между НачалоПериода И КонецПериода
ИЛИ ОкончаниеБолезни Между НачалоПериода И КонецПериода |
|||
3
Волшебник
17.05.18
✎
16:05
|
(2) У тебя Болезнь4 пропущена
|
|||
4
Good_Smile
17.05.18
✎
16:07
|
(3) точно!
жаль, мне кажется моё условие легче читается, но к сожалению неправильное.. |
|||
5
Волшебник
17.05.18
✎
16:22
|
ГДЕ
|
|||
6
Сержант ВДВ Онегин
18.05.18
✎
08:27
|
(1)хоть и нелегко читается, но работает правильно )
|
|||
7
Малыш Джон
18.05.18
✎
08:31
|
(6) почему нелегко? наоборот, по-моему...
есть два интервала. если левым концом одного за правый конец другого зацепляемся или правым за левый - значит есть пересечение. |
|||
8
catena
18.05.18
✎
08:45
|
Начало меньше конца И конец больше начала же.
|
|||
9
SleepyHead
гуру
18.05.18
✎
08:52
|
Задача - вычислить, пересекаются ли два периода
1. ДН1, ДО1 - даты первого периода 2. ДН2, ДО2 - даты второго периода 3. Вычислить интервал пересечения и понять, пересекаются ли периоды Если эту задачу надо решить в модуле, использую вот такую функцию: // Возвращает пересечение дат в переменных ДН и ДО // Результатом функции является ИСТИНА, если интервалы пересекаются Функция ПересечениеДат(Знач ДН1, Знач ДО1, Знач ДН2, Знач ДО2, ДН='00010101', ДО='00010101') ДН=Макс(ДН1,ДН2); ДО=Мин(ДО1,ДО2); Возврат ?(ДН<=ДО, Истина, Ложь) КонецФункции Если в запросе, такое условие: ВЫБОР КОГДА НАЧАЛОПЕРИОДА(&ДН1, ДЕНЬ) > &ДН2 ТОГДА НАЧАЛОПЕРИОДА(&ДН1, ДЕНЬ) ИНАЧЕ &ДН2 КОНЕЦ <= ВЫБОР КОГДА КОНЕЦПЕРИОДА(&ДН2, ДЕНЬ) < &ДО2 ТОГДА КОНЕЦПЕРИОДА(&ДН2, ДЕНЬ) ИНАЧЕ &ДО2 КОНЕЦ Вместо ДН1, ДН2, До1, До2 - подставить свои выражения. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |