Имя: Пароль:
1C
1С v8
Можно ли составить вопрос типа Для Каждого ИЗ
0 belka4_4
 
02.03.16
18:53
Есть Список дат и список пар (студенческие пары) (оба передаются в запрос как список значений). Надо чтобы для каждого набора Дата+Пара Выполнялось условие. Этот запрос - запрос для динамического списка на форме, который выводит аудитории, в которых нет мероприятия.
Делала так:
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ЗанятостьПомещений.Помещение КАК Помещение,
ИЗ
    РегистрСведений.ЗанятостьПомещений КАК ЗанятостьПомещений
ГДЕ
    ЗанятостьПомещений.Дата В(&СписокДат)
    И ЗанятостьПомещений.Пара В(&СписокПар)
    И ЗанятостьПомещений.Мероприятие.Ссылка ЕСТЬ NULL
    И ЗанятостьПомещений.Помещение.КоличествоПосадочныхМест >= &КоличествоПосадочныхМест

В регистре 3 измерения:дата,пара,помещение и ресурс Мероприятие. Если ресурс заполнен - помещение занято.
Например ауд. 210 занята 04.03, 11.03, 18.03 в 11.30-13.00 (это пара - перечисление)
Если в список дат добавить например 05.03, когда ауд. 210 свободна, то она попадёт в динамический список. Аналогично с парой. А надо чтобы аудитория была свободна для всех наборов дата-пара.
Пробовала вложенным запросом- ерунда какая-то получилась, видимо не так пробовала.

Сильно не пинать. Только учусь.
1 sash-ml
 
02.03.16
18:58
Выбор когда ЗанятостьПомещений.Мероприятие.Ссылка ЕСТЬ NULL тогда "Свободно" иначе "Занято" конец как СтатусПомещения
2 HardBall
 
02.03.16
19:07
(0) Периодический регистр сведений с периодичностью день
Измерения: Помещение, Пара
По моему этого достаточно.
3 Garykom
 
гуру
02.03.16
19:26
(0) А дату то выводить забыла? Кроме помещения.
Пусть запрос возвращает список (дата, помещение) свободные
И этот результат уже обрабатываешь повторно как хочется отбрасывая "лишние даты".
4 belka4_4
 
02.03.16
19:32
(2) нет необходимости хранить прошлые данные поэтому регистр не периодический. вопрос не в этом

(3) так у меня если помещение хотя бы одну из дата-пара занято, то его надо отбросить. а что мне даст отбрасывание дат?
5 belka4_4
 
02.03.16
19:35
http://pixs.ru/showimage/Bezimyanni_4870700_20930921.jpg
надо отсюда удалить 210
6 Garykom
 
гуру
02.03.16
19:40
(4) т.е. передаешь дни и номера пар  и нужно вернуть свободные в эти дни и в эти именно пары кабинеты?

запрос двойной делай, сначала находишь все свободные (дни, пары, помещения) по дням нужным

а затем среди результатов выбираешь свободные с нужными парами и возвращаешь только помещения
7 belka4_4
 
02.03.16
19:56
Заработало так:
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ЗанятостьПомещений.Помещение.Ссылка КАК Помещение,
    ЗанятостьПомещений.Помещение.Кафедра.Ссылка КАК Кафедра
ИЗ
    РегистрСведений.ЗанятостьПомещений КАК ЗанятостьПомещений
ГДЕ
    ЗанятостьПомещений.Дата В(&СписокДат)
    И ЗанятостьПомещений.Пара В(&СписокПар)
    И ЗанятостьПомещений.Помещение.КоличествоПосадочныхМест >= &КоличествоПосадочныхМест
    И НЕ ЗанятостьПомещений.Помещение.Ссылка В
                (ВЫБРАТЬ РАЗЛИЧНЫЕ
                    ЗанятостьПомещений.Помещение.Ссылка КАК Помещение
                ИЗ
                    РегистрСведений.ЗанятостьПомещений КАК ЗанятостьПомещений
                ГДЕ
                    ЗанятостьПомещений.Дата В (&СписокДат)
                    И ЗанятостьПомещений.Пара В (&СписокПар)
                    И ЗанятостьПомещений.Помещение.КоличествоПосадочныхМест >= &КоличествоПосадочныхМест
                    И НЕ ЗанятостьПомещений.Мероприятие.Ссылка ЕСТЬ NULL )

Но может есть что-то более оптимальное?
8 belka4_4
 
02.03.16
20:17
Вот только с динамическим списком не работает((
Устанавливаю параметры. Списки значений такие же как при тесте в консоли запросов, а всё равно 210 появляется.
ПомещенияНаВыбор.Параметры.УстановитьЗначениеПараметра("КоличествоПосадочныхМест",КоличествоПосадочныхМест);
    ПомещенияНаВыбор.Параметры.УстановитьЗначениеПараметра("СписокДат",ДатыСписок);
    ПомещенияНаВыбор.Параметры.УстановитьЗначениеПараметра("СписокПар",ПарыСписок);
9 belka4_4
 
02.03.16
21:00
Для разного порядка значений в списке значений динамический список обрабатывается по-разному. В консоли запросов всё ок=(
10 HardBall
 
03.03.16
10:04
Вам следует задаться вопросом зачем в регистре "Занятость помещений" хранить записи о незанятых. И все станет на свои места.
11 belka4_4
 
03.03.16
13:22
(10)
Затем, что некоторые помещения служебные или ремонтируются и не могут быть использованы для проведения мероприятий. В регистре только те, которые заняты или могут быть заняты. Искать все подходящие из справочника, записей о которых на определённую дату и пару нет в регистре не очень хорошо.

Проблема с динамическим списком решилась. Оказалось динамический список по-особому воспринимает передаваемый параметр, а точнее не воспринимает список значений как список, а берёт только первое значение. Нужно было выгрузить в массив.
Закон Брукера: Даже маленькая практика стоит большой теории.