Имя: Пароль:
1C
1С v8
Ускорение работы запроса
0 ParinovS
 
22.05.12
22:03
Доброго времени суток!)
Дано: УТ 10.3 , Регистр накопления "ТоварыОрганизаций"
Задача: Выбрать записи, где регистратор: либо "РТиУ" либо "ВозвратТоваровОтПокупателя" с максимальной скоростью.
Знаю, что условие вешать через "ГДЕ" не есть очень хорошо, надо устанавливать отборы в параметрах виртуальной таблицы, но там нет такого поля, как регистратор!
Вопрос: Как ограничить выборку по типу регистратора с максимальной скоростью работы запроса?
1 ParinovS
 
22.05.12
22:12
up)
2 ParinovS
 
22.05.12
22:15
Ну киньте хоть мысль за что зацепиться то? Или делать только через ГДЕ?
3 Asmody
 
22.05.12
22:17
[Задача: Выбрать записи] — какая, в пень, "виртуальная таблица"?
4 GROOVY
 
22.05.12
22:18
(3) Остатки! Это же очевидно!
5 ParinovS
 
22.05.12
22:27
Asmody, поясняю другим языком специально для тебя: Конструктор запроса - > Вкладка "Таблицы и Поля" - > Центральное поле -> Если туда(в центральное поле) перетянуть табличку "РегистрыСведений.ТоварыОрганизаций.Обороты" то в центральном поле, если установить на эту табличку курсор и кликнуть по кнопочке в виде таблички с гаечным ключиком - откроются "Параметры виртуальной таблицы".
6 GROOVY
 
22.05.12
22:31
(5) Записи <> Обороты.
7 GROOVY
 
22.05.12
22:32
Хм... РегистрыСведений и обороты?
8 ZyXEL
 
22.05.12
22:33
(0) огласи список рассматриваемых придуманых тобой вариантов реализации...
9 МихаилМ
 
22.05.12
22:33
(5)
не нужна вирт таб "обороты"

причем здесь сведений когда остатки
10 ParinovS
 
22.05.12
22:36
Сорри))) Хотел сказать "РегистрСведений"
11 ParinovS
 
22.05.12
22:37
фу ты) Вот привязалось то... РЕГИСТР НАКОПЛЕНИЯ!)))
12 ParinovS
 
22.05.12
22:38
Почему никто внимания не обращает на первый пост?
13 DrShad
 
22.05.12
22:39
потому что все твои посты бред
14 ParinovS
 
22.05.12
22:40
DrShad, поясни мне пожалуйста что я бредового спросил?)
15 dangerouscoder
 
22.05.12
22:41
(0) по периоду не отбираем ? а если уже лет 5 работаем будет очень быстро..
16 DrShad
 
22.05.12
22:41
[Знаю, что условие вешать через "ГДЕ" не есть очень хорошо, надо устанавливать отборы в параметрах виртуальной таблицы, но там нет такого поля, как регистратор!
Вопрос: Как ограничить выборку по типу регистратора с максимальной скоростью работы запроса?]
проверить на РТиУ или возврат можно только в ГДЕ
17 GROOVY
 
22.05.12
22:43
Может проще тупо документы тогда уж выбрать из таблиц документов?
18 DrShad
 
22.05.12
22:45
(17) Паша, как ты можешь такое советовать!?
19 МихаилМ
 
22.05.12
22:46
+(17)
я тоже за документы
20 ParinovS
 
22.05.12
22:47
Почему нельзя просто сказать "Других вариантов, как через "ГДЕ" нет", либо "Да, есть такой то вариант", или хотя бы просто сказать, что "можно"(Я сам попробую отыскать) если непонятно - написать, чтобы я точнее изложить проблему! Нет. надо троллить! Издеваться! Я же не прошу за меня все сделать! Мне просто хочется узнать, как лучше сделать.
21 ZyXEL
 
22.05.12
22:47
(20) я вот спросил как еще у тебя варианты... толку 0...
22 DrShad
 
22.05.12
22:47
(20) в (5) ты сам начал, так что сорри
23 experimentator76
 
22.05.12
22:48
дэжавю чоле ?
24 DrShad
 
22.05.12
22:48
+(22) или ты знаком с Asmody лично?
25 experimentator76
 
22.05.12
22:48
это ктото когда то уже оптимизировал
26 GROOVY
 
22.05.12
22:48
(20) Можно, через таблицу обороты. В таблице надо установить периодичность "Регистратор", но тогда ты не записи получишь а именно обороты. И уже осле этого можно отбор сделать на ссылку. Но по скорости ты нифига не выиграешь, а скорее наоборот.
27 GROOVY
 
22.05.12
22:49
(18) Мы же задачу не знаем... Каноны я не нарушаю... ;)
28 DrShad
 
22.05.12
22:50
(27) т.е. запрос к документам кошерно, если задачу не знаешь?
29 GROOVY
 
22.05.12
22:51
(28) Выбрать все непроведенные документы. Кошерно! :)
30 GROOVY
 
22.05.12
22:52
Судя по постам ТС он точно что то через зад пытается сделать...
31 DrShad
 
22.05.12
22:52
(29) ну разве что для этого, но я бы казнил ректально за непроведенные документы в БД
32 DrShad
 
22.05.12
22:53
+(31) я почти угадал :)
33 zak555
 
22.05.12
22:53
(0) запрос к вирутальной таблице оборотов с ukRJ
34 zak555
 
22.05.12
22:53
* гдКО
35 DrShad
 
22.05.12
22:55
(33),(34) че?
36 zak555
 
22.05.12
22:55
(35) там что у регистра нет "вида движения" ?
37 DrShad
 
22.05.12
22:57
(36) а разве расход только по РТиУ или Возврат? а как же списание или еще какая хрень?
38 zak555
 
22.05.12
22:58
(37) код операации тебе о чём-нибудь говорит ?
39 DrShad
 
22.05.12
22:59
(38) сделай отбор по коду операциине в ГДЕ!
40 DrShad
 
22.05.12
22:59
+(39) это реквизит регистра
41 zak555
 
22.05.12
23:01
сделал, дальше что ? =)
42 GROOVY
 
22.05.12
23:02
Сфотографируйся на фоне ковра!
43 zak555
 
22.05.12
23:03
ни у кого нет ковар случаем ?
44 DrShad
 
22.05.12
23:09
(41) скрин в студию
45 zak555
 
22.05.12
23:14
(44) ковара нету (!)
46 ParinovS
 
22.05.12
23:23
Почитал все выше написанное, смирился со своей ничтожностью, а теперь задача(переосмысленный вариант):
Необходимо выбрать "данные" о "Реализации" и "Возврате" товара за определенный период. Я решил, использовать для этой цели "РегистрНакопления.ТоварыОрганизаций", т.к. необходимым полем в выборке "Данных" является "серия номенклатуры". По этой причине я отказался от "РегистрНакопления.Продажи". Первички в день создается очень большое количество. Выборку будут делать за квартал, и скорее всего очень часто. Вопрос стоит в оптимизации скорости выполнения запроса. Как стоит организовать запрос?
47 ILM
 
гуру
22.05.12
23:27
сколько?
48 Feanor
 
22.05.12
23:29
(46) выбирай из физических таблиц, будь быдлокодером, блеа!

З.Ы. без серий совсем не обойтись?
49 ParinovS
 
22.05.12
23:29
что столько?
50 ParinovS
 
22.05.12
23:29
Без серий вообще никак...
51 zak555
 
22.05.12
23:31
(46) распиши подробнее

может своит твои "итоги" в отдельный регистр запихнуть =)
52 Mashinist
 
22.05.12
23:31
"Выборку будут делать за квартал, и скорее всего очень часто."
Может стоит подумать на тему агрегатирования?
53 ILM
 
гуру
22.05.12
23:32
денег сколько?
54 ILM
 
гуру
22.05.12
23:34
Нужен товар который возвращали за квартал. Хочешь показать признак в списке товара. Поэтому выбирать будешь часто. Так?
55 ParinovS
 
22.05.12
23:35
Забыл сказать конфигурацию трогать нельзя, суть в том, что это надо для отчета, отчет просто будут делать за квартал, "переформировывать" будут часто (ну а что поделаешь - будут и все, ответа на вопрос "Почему?" - я не знаю)
56 МихаилМ
 
22.05.12
23:36
очент большое колво первички это сколько 100...1000...10 000 доков день ?

в эксплуатации бд есть главное правило :" подальше положешь - поближе возьмешь"

так что просто создайте покрывающий индекс по полям отбора(либо симитируйте его на РС).

но не забывайте, что для оперативного контура требуется соблюдать правило
размер индексов / размер данных 1/1

либо создайте агрегат и пересчитывайте.

также оптимальность запроса зависит от типа субд, дисковой системы

ниличия индексов.
57 Ksandr
 
22.05.12
23:42
сделать РН + подписку не предлагать?
58 ILM
 
гуру
22.05.12
23:44
Бесплатно, делай сам.
59 Asmody
 
22.05.12
23:45
(20) никто не издевался. исходя из поставленной тобой задачи "выбрать записи регистра", я тебе сказал, что про виртуальные таблицы можно забыть. это если исходить из (0).
а если исходить из (46), то если тебе так нужны серии, рекомендую найти регистр с измерением по сериям, либо создать таковой
60 Asmody
 
22.05.12
23:47
(55) [конфигурацию трогать нельзя] — это миф
61 ParinovS
 
22.05.12
23:50
ну если брать доки реализация и возврат - то около 300 документов в день, для меня это "очень много" :) База работает под СУБД MS SQL. Я так думаю СУБД же как то индексирует свои таблицы? А если сделать все, как я и хочу "РегистрСведений.ТоварыОрганизаций" и отбор через ГДЕ на тип регистратора. При таком исполнении все данные, которые мне нужны я выбираю (база в файловом режиме сейчас - размер 9.6 Гб, данные за месяц выбираются порядка 15-20 секунд, бывает минуту думает, проц i3, 3 ГБ ОЗУ). Данные нужно выбирать за прошлые периоды. конфу трогать нельзя - это требование :) На скуле думаю быстрее будет, но вот мне интересно, исходя из опыта: Насколько это кривой запрос?
62 МихаилМ
 
22.05.12
23:50
(55)

 можно держать ВременнуюТаблицу и её обновлять ориентируясь на ГП
63 МихаилМ
 
22.05.12
23:55
(61)
бессмысленно сравнивать скорость запроса в файловом и серверном варианте.

ну похвастайтесь текстом запроса.

Смешно, что Вас еще уупрашивать нужно.
64 МихаилМ
 
22.05.12
23:59
+(63)
запрос можно считать "кривым" если в нем есть fullscan к таблице больше 10 000 записей.
в остальных случаях запрос не "кривой"
65 ParinovS
 
23.05.12
00:05
ну вот что-то вроде этого выходит. Нужно еще конечно кучу полей. но их я буду через регистратор выдергивать.

ВЫБРАТЬ
                 ТоварыОрганизацийОбороты.Организация,
                         ТоварыОрганизацийОбороты.Номенклатура,
                         ТоварыОрганизацийОбороты.ХарактеристикаНоменклатуры,
                         ТоварыОрганизацийОбороты.СерияНоменклатуры,
                         ТоварыОрганизацийОбороты.КоличествоОборот,
                         ТоварыОрганизацийОбороты.КоличествоПриход,
                         ТоварыОрганизацийОбороты.КоличествоРасход,
                         ТоварыОрганизацийОбороты.Номенклатура.ВидАлкоголя,
                         ТоварыОрганизацийОбороты.Номенклатура.ВидАлкоголя.Код,
                         ТоварыОрганизацийОбороты.Регистратор
                      ИЗ
                         РегистрНакопления.ТоварыОрганизаций.Обороты(
                                 &НачалоПериода,
                                 &КонецПериода,
                                 Регистратор,
                                 Организация = &Организация
                                     И (НЕ Номенклатура.ВидАлкоголя.Ссылка ЕСТЬ NULL )) КАК ТоварыОрганизацийОбороты
                      ГДЕ
                         (ТоварыОрганизацийОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
                                 ИЛИ ТоварыОрганизацийОбороты.Регистратор ССЫЛКА Документ.ВозвратТоваровОтПокупателя)
66 DrShad
 
23.05.12
00:09
очень странный запрос...
67 DrShad
 
23.05.12
00:10
+(66) сам по себе никакой полезной инфы не несет
68 DrShad
 
23.05.12
00:10
может скажешь нормально что и для чего нужно выбрать и в какой конфе?
69 ParinovS
 
23.05.12
00:13
(67) почему? Буду делать группировки и по контрагенту смотреть, сколько купил и сколько вернул. Ну и плюс нужны всякие данные о производителе, серии номенклатуры, о контрагенте. Конфа УТ 10.3.
70 DrShad
 
23.05.12
00:14
может это все таки разные варианты отчета, а не один?
71 ParinovS
 
23.05.12
00:16
(70), ну я говорю об одном варианте :) Так что? какой вердикт по быстродействию запроса?)
72 МихаилМ
 
23.05.12
00:20
зря Вы пытаетесь додумывать, что важно -  что не важно

приведите весь текст запроса.

тогда  будет предмет для обсуждения.


пока вижу лишний left join в  НЕ Номенклатура.ВидАлкоголя.Ссылка ЕСТЬ NULL

опять же может оказаться эфективным разыменование ссылок в запросе т.е.  добалвение представления.  
 
а это оптимизация уже зависит от версии 1с82

(< 14 или >= )


повторяю пока нет работающего запроса - не повода для отимизации.
73 DrShad
 
23.05.12
00:20
да тебе уже давно сказали, что кроме как в ГДЕ нигде не проверишь на ССЫЛКА
74 МихаилМ
 
23.05.12
00:22
(73)

можно еще с таблицами докуметов соединять.
собственоо так в 80 делали.
75 ParinovS
 
23.05.12
00:24
Ладно, SrShad, МихаилМ, спасибо за консультацию. Буду допиливать запрос. Тестировать. Если скорость работы устроит - оставлю, не устроит - буду дальше думать.
76 DrShad
 
23.05.12
00:27
(75) так меня еще не обзывали :)
77 ParinovS
 
23.05.12
00:30
(76), ночь на дворе) А букавки "D" и "S" рядышком ) Сорри))
78 timurhv
 
23.05.12
00:53
(65) У тебя в запросе тормозить больше будет вот это:
"ТоварыОрганизацийОбороты.Номенклатура.ВидАлкоголя.Код", а не то что ты хочешь оптимизировать
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн