Люди! Ну помогите, пожалуйста. Мучаюсь уже две недели.
В запросе есть строка:
| Выбор Когда проживание.КатегорияНомера.КолвоМест ЕСТЬ NULL Тогда 0 Иначе 1 КОНЕЦ КАК КолвоМест,
По идее, я должна получить 0 или 1.
Но в отчёт выдаётся само значение ресурса КолвоМест. Почему? Не могу понять.
Скрин результата прикладываю
В запросе есть строка:
| Выбор Когда проживание.КатегорияНомера.КолвоМест ЕСТЬ NULL Тогда 0 Иначе 1 КОНЕЦ КАК КолвоМест,
По идее, я должна получить 0 или 1.
Но в отчёт выдаётся само значение ресурса КолвоМест. Почему? Не могу понять.
Скрин результата прикладываю
Прикрепленные файлы:
![](/upload/forum/203/203ee62837a8e618d974b29db252ef0b.jpg)
По теме из базы знаний
- Пример использования функции СКД "ВычислитьВыражениеСГруппировкойМассив()"
- СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты
- Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив
- Агрегатные функции СКД, о которых мало кто знает
- Три способа создания одного отчета на СКД
Найденные решения
(10) Не то. Нужно сгруппировать по всем полям, кроме КолвоМест.
Что-то типа такого должно быть:
"ВЫБРАТЬ
| НомернойФонд.Ссылка КАК Номер,
| НомернойФонд.Корпус КАК Корпус,
| НомернойФонд.Этаж КАК Этаж,
| НАЧАЛОПЕРИОДА(ВТ_ДатыПериода.Дата, МЕСЯЦ) КАК Месяц,
| ВТ_ДатыПериода.Дата КАК Дата,
| Проживание.Период КАК ПериодС,
| проживание.ПериодОкончания КАК ПериодПо,
| Максимум(Выбор Когда проживание.КатегорияНомера.КолвоМест ЕСТЬ NULL Тогда 0 Иначе 1 КОНЕЦ) КАК КолвоМест,
| Проживание.Регистратор КАК Регистратор
|ИЗ
| Справочник.НомернойФонд КАК НомернойФонд
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ДатыПериода КАК ВТ_ДатыПериода
| ПО (ИСТИНА)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Проживание КАК Проживание
| ПО (Проживание.ПериодНачала <= ВТ_ДатыПериода.Дата)
| И (Месяц(Проживание.ПериодНачала) = Месяц(ВТ_ДатыПериода.Дата))
| И Проживание.ПериодОкончания >= ВТ_ДатыПериода.Дата
| И НомернойФонд.Ссылка = Проживание.Номер
|ГДЕ
| ВТ_ДатыПериода.Дата МЕЖДУ &ПериодНачало И &ПериодОкончание
|СГРУППИРОВАТЬ ПО
| НомернойФонд.Ссылка,
| НомернойФонд.Корпус,
| НомернойФонд.Этаж,
| НАЧАЛОПЕРИОДА(ВТ_ДатыПериода.Дата, МЕСЯЦ),
| ВТ_ДатыПериода.Дата,
| Проживание.Период,
| проживание.ПериодОкончания,
| Проживание.Регистратор"
Что-то типа такого должно быть:
"ВЫБРАТЬ
| НомернойФонд.Ссылка КАК Номер,
| НомернойФонд.Корпус КАК Корпус,
| НомернойФонд.Этаж КАК Этаж,
| НАЧАЛОПЕРИОДА(ВТ_ДатыПериода.Дата, МЕСЯЦ) КАК Месяц,
| ВТ_ДатыПериода.Дата КАК Дата,
| Проживание.Период КАК ПериодС,
| проживание.ПериодОкончания КАК ПериодПо,
| Максимум(Выбор Когда проживание.КатегорияНомера.КолвоМест ЕСТЬ NULL Тогда 0 Иначе 1 КОНЕЦ) КАК КолвоМест,
| Проживание.Регистратор КАК Регистратор
|ИЗ
| Справочник.НомернойФонд КАК НомернойФонд
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ДатыПериода КАК ВТ_ДатыПериода
| ПО (ИСТИНА)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Проживание КАК Проживание
| ПО (Проживание.ПериодНачала <= ВТ_ДатыПериода.Дата)
| И (Месяц(Проживание.ПериодНачала) = Месяц(ВТ_ДатыПериода.Дата))
| И Проживание.ПериодОкончания >= ВТ_ДатыПериода.Дата
| И НомернойФонд.Ссылка = Проживание.Номер
|ГДЕ
| ВТ_ДатыПериода.Дата МЕЖДУ &ПериодНачало И &ПериодОкончание
|СГРУППИРОВАТЬ ПО
| НомернойФонд.Ссылка,
| НомернойФонд.Корпус,
| НомернойФонд.Этаж,
| НАЧАЛОПЕРИОДА(ВТ_ДатыПериода.Дата, МЕСЯЦ),
| ВТ_ДатыПериода.Дата,
| Проживание.Период,
| проживание.ПериодОкончания,
| Проживание.Регистратор"
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2)А где ещё?
ВООБЩЕ больше ничего нет. Нет вычисляемых полей. Есть только подсчёт итога (во вложении)
Вот весь текст запроса:
ТекстЗапроса = ТекстЗапроса +
"ВЫБРАТЬ
| НомернойФонд.Ссылка КАК Номер,
| НомернойФонд.Корпус КАК Корпус,
| НомернойФонд.Этаж КАК Этаж,
| НАЧАЛОПЕРИОДА(ВТ_ДатыПериода.Дата, МЕСЯЦ) КАК Месяц,
| ВТ_ДатыПериода.Дата КАК Дата,
| Проживание.Период КАК ПериодС,
| проживание.ПериодОкончания КАК ПериодПо,
| Выбор Когда проживание.КатегорияНомера.КолвоМест ЕСТЬ NULL Тогда 0 Иначе 1 КОНЕЦ КАК КолвоМест,
| Проживание.Регистратор КАК Регистратор
|ИЗ
| Справочник.НомернойФонд КАК НомернойФонд
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ДатыПериода КАК ВТ_ДатыПериода
| ПО (ИСТИНА)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Проживание КАК Проживание
| ПО (Проживание.ПериодНачала <= ВТ_ДатыПериода.Дата)
| И (Месяц(Проживание.ПериодНачала) = Месяц(ВТ_ДатыПериода.Дата))
| И Проживание.ПериодОкончания >= ВТ_ДатыПериода.Дата
| И НомернойФонд.Ссылка = Проживание.Номер
|ГДЕ
| ВТ_ДатыПериода.Дата МЕЖДУ &ПериодНачало И &ПериодОкончание"
ВООБЩЕ больше ничего нет. Нет вычисляемых полей. Есть только подсчёт итога (во вложении)
Вот весь текст запроса:
ТекстЗапроса = ТекстЗапроса +
"ВЫБРАТЬ
| НомернойФонд.Ссылка КАК Номер,
| НомернойФонд.Корпус КАК Корпус,
| НомернойФонд.Этаж КАК Этаж,
| НАЧАЛОПЕРИОДА(ВТ_ДатыПериода.Дата, МЕСЯЦ) КАК Месяц,
| ВТ_ДатыПериода.Дата КАК Дата,
| Проживание.Период КАК ПериодС,
| проживание.ПериодОкончания КАК ПериодПо,
| Выбор Когда проживание.КатегорияНомера.КолвоМест ЕСТЬ NULL Тогда 0 Иначе 1 КОНЕЦ КАК КолвоМест,
| Проживание.Регистратор КАК Регистратор
|ИЗ
| Справочник.НомернойФонд КАК НомернойФонд
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ДатыПериода КАК ВТ_ДатыПериода
| ПО (ИСТИНА)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Проживание КАК Проживание
| ПО (Проживание.ПериодНачала <= ВТ_ДатыПериода.Дата)
| И (Месяц(Проживание.ПериодНачала) = Месяц(ВТ_ДатыПериода.Дата))
| И Проживание.ПериодОкончания >= ВТ_ДатыПериода.Дата
| И НомернойФонд.Ссылка = Проживание.Номер
|ГДЕ
| ВТ_ДатыПериода.Дата МЕЖДУ &ПериодНачало И &ПериодОкончание"
Прикрепленные файлы:
![](/upload/forum/upload/528/5288150908738f3f38115d5c9c69f22a.png)
(5) в отчет выводите сумму количества мест. Видимо, у вас запрос получает несколько строк, которые потом группируются (может быть, тут проблема).
И не знаю, какая структура отчета. Скорее всего для группировки по дням(?) нужно свое выражение Максимум(КолвоМест).
И не знаю, какая структура отчета. Скорее всего для группировки по дням(?) нужно свое выражение Максимум(КолвоМест).
(6)Мне надо в отчет вывести единицы, если номер занят, и ноль если пустой. На каждую дату месяца.
В РегистреНакопления Проживание есть записи на те дни, когда кто-то живёт. Т.е. есть запись, если номер занят, и нет записи если номер свободен. Причём, если в номере проживают два человека, то будет две записи на одну дату. Может мне надо как-то "свернуть" данные в запросе?
Получается он учитывает две записи...
В РегистреНакопления Проживание есть записи на те дни, когда кто-то живёт. Т.е. есть запись, если номер занят, и нет записи если номер свободен. Причём, если в номере проживают два человека, то будет две записи на одну дату. Может мне надо как-то "свернуть" данные в запросе?
Получается он учитывает две записи...
(7) Свернуть записи в запросе кажется лучше. В Группировке для суммированного поля можно выюрать функцию Максимум.
Ну или в Ресурсах добавить то же поле "КолвоМест", но с выражением Максимум(КолвоМест) и в "Рассчитывать по" выбрать поле группировки, соответствующее дням.
Ну или в Ресурсах добавить то же поле "КолвоМест", но с выражением Максимум(КолвоМест) и в "Рассчитывать по" выбрать поле группировки, соответствующее дням.
(10) Не то. Нужно сгруппировать по всем полям, кроме КолвоМест.
Что-то типа такого должно быть:
"ВЫБРАТЬ
| НомернойФонд.Ссылка КАК Номер,
| НомернойФонд.Корпус КАК Корпус,
| НомернойФонд.Этаж КАК Этаж,
| НАЧАЛОПЕРИОДА(ВТ_ДатыПериода.Дата, МЕСЯЦ) КАК Месяц,
| ВТ_ДатыПериода.Дата КАК Дата,
| Проживание.Период КАК ПериодС,
| проживание.ПериодОкончания КАК ПериодПо,
| Максимум(Выбор Когда проживание.КатегорияНомера.КолвоМест ЕСТЬ NULL Тогда 0 Иначе 1 КОНЕЦ) КАК КолвоМест,
| Проживание.Регистратор КАК Регистратор
|ИЗ
| Справочник.НомернойФонд КАК НомернойФонд
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ДатыПериода КАК ВТ_ДатыПериода
| ПО (ИСТИНА)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Проживание КАК Проживание
| ПО (Проживание.ПериодНачала <= ВТ_ДатыПериода.Дата)
| И (Месяц(Проживание.ПериодНачала) = Месяц(ВТ_ДатыПериода.Дата))
| И Проживание.ПериодОкончания >= ВТ_ДатыПериода.Дата
| И НомернойФонд.Ссылка = Проживание.Номер
|ГДЕ
| ВТ_ДатыПериода.Дата МЕЖДУ &ПериодНачало И &ПериодОкончание
|СГРУППИРОВАТЬ ПО
| НомернойФонд.Ссылка,
| НомернойФонд.Корпус,
| НомернойФонд.Этаж,
| НАЧАЛОПЕРИОДА(ВТ_ДатыПериода.Дата, МЕСЯЦ),
| ВТ_ДатыПериода.Дата,
| Проживание.Период,
| проживание.ПериодОкончания,
| Проживание.Регистратор"
Что-то типа такого должно быть:
"ВЫБРАТЬ
| НомернойФонд.Ссылка КАК Номер,
| НомернойФонд.Корпус КАК Корпус,
| НомернойФонд.Этаж КАК Этаж,
| НАЧАЛОПЕРИОДА(ВТ_ДатыПериода.Дата, МЕСЯЦ) КАК Месяц,
| ВТ_ДатыПериода.Дата КАК Дата,
| Проживание.Период КАК ПериодС,
| проживание.ПериодОкончания КАК ПериодПо,
| Максимум(Выбор Когда проживание.КатегорияНомера.КолвоМест ЕСТЬ NULL Тогда 0 Иначе 1 КОНЕЦ) КАК КолвоМест,
| Проживание.Регистратор КАК Регистратор
|ИЗ
| Справочник.НомернойФонд КАК НомернойФонд
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ДатыПериода КАК ВТ_ДатыПериода
| ПО (ИСТИНА)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Проживание КАК Проживание
| ПО (Проживание.ПериодНачала <= ВТ_ДатыПериода.Дата)
| И (Месяц(Проживание.ПериодНачала) = Месяц(ВТ_ДатыПериода.Дата))
| И Проживание.ПериодОкончания >= ВТ_ДатыПериода.Дата
| И НомернойФонд.Ссылка = Проживание.Номер
|ГДЕ
| ВТ_ДатыПериода.Дата МЕЖДУ &ПериодНачало И &ПериодОкончание
|СГРУППИРОВАТЬ ПО
| НомернойФонд.Ссылка,
| НомернойФонд.Корпус,
| НомернойФонд.Этаж,
| НАЧАЛОПЕРИОДА(ВТ_ДатыПериода.Дата, МЕСЯЦ),
| ВТ_ДатыПериода.Дата,
| Проживание.Период,
| проживание.ПериодОкончания,
| Проживание.Регистратор"
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот