Имя: Пароль:
1C
1С v8
Как запросом вывести всю номенклатуру с количеством ее свойств
0 Boudybuilder
 
09.09.13
11:51
"ВЫБРАТЬ
                    |    Номенклатура.Ссылка,
                    |    ЕСТЬNULL(Значения.КоличествоЗначений, 0) КАК КоличествоЗначений
                    |ИЗ
                    |    Справочник.Номенклатура КАК Номенклатура
                    |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                    |            ЗначенияСвойствОбъектов.Объект КАК Объект,
                    |            КОЛИЧЕСТВО(ЗначенияСвойствОбъектов.Значение) КАК КоличествоЗначений
                    |        ИЗ
                    |            РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                    |        
                    |        СГРУППИРОВАТЬ ПО
                    |            ЗначенияСвойствОбъектов.Объект) КАК Значения
                    |        ПО Номенклатура.Ссылка = Значения.Объект.Ссылка"




Логика такова , чтобы получить таблицу такого примера :

Номенклатура - КоличествоСвойств
Ном1 - 0
Ном2 - 5
Ном3 - 45      

Тоесть если даже в регистре нету свойств , то чтобы все равно показывало рядышком 0 , а не просто не выбирало номенклатуру как с внутренним соединением.

По даному запросу получаю таблицу номенклатуры и таблицу количества из регистра , и если внутренним соединение , то обрабатывается быстренько , но если количества присоединяю вот так как в запросе ко всей номенклатуре , то запрос отрабатывается очень тяжело и долго.

Как посоветуете переписать запрос?
1 mistеr
 
09.09.13
12:00
Избавиться от подзапроса. Соединить, потом группировать.
2 Boudybuilder
 
09.09.13
13:20
ВЫБРАТЬ
    Номенклатура.Ссылка КАК Ссылка,
    КОЛИЧЕСТВО(ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, 0)) КАК Количество
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
        ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов.Объект.Ссылка

СГРУППИРОВАТЬ ПО
    Номенклатура.Ссылка



Та же самая проблема
3 Boudybuilder
 
09.09.13
13:20
Помогите набросать , вроде такой простой запросик...
4 Fragster
 
модератор
09.09.13
13:29
КОЛИЧЕСТВО(ЗначенияСвойствОбъектов.Значение)
5 Fragster
 
модератор
09.09.13
13:30
за ЗначенияСвойствОбъектов.Объект.Ссылка по голове
6 BAPBAP
 
09.09.13
13:32
Добавь в первом запросе (0) условие:
ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Номенклатура

Плюс условие соединения исправь на:
ПО Номенклатура = Значения.Объект

А то ты делаешь лишнее чтение Ссылки из БД
7 BAPBAP
 
09.09.13
13:35
Плюс исправь ник На Bodybuilder
8 lordmb
 
09.09.13
13:35
(3) лови

ВЫБРАТЬ
    ЗначенияСвойствОбъектов.Объект,
    КОЛИЧЕСТВО(ЗначенияСвойствОбъектов.Значение) КАК Значение
ПОМЕСТИТЬ ВТ_КолЗначений
ИЗ
    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ГДЕ
    ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Номенклатура

СГРУППИРОВАТЬ ПО
    ЗначенияСвойствОбъектов.Объект
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Номенклатура.Ссылка,
    ЕСТЬNULL(ВТ_КолЗначений.Значение, 0) КАК КоличествоЗначений
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_КолЗначений КАК ВТ_КолЗначений
        ПО Номенклатура.Ссылка = ВТ_КолЗначений.Объект
9 Boudybuilder
 
09.09.13
23:36
(8) Спасибо огромное!!!!
10 Boudybuilder
 
09.09.13
23:37
(8) Хотелось бы узнать , чем так облегчило запрос создание в нем временной таблицы , а не на прямую?
11 Boudybuilder
 
17.09.13
00:28
Ох уж эти запросы...
К строка ВТТабПоле нужно присоединить найденые записи в регистре по коду. Но если записей нет в регистре то и строки из ВТТабПоле не выводит , а нужно чтобы выводило все записи. Что я там в конце не так соединяю?



"ВЫБРАТЬ
                  |    ВЫРАЗИТЬ(ТабПоле.Колонка5 КАК СТРОКА(25)) КАК КодНоменклатурыКонтрагента,
                  |    ВЫРАЗИТЬ(ТабПоле.Колонка6 КАК СТРОКА(250)) КАК НаименованиеНоменклатурыКонтрагента
                  |ПОМЕСТИТЬ ВТТабПоле
                  |ИЗ
                  |    &ТабПоле КАК ТабПоле
                  |;
                  |
                  |////////////////////////////////////////////////////////////////////////////////
                  |ВЫБРАТЬ
                  |    ВТТабПоле.КодНоменклатурыКонтрагента,
                  |    ВТТабПоле.НаименованиеНоменклатурыКонтрагента КАК НаименованиеНоменклатурыКонтрагента,
                  |    Рег.Контрагент,
                  |    Рег.Номенклатура,
                  |    Рег.ХарактеристикаНоменклатуры
                  |ИЗ
                  |    ВТТабПоле КАК ВТТабПоле
                  |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК Рег
                  |        ПО ВТТабПоле.КодНоменклатурыКонтрагента = Рег.КодНоменклатурыКонтрагента
                  |ГДЕ
                  |    Рег.Контрагент = &Контрагент
                  |
                  |УПОРЯДОЧИТЬ ПО
                  |    НаименованиеНоменклатурыКонтрагента"
12 Boudybuilder
 
17.09.13
00:38
Тут левое работает как внутреннее соединение
13 Boudybuilder
 
17.09.13
01:02
...
Народ!
Помогите!
14 cw014
 
17.09.13
06:51
Перенеси ГДЕ в условие соединения
15 Boudybuilder
 
17.09.13
10:53
Если запросом хочу получить номер строки из ТЗ  то получаю ошибку "Тип не может быть выбран в запросе"
Строится эта колонка та
ТабПоле.Колонки.Добавить("Номер", ,"Номер").Ширина=5;

отладчиком смотрю - Число
16 Галахад
 
гуру
17.09.13
10:59
Опиши тип.
17 Boudybuilder
 
17.09.13
11:07
ТабПоле.Колонки.Добавить("Номер",Новый ОписаниеТипов("Число") ,"Номер").Ширина=5;

Описал .
Толку 0