Имя: Пароль:
1C
1С v8
Правильное построение запросов 1с? Задваивание в результате((
,
0 exiter1
 
21.02.18
22:47
Столкнулся с такой проблемой. Задваивается (затраивается) результат по регистру с площадями. Как правильно выстроить логику?

|ВЫБРАТЬ
                   |    СписокЛС.ЛицевойСчет,
                   |    СписокЛС.Собственник,
                   |    СписокЛС.Помещение,
                   |    СписокЛС.Этаж,
                   |    СписокЛС.КоличествоКомнат,
                   |    СписокЛС.Здание,
                   |    СписокЛС.Здание.Многоквартирное КАК ПризнакМКД,
                   |    КВП_АдресаСрезПоследних.Город,
                   |    КВП_АдресаСрезПоследних.НаселенныйПункт,
                   |    КВП_АдресаСрезПоследних.Улица,
                   |    КВП_АдресаСрезПоследних.Дом,
                   |    КВП_АдресаСрезПоследних.Корпус,
                   |    ВЫБОР
                   |        КОГДА КВП_ПлощадьПомещенияСрезПоследних.ВидПлощади.Код = ""000000001""
                   |            ТОГДА КВП_ПлощадьПомещенияСрезПоследних.Площадь
                   |        ИНАЧЕ 0
                   |    КОНЕЦ КАК ОбщаяПлощадь,
                   |    ВЫБОР
                   |        КОГДА КВП_ПлощадьПомещенияСрезПоследних.ВидПлощади.Код = ""000000002""
                   |            ТОГДА КВП_ПлощадьПомещенияСрезПоследних.Площадь
                   |        ИНАЧЕ 0
                   |    КОНЕЦ КАК ЖилаяПлощадь,
                  
                   |    ВЫБОР
                   |        КОГДА КВП_ПлощадьПомещенияСрезПоследних.ВидПлощади.Код = ""000000007""
                   |            ТОГДА КВП_ПлощадьПомещенияСрезПоследних.Площадь
                   |        ИНАЧЕ 0
                   |    КОНЕЦ КАК ПлощадьЗемельногоУчастка
                   |ИЗ
                   |    СписокЛС КАК СписокЛС
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КВП_Адреса.СрезПоследних(&Дата, ) КАК КВП_АдресаСрезПоследних
                   |        ПО СписокЛС.Здание = КВП_АдресаСрезПоследних.Объект
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КВП_ПлощадьПомещения.СрезПоследних(&Дата, ) КАК КВП_ПлощадьПомещенияСрезПоследних
                   |        ПО СписокЛС.Помещение = КВП_ПлощадьПомещенияСрезПоследних.Объект";
1 Cyberhawk
 
21.02.18
22:49
СГРУППИРОВАТЬ ПО?
2 exiter1
 
21.02.18
22:57
Добавил группировку к запросу:

|СГРУППИРОВАТЬ ПО
                   |    СписокЛС.ЛицевойСчет,
                   |    СписокЛС.Помещение,
                   |    СписокЛС.Собственник,
                   |    СписокЛС.Этаж,
                   |    СписокЛС.КоличествоКомнат,
                   |    СписокЛС.Здание,
                   |    СписокЛС.Здание.Многоквартирное,
                   |    КВП_АдресаСрезПоследних.Город,
                   |    КВП_АдресаСрезПоследних.НаселенныйПункт,
                   |    КВП_АдресаСрезПоследних.Улица,
                   |    КВП_АдресаСрезПоследних.Дом,
                   |    КВП_АдресаСрезПоследних.Корпус,
                   |    ВЫБОР
                   |        КОГДА КВП_ПлощадьПомещенияСрезПоследних.ВидПлощади.Код = ""000000001""
                   |            ТОГДА КВП_ПлощадьПомещенияСрезПоследних.Площадь
                   |        ИНАЧЕ 0
                   |    КОНЕЦ,
                   |    ВЫБОР
                   |        КОГДА КВП_ПлощадьПомещенияСрезПоследних.ВидПлощади.Код = ""000000002""
                   |            ТОГДА КВП_ПлощадьПомещенияСрезПоследних.Площадь
                   |        ИНАЧЕ 0
                   |    КОНЕЦ,
                   |    ВЫБОР
                   |        КОГДА КВП_ПлощадьПомещенияСрезПоследних.ВидПлощади.Код = ""000000007""
                   |            ТОГДА КВП_ПлощадьПомещенияСрезПоследних.Площадь
                   |        ИНАЧЕ 0
                   |    КОНЕЦ"

Ничего не дало((
3 youalex
 
21.02.18
23:04
Запрос просто получает данные в том виде, который ты описал в тексте запроса. Те данные, которые у тебя есть в таблицах.

И да, в качестве наводки, может быть - СрезПоследних, в отличие от виртуальных РН - возвращает все возможные сочетания измерений. Вне зависимости от выбранных полей.
4 exiter1
 
21.02.18
23:20
(3) Вот по РегистрСведений.КВП_ПлощадьПомещения.СрезПоследних и идет дублирование . Тогда как правильно свернуть? Может убрать в условии "ИНАЧЕ 0"?
5 youalex
 
21.02.18
23:25
(4) я не знаю) Ну, вытащи его в поля, и сверни по нему. Но оно все равно задублится по нему, что логично.
Сделай отбор в параметрах вт по площади, тогда не задублится.
6 youalex
 
21.02.18
23:27
Зачем вы вообще площадь воткнули в измерения?
7 exiter1
 
21.02.18
23:28
(4) Т.е. обратиться к трем разным вт одного регистра РегистрСведений.КВП_ПлощадьПомещения с разным отбором по площадям?

П.С.: Не я пихал. Это "крутая" конфа от ВДГБ)) Там все не как у всех))
8 exiter1
 
21.02.18
23:41
Сделал так:
|ВЫБРАТЬ
                   |    СписокЛС.ЛицевойСчет,
                   |    СписокЛС.Собственник,
                   |    СписокЛС.Помещение,
                   |    СписокЛС.Этаж,
                   |...,
                   |    ОбщПл.Площадь КАК ОбщаяПлощадь,
                   |    ЖилПл.Площадь КАК ЖилаяПлощадь,
                   |    ЗемУчПл.Площадь КАК ПлощадьЗемельногоУчастка
                   |ИЗ
                   |    СписокЛС КАК СписокЛС
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КВП_Адреса.СрезПоследних(&Дата, ) КАК КВП_АдресаСрезПоследних
                   |        ПО СписокЛС.Здание = КВП_АдресаСрезПоследних.Объект
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КВП_ПлощадьПомещения.СрезПоследних(&Дата, ВидПлощади.Код = ""000000001"") КАК ОбщПл
                   |        ПО СписокЛС.Помещение = ОбщПл.Объект
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КВП_ПлощадьПомещения.СрезПоследних(&Дата, ВидПлощади.Код = ""000000002"") КАК ЖилПл
                   |        ПО СписокЛС.Помещение = ЖилПл.Объект
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КВП_ПлощадьПомещения.СрезПоследних(&Дата, ВидПлощади.Код = ""000000007"") КАК ЗемУчПл
                   |        ПО СписокЛС.Помещение = ЗемУчПл.Объект"

Все работает. Но есть более элегантное решение?
9 chelentano
 
22.02.18
06:49
(8) Более элегантного нет. Но я бы сначала сформировал временную таблицу по РС КВП_ПлощадьПомещения сразу для трёх видов площадей, а потом уже с ней бы соединял
10 Малыш Джон
 
22.02.18
07:48
(8) Сделай предварительную выборку из срез и добавь поле в неё поле

ВЫБОР КОГДА ВидПлощади.Код = ""000000001" ТОГДА ОбщПл.Объект
11 Малыш Джон
 
22.02.18
07:49
КОГДА ВидПлощади.Код = ""000000002" ТОГДА ЖилПл.Объект

и т.д.

а потом по этому полю соединяй