Отбор в поле выбора с учетом ограничений
Есть справочники Врач,Кабинет. Врач включает в себя Табличную часть с графиком работы, поле с выбором недели заполнения, поле с выбором кабинета. При проведении записи в справочнике Врач, в регистр сведений ДоступностьКабинета добавляются записи для выбранного кабинета и врача, с начала недели в каждый рабочий день врача добавляется две записи
- время первой записи = начало рабочего дня врача, где кабинета указывается как истина
- время второй записи = конец рабочего дня врача + 1 секунда, доступность - ложь
То есть, условно, с 9:00 до 18:01 врач занимает кабинет.
Вопрос следующий: как в форме справочника врач, в зависимости от выборанной недели получать только те кабинеты, которые свободны на этой недели?
P.S Регистр сведений ДоступностьКабинета должен называться ДоступностьВрача, просто не успел переименовать!
- время первой записи = начало рабочего дня врача, где кабинета указывается как истина
- время второй записи = конец рабочего дня врача + 1 секунда, доступность - ложь
То есть, условно, с 9:00 до 18:01 врач занимает кабинет.
Вопрос следующий: как в форме справочника врач, в зависимости от выборанной недели получать только те кабинеты, которые свободны на этой недели?
P.S Регистр сведений ДоступностьКабинета должен называться ДоступностьВрача, просто не успел переименовать!
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
лкНаборЗаписей= РегистрыСведений.ДоступностьКабинета.СоздатьНаборЗаписей();
лкНаборЗаписей.Отбор["Кабинет"].ВидСравнения=ВидСравнения.Равно;
лкНаборЗаписей.Отбор["Кабинет"].Значение= Объект.КабинетПриема;
лкНаборЗаписей.Отбор["Кабинет"].Использование=Истина;
лкНаборЗаписей.Прочитать();
лкНаборЗаписей.Очистить();
Для каждого лкТекСТрока Из Объект.ГрафикРаботы Цикл
Если (лкТекСтрока.РабочийДень) Тогда
лкНовЗапись= лкНаборЗаписей.Добавить();
лкНовЗапись.Врач= Объект.Ссылка;
лкНовЗапись.Доступность= Истина;
лкНовЗапись.Кабинет= Объект.КабинетПриема;
лкНовЗапись.Период= Объект.НеделяЗаполнения+ (86400*(лкТекСтрока.НомерСтроки-1))+Час(лкТекСтрока.ВремяНачала)*3600+Минута(лкТекСтрока.ВремяНачала)*60;
лкНовЗапись= лкНаборЗаписей.Добавить();
лкНовЗапись.Врач= Объект.Ссылка;
лкНовЗапись.Доступность= Ложь;
лкНовЗапись.Кабинет= Объект.КабинетПриема;
лкНовЗапись.Период= Объект.НеделяЗаполнения+ (86400*(лкТекСтрока.НомерСтроки-1))+Час(лкТекСтрока.ВремяОкончания)*3600+Минута(лкТекСтрока.ВремяНачала)*60+1;
КонецЕсли;
КонецЦикла;
лкНаборЗаписей.Записать(Истина);
КонецПроцедуры
ПоказатьПрикрепленные файлы:
Найденные решения
(1) может пересмотреть схему регистра, отказавшись от двух записей
ВремяНачалаРаботы и ВремяОкончанияРаботы писать в одной записи для Доступность
тогда сразу можно будет оперировать одним условием в запросе - Доступность = Ложь
т.е. две ваши записи превращаются в одну и выбор по условию уже не выглядит таким сложным, т.к. условие значительно проще получается
передали период между С ПО для ВремяНачалаРаботы и ВремяОкончанияРаботы и отобрали Доступность
ВремяНачалаРаботы и ВремяОкончанияРаботы писать в одной записи для Доступность
тогда сразу можно будет оперировать одним условием в запросе - Доступность = Ложь
т.е. две ваши записи превращаются в одну и выбор по условию уже не выглядит таким сложным, т.к. условие значительно проще получается
передали период между С ПО для ВремяНачалаРаботы и ВремяОкончанияРаботы и отобрали Доступность
Остальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(1) может пересмотреть схему регистра, отказавшись от двух записей
ВремяНачалаРаботы и ВремяОкончанияРаботы писать в одной записи для Доступность
тогда сразу можно будет оперировать одним условием в запросе - Доступность = Ложь
т.е. две ваши записи превращаются в одну и выбор по условию уже не выглядит таким сложным, т.к. условие значительно проще получается
передали период между С ПО для ВремяНачалаРаботы и ВремяОкончанияРаботы и отобрали Доступность
ВремяНачалаРаботы и ВремяОкончанияРаботы писать в одной записи для Доступность
тогда сразу можно будет оперировать одним условием в запросе - Доступность = Ложь
т.е. две ваши записи превращаются в одну и выбор по условию уже не выглядит таким сложным, т.к. условие значительно проще получается
передали период между С ПО для ВремяНачалаРаботы и ВремяОкончанияРаботы и отобрали Доступность
Вакансии
Программист 1С
Краснознаменск (Московская обл.)
зарплата от 150 000 руб. до 250 000 руб.
Полный день
Краснознаменск (Московская обл.)
зарплата от 150 000 руб. до 250 000 руб.
Полный день
Специалист техподдержки
Краснознаменск (Московская обл.)
зарплата от 50 000 руб. до 100 000 руб.
Полный день
Краснознаменск (Московская обл.)
зарплата от 50 000 руб. до 100 000 руб.
Полный день