СКД выражение

1. user1529611 25.11.23 13:52 Сейчас в теме
Люди! Ну помогите, пожалуйста. Мучаюсь уже две недели.
В запросе есть строка:

| Выбор Когда проживание.КатегорияНомера.КолвоМест ЕСТЬ NULL Тогда 0 Иначе 1 КОНЕЦ КАК КолвоМест,

По идее, я должна получить 0 или 1.
Но в отчёт выдаётся само значение ресурса КолвоМест. Почему? Не могу понять.
Скрин результата прикладываю
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
11. sonne 25.11.23 16:14 Сейчас в теме
(10) Не то. Нужно сгруппировать по всем полям, кроме КолвоМест.
Что-то типа такого должно быть:
"ВЫБРАТЬ
| НомернойФонд.Ссылка КАК Номер,
| НомернойФонд.Корпус КАК Корпус,
| НомернойФонд.Этаж КАК Этаж,
| НАЧАЛОПЕРИОДА(ВТ_ДатыПериода.Дата, МЕСЯЦ) КАК Месяц,
| ВТ_ДатыПериода.Дата КАК Дата,
| Проживание.Период КАК ПериодС,
| проживание.ПериодОкончания КАК ПериодПо,
| Максимум(Выбор Когда проживание.КатегорияНомера.КолвоМест ЕСТЬ NULL Тогда 0 Иначе 1 КОНЕЦ) КАК КолвоМест,
| Проживание.Регистратор КАК Регистратор
|ИЗ
| Справочник.НомернойФонд КАК НомернойФонд
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ДатыПериода КАК ВТ_ДатыПериода
| ПО (ИСТИНА)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Проживание КАК Проживание
| ПО (Проживание.ПериодНачала <= ВТ_ДатыПериода.Дата)
| И (Месяц(Проживание.ПериодНачала) = Месяц(ВТ_ДатыПериода.Дата))
| И Проживание.ПериодОкончания >= ВТ_ДатыПериода.Дата
| И НомернойФонд.Ссылка = Проживание.Номер
|ГДЕ
| ВТ_ДатыПериода.Дата МЕЖДУ &ПериодНачало И &ПериодОкончание
|СГРУППИРОВАТЬ ПО
| НомернойФонд.Ссылка,
| НомернойФонд.Корпус,
| НомернойФонд.Этаж,
| НАЧАЛОПЕРИОДА(ВТ_ДатыПериода.Дата, МЕСЯЦ),
| ВТ_ДатыПериода.Дата,
| Проживание.Период,
| проживание.ПериодОкончания,
| Проживание.Регистратор"
user1529611; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. starjevschik 25.11.23 14:22 Сейчас в теме
похоже, дело не в приведенной строке, а где-то еще.
3. user1529611 25.11.23 14:50 Сейчас в теме
(2)А где ещё?
ВООБЩЕ больше ничего нет. Нет вычисляемых полей. Есть только подсчёт итога (во вложении)
Вот весь текст запроса:
ТекстЗапроса = ТекстЗапроса +
"ВЫБРАТЬ
| НомернойФонд.Ссылка КАК Номер,
| НомернойФонд.Корпус КАК Корпус,
| НомернойФонд.Этаж КАК Этаж,
| НАЧАЛОПЕРИОДА(ВТ_ДатыПериода.Дата, МЕСЯЦ) КАК Месяц,
| ВТ_ДатыПериода.Дата КАК Дата,
| Проживание.Период КАК ПериодС,
| проживание.ПериодОкончания КАК ПериодПо,
| Выбор Когда проживание.КатегорияНомера.КолвоМест ЕСТЬ NULL Тогда 0 Иначе 1 КОНЕЦ КАК КолвоМест,
| Проживание.Регистратор КАК Регистратор
|ИЗ
| Справочник.НомернойФонд КАК НомернойФонд
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ДатыПериода КАК ВТ_ДатыПериода
| ПО (ИСТИНА)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Проживание КАК Проживание
| ПО (Проживание.ПериодНачала <= ВТ_ДатыПериода.Дата)
| И (Месяц(Проживание.ПериодНачала) = Месяц(ВТ_ДатыПериода.Дата))
| И Проживание.ПериодОкончания >= ВТ_ДатыПериода.Дата

| И НомернойФонд.Ссылка = Проживание.Номер
|ГДЕ
| ВТ_ДатыПериода.Дата МЕЖДУ &ПериодНачало И &ПериодОкончание"
Прикрепленные файлы:
4. RustamZz 25.11.23 14:56 Сейчас в теме
(3) Потому что другого выражения нет.
5. user1529611 25.11.23 15:16 Сейчас в теме
(4)Какого другого?
Я в запросе получаю КолвоМест по условию, а потом вывожу его в отчёт
9. RustamZz 25.11.23 16:01 Сейчас в теме
(5) Никакого. Скрин смотрите свой. Мы тут не про запрос, а про выражение в СКД.
6. sonne 25.11.23 15:35 Сейчас в теме
(5) в отчет выводите сумму количества мест. Видимо, у вас запрос получает несколько строк, которые потом группируются (может быть, тут проблема).
И не знаю, какая структура отчета. Скорее всего для группировки по дням(?) нужно свое выражение Максимум(КолвоМест).
7. user1529611 25.11.23 15:49 Сейчас в теме
(6)Мне надо в отчет вывести единицы, если номер занят, и ноль если пустой. На каждую дату месяца.
В РегистреНакопления Проживание есть записи на те дни, когда кто-то живёт. Т.е. есть запись, если номер занят, и нет записи если номер свободен. Причём, если в номере проживают два человека, то будет две записи на одну дату. Может мне надо как-то "свернуть" данные в запросе?
Получается он учитывает две записи...
8. sonne 25.11.23 16:00 Сейчас в теме
(7) Свернуть записи в запросе кажется лучше. В Группировке для суммированного поля можно выюрать функцию Максимум.
Ну или в Ресурсах добавить то же поле "КолвоМест", но с выражением Максимум(КолвоМест) и в "Рассчитывать по" выбрать поле группировки, соответствующее дням.
10. user1529611 25.11.23 16:05 Сейчас в теме
(8)Попыталась в начале запроса написать ВЫБРАТЬ РАЗЛИЧНЫЕ, но...
Если кто-то жил с 1-го по 5-е, потом перерыв, а потом заехали, например, 10-го, то с 10-го начинает врать
11. sonne 25.11.23 16:14 Сейчас в теме
(10) Не то. Нужно сгруппировать по всем полям, кроме КолвоМест.
Что-то типа такого должно быть:
"ВЫБРАТЬ
| НомернойФонд.Ссылка КАК Номер,
| НомернойФонд.Корпус КАК Корпус,
| НомернойФонд.Этаж КАК Этаж,
| НАЧАЛОПЕРИОДА(ВТ_ДатыПериода.Дата, МЕСЯЦ) КАК Месяц,
| ВТ_ДатыПериода.Дата КАК Дата,
| Проживание.Период КАК ПериодС,
| проживание.ПериодОкончания КАК ПериодПо,
| Максимум(Выбор Когда проживание.КатегорияНомера.КолвоМест ЕСТЬ NULL Тогда 0 Иначе 1 КОНЕЦ) КАК КолвоМест,
| Проживание.Регистратор КАК Регистратор
|ИЗ
| Справочник.НомернойФонд КАК НомернойФонд
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ДатыПериода КАК ВТ_ДатыПериода
| ПО (ИСТИНА)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Проживание КАК Проживание
| ПО (Проживание.ПериодНачала <= ВТ_ДатыПериода.Дата)
| И (Месяц(Проживание.ПериодНачала) = Месяц(ВТ_ДатыПериода.Дата))
| И Проживание.ПериодОкончания >= ВТ_ДатыПериода.Дата
| И НомернойФонд.Ссылка = Проживание.Номер
|ГДЕ
| ВТ_ДатыПериода.Дата МЕЖДУ &ПериодНачало И &ПериодОкончание
|СГРУППИРОВАТЬ ПО
| НомернойФонд.Ссылка,
| НомернойФонд.Корпус,
| НомернойФонд.Этаж,
| НАЧАЛОПЕРИОДА(ВТ_ДатыПериода.Дата, МЕСЯЦ),
| ВТ_ДатыПериода.Дата,
| Проживание.Период,
| проживание.ПериодОкончания,
| Проживание.Регистратор"
user1529611; +1 Ответить
12. user1529611 26.11.23 13:09 Сейчас в теме
(11)Огромное вам спасибо!!
Немного подкорректировала и всё заработало!!
Большое вам человеческое спасибо за то, что именно ПОМОГАЕТЕ!
А то тут любят показать, какие они умные, а помощи никакой.
Ещё раз СПАСИБО!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот