Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Условие в запросе с датами

Условие в запросе с датами
Я
   Сержант ВДВ Онегин
 
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
ГДЕ НачалоБолезни <= КонецПериода И ОкончаниеБолезни >= НачалоПериода
   Good_Smile
 
2 - 17.05.18 - 16:05
ГДЕ НачалоБолезни Между НачалоПериода И КонецПериода 
ИЛИ ОкончаниеБолезни Между НачалоПериода И КонецПериода
   Волшебник
 
3 - 17.05.18 - 16:05
(2) У тебя Болезнь4 пропущена
   Good_Smile
 
4 - 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) почему нелегко? наоборот, по-моему...
есть два интервала. если левым концом одного за правый конец другого зацепляемся или правым за левый - значит есть пересечение.
   catena
 
8 - 18.05.18 - 08:45
Начало меньше конца И конец больше начала же.
   SleepyHead
 
9 - 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 - подставить свои выражения.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует