Выбрать свободный период. Как ? #662477


#0 by Koliaff
Доброго времени суток, господа форумчани. Есть регистр сведений, который  фиксирует аренду или бронь недвижимости. Периодичность у данного регистра - "По позиции регистратора", у данного регистра есть реквизит дата окончания. "Период" использую как "дата начала". Т.е. получается у нас есть документы которые записывают сведения в данный регистр "ДатаНачала" и "ДатаОкончания" аренды. Периоды могут пересекаться (бронь может заходить на ареду).  Сейчас стоит задача сформировать алгоритм. Суть алгоритма такова : Пользователь выбирает в диалоге интервал, а алгоритм должен проанализировать и выдать свободен ли хоть один день  от брони или резерва по объекту недвижимости в выбранном интервале пользователем или занят полностью данные интервал. Что-то ни как не могу придумать алгоритм.
#1 by Wobland
В документе есть табличная часть «Периоды» содержащая Дату начала периода и Дату окончания периода. Необходимо проверить, что периоды не «пересекаются» друг с другом (но «дырки» между периодами разрешены).
#2 by Koliaff
(Wobland) Другая задача у меня стоит, более сложная. В моем случае пересечения не важны, надо найти именно дырки. )
#3 by Koliaff
+ и не для одного пересечения, а в совокупности для всех.
#4 by Wobland
да я понял. но мне думать лениво, так что, как грится, чем могу. может, после обеда подтянусь. вопрос уж интересный
#5 by Rie
Самый тупой алгоритм: отсортировал периоды по дате начала. И смотришь - если дата начала следующего периода больше даты окончания предыдущего, то вот она, дырка!
#6 by Koliaff
(Rie) Если бы периоды не пересекались, тогда - да. А так алгоритм сортировки теряет смысл, т.к. один период может находиться в другом. И тогда опа...
#8 by Rie
Нарисуй на бумажке и сравни даты _начала следующего_ и _окончания предыдущего_. Если один период внутри другого - то дата окончания первого будет после даты начала второго. Если периоды пересекаются - то дата окончания первого будет после даты начала второго. Так что всё ОК.
#9 by Koliaff
(Rie) Пользователь выбрал период весь январь Пример1 : 1. Бронь с 1 января по 30 января 2. Резерв со 2 января по 29 января Итог должен быть - положительный Привер2 1. Бронь с 1 января по 31 января 2. Резерв со 2 января по 29 января Итог должен быть - Отрицательный ===================================== Как с сортировкой алгоритм здесь будет действовать ?
#10 by Fish
А что тебя смущает? В первом случае 31 января свободно, во втором - нет.
#11 by Koliaff
(Fish) просто алгоритм сортировки предложенный (Rie) тогда не сработает.
#12 by Fish
Прекрасно сработает.
#13 by Koliaff
Пробую сейчас Регистр расчета с вытеснением приладить. Должно вроде получится тогда с сортировкой ...
#14 by butterbean
если надо в запросе, тогда надо брать таблицу со всеми датами из выбранного интервала и ее соединять с регистром по Таблица.Дата < Регистр.ДатаНачала И Таблица.Дата > Регистр.ДатаОкончания
#15 by SeraFim
+1
#16 by В тылу врага
во временную таблицу выбираем начала и концы не лежащие в других интервалах, соединяем их - получаем пустые дырки а вообще структура регистра кривая
#17 by azernot
ВЫБРАТЬ    2 ВЫБРАТЬ    3 ВЫБРАТЬ    4 ВЫБРАТЬ    5 ВЫБРАТЬ    6 ВЫБРАТЬ    7 ВЫБРАТЬ    8 ВЫБРАТЬ    9 ВЫБРАТЬ    0 ;    Числа.Число МЕЖДУ 0 И РАЗНОСТЬДАТ(&ДатаНачала, &ДатаКонца, ДЕНЬ) ГДЕ    ПериодыЗанятости.НачалоЗанятости ЕСТЬ NULL Как-то так... Вместо таблицы ПериодыЗанятости подсунуть свой регистр..
#18 by Koliaff
Всем спасибо за обсуждение, приладил регистр расчета пока, экспериментирую ....
#19 by DirecTwiX
#20 by azernot
эээ... Чёта я сегодня туплю.. Это к чему?
#21 by acsent
нужно разбить общий интервал границами на несколько мелких и каждый проверить
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С