|
Получение номенклатуры по значению свойств | ☑ | ||
---|---|---|---|---|
0
rull9ss
09.07.13
✎
16:32
|
сильно не пинать, только учусь.
есть справочник номенклатуры, в котором 200000+ позиций. у каждой позиции заполнено 15-20 свойств. это примерно 4кк записей в регистре Значения свойств объектов. есть форма ввода свойств, по введенным значениям необходимо проводить отбор номенклатуры ей соответствующей. загвоздка в том что может быть заполнено только одно свойство для отбора, так и все 20 свойств. пока остановился на варианте "динамического" запроса: Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура"; Если ЗначениеЗаполнено(Свойство1) Тогда Запрос.Текст = Запрос.Текст + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов1 | ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов1.Объект | И (&Свойство1 = ЗначенияСвойствОбъектов1.Свойство) | И (&Значение1 = ЗначенияСвойствОбъектов1.Значение)"; КонецЕсли; Если ЗначениеЗаполнено(Свойство2) Тогда Запрос.Текст = Запрос.Текст + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов2 | ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов2.Объект | И (&Свойство2 = ЗначенияСвойствОбъектов2.Свойство) | И (&Значение2 = ЗначенияСвойствОбъектов2.Значение)"; КонецЕсли; и т.д. но выполняется такой запрос весьма длительное время. буду очень благодарен если подскажете другой способ, который будет работать быстрее. |
|||
1
Bober
09.07.13
✎
16:34
|
(0) может на основании скд?
|
|||
2
rull9ss
09.07.13
✎
16:36
|
(1) это внешняя обработка, так что вряд ли.
|
|||
3
Ёпрст
09.07.13
✎
16:38
|
(0) если есть свойство, то
1. выкинуть запрос по справочнику и все нелепые соединения, оставить только один запрос по РС 2. все условия по свойствам прописать в один запрос. |
|||
4
Fragster
гуру
09.07.13
✎
16:38
|
типа так:
ВЫБРАТЬ Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ ЛОЖЬ ОБЪЕДИНИТЬ ВЫБРАТЬ РАЗЛИЧНЫЕ ЗначенияАтрибутовОбъектов.Объект ИЗ РегистрСведений.ЗначенияАтрибутовОбъектов КАК ЗначенияАтрибутовОбъектов ГДЕ ЗначенияАтрибутовОбъектов.Объект ССЫЛКА Справочник.Номенклатура И ЗначенияАтрибутовОбъектов.Атрибут = &Атрибут1 И ЗначенияАтрибутовОбъектов.Значение = &Значение1 ОБЪЕДИНИТЬ ВЫБРАТЬ РАЗЛИЧНЫЕ ЗначенияАтрибутовОбъектов.Объект ИЗ РегистрСведений.ЗначенияАтрибутовОбъектов КАК ЗначенияАтрибутовОбъектов ГДЕ ЗначенияАтрибутовОбъектов.Объект ССЫЛКА Справочник.Номенклатура И ЗначенияАтрибутовОбъектов.Атрибут = &Атрибут2 И ЗначенияАтрибутовОбъектов.Значение = &Значение2 |
|||
5
Ёпрст
09.07.13
✎
16:38
|
*в одно условие
|
|||
6
Fragster
гуру
09.07.13
✎
16:39
|
а, там пересечение, а не ИЛИ...
|
|||
7
Bober
09.07.13
✎
16:39
|
(4) зачем первый запрос? и почему во всех остальных поле Объект не в выразить?
|
|||
8
Ёпрст
09.07.13
✎
16:40
|
(7) как зачем ? слишком быстро выполняется, надо притормозить
|
|||
9
Fragster
гуру
09.07.13
✎
16:41
|
тогда как-то так:
ВЫБРАТЬ ТЗ.Атрибут, ТЗ.Значение ПОМЕСТИТЬ Отбор ИЗ &ТЗ КАК ТЗ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗначенияАтрибутовОбъектов.Объект ИЗ Отбор КАК Отбор ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияАтрибутовОбъектов КАК ЗначенияАтрибутовОбъектов ПО Отбор.Атрибут = ЗначенияАтрибутовОбъектов.Атрибут И Отбор.Значение = ЗначенияАтрибутовОбъектов.Значение СГРУППИРОВАТЬ ПО ЗначенияАтрибутовОбъектов.Объект ИМЕЮЩИЕ СУММА(1) = &КоличествоСтрокВТЗ |
|||
10
Bober
09.07.13
✎
16:41
|
(2) а что мешает во внеш обработке использовать СКД? и выводить в форму настройку отбора СКД, потом программно получить из СКД ТЗ с результатом.
а в настройке СКД, хочешь условия по И, хочешь по ИЛИ. |
|||
11
Bober
09.07.13
✎
16:42
|
(9) маниакально не хочешь использовать ВЫРАЗИТЬ
|
|||
12
Fragster
гуру
09.07.13
✎
16:42
|
(7) чтобы подзапросов можно было произвольное количество в цикле. можно, конечно, по другому сделать...
(8) он не тормозит |
|||
13
Fragster
гуру
09.07.13
✎
16:42
|
(11) а навига тут выразить?
|
|||
14
acsent
09.07.13
✎
16:43
|
(0) файловая версия?
|
|||
15
rull9ss
09.07.13
✎
16:44
|
(14) нет
|
|||
16
Bober
09.07.13
✎
16:44
|
(13) чтобы не было проблем дальше
|
|||
17
acsent
09.07.13
✎
16:44
|
(4) Хрень, в индекс не попадаешь
|
|||
18
Bober
09.07.13
✎
16:45
|
Самое правильно отдать все на откуп СКД, пусть она дописывает запрос по отбору, чем городить десятки строк на тоже самое
|
|||
19
Ёпрст
09.07.13
✎
16:45
|
(9) и нафига это всё ?
Когда достаточно для задачи - один запрос к РС с условиями. |
|||
20
acsent
09.07.13
✎
16:45
|
если (0) то поставь индекс на поле ""свойство
|
|||
21
acsent
09.07.13
✎
16:46
|
(20) если (0) долго ...
|
|||
22
Bober
09.07.13
✎
16:46
|
(4) (9) почему не делать программно как платформа делает, все левыми соединениями?
|
|||
23
acsent
09.07.13
✎
16:46
|
и (4)
|
|||
24
acsent
09.07.13
✎
16:46
|
(22) так он так и делает в (0)
|
|||
25
Fragster
гуру
09.07.13
✎
16:46
|
(22) они сильно медленнее
|
|||
26
Bober
09.07.13
✎
16:47
|
(19) предлагаешь все сделать через (Свойство, Значение) В (&ТЗ)?
|
|||
27
Fragster
гуру
09.07.13
✎
16:47
|
(19) да тупняк, чо. домой пора.
|
|||
28
acsent
09.07.13
✎
16:48
|
(20) даже не на свойство лучше, а на значение
|
|||
29
rull9ss
09.07.13
✎
16:49
|
(19) а как ты предлагаешь?
|
|||
30
Bober
09.07.13
✎
16:49
|
(28) а пофиг, там все равно индесов нет
|
|||
31
Ёпрст
09.07.13
✎
16:57
|
(29) один запрос на РС.. + условия, усё.
:) |
|||
32
rull9ss
09.07.13
✎
17:03
|
(31)
пример можешь привести? а то что-то под конец дня плохо думается |
|||
33
acsent
09.07.13
✎
17:04
|
(30) так я и предлагаю сделать
|
|||
34
Ахиллес
09.07.13
✎
17:06
|
Вместо "=" в условии должно быть "В" тогда пустые отборы тоже нормально отрабатывать будут.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |