8.х пересечение периодов

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем sergqwert, 18 июл 2017.

  1. TopicStarter Overlay
    sergqwert
    Offline

    sergqwert

    Регистрация:
    27 ноя 2016
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Составить обработку, которая проверяет пересечение периодов и вывести его, если есть. Входные параметры - НачПериода1,НачПериода2,КонПериода1, КонПериода2.
    Выходной параметр - НачПериода, КонПериода; или Сообщение - "Пересечения нет". Условие - Если не заполнена начальная дата периода, то это означает "-бесконечность"; Если не заполнена конечная дата, то это означает "+бесконечность". Что в этом коде не так:

    Если КонПериод2 > КонПериод1 Тогда
    Если НачПерио2 > КонПериод1 Тогда
    Сообщить("Пересечения нет");
    Иначе Сообщить("Пересечение есть");
    КонецЕсли;
    Иначе Если КонПериод2 < НачПериод1
    Тогда Сообщить("Пересечения нет");
    Иначе Сообщить("Пересечение есть");
    КонецЕсли;
    КонецЕсли;
    Если Не ЗначениеЗаполнено(НачПериод1) Тогда
    Сообщить("-бесконечность");
    КонецЕсли;
    Последнее редактирование: 18 июл 2017
  2. AlexeyKh
    Offline

    AlexeyKh Опытный в 1С

    Регистрация:
    27 июл 2012
    Сообщения:
    145
    Симпатии:
    17
    Баллы:
    29
    так, а где возврат пересечения периодов?
    Выходной параметр - НачПериода, КонПериода;
  3. TopicStarter Overlay
    sergqwert
    Offline

    sergqwert

    Регистрация:
    27 ноя 2016
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Если КонПериод2 > КонПериод1 Тогда
    Если НачПерио2 > КонПериод1 Тогда
    Сообщить("Пересечения нет");
    Иначе Сообщить("Пересечение есть");
    КонецЕсли;
    Иначе Если КонПериод2 < НачПериод1
    Тогда Сообщить("Пересечения нет");
    Иначе Сообщить("Пересечение есть");
    КонецЕсли;
    КонецЕсли;
    Если КонПериод2 < КонПериод1 Тогда
    Сообщить("Пересечение есть");
    Если НачПериод >КонПериод Тогда
    Сообщить("Пересечения нет");
    КонецЕсли;
    КонецЕсли;
    Если Не ЗначениеЗаполнено(НачПериод1) Тогда
    Сообщить("-бесконечность");
    КонецЕсли;
  4. AsadRoman
    Offline

    AsadRoman

    Регистрация:
    22 авг 2011
    Сообщения:
    40
    Симпатии:
    0
    Баллы:
    1
    Если НЕ ЗначениеЗаполнено(Кон1) Тогда
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "конец периода 1 +бескоченость";
    Сообщение.Поле = Кон1;
    Сообщение.Сообщить();
    Кон1 = Макс(Нач1, Нач2, Кон2)+1; // делаем конец периода немного больше максимальной из дат
    КонецЕсли;
    Если НЕ ЗначениеЗаполнено(Кон2) Тогда
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "конец периода 2 +бескоченость";
    Сообщение.Поле = Кон2;
    Сообщение.Сообщить();
    Кон2 = Макс(Нач1, Нач2, Кон1)+1; // делаем конец периода немного больше конца другого периода
    КонецЕсли;
    Если НЕ ЗначениеЗаполнено(Нач1) Тогда
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "начало периода 1 -бескоченость";
    Сообщение.Поле = Нач1;
    Сообщение.Сообщить();
    КонецЕсли;
    Если НЕ ЗначениеЗаполнено(Нач2) Тогда
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "начало периода 2 -бескоченость";
    Сообщение.Поле = Нач2;
    Сообщение.Сообщить();
    КонецЕсли;
    Если (Нач1<Нач2 и Нач2<Кон1) или (Нач2<Нач1 и Нач1<Кон2) или (Нач2<Кон1 и Кон1<Кон2) или (Нач1<Кон2 и Кон2<Кон1) Тогда
    Сообщить("Есть пересечение");
    КонецЕсли;

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