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

1. 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 27 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С
Ессентуки
зарплата от 120 000 руб. до 144 000 руб.
Полный день

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

Специалист техподдержки
Краснознаменск (Московская обл.)
зарплата от 50 000 руб. до 100 000 руб.
Полный день

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

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