Отбор в поле выбора с учетом ограничений

1. G_105375285725996785204 30.11.22 10:48 Сейчас в теме
Есть справочники Врач,Кабинет. Врач включает в себя Табличную часть с графиком работы, поле с выбором недели заполнения, поле с выбором кабинета. При проведении записи в справочнике Врач, в регистр сведений ДоступностьКабинета добавляются записи для выбранного кабинета и врача, с начала недели в каждый рабочий день врача добавляется две записи
- время первой записи = начало рабочего дня врача, где кабинета указывается как истина
- время второй записи = конец рабочего дня врача + 1 секунда, доступность - ложь
То есть, условно, с 9:00 до 18:01 врач занимает кабинет.

Вопрос следующий: как в форме справочника врач, в зависимости от выборанной недели получать только те кабинеты, которые свободны на этой недели?

P.S Регистр сведений ДоступностьКабинета должен называться ДоступностьВрача, просто не успел переименовать!




Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	
	лкНаборЗаписей=	РегистрыСведений.ДоступностьКабинета.СоздатьНаборЗаписей();
	лкНаборЗаписей.Отбор["Кабинет"].ВидСравнения=ВидСравнения.Равно;
	лкНаборЗаписей.Отбор["Кабинет"].Значение=	Объект.КабинетПриема;
	лкНаборЗаписей.Отбор["Кабинет"].Использование=Истина;
	лкНаборЗаписей.Прочитать();
	лкНаборЗаписей.Очистить();
	Для	каждого лкТекСТрока	Из	Объект.ГрафикРаботы	Цикл
		Если	(лкТекСтрока.РабочийДень)	Тогда
			лкНовЗапись=	лкНаборЗаписей.Добавить();
			лкНовЗапись.Врач=	Объект.Ссылка;
			лкНовЗапись.Доступность=	Истина;
			лкНовЗапись.Кабинет=	Объект.КабинетПриема;
			лкНовЗапись.Период=	Объект.НеделяЗаполнения+ (86400*(лкТекСтрока.НомерСтроки-1))+Час(лкТекСтрока.ВремяНачала)*3600+Минута(лкТекСтрока.ВремяНачала)*60;
			лкНовЗапись=	лкНаборЗаписей.Добавить();
			лкНовЗапись.Врач=	Объект.Ссылка;
			лкНовЗапись.Доступность=	Ложь;
			лкНовЗапись.Кабинет=	Объект.КабинетПриема;
			лкНовЗапись.Период=	Объект.НеделяЗаполнения+ (86400*(лкТекСтрока.НомерСтроки-1))+Час(лкТекСтрока.ВремяОкончания)*3600+Минута(лкТекСтрока.ВремяНачала)*60+1;
		КонецЕсли;
	КонецЦикла;
	лкНаборЗаписей.Записать(Истина);
КонецПроцедуры
Показать
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
3. VictorRGB2 13 30.11.22 11:01 Сейчас в теме
(1) может пересмотреть схему регистра, отказавшись от двух записей
ВремяНачалаРаботы и ВремяОкончанияРаботы писать в одной записи для Доступность
тогда сразу можно будет оперировать одним условием в запросе - Доступность = Ложь

т.е. две ваши записи превращаются в одну и выбор по условию уже не выглядит таким сложным, т.к. условие значительно проще получается
передали период между С ПО для ВремяНачалаРаботы и ВремяОкончанияРаботы и отобрали Доступность
G_105375285725996785204; +1 Ответить
4. G_105375285725996785204 30.11.22 11:22 Сейчас в теме
(3) А что если делать выборку кабинетов, записи о которых есть в регистре с начала недели по конец недели, а затем добавлять в поле выбора кабинета только те, которые не находятся в регистре за данный промежуток времени? Мне кажется должно работать.
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 34 30.11.22 10:56 Сейчас в теме
(1)
лкНаборЗаписей.Прочитать();
лкНаборЗаписей.Очистить();

Гениально.
3. VictorRGB2 13 30.11.22 11:01 Сейчас в теме
(1) может пересмотреть схему регистра, отказавшись от двух записей
ВремяНачалаРаботы и ВремяОкончанияРаботы писать в одной записи для Доступность
тогда сразу можно будет оперировать одним условием в запросе - Доступность = Ложь

т.е. две ваши записи превращаются в одну и выбор по условию уже не выглядит таким сложным, т.к. условие значительно проще получается
передали период между С ПО для ВремяНачалаРаботы и ВремяОкончанияРаботы и отобрали Доступность
G_105375285725996785204; +1 Ответить
4. G_105375285725996785204 30.11.22 11:22 Сейчас в теме
(3) А что если делать выборку кабинетов, записи о которых есть в регистре с начала недели по конец недели, а затем добавлять в поле выбора кабинета только те, которые не находятся в регистре за данный промежуток времени? Мне кажется должно работать.
5. VictorRGB2 13 30.11.22 19:04 Сейчас в теме
(4) от обратного... в принципе тоже возможно
если так удобнее именно вам, то кто ж против что скажет )

можно даже одним запросом все запилить
Оставьте свое сообщение
Вакансии
Программист 1С
Киров (Кировская обл.)
зарплата от 100 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 150 000 руб.
Полный день

Архитектор 1С
Москва
зарплата от 250 000 руб.
Полный день

1С-Программист (интегратор Битрикс24)
Санкт-Петербург
зарплата от 150 000 руб. до 250 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 100 000 руб.
Временный (на проект)