Имя: Пароль:
1C
1С v8
Что быстрее будет работать в Запросе?
0 News
 
10.04.12
17:28
Доброго времени суток. Подскажите пжл, кто хорошо знает запросы. Что будет быстрее работать с большими объемами данными.
1. Запрос через левое соединение с Регистром накопления и справочником Номенклатура контрагент таб часть Товар?

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

2. Или дополнительное объединение Справочника номенклатура Контрагентов таб. часть Товар с таблицей справочника Номенклатура, где будут отсекаться задвоенные позиции номенлкатуры

ВЫБРАТЬ
   НоменклатураКонтрагентаТовар.Номенклатура,
   РегистрНакопления1ОстаткиИОбороты.КоличествоПриход,
   РегистрНакопления1ОстаткиИОбороты.КоличествоРасход,
   РегистрНакопления1ОстаткиИОбороты.КоличествоКонечныйОстаток,
   Номенклатура.Ссылка
ИЗ
   Справочник.Номенклатура КАК Номенклатура
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.НоменклатураКонтрагента.Товар КАК НоменклатураКонтрагентаТовар
       ПО Номенклатура.Ссылка = НоменклатураКонтрагентаТовар.Номенклатура
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РегистрНакопления1.ОстаткиИОбороты КАК РегистрНакопления1ОстаткиИОбороты
       ПО Номенклатура.Ссылка = РегистрНакопления1ОстаткиИОбороты.Товар
1 News
 
10.04.12
17:29
запрос будет в Компоновке использоваться
2 х86
 
10.04.12
17:30
(0)джойны поттупливают
объединить юзай
3 х86
 
10.04.12
17:30
(1)а большой объем данных это сколько в записях?
4 acsent
 
10.04.12
17:31
(2) это если в индекс не попадаешь
5 acsent
 
10.04.12
17:31
второй вариант вообще бессмысленный
6 News
 
10.04.12
17:31
(3) десятки тысяч
7 acsent
 
10.04.12
17:32
лучше возьми отдельно остатки и отдельно обороты
8 Deon
 
10.04.12
17:32
(5) Он каким-то образом дубли отсекать должен
9 acsent
 
10.04.12
17:33
нужно использовать ключевое слова "ОТСЕКАТЬ"
10 х86
 
10.04.12
17:33
(6)но меньше сотни тысяч?
11 News
 
10.04.12
17:35
(8) в таб. часте Товар в справочнике Контрагенты могут по разным контрагентам совпадать позиции товара и получается в первом варианте может один и тот же товар соединяться с таблицей регистра несколько раз..
12 News
 
10.04.12
17:36
(10) возможно
13 Humandra
 
10.04.12
17:36
(5) +1, бессмысленный лишний джойн, а вовсе не объединение, как сказано в (0). Не путайте union и join (объединить и соединить)
14 Humandra
 
10.04.12
17:37
(11) Или вы забыли нам показать еще и часть, где описаны дополнительные условия отбора, или вы сильно не правы :)
15 News
 
10.04.12
17:38
(13) мне сказали что второй вариант в (0) предпочительнее чем первый по причине в (11)
16 Deon
 
10.04.12
17:39
(15) На кол посади того, кто сказал
17 Humandra
 
10.04.12
17:39
(16) + много раз. Или покажите полный запрос.
18 Deon
 
10.04.12
17:39
Кстати, господа, а в этих запросах табличка ОстаткиИОбороты будет строиться по вообще всем записям регистра?
19 News
 
10.04.12
17:42
(14) это запрос в компоновке, запрос весь я не привел, а привел только то, что мне не совсем понятно, а именно почему (2) будет работать быстрее при больших объемах данных, ведь по сути я же соединяю еще дополнительную таблицу внутренним соединением
20 azernot
 
10.04.12
17:44
ВЫБРАТЬ
   РегистрНакопления1ОстаткиИОбороты.Товар,
   РегистрНакопления1ОстаткиИОбороты.КоличествоПриход,
   РегистрНакопления1ОстаткиИОбороты.КоличествоРасход,
   РегистрНакопления1ОстаткиИОбороты.КоличествоКонечныйОстаток
ИЗ
 РегистрНакопления.РегистрНакопления1.ОстаткиИОбороты(,,,Товар в (Выбрать различные НоменклатураКонтрагентаТовар.Номенклатура  из Справочник.НоменклатураКонтрагента.Товар  как НоменклатураКонтрагентаТовар)) КАК РегистрНакопления1ОстаткиИОбороты
21 Humandra
 
10.04.12
17:44
(19) Покажите все же полный запрос, от этого многое меняется. Возможно, что условия отбора выполняются по таблице Номенклатуры, тогда джойн уместен может быть. Или еще что.
22 Deon
 
10.04.12
17:45
(20) Значит в (18) все-таки по всем записям.
23 News
 
10.04.12
17:46
(21) немного соврал, вот так:
ВЫБРАТЬ
   табНоменклатура.Ссылка КАК Номенклатура,
   РегистрНакопления1ОстаткиИОбороты.КоличествоПриход,
   РегистрНакопления1ОстаткиИОбороты.КоличествоРасход,
   РегистрНакопления1ОстаткиИОбороты.КоличествоКонечныйОстаток,
   табНоменклатура.Ссылка
ИЗ
   Справочник.Номенклатура КАК табНоменклатура
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.НоменклатураКонтрагента.Товар КАК НоменклатураКонтрагентаТовар
       ПО табНоменклатура.Ссылка = НоменклатураКонтрагентаТовар.Номенклатура
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РегистрНакопления1.ОстаткиИОбороты КАК РегистрНакопления1ОстаткиИОбороты
       ПО табНоменклатура.Ссылка = РегистрНакопления1ОстаткиИОбороты.Товар
24 Deon
 
10.04.12
17:47
А чего изменилось-то?
25 sergeante
 
10.04.12
17:48
(18) (22) а як жешь, по всем записям вестимо. ПВТ ж нет
26 News
 
10.04.12
17:48
номенклатура не из справочника Контаргенты во втором случае, а из самого справочника Номенклатура
27 Humandra
 
10.04.12
17:48
(23) В таком варианте написания я не вижу ни малейшего смысла в запросе
28 News
 
10.04.12
17:51
(20) а так будет быстрее работать чем через соединение с самое таблицей?
29 Deon
 
10.04.12
17:52
Кстати, а я правильно понимаю, что в принципе это:
СОЕДИНЕНИЕ РегистрНакопления.РегистрНакопления1.ОстаткиИОбороты КАК РегистрНакопления1ОстаткиИОбороты
       ПО табНоменклатура.Ссылка = РегистрНакопления1ОстаткиИОбороты.Товар
работает быстрее, чем это:
СОЕДИНЕНИЕ РегистрНакопления.РегистрНакопления1.ОстаткиИОбороты КАК РегистрНакопления1ОстаткиИОбороты
       ПО НоменклатураКонтрагентаТовар.Номенклатура = РегистрНакопления1ОстаткиИОбороты.Товар
благодаря тому, что НоменклатураКонтрагентаТовар.Номенклатура не индексируется.
30 azernot
 
10.04.12
17:52
+(20) Точнее (если нужна вся номенклатура из справочника номенклатыр контрагентов, даже не имевшая оборотов)

ВЫБРАТЬ РАЗЛИЧНЫЕ
   Номенклатура.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ НоменклатураКонтрагентов
ИЗ
   Справочник.НоменклатураКонтрагентов.Товар КАК Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   НоменклатураКонтрагентов.Номенклатура,
   ЕСТЬNULL(РегистрНакопления1.КоличествоПриход, 0) КАК Приход,
   ЕСТЬNULL(РегистрНакопления1.КоличествоРасход, 0) КАК Расход,
   ЕСТЬNULL(РегистрНакопления1.КоличествоКонечныйОстаток, 0) КАК Остаток
ИЗ
   НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РегистрНакопления1.ОстаткиИОбороты(
               ,
               ,
               ,
               ,
               Номенклатура В
                   (ВЫБРАТЬ
                       НоменклатураКонтрагентов.Номенклатура
                   ИЗ
                       НоменклатураКонтрагентов)) КАК РегистрНакопления1
       ПО НоменклатураКонтрагентов.Номенклатура = РегистрНакопления1.Номенклатура
31 News
 
10.04.12
17:54
(30) а мне еще нужна будет ссылка на самого контрагента из этого справочника, по нему будет отбор в компоновке, если не будет отбора то по всей номенклатуре контрагентов
32 azernot
 
10.04.12
17:56
(31) Ну да ради бога, добавляй отбор в первом пакете запроса и в виртуальной таблице регистра накопления по контрагенту.
Суть в том, что при работе с виртуальными таблицами (типа ОстаткиИОбороты) отбюоры нужно ставить в параметрах ВТ, а не сверху.
33 Humandra
 
10.04.12
17:57
(31) вооот. Говорят же - всю задачу озвучь, что надо получить, с какими отборами. В идеале еще и  - по каком полям существуют или есть возможность построить индексы.
От всего этого запрос сильно зависит.

В (30) все правильно пишут. Дело в том, что ОстаткиИОбороты на самом деле - отдельный запрос, по сути, а не таблица.
34 News
 
10.04.12
18:00
(30) спасибо, кажется я понял как мне нужно сделать..да мне нужно по все номенклатуре даже если по ней нету оборотов..
а еще такой вопрос этот запрос будет быстрее работать чем в (0)?
35 News
 
10.04.12
18:03
(33) спасибо)
36 Humandra
 
10.04.12
18:10
(30) конечно лучше чем (0), но если при этом у вас так и не будет никаких отборов, то это не спасет отца русской демократии. Вам действительно нужны данные без отбора по периоду, контрагенту итп?
37 Humandra
 
10.04.12
18:11
ИМХО, СКД - зло. Она позволяет пользователям задавать такие вот запросы, и вешать сервер.
38 News
 
10.04.12
18:14
(36) будут отборы по контрагенту и периоду
39 azernot
 
10.04.12
18:15
(34) Безусловно.
(37) Не надо грязи. Зло не СКД, а программисты. Отборы никто не отменял. их нет в (0) поэтому их нет в (30).
40 News
 
10.04.12
18:16
спасибо всем
41 acsent
 
10.04.12
18:17
(37) не скд зло, а автозаполнение праметров в скд - зло
42 Humandra
 
10.04.12
18:18
(41) :) Тоже верно. Вообще, СКД хорошая штука, но уж больно она странно местами используется...
43 azernot
 
10.04.12
18:19
(41) Лопата - зло. Ею по морде бьют. :)
Основная теорема систематики: Новые системы плодят новые проблемы.