Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Правильное построение запросов 1с? Задваивание в результате((

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

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

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

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

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

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

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

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

и т.д.

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует