Имя: Пароль:
1C
 
Пересечение периодов
0 sergqwert
 
19.07.17
16:11
Составить обработку, которая проверяет пересечение периодов и вывести его, если есть. Входные параметры - НачПериода1,НачПериода2,КонПериода1, КонПериода2.
Выходной параметр - НачПериода, КонПериода; или Сообщение - "Пересечения нет". Условие - Если не заполнена начальная дата периода, то это означает "-бесконечность"; Если не заполнена конечная дата, то это означает "+бесконечность". Что в этом коде не так:

Если КонПериод2 > КонПериод1 Тогда
Если НачПерио2 > КонПериод1 Тогда
Сообщить("Пересечения нет");
Иначе Сообщить("Пересечение есть");
КонецЕсли;
Иначе Если КонПериод2 < НачПериод1
Тогда Сообщить("Пересечения нет");
Иначе Сообщить("Пересечение есть");
КонецЕсли;
КонецЕсли;
Если КонПериод2 < КонПериод1 Тогда
Сообщить("Пересечение есть");
Если НачПериод >КонПериод Тогда
Сообщить("Пересечения нет");
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(НачПериод1) Тогда
Сообщить("-бесконечность");
КонецЕсли;
1 X Leshiy
 
19.07.17
16:12
Собеседование? :)
2 lodger
 
19.07.17
16:14
(1) на студентоту больше похоже.
3 МихаилМ
 
19.07.17
16:15
встречал неоднократно эту задачу во франях. раза 4 за 12 лет.
4 Про100Филя
 
19.07.17
16:16
(0) Нету проверки на корректность периода
5 Про100Филя
 
19.07.17
16:17
(4) + Сравнения не правильные в корне
6 X Leshiy
 
19.07.17
16:17
(3) Точно! Мне на "Рарусе" на собеседовании давали :)
7 Йохохо
 
19.07.17
16:25
(6) "- студент, напишите теорему Н.
- диктуйте"
8 sergqwert
 
19.07.17
16:27
возврат пересечения периодов?
9 lodger
 
19.07.17
16:33
Что в этом коде не так:
1) периодов не 2, а 3.
НачПерио2, НачПериод1, НачПериод
КонПериод2, КонПериод1, КонПериод
грубая ошибка. минус 2 балла.
2) разные стили написания в начале и в конце.
ошибка. минус балл.
3) результаты через сообщить.
нарушение. минус балл.

ваша оценка - 1. следующий!
10 undertaker
 
19.07.17
18:09
Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ВЫБОР
    |        КОГДА &НачалоПериода2 МЕЖДУ &НачалоПериода1 И &КонецПериода1
    |            ТОГДА &НачалоПериода2
    |        ИНАЧЕ &НачалоПериода1
    |    КОНЕЦ КАК НачалоПериодаПересечения,
    |    ВЫБОР
    |        КОГДА &КонецПериода2 МЕЖДУ &НачалоПериода1 И &КонецПериода1
    |            ТОГДА &КонецПериода2
    |        ИНАЧЕ &КонецПериода1
    |    КОНЕЦ КАК КонецПериодаПересечения
    |ГДЕ
    |    (&НачалоПериода2 МЕЖДУ &НачалоПериода1 И &КонецПериода1
    |            ИЛИ &КонецПериода2 МЕЖДУ &НачалоПериода1 И &КонецПериода1)";
    
    Запрос.УстановитьПараметр("НачалоПериода1", Объект.НачПериода1);
    Запрос.УстановитьПараметр("КонецПериода1",     ?(ЗначениеЗаполнено(Объект.КонПериода1), КонецДня(Объект.КонПериода1), Дата(3999, 12,31,23,59,59)));
    
    Запрос.УстановитьПараметр("НачалоПериода2", Объект.НачПериода2);
    Запрос.УстановитьПараметр("КонецПериода2",     ?(ЗначениеЗаполнено(Объект.КонПериода2), КонецДня(Объект.КонПериода2), Дата(3999, 12,31,23,59,59)));
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    Если Выборка.Следующий() Тогда
        Сообщить("Есть пересечение: " + Выборка.НачалоПериодаПересечения + "-" + Выборка.КонецПериодаПересечения);    
    Иначе
        Сообщить("Пересечений нет");
    КонецЕсли;
11 lodger
 
19.07.17
18:14
(10) на НачПериода тоже надо наложить условие на заполнено.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан