Добрый день! Встала такая задача разработать планирование. Был создан регистр ПланировщикРемонтныхЗаявок, где заносится информация Участок, ВремяЗаявки, ВидЗаявки, Количество. Когда создаем документ Заявки, они записывают в регистр сведений ИсторияЗаявкиЕдиноеОкно, с чем я и сравниваю сколько еще я могу добавить заявок. У меня сделано, если заявку добавить можно выдается Предупреждение("Дата и время свободно!"); ,а если уже нельзя тогда выдается Предупреждение("На этот день и время количество заявок закончились!"+Символы.ПС+"Выберите другую дату или время.");.
Можете показать на примере как можно сделать когда уже добавлять нельзя документ выводилась ближайшая свободная дата с фильтром.
Вот пример РегистрыСведений.ПланировщикРемонтныхЗаявок
Дата
Участок
ВремяЗаявки
ВидЗаявки
Количество
26.01.2016
Иванова
08:00-12:00
ИГБУ
2
26.01.2016
Петрова
08:00-12:00
ИГБУ
2
26.01.2016
Иванова
12:00-17:00
ИГБУ
3
26.01.2016
Петрова
12:00-17:00
ИГБУ
6
27.01.2016
Иванова
08:00-12:00
ИГБУ
2
27.01.2016
Петрова
08:00-12:00
ИГБУ
2
28.01.2016
Иванова
08:00-12:00
ИГБУ
2
28.01.2016
Петрова
08:00-12:00
ИГБУ
2
Начинаем добавляться заявки . Выбираем дату 26.01.2016, участок Иванова, при выборе время 08:00-12:00 начинаем искать дату, если выбранная дата свободна (отбор идет по дате, участку, видзаявки, времязаявки) тогда добавляем, если не свободна тогда должен предложить согласно таблице дату 27.01.2016, если и здесь даты уже заняты тогда 28.01.2016, если и эта дата занята и таблица дальше не заполнена тогда 29.01.2016
Вашу таблицу группируете по Дата, Участок, ВидЗаявки, Сумма(ВремяКонЗаявки-ВремяНачЗаявки) - получаете сколько часов у каждого участка в дне занято
Далее отбираете те, у которых Сумма() < ДлительностьДня
Потом делаете внутреннее соединение с исходной таблицей по Дата, Участок, ВидЗаявки, Сумма() < ДлительностьДня - получаете дни, где есть свободное время
Если не соединилось, тогда Дата будет Максимум(Дата) по Дата, Участок, ВидЗаявки
Сделайте два реквизита ВремяНачЗаявки, ВремяКонЗаявки
Сделайте его Тип данных - Дата, Состав даты - время, тогда сможете их в запросе вычитать, только разность будет в секундах - ее в часы сможете перевести /3600, либо в секундах и оперируйте