Имя: Пароль:
1C
1С v8
Вопрос по параметрам виртуальных таблиц
,
0 Kain_wrath
 
14.11.15
11:59
Есть пакетный запрос, в первом пакете я получаю из справочника номенклатура список номенклатуры по определенному отбору, затем помещаю этот список во временную таблицу, во втором пакете я делаю соединение этой временной таблицы с виртуальным РН (остатки номенклатуры) с типом остатки, есть ли смысл добавлять эту временную таблицу так же в параметры виртуальной таблицы?
1 ДенисЧ
 
14.11.15
12:07
Шта?
Ты бы код показал...
А то с твоим описанием ты составишь серьёзную конкуренцию Кличко...
2 Kain_wrath
 
14.11.15
12:10
ВЫБРАТЬ
    ОД_НоменклатураБуфер.Ссылка КАК НоменклатураБуфер,
    ОД_НоменклатураБуфер.ТоварИзОсновнойНоменклатуры КАК Номенклатура
ПОМЕСТИТЬ ВТТ
ИЗ
    Справочник.ОД_НоменклатураБуфер КАК ОД_НоменклатураБуфер
ГДЕ
    НЕ ОД_НоменклатураБуфер.ЭтоГруппа
    И НЕ ОД_НоменклатураБуфер.НеВыгружатьНаСайт
    И ОД_НоменклатураБуфер.Ссылка В ИЕРАРХИИ(&Номенклатура)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТТ.НоменклатураБуфер,
    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ВТ
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(, ) КАК ТоварыНаСкладахОстатки
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТТ КАК ВТТ
        ПО ТоварыНаСкладахОстатки.Номенклатура = ВТТ.Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
        ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
ГДЕ
    ТоварыНаСкладахОстатки.ВНаличииОстаток >= &Остаток
    И ЦеныНоменклатурыСрезПоследних.Цена > 0
3 wertyu
 
14.11.15
12:15
условия на номенклатуру в параметры регистра, временная таблица нафиг не нужна
4 DexterMorgan
 
14.11.15
13:20
(3) В данном случае +1. В параметры вирт таблицы добавить отбор нужно, а соединение с вирт таблицей остатков имеет смысл только если оно левое и слева твоя таблица "ВТТ" (смысл в том, что в регистре может не быть записей из ВТТ а они тебе нужны в результате).
5 Kain_wrath
 
14.11.15
13:25
(3) Тут просто небольшой нюанс в том что, РН ТоварыНаСкладахОстатки содержит остатки по справочнику Номенклатура, а ВТТ это справочник ОД_НоменклатураБуфер он связан со справочником Номенкалатура посредством реквизита ТоварИзОсновнойНоменклатуры. Поэтому перекинуть условия номенклатуры в параметры виртуальной таблицы не получиться.
6 Kain_wrath
 
14.11.15
13:29
(4) ну тут соединение внутренее потому что мне нужны записи которые есть в обеих таблицах
7 mistеr
 
14.11.15
13:34
(0) Есть.

(3) Ошибаешься, там другой справочник.
8 Bober
 
14.11.15
13:34
(0) конечно нужно указывать в параметрах вирт таблиц выборки из временной таблицы (остатки и срез последних)
9 Bober
 
14.11.15
13:38
(0) в соединении
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТТ КАК ВТТ
        ПО ТоварыНаСкладахОстатки.Номенклатура = ВТТ.Номенклатура

нет смысла
10 DexterMorgan
 
14.11.15
13:48
(6) Соединение тогда не нужно, достаточно параметра
11 DexterMorgan
 
14.11.15
13:50
а прежде чем соединять со срезом последних, лучше предварительно его поместить в вт
12 DexterMorgan
 
14.11.15
13:51
(11) + https://its.1c.ru/db/metod8dev#content:5842:hdoc:vtable_join

Cоединения с виртуальными таблицами

Рекомендации

Если в запросе используется соединение с виртуальной таблицей языка запросов 1С:Предприятия (например, "РегистрНакопления.Товары.Остатки()") и запрос работает с неудовлетворительной производительностью, то рекомендуется вынести обращение к виртуальной таблице в отдельный запрос с сохранением результатов во временной таблице.

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

Пояснения

Виртуальные таблицы, используемые в языке запросов 1С:Предприятия, могут разворачиваться в подзапросы при трансляции в язык SQL. Это связано с тем, что виртуальная таблица часто (но не всегда) получает данные из нескольких физических таблиц СУБД. Если вы используете соединение с виртуальной таблицей, то на уровне SQL оно может быть в некоторых случаях реализовано, как соединение с подзапросом. В этом случае оптимизатор СУБД может точно так же выбрать неоптимальный план, как при работе с подзапросом, использованным в языке 1С:Предприятия в явном виде.
13 DexterMorgan
 
14.11.15
13:55
(5) Получи в первом пакете номенклатуру, которая у тебя в рн используется и устанавливай параметром
14 Ник второй
 
14.11.15
16:25
(10) А как получить НоменклатураБуфер? рука лицо
15 Ник второй
 
14.11.15
16:25
(9) Глупость не пости больше
16 Ник второй
 
14.11.15
16:26
(11) Далеко не всегда это надо
17 Ник второй
 
14.11.15
16:27
(0) Не обращай внимание на местных , ты сделал практически правильно, можно оставить как есть. Если есть просадка в проиводительности то посмотри профайл
18 DexterMorgan
 
14.11.15
17:16
(14) соединение внутреннее, прочитай (13), рукалицо
(16) конечно не всегда, я привел рекомендацию с итс, где написано специально для таких как ты "и запрос работает с неудовлетворительной производительностью" (с)
(17) вот тут согласен, на некторых местных действительно лучше не обращать внимания
19 Ник второй
 
14.11.15
19:20
(18)

1. И что что внутреннее, ты видимо писатель а не читатель.

НоменклатураБуфер вытаскивается из справочника ОД_НоменклатураБуфер

2. В том то и прикол, что там написаны рекомендации, для не очень далеких спецов. Те кто в теме (1С: Эксперты или те кто думаю) знают, что не все так однозначно

3. вот вот
20 Bober
 
14.11.15
19:59
(15) подлечи голову, тыжрограммист
21 NcSteel
 
14.11.15
23:09
(20) Обоснуй что нет смысла? Лол


Как ты вытащишь поле  ВТТ.НоменклатураБуфер
22 Bober
 
14.11.15
23:34
(0) точно, реализация же через буферный справочник.
хотя тебе тоже нужно голову подлечить.
23 Kain_wrath
 
14.11.15
23:50
Всем спасибо, оскорблять друг друга не стоит, со стороны выглядит некрасиво и глупо
24 Ник второй
 
15.11.15
00:02
(23) +1
Люди не прочитав и не вдумавшись начинают кидать "подсказки"....
25 Bober
 
15.11.15
00:05
(24) убогий, отвечай на себя.
26 Ник второй
 
15.11.15
00:23
(25) Во во, ты убог, действительно.... Не разобравшись в ситуации начинаешь глупости писать... мда...
27 Bober
 
15.11.15
00:29
(26) товарищ, говорить, что в запросах к виртуальным таблицам нормально не указывать отбор по номенклатуре большая глупость. Продолжать сидеть на оффтопных темах форума, программирование и запросы не твое.
28 Ник второй
 
15.11.15
00:42
(27) Если бы ты смотрел профайлер и был бы Экспертом, то с тобой можно было бы обсудить такие вещи, но к сожалению ты такими знаниями не обладаешь.

Например в параметрах виртуальной таблицы писать:
Номернклатура В Иерархии (&ГруппаНоменклатуры) явно не лучшее решение.

так что советую изучить вопрос, он тебе потом может пригодиться.
29 Bober
 
15.11.15
00:49
(0) ух ты какие познания. ну тогда вернись к запросу и посмотри его еще раз, особенно на первый. Подозреваю, что "Не разобравшись в ситуации начинаешь глупости писать... мда..." - это метко ты предвидел свой пост (28).
30 Ник второй
 
15.11.15
00:57
(29) В (9) действительно глупость, так без соединения вытащить поле "НоменклатураБуфер" не получится. Интересно как ты это сделаешь .

Ты явно не разобрался в ситуации, тут соединение обязательно нужно
31 Bober
 
15.11.15
01:05
(17) ты явно не смотрел исходные запросы к субд, иначе бы первым делом указан на отсутствие выборки товаров в параметрах вирт. таблицах и как следствие выгребание всего. Что касаемо (9), то убирание этого соединения вызвало ошибку в выборке, но не проблемы с производительностью. Хотя тебе свою глупость в постах еще долго будет не оценить (17).
PS на всякий случай ты тоже местный (хоть и дурачок).
32 DexterMorgan
 
15.11.15
01:17
(14) так первый пакет для выборки номенлатуры нужен, я не спорю. дальше его можно передать параметром в вирт таблицу остатков,. насчет, что ситуации разными бывают, с этим я тоже не спорю, просто человеку привел рекомендацию (рупасова кстати)  для тс, который явно не эксперт. ты ущербен чувак и раб своего чсв