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 последние три дня мая
Третья запись вполне все ясно
А четвертая декрет почти весь год, но на выбранные период он тоже вне работы.
Какое поставить условие?
|
|
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 - подставить свои выражения.
|
|