|
|
|
Отбор в запросе по виду документа (быстродействие) | ☑ | ||
|---|---|---|---|---|
|
0
Марсель
20.04.11
✎
18:25
|
Задача.
Требуется выбрать записи из регистра с отбором по виду регистратора. Возможны два пути (как минимум): 1. ВЫБОР КОГДА Рег.Регистратор ССЫЛКА Документ.Док1 ТОГДА ИСТИНА КОГДА Рег.Регистратор ССЫЛКА Документ.Док2 ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ 2. ВЫБОР ТИПЗНАЧЕНИЯ(Рег.Регистратор) КОГДА ТИП(Документ.Док1) ТОГДА ИСТИНА КОГДА ТИП(Документ.Док2) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ Вопрос: Какой подход эффективнее (Записей в регистре достаточно много) Т.е. какое условие будет отрабатывать быстрее? Может есть еще какой-нибудь подход для подобных задач? Буду благодарен за подсказку/наводку. |
|||
|
1
PR
20.04.11
✎
18:28
|
ССЫЛКА
|
|||
|
2
Марсель
20.04.11
✎
18:34
|
(1) Спасибо.
Еще такой вопрос мучает. Есть ли возможность отбирать по переданному списку видов документов. Думал сработает: ТИПЗНАЧЕНИЯ(Рег.Регистратор) В (&СписокНужныхТипов) но оказывается так синтаксическая ошибка нельзя сравнивать значения разных типов. Это, конечно, не принципиально, но выглядело бы аккуратней, тем более если нужных типов n-ое количество. ? |
|||
|
3
Ахиллес
20.04.11
✎
18:38
|
Конфа какая? Иногда по виду операции удобно отбирать, если есть такой реквизит
|
|||
|
4
Марсель
20.04.11
✎
18:46
|
(3) Вопрос не в конкретной реализации (структуре регистра или т.п.)
а в принципиальной возможности отобрать вид документа через переданный список требуемых видов документов. :) И если таковой возможности нет, то в быстродействии обычных способов для данной задачи(ССЫЛКА; ТИП И ТИПЗНАЧЕНИЯ) |
|||
|
5
acsent
20.04.11
✎
18:47
|
(0) Конструкции превращаются в одинаковый запрос t-sql
|
|||
|
6
acsent
20.04.11
✎
18:48
|
лучше через ИЛИ. как минимум более читабельно
|
|||
|
7
Марсель
20.04.11
✎
18:53
|
(5) О! Вот это уже интереснее. И аргументирование ;)
(6) Мне показался более читабельным второй вариант (через Тип), а конструкция через или показалась более громоздкой и неоднозначной (в плане того что, через или мы можем связать разные условия, а в варианте с ВЫБОР сразу видно что за условие ВЫБОР ТИПЗНАЧЕНИЯ(Рег.Регистратор) но это мне так кажется |
|||
|
8
Ахиллес
20.04.11
✎
18:54
|
(4) Просто ты зациклился на виде документа. Для переданного списка видов документов самое оно использовать вид операции. Реквизит широко распространен, если во всех документах он есть, то удобно его использовать, уж по крайней мере выглядит приличнее, чем рисовать лестницы из КОГДА ТОГДА
|
|||
|
9
Марсель
20.04.11
✎
19:00
|
(8) Я не зациклился :) Просто задача именно такая... по виду документа, это раз.
Ты предлагаешь сделать отбор по Рег.Регистратор.ВидОперации? Если да, то в в теме есть приписка (быстродействие)... а такой вариант приведет к целой куче ненужных ЛЕВЫХ СОЕДИНЕНИЙ в запросе к базе. Так что не вариант. Плюс, возможно такой реквизит есть в большинстве документов, но не во всех. Нужен более универсальный подход. |
|||
|
10
Fragster
гуру
20.04.11
✎
19:06
|
красивее всего ТИПЗНАЧЕНИЯ(Рег.Регистратор) В (ТИП(Документ.Док1), ТИП(Документ.Док2)), ну, конечно, если сраобтает
|
|||
|
11
Марсель
20.04.11
✎
19:12
|
(10)
Еще красивее ТИПЗНАЧЕНИЯ(Рег.Регистратор) В (&СписокТипов) :) Но как я написал в (2) не работает. |
|||
|
12
Fragster
гуру
20.04.11
✎
19:15
|
(11) ты не путай (2) и (10)
|
|||
|
13
Fragster
гуру
20.04.11
✎
19:16
|
кстати, я предпочитаю меньше параметров в запросах в замен предопределенных значений
|
|||
|
14
Марсель
20.04.11
✎
19:23
|
(12) Я вроде и не путаю, смысл и результат конструкций один - получаем конструкцию языка запросов - СПИСОК.
Но в любом случае я проверил оба варианта, результат один - ERROR :) (13) Я предпочитаю больше параметров (зачем их получать в запросе, если можно передать готовое значение) И в догонку тогда такой вопрос к знатокам: Что более быстродейственно (например при отборе): 1. Док.Рек1 = ЗНАЧЕНИЕ(Перечисления.ПРЧ1.ИмяПредопределенного) 2. Док.Рек1 = &ПереданныйПараметр |
|||
|
15
Марсель
20.04.11
✎
23:17
|
(0)
Печалька :( Второй вариант оказался нерабочим... подозрения на баг платформы. выдается ошибка: Ошибка SDBL: Ожидается END. (pos=89) Но если его привести к документированному виду: ВЫБОР КОГДА ТИПЗНАЧЕНИЯ(рег.регистратор) = ТИП(Документ.док1) и т.д. тогда все работает... Т.е. как обычный switch ... case почему-то не стал работать :( |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |