|
Подскажите по пакетному запросу | ☑ | ||
---|---|---|---|---|
0
palpetrovich
19.07.12
✎
15:50
|
такой вот код:
СписокКонтрагентов = Новый СписокЗначений; Для Каждого ЭлементОформления Из ОформленияСтрок Цикл СписокКонтрагентов.Добавить(ЭлементОформления.ДанныеСтроки.Ссылка); КонецЦикла; Запрос = Новый Запрос(" |ВЫБРАТЬ | КонтактнаяИнформация.Объект |ПОМЕСТИТЬ СписКонтрагентов |ИЗ | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ | КонтактнаяИнформация.Объект В ИЕРАРХИИ (&СписокКонтрагентов) |; |ВЫБРАТЬ | Выразить(КонтактнаяИнформация.Представление КАК Строка(100)) КАК Адрес, | КонтактнаяИнформация.Объект |ПОМЕСТИТЬ ТабАдресов |ИЗ | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ | КонтактнаяИнформация.Вид = &Адрес | И КонтактнаяИнформация.Объект В (ВЫБРАТЬ СписКонтрагентов.Объект | ИЗ СписКонтрагентов КАК СписКонтрагентов) |; |ВЫБРАТЬ | Выразить(КонтактнаяИнформация.Представление КАК Строка(100)) КАК Телефон, | КонтактнаяИнформация.Объект |ПОМЕСТИТЬ ТабТелефонов |ИЗ | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ | КонтактнаяИнформация.Вид = &Телефон | И КонтактнаяИнформация.Объект В (ВЫБРАТЬ СписКонтрагентов.Объект | ИЗ СписКонтрагентов КАК СписКонтрагентов) |; |ВЫБРАТЬ РАЗЛИЧНЫЕ | ТабАдресов.Объект, | ТабАдресов.Адрес, | ТабТелефонов.Телефон |ИЗ | СписКонтрагентов КАК СписКонтрагентов, | ТабАдресов КАК ТабАдресов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТабТелефонов КАК ТабТелефонов | ПО ТабАдресов.Объект = ТабТелефонов.Объект |"); Запрос.УстановитьПараметр("СписокКонтрагентов", СписокКонтрагентов); Запрос.УстановитьПараметр("Телефон", Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента); Запрос.УстановитьПараметр("Адрес", Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента); Получаю плоскую табличку, собственно то что и хочу, но мучает вопрос, а нельзя-ли подЗапросы по Адресу и по Телефону сделать в одном? Вернее сделать-то можно, но у меня при этом табличка "рассламвается", телефон и Адрес получаются в разных строках |
|||
1
H A D G E H O G s
19.07.12
✎
15:51
|
Можно
|
|||
2
H A D G E H O G s
19.07.12
✎
15:51
|
Немного извращенной фантазии
|
|||
3
palpetrovich
19.07.12
✎
15:53
|
(2) я пробовал конструкцию КОГДА, получил не то ...можно маленько указать куда фантазировать?
|
|||
4
H A D G E H O G s
19.07.12
✎
15:54
|
ВЫБРАТЬ
ЗначенияСвойствОбъектов.Объект КАК Номенклатура, МАКСИМУМ(ВЫБОР КОГДА ЗначенияСвойствОбъектов.Свойство = &Емкость ТОГДА ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Значение КАК ЧИСЛО(9, 3)) ИНАЧЕ NULL КОНЕЦ) КАК Емкость, МАКСИМУМ(ВЫБОР КОГДА ЗначенияСвойствОбъектов.Свойство = &Вес ТОГДА ЗначенияСвойствОбъектов.Значение ИНАЧЕ NULL КОНЕЦ) КАК Вес, МАКСИМУМ(ВЫБОР КОГДА ЗначенияСвойствОбъектов.Свойство = &Цвет ТОГДА ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Значение КАК Справочник.Контрагенты) ИНАЧЕ NULL КОНЕЦ) КАК Цвет ПОМЕСТИТЬ ПараметрыНоменклатуры ИЗ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов ГДЕ ЗначенияСвойствОбъектов.Свойство В (&Емкость, &Вес, &Цвет) СГРУППИРОВАТЬ ПО ЗначенияСвойствОбъектов.Объект |
|||
5
palpetrovich
19.07.12
✎
15:54
|
кста, если соединить Адресу и Телефон - быстрее работать будет?
|
|||
6
H A D G E H O G s
19.07.12
✎
15:55
|
(5) Быстрее. Но не критично. Мне (4) нравиться больше.
|
|||
7
H A D G E H O G s
19.07.12
✎
15:56
|
Цвет и
ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Значение КАК Справочник.Контрагенты) не обращайте внимания, это переделывалось на скорую руку. |
|||
8
palpetrovich
19.07.12
✎
16:00
|
(7) я понял, дело в МАКСИМУМ
а как быть если у меня еще КонтактнаяИнформация.Объект? проверять Адрес и Телефон и если оба пустые тогда тоже NULL? |
|||
9
palpetrovich
19.07.12
✎
16:00
|
+8 в смысле
ВЫБРАТЬ МАКСИМУМ(ВЫБОР КОГДА КонтактнаяИнформация.Вид = &Адрес ТОГДА ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(100)) ИНАЧЕ NULL КОНЕЦ) КАК Адрес, МАКСИМУМ(ВЫБОР КОГДА КонтактнаяИнформация.Вид = &Телефон ТОГДА ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(100)) ИНАЧЕ NULL КОНЕЦ) КАК Телефон, КонтактнаяИнформация.Объект ПОМЕСТИТЬ ТабАдресовИтелефонов |
|||
10
H A D G E H O G s
19.07.12
✎
16:02
|
СГРУППИРОВАТЬ ПО
КонтактнаяИнформация.Объект |
|||
11
H A D G E H O G s
19.07.12
✎
16:03
|
Один в один у меня - твой запрос.
|
|||
12
acsent
19.07.12
✎
16:04
|
праильно делать левое соединение по объету типу и виду без доп временных таблиц ибо только тогда в индекс попадается.
а за код как в (4) вообще нужно руки отрубать |
|||
13
Kashemir
19.07.12
✎
16:05
|
Так а где тут пакетные запросы ?
|
|||
14
H A D G E H O G s
19.07.12
✎
16:07
|
(12) Расскажи мне, за что тут руки отрубать.
|
|||
15
acsent
19.07.12
✎
16:08
|
(14) ибо ты вообще не думаешь о производительности запросов, только о корректной выборке
|
|||
16
Aprobator
19.07.12
✎
16:09
|
(13) уже все в пакетах )))
|
|||
17
palpetrovich
19.07.12
✎
16:09
|
(11) да, я недосмотрел ЗначенияСвойствОбъектов.Объект КАК Номенклатура,
(12) ? (13) в (0) не? |
|||
18
H A D G E H O G s
19.07.12
✎
16:10
|
(15) Ну что там с производительностью?
|
|||
19
acsent
19.07.12
✎
16:11
|
(18) ты вообще понимаешь выражение "попасть в индекс"?
|
|||
20
H A D G E H O G s
19.07.12
✎
16:12
|
(19) Ты мне "мясо" давай.
|
|||
21
H A D G E H O G s
19.07.12
✎
16:13
|
(19) Расскажи, как бы сделал ты.
|
|||
22
acsent
19.07.12
✎
16:14
|
ВЫБРАТЬ
КИ_Телефон.Представление, КИ_Адрес.Представление КАК Представление1, Контрагенты.Ссылка ИЗ Справочник.Контрагенты КАК Контрагенты ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КИ_Телефон ПО (КИ_Телефон.Объект = Контрагенты.Ссылка) И (КИ_Телефон.Тип = &Т1) И (КИ_Телефон.Вид = &В1) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КИ_Адрес ПО (КИ_Адрес.Объект = Контрагенты.Ссылка) И (КИ_Адрес.Тип = &Т2) И (КИ_Адрес.Вид = &В2) Причем обязательно соединяться по полю ТИП так как он первый в индексе |
|||
23
palpetrovich
19.07.12
✎
16:16
|
(22) а как-же http://chistov.spb.ru/publ/5-1-0-13 ?
|
|||
24
acsent
19.07.12
✎
16:16
|
(19) собственно ты не один такой, большинство ванцырей не понимают про "попадания в индекс"
|
|||
25
acsent
19.07.12
✎
16:17
|
(23) это он так учит как в (0)? ППЦ
|
|||
26
Широкий
19.07.12
✎
16:19
|
(22) ИМХАЕТсся мне , что раз пошло дело про оптимизацию
то тут ВЫБРАТЬ КИ_Телефон.Представление, КИ_Адрес.Представление КАК Представление1, надо бы типы ограничить |
|||
27
palpetrovich
19.07.12
✎
16:20
|
(25) ну я так понял, на истину не претендую. А что в (0) не так? ...результат есть
|
|||
28
H A D G E H O G s
19.07.12
✎
16:22
|
(22) Все же применительно к моему запросу по свойствам
ЗначенияСвойствОбъектов.Свойство В (&Емкость, &Вес, &Цвет) не будет индекс использовать? |
|||
29
H A D G E H O G s
19.07.12
✎
16:23
|
(22) А твой код на небольшой табличке 2 раза TableScan сделает скорее всего.
|
|||
30
H A D G E H O G s
19.07.12
✎
16:23
|
Хотя че я гадаю, счаст глянем.
|
|||
31
acsent
19.07.12
✎
16:23
|
(28) у тебя поле свойство индексировано? НЕТ
|
|||
32
acsent
19.07.12
✎
16:24
|
ты "убиваешь" даже индекс по объекту, т.к. делаешь временную таблицу
|
|||
33
H A D G E H O G s
19.07.12
✎
16:24
|
(31) Нет. Так что мне на попадание в Индекс плевать.
|
|||
34
H A D G E H O G s
19.07.12
✎
16:26
|
(32) Лучше "убить" индекс и сделать его снова во временной, чем городить адскую кашу потом, в которой захлебнется оптимизатор.
|
|||
35
acsent
19.07.12
✎
16:26
|
(27) читай (15)
|
|||
36
H A D G E H O G s
19.07.12
✎
16:26
|
(34) И последующий программист.
|
|||
37
acsent
19.07.12
✎
16:26
|
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КИ_Адрес
ПО (КИ_Адрес.Объект = Контрагенты.Ссылка) И (КИ_Адрес.Тип = &Т2) И (КИ_Адрес.Вид = &В2) Это адская каша? вот у тебя адская каша и максимум и группировка |
|||
38
acsent
19.07.12
✎
16:27
|
Какой код легче читать? в (0) или (22)?
|
|||
39
H A D G E H O G s
19.07.12
✎
16:28
|
и максимум и группировка - ничего с этом страшного нет.
|
|||
40
acsent
19.07.12
✎
16:28
|
(26) вот эта оптимизация уже от лукавого
|
|||
41
H A D G E H O G s
19.07.12
✎
16:28
|
(38) читать легче (4)
|
|||
42
acsent
19.07.12
✎
16:29
|
(39) ты просто никогда с высоконагруженными системами не работал. на 2х человек в файловой конечно никакой разницы нет
|
|||
43
H A D G E H O G s
19.07.12
✎
16:29
|
(42) Я понял тебя провидец.
|
|||
44
acsent
19.07.12
✎
16:30
|
Хотя ну строится отчет 5 мин да и ладно, но ведь он может строиться всего 5 сек
|
|||
45
palpetrovich
19.07.12
✎
16:38
|
(44) а почему Выборка по спраовчнику, почему не по регистру? Если по регистру - мы-ж сразу отрезаем контрагентов с незаполненной КИ?
|
|||
46
acsent
19.07.12
✎
16:42
|
(45) а их надо отрезать?
|
|||
47
palpetrovich
19.07.12
✎
16:43
|
(46) ну да ...собственно это не отчет, это вывод Адреса и телефона в форму списка справочника
|
|||
48
palpetrovich
19.07.12
✎
16:48
|
+(47) в общем нижевыложенный код дает ne-же табличку что и в (0), не знаю правда пока, какой быстрее
ВЫБРАТЬ РАЗЛИЧНЫЕ Выразить(КИ_Телефон.Представление КАК Строка(100)) КАК КИ_Телефон, Выразить(КИ_Адрес.Представление КАК Строка(100)) КАК КИ_Адрес, Контрагенты.Объект ИЗ РегистрСведений.КонтактнаяИнформация КАК Контрагенты ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КИ_Телефон ПО (КИ_Телефон.Объект = Контрагенты.Объект) И (КИ_Телефон.Тип = &Т1) И (КИ_Телефон.Вид = &В1) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КИ_Адрес ПО (КИ_Адрес.Объект = Контрагенты.Объект) И (КИ_Адрес.Тип = &Т2) И (КИ_Адрес.Вид = &В2) ГДЕ Контрагенты.Объект В ИЕРАРХИИ (&Контрагенты) |
|||
49
palpetrovich
19.07.12
✎
16:52
|
+(48) на небольшом справочнике, замер показал примерно одинаковые значения для (0) и (48): 0.015..0.016
Всем спасибо! |
|||
50
Fragster
гуру
19.07.12
✎
16:53
|
(49) пройдет время, и станет так: http://s006.radikal.ru/i213/1207/b0/688850f4e536.png
|
|||
51
H A D G E H O G s
19.07.12
✎
16:54
|
(49) На небольшом справочнике индексы не используются.
|
|||
52
palpetrovich
19.07.12
✎
16:57
|
(50) не понял
(51) запомню :) |
|||
53
acsent
19.07.12
✎
17:00
|
(48) зачем различные???
|
|||
54
palpetrovich
19.07.12
✎
17:00
|
(52) 120 тысяч в смысле? Не думаю, не тот размах
|
|||
55
Fragster
гуру
19.07.12
✎
17:01
|
(52).1 я к тому, что базы имеют тенденцию к росту. у меня в базе ~120к контрагентов, в регистре "контактная информация" ~1,5м записей
|
|||
56
acsent
19.07.12
✎
17:02
|
(55) можешь замер сделать?
|
|||
57
palpetrovich
19.07.12
✎
17:02
|
(53) без РАЗЛИЧНЫЕ строки повторяются по нескольку раз
|
|||
58
acsent
19.07.12
✎
17:03
|
(57) не может быть. хначит ты параметры неверно установил
|
|||
59
acsent
19.07.12
✎
17:04
|
а понял ты справочник опять заменил на регистр. не стоило
|
|||
60
acsent
19.07.12
✎
17:04
|
лучше писть
НЕ КИ_Адрес.Объект ЕСТЬ NULL ИЛИ НЕ КИ_Телефон.Объект ЕСТЬ NULL |
|||
61
palpetrovich
19.07.12
✎
17:06
|
(60) вместо Выразить?
|
|||
62
H A D G E H O G s
19.07.12
✎
17:06
|
ВЫБРАТЬ
КонтактнаяИнформация.Объект, МАКСИМУМ(ВЫБОР КОГДА КонтактнаяИнформация.Вид = &Адрес ТОГДА ПОДСТРОКА(КонтактнаяИнформация.Представление, 1, 1000) ИНАЧЕ NULL КОНЕЦ) КАК Адрес, МАКСИМУМ(ВЫБОР КОГДА КонтактнаяИнформация.Вид = &Телефон ТОГДА ПОДСТРОКА(КонтактнаяИнформация.Представление, 1, 1000) ИНАЧЕ NULL КОНЕЦ) КАК Поле1 ИЗ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация ГДЕ КонтактнаяИнформация.Вид В(&Виды) СГРУППИРОВАТЬ ПО КонтактнаяИнформация.Объект Юзает IndexSeek. |
|||
63
H A D G E H O G s
19.07.12
✎
17:07
|
Причем сцуко странно юзает
Когда ему явно скажешь with (index(_InfoR14844_ByDims20174_RRR)) |
|||
64
H A D G E H O G s
19.07.12
✎
17:07
|
А так то - TableScan :-)
|
|||
65
acsent
19.07.12
✎
17:08
|
ВЫБРАТЬ
КИ_Телефон.Представление, КИ_Адрес.Представление КАК Представление1, Контрагенты.Ссылка ИЗ Справочник.Контрагенты КАК Контрагенты ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КИ_Телефон ПО (КИ_Телефон.Объект = Контрагенты.Ссылка) И (КИ_Телефон.Тип = &Т1) И (КИ_Телефон.Вид = &В1) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КИ_Адрес ПО (КИ_Адрес.Объект = Контрагенты.Ссылка) И (КИ_Адрес.Тип = &Т2) И (КИ_Адрес.Вид = &В2) ГДЕ НЕ КИ_Адрес.Объект ЕСТЬ NULL ИЛИ НЕ КИ_Телефон.Объект ЕСТЬ NULL |
|||
66
palpetrovich
19.07.12
✎
17:08
|
(65) я понял уже, спасибо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |