Имя: Пароль:
1C
 
Параметры или отборы в СКД
, ,
0 Droning1C
 
26.02.21
14:11
Добрый день!
Предположим, сформировали мы здоровенный отчет. После формирования был применен отбор. Система заново запросит весь огромный набор данных, а потом применит отбор или отберет записи по уже готовому набору? Если отберет уже по готовому набору, то где он хранится?
1 Droning1C
 
26.02.21
14:11
Извините, если вопрос тупой, то ткните в литературу, пожалуйста, почитаю.
2 ДенисЧ
 
26.02.21
14:13
ЯНХНП.
Куда отбор был применён?
3 Droning1C
 
26.02.21
14:21
(2) пользователем на форме
4 Droning1C
 
26.02.21
14:23
(2) например отчет показывает инфу в разрезе подразделений. в качестве параметры в запрос, формирующий набор данных, подразделение НЕ передается. Т.Е. выводится по кнопке сформировать весь набор данных. Набор данных вывелся. Пользователь ставит отбор по подразделению. Система заново запросит весь огромный набор данных, а потом применит отбор или отберет записи по уже готовому набору? Если отберет уже по готовому набору, то где он хранится?
5 vicof
 
26.02.21
14:24
Заново
6 Droning1C
 
26.02.21
14:25
(5) Если заново, то в чем тогда принципиальное отличие параметров запроса от отборов?
7 Droning1C
 
26.02.21
14:26
ну разве что периоды и параметры виртуальных таблиц обязательно в параметры запроса надо пихать. а по остальным в чем разница?
8 Droning1C
 
26.02.21
14:33
параметр применится раньше, отбор применится позже. Только в этом?
9 Kassern
 
26.02.21
14:35
(6) параметр запроса влияет на формирование итоговой таблицы запроса, а отбор на форме работает с уже итоговой таблицей. Получается если ты берешь взаиморасчеты по 60тыс клиентов и потом отбором на форме отбриваешь только РогаИКопыта, то будет одно время формирования отчета, а если ты параметром укажешь в запросе что выбирать только клиентов из таблицы где Партнер= РогаИКопыта, то будет совсем другое время формирование отчета.
10 ДенисЧ
 
26.02.21
14:35
(9) Ну не гони...
11 Kassern
 
26.02.21
14:36
(10) хочешь сказать, что время выполнения отчета будет одинаковое?
12 Droning1C
 
26.02.21
14:38
(9) тогда почему во всех типовых разрабы предпочитают отборы параметрам?
13 ДенисЧ
 
26.02.21
14:38
(11) Зависит от отбора. Если ты берёшь примитивный запрос к остатку и склад в параметры, а номенклатуру в отбор - то да. Одинаковое.
Достаточно посмотреть на результирующий скдшный запрос.
14 ДенисЧ
 
26.02.21
14:38
(12) Отборы более гибко настраиваются.
15 toypaul
 
гуру
26.02.21
14:42
параметр всегда есть в запрос
отбор не всегда. но часто
16 toypaul
 
гуру
26.02.21
14:43
(12) параметр поскольку он всегда в запросе (хотя есть вариант что он может быть оттуда исключен) нужно всегда заполнять. а это не всегда нужно.
17 Classic
 
26.02.21
14:43
(15)
Какой параметр всегда есть в запросе?
18 toypaul
 
гуру
26.02.21
14:44
а еще параметр всегда (100%) будет применен именно там в запросе, где он написан. а отбор не всегда :)
19 toypaul
 
гуру
26.02.21
14:45
(17) любой параметр есть в запросе. поскольку он оттуда взят. если мы ведем речь про те параметры, которые влияют на выборку данных (то есть запрос)
20 Classic
 
26.02.21
14:47
(19)
Не совсем понимаю, что ты пишешь.

Параметр ВСЕГДА ЕСТЬ в запросе
или
Параметр всегда есть В ЗАПРОСЕ
?
21 Kassern
 
26.02.21
14:50
(13) да действительно, сейчас в профайлере глянул, запрос одинаковый на скуль идет, что параметром, что отбором по простой таблице
22 mikecool
 
26.02.21
14:51
(8) нет, отборы могут применяться параллельно с параметрами или вместо них, включая и отборы в параметрах вирт таблицах
23 toypaul
 
гуру
26.02.21
14:51
(20) параметр всегда действует на запрос (если не использованы специальные шаманские методы). а отбор действует только тогда, когда он применен. параметр применен всегда.
24 Droning1C
 
26.02.21
14:51
(13) (21) Хорошо, а в каких случаях выбор параметр или отчет будет принципиально важным?
25 Droning1C
 
26.02.21
14:52
(24) с точки зрения быстродействия
26 Kassern
 
26.02.21
14:54
(21) отобрал клиентов по коду в параметре и по отбору в запросе, скулю же 1ска шлет одно и то же:
exec sp_executesql N'SELECT
T1._IDRRef,
T1._Description,
T1._Fld20495RRef,
T1._IDRRef,
T1._Description
FROM dbo._Reference199 T1
WHERE ((T1._Fld1061 = P1)) AND ((T1._Code = @P2))',N'P1 numeric(10),@P2 nvarchar(4000)',0,N'УТ-00048609'
27 vicof
 
26.02.21
14:57
(26) В виртуальных таблицах поотбирай)
28 Mikeware
 
26.02.21
15:02
(24) когда пользователю отбор настраивать надо... самому. и гибко.
29 Droning1C
 
26.02.21
15:08
(28) а с точки зрения быстродействия?
30 Кир Пластелинин
 
26.02.21
15:09
(23) дык для параметра же можно указать "использование" - "всегда" или "авто", а так же запрет незаполненных значений.
(25) тут нет никаких "принципиально важным", т.к. все в первую очередь упирается в сам текст запроса и логику получения требуемых данных. Параметр (если грубо) - жестко прописан в тексте запроса на предмет "равно, не равно, в иерархии и прочее" например. Отбор же более гибок, т.к. позволяет в пользовательском режиме вертеть им как угодно. К тому же разработчик может явно указать момент применения того или иного отбора. поправьте меня, если не прав
31 vicof
 
26.02.21
15:11
(29) Быстродействие понятие более многогранное, чем выбор отбора и параметра.
32 vicof
 
26.02.21
15:11
(31) *или параметра
33 Droning1C
 
26.02.21
15:13
(32) понятно, что нужен какой-то пример. Но в целом, может ли кто-то привести пример, когда с точки зрения быстродействия выбор между параметром и отбором однозначен?
34 Mikeware
 
26.02.21
15:24
(30) всегда или авто- вроде как зависит от текста запроса
(29) (33) запрос при применении отборов будет обрабатываться СКДшным "препроцессором", который будет применять СКДшное расширение языка запросов в зависимости от отборов.
поэтому на сервер могут уйти и совершенно одинаковые запросы.
35 AceVi
 
26.02.21
15:25
(33) Например выборка за период по временной таблице Хозрасчетный.Остатки()
И например тебе нужен 1 конкретный контр если ты используешь параметр скд и подставишь его в параметры виртуальной таблицы у тебя будет 10 строк
а ели применишь отбор скд - то у тебя будет таблица на 1000 строк, из которой система по указке твоего отбора выберет 10.

Что быстрее сразу получить таблицу на 10 строк или воландаться с таблицей на 1000 смотри сам.
быстродействие у каждого свое.
36 ДенисЧ
 
26.02.21
15:49
(35) чушЬ не пори. Выше уже написано всё.
37 Mikeware
 
26.02.21
15:51
(35) почему? указать в фильтре виртуальной таблицы {(Контрагент.*)}, и получишь то же самое
38 Classic
 
26.02.21
18:04
(29)
Что может быть такого особого в быстродействии?
Запрос все равно будет преобразован в скулевый.
В скуле ничего кроме where и having нет.
39 Mikeware
 
26.02.21
18:09
(38) отбор внутри виртуальной таблицы будет быстрее, чем постобработка
40 Classic
 
26.02.21
18:25
(39)
То понятно, я про то, что как 1С принципиально по-разному отработает отбор или параметр.
41 ДедМорроз
 
26.02.21
18:39
Начнем с того,что в общем случае,при задании параметра или отбора у него ставится галка,и текст запроса трансформируется согласно новым условиям,то есть будет выполняться новый запрос,и скуль решит,есть ли что-то в кеше или нет для его быстрого выполнения.
42 Droning1C
 
27.02.21
10:23
(41) а поподробнее можно? Тоесть все же есть некий кэш, который оптимизирует выполнение повторного запроса, если запрос не модифицирован?
43 ДенисЧ
 
27.02.21
10:39
(42) Есть. Называется SQL Server )))
44 rozer76
 
27.02.21
11:09
(15) ну если снять галку Автозаполнение то отборы тоже можно сделать "всегда" и в нужном месте а то с автозаполнением СКД чудит иногда и вместо отбора в вирт таблице пихает в ГДЕ и тогда печаль...
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс