Курилка Непересечение интервалов

Тема в разделе "Курилка", создана пользователем TerANik, 24 мар 2015.

  1. TopicStarter Overlay
    TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    То ли кофе мало то ли торможу..

    Никак не ляжет алгоритмика.. Заданы два периода Начало1-Конец1 и Начало2-Конец2.
    Нужно найти непересечение данных интервалов, за базу взяв Начало1-Конец1..т.е. если интервалы совсем не пересекаются то берем Начало1-Конец1.

    Если Начало1>Конец2 или Начало2>Конец1 тогда
    Начало1-Конец1
    КонецЕсли;

    т.е. этим предполагаем что они вообще не пересекаются...
    а вот при пересечение не соображу..
  2. rshakiro
    Offline

    rshakiro Профессионал в 1С Команда форума

    Регистрация:
    17 мар 2011
    Сообщения:
    2.236
    Симпатии:
    144
    Баллы:
    104
    Ну тут комбинаций всего: 4! (факториал) =1*2*3*4=24
    Код:
    Перем Нач1; Кон1; Нач2; Кон2;
    Если (Нач1 < Нач2) И (Кон1 < Кон2) Тогда
    
    ИначеЕсли (Нач1 < Нач2) И (Кон1 > Кон2) Тогда
    
    ИначеЕсли (Нач1 > Нач2) И (Кон1 > Кон2) Тогда
    
    ИначеЕсли (Нач1 > Нач2) И (Кон1 < Кон2) Тогда
    
    ИначеЕсли (Нач1 > Кон2) И (Кон1 < Кон2) Тогда
    ......
    КонецЕсли;
  3. TopicStarter Overlay
    TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Ам.. а что возвращается при этих условиях?
  4. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    ну так а все остальное это пересечение получается
  5. rshakiro
    Offline

    rshakiro Профессионал в 1С Команда форума

    Регистрация:
    17 мар 2011
    Сообщения:
    2.236
    Симпатии:
    144
    Баллы:
    104
    В смысле? При всех комбинациях пишите свои условия... У Вас конечно будет меньше комбинаций, т.к. Кон1 всегда больше Нач1 и Кон2 всегда больше Нач2
  6. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    Саша, если я правильно поняла и за базу взять первый интервал, то пересекаются они только если у тебя одна из границ как минимум лежит внутри первого интервала. Количество условий не будет равно на мой взгляд 4!
  7. TopicStarter Overlay
    TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Если Начало1>Конец2 или Начало2>Конец1 Тогда
    Начало1-Конец1
    ИначеЕсли Начало2>Начало1 и Конец2>Конец1 Тогда
    Начало1-Начало2
    ИначеЕсли Начало2>Начало1 и Конец2<Конец1 Тогда
    Начало1-Начало2 и Конец2-Конец1
    ИначеЕсли Начало2<Начало1 и Конец2<Конец1 Тогда
    Коне2-Конец1
    Иначе
    Пустое
    КонецЕсли;
  8. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    ну и? с этим я согласна с самого начала была
  9. rshakiro
    Offline

    rshakiro Профессионал в 1С Команда форума

    Регистрация:
    17 мар 2011
    Сообщения:
    2.236
    Симпатии:
    144
    Баллы:
    104
    Еще 2 перем. добавьте, которые зададите при условиях
    Код:
    Если Начало1>Конец2 или Начало2>Конец1 Тогда
    ОснИнтервалНач = Начало1-Конец1;
    ОснИнтервалКон = Конец2;
  10. TopicStarter Overlay
    TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Да Энтер нажал случайно
  11. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
  12. TopicStarter Overlay
    TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Опоздал)
  13. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    Саша, так тебе не только Непересечение интервалов, а границы надо было задать при любом стечении обстоятельств?
  14. TopicStarter Overlay
    TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Нууу как бы да... Задача изначальная..
    При условии что нет заказов на производство народ отправляют на несколько дней за свой счет или в счет отпуска..Решили это процесс автоматизировать.
    этот период у нас задается Начало1 - Конец1. Соответсвенно выбираем сотрудников из регистра РаботникиОрганизации. При этом у нас есть регистр сведений СостояниеРаботниковОрганизации. В котором учитываются работники, которые уже в отпуске или на больничном, соответственно эти периоды для них необходимо исключить.
  15. rshakiro
    Offline

    rshakiro Профессионал в 1С Команда форума

    Регистрация:
    17 мар 2011
    Сообщения:
    2.236
    Симпатии:
    144
    Баллы:
    104
    Ок, а если Вы задали Период1 - 01.03.15-31.03.15, а сотрудник в отпуске Период2 - 01.02.15-15.03.15 - тоже надо бы учесть...
    ЗЫ: Надо изначально задавать период "шире" Периода1, чтобы в выборку из Регистра попали незавершенные отпуска, больничные, по уходу за ребенком и т.д.
  16. TopicStarter Overlay
    TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Чем не устраивает?
    ИначеЕсли Начало2<Начало1 и Конец2<Конец1 Тогда
    Коне2-Конец1

    У нас период непересечения 16.03.2015 по 31.03.2015.
  17. rshakiro
    Offline

    rshakiro Профессионал в 1С Команда форума

    Регистрация:
    17 мар 2011
    Сообщения:
    2.236
    Симпатии:
    144
    Баллы:
    104
    Если зададите условие 01.03.15-31.03.15, этот отпуск не попадет в выборку
  18. TopicStarter Overlay
    TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Как он не попадет? если я указал условие в котором он будет отработан?

    01.02.15<01.03.15 и 15.03.15<31.03.2015 Тогда
    15.03.15 - 31.03.2015
    --- Объединение сообщений, 24 мар 2015 ---
    Уважаемый прошу прощения, еще раз сделаю акцент на то что мне надо не ПЕРЕСЕЧЕНИЕ периодов, а НЕПЕРЕСЕЧЕНИЕ периодов.
  19. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Какой должен быть результат в каждом из случаев?
    upload_2015-3-24_10-35-36.png
    --- Объединение сообщений, 24 мар 2015 ---
    З.Ы. На самом деле там 8. и 9. еще должно быть, когда границы начала-конца совпадают.
  20. TopicStarter Overlay
    TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    1) Пустое
    2) От окончания зеленого до окончания красного
    3)От начала красного до начала зеленого
    4)От начала красного до начала зеленого и от окончания зеленого до окончания красного
    5) Пустое
    6)От начала красного до окончания красного
    7)От начала красного до окончания красного
    --- Объединение сообщений, 24 мар 2015 ---
    ну логика всего такая, что зачем отправлять человека в отпуск если он на больничном.. т.е. красная линия это период когда человеку необходимо в отпуск, а зеленая это он уже по какой то причине не работает.

Поделиться этой страницей