Имя: Пароль:
1C
1С v8
разрешение Характеристик СКД
0 kuzyara
 
24.06.14
09:41
Почему характеристики в СКД разрешаются в:
ВЫБРАТЬ
    ПартииНоменклатурыОстаткиИОбороты.Склад КАК Склад,
    ПартииНоменклатурыОстаткиИОбороты.Период КАК Период,
    ПартииНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток,
    ПартииНоменклатурыОстаткиИОбороты.СтоимостьКонечныйОстаток КАК СтоимостьКонечныйОстаток
ИЗ
    РегистрНакопления.ПартииНоменклатуры.ОстаткиИОбороты(&д1, &д2, День, , склад = &склад) КАК ПартииНоменклатурыОстаткиИОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
        ПО (ЗначенияСвойствОбъектов.Объект = ПартииНоменклатурыОстаткиИОбороты.Номенклатура)
            И (ЗначенияСвойствОбъектов.Свойство = &П3)
ГДЕ
    ЗначенияСвойствОбъектов.Значение = &П4
1 kuzyara
 
24.06.14
09:43
Почему характеристики в СКД разрешаются в:

ВЫБРАТЬ
    ПартииНоменклатурыОстаткиИОбороты.Склад КАК Склад,
    ПартииНоменклатурыОстаткиИОбороты.Период КАК Период,
    ПартииНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток,
    ПартииНоменклатурыОстаткиИОбороты.СтоимостьКонечныйОстаток КАК СтоимостьКонечныйОстаток
ИЗ
    РегистрНакопления.ПартииНоменклатуры.ОстаткиИОбороты(&д1, &д2, День, , склад = &склад) КАК ПартииНоменклатурыОстаткиИОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
        ПО (ЗначенияСвойствОбъектов.Объект = ПартииНоменклатурыОстаткиИОбороты.Номенклатура)
            И (ЗначенияСвойствОбъектов.Свойство = &П3)
ГДЕ
    ЗначенияСвойствОбъектов.Значение = &П4

а не в:

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

ИНДЕКСИРОВАТЬ ПО
    Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПартииНоменклатурыОстаткиИОбороты.Склад КАК Склад,
    ПартииНоменклатурыОстаткиИОбороты.Период КАК Период,
    ПартииНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток,
    ПартииНоменклатурыОстаткиИОбороты.СтоимостьКонечныйОстаток
ИЗ
    РегистрНакопления.ПартииНоменклатуры.ОстаткиИОбороты(
            &д1,
            &д2,
            День,
            ,
            Номенклатура В
                    (ВЫБРАТЬ
                        тном.Номенклатура
                    ИЗ
                        тном)
                И склад = &склад) КАК ПартииНоменклатурыОстаткиИОбороты
, ведь второй вариант быстрее?

Как сформировать запрос, чтобы характеристики были как во втором варианте?
2 kuzyara
 
24.06.14
09:45
у меня первый запрос выполняется 8 секунд, а второй всего одну!
3 Defender aka LINN
 
24.06.14
10:01
(1) Потому что механизм характеристик - это еще и их вывод пользователю, а не только отбор.
4 kuzyara
 
24.06.14
10:08
(3), не очень понял, каким образом настройки выводятся пользователю, если данные в итоге получются одни и теже? Поясните, пожалуйста.
5 kuzyara
 
24.06.14
10:11
и вообще есть какая информация о том, по каким алгоритмам выражения в фигурных скобках превращаются в код запроса?
6 Defender aka LINN
 
24.06.14
10:12
(4) Элементарно, Ватсон. В твоем варианте ты значение характеристики не выведешь никак.
7 kuzyara
 
24.06.14
10:22
(6), окей, можно ведь совместить оба варианта, всё равно выйграем по скорости, верно?
8 Defender aka LINN
 
24.06.14
10:23
(7) Совмещай, кто не дает. Механизм характеристик - универсальный, через это - не самый оптимальный.
9 kuzyara
 
24.06.14
10:25
(8), так как совместить то??
как сделать так, чтобы если пользователь не выбрал характеристику - то не было бы условия в виртуальной таблице?
10 Cube
 
24.06.14
10:39
(9) Если утрировано, то так:

ВЫБРАТЬ
    ПартииНоменклатурыОстаткиИОбороты.Склад КАК Склад,
    ПартииНоменклатурыОстаткиИОбороты.Период КАК Период,
    ПартииНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток,
    ПартииНоменклатурыОстаткиИОбороты.СтоимостьКонечныйОстаток
ИЗ
    РегистрНакопления.ПартииНоменклатуры.ОстаткиИОбороты(
            &д1,
            &д2,
            День,
            ,
            (&П4 = ЗНАЧЕНИЕ(ТутУкажешьПустоеЗначениеПараметра) ИЛИ Номенклатура В
                    (ВЫБРАТЬ
                        тном.Номенклатура
                    ИЗ
                        тном)
                И склад = &склад) КАК ПартииНоменклатурыОстаткиИОбороты
11 Cube
 
24.06.14
10:39
(10) И закрывающую скобочку сам поставишь))
12 acsent
 
24.06.14
10:49
2 вариант быстрее?? Ты про индексы хоть раз слышал?????
13 acsent
 
24.06.14
10:51
попробуй отключить автозаполнение СКД и указать номенклатуру внутри ВТ
14 kuzyara
 
24.06.14
11:05
Нифига. Вот такой запрос:

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

ИНДЕКСИРОВАТЬ ПО
    Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПартииНоменклатурыОстаткиИОбороты.Склад КАК Склад,
    ПартииНоменклатурыОстаткиИОбороты.Номенклатура КАК Номенклатура,
    ПартииНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток,
    ПартииНоменклатурыОстаткиИОбороты.СтоимостьКонечныйОстаток
{ВЫБРАТЬ
    Склад.*,
    Номенклатура.*}
ИЗ
    РегистрНакопления.ПартииНоменклатуры.ОстаткиИОбороты({(&d1)}, {(&d2)}, День, , {(Номенклатура В
                (ВЫБРАТЬ
                    тном.Номенклатура
                ИЗ
                    тном)) КАК Номенклатура}) КАК ПартииНоменклатурыОстаткиИОбороты
{ХАРАКТЕРИСТИКИ
    ТИП(Справочник.Номенклатура)
    ВИДЫХАРАКТЕРИСТИК (ВЫБРАТЬ
            СвойстваОбъектов.Ссылка,
            СвойстваОбъектов.Наименование + " (св-во)" КАК Наименование,
            СвойстваОбъектов.ТипЗначения
        ИЗ
            ПланВидовХарактеристик.СвойстваОбъектов КАК СвойстваОбъектов
        ГДЕ
            СвойстваОбъектов.НазначениеСвойства.Код = "00101")
    ПОЛЕКЛЮЧА Ссылка
    ПОЛЕИМЕНИ Наименование
    ПОЛЕТИПАЗНАЧЕНИЯ ТипЗначения
    ЗНАЧЕНИЯХАРАКТЕРИСТИК РегистрСведений.ЗначенияСвойствОбъектов
    ПОЛЕОБЪЕКТА Объект
    ПОЛЕВИДА Свойство
    ПОЛЕЗНАЧЕНИЯ Значение }

при указании отбора по характеристике превращается в:

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


Не, мне просто интересно, зачем делать выборку по номенклатуре(ПартииНоменклатурыОстаткиИОбороты.Номенклатура запрашивается в условии левого соединения), если в полях она мне нафиг не сдалась?

Подправьте пожалуйста мой запрос, чтобы он выдавал второй вариант.
15 kuzyara
 
24.06.14
11:08
(12), я слышал что индексы при большом наборе данных позволяют не делать полный перебор для поиска нужного значения.

(13), я указал номенклатуру внутри ВТ, но это не решает проблемы. А отключать автозаполнение вроде необязательно, или я неправ?
16 kuzyara
 
24.06.14
11:15
(10), зачем вы &П4 с пустым значением приплели, если он создается сам при разрешении характеристики? Что вы имели ввиду?
17 kuzyara
 
24.06.14
11:17
И вообще я правильно говорю термин "разрешение", может быть правильнее "компиляция" или "компоновка"?
18 kuzyara
 
24.06.14
11:18
Блин столько вопросов. повторю (5):
"Есть какая информация о том, по каким алгоритмам выражения в фигурных скобках превращаются в код запроса?"
19 Cube
 
24.06.14
13:55
(16) Сначала попробуй, потом удивись, потом приходи.
20 Cube
 
24.06.14
13:56
(19) Или я что-то не понял?
21 kuzyara
 
24.06.14
14:50
(20), дошло наконец-то.

Но, количество этих &П2,&П3,&П4,... прямопорционально количеству отборов, т.е. когда я добавляю ещё один отбор, &П4 становится &П5!