|
Запрос с точки зрения производительности | ☑ | ||
---|---|---|---|---|
0
Vvvvv
25.07.15
✎
12:35
|
Есть запрос, в нем берутся две таблицы из таблиц значения и они соединяются.
Обратите внимание на связь таблиц, насколько это правильно или не правильно? ВЫБРАТЬ ВЫРАЗИТЬ(ТЗ.Номер КАК СТРОКА(30)) КАК НомерВходящегоДокумента, ТЗ.Дата КАК ДатаВходящегоДокумента, ТЗ.Ссылка ПОМЕСТИТЬ ТЗ ИЗ &ТЗ КАК ТЗ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВЫРАЗИТЬ(ТЗ2.Номер КАК СТРОКА(30)) КАК Номер, ТЗ2.Дата, ТЗ2.Сумма ПОМЕСТИТЬ ТЗ2 ИЗ &ТЗ2 КАК ТЗ2 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТЗ.Ссылка, ТЗ.ДатаВходящегоДокумента, ТЗ2.Дата, ТЗ2.Номер, ТЗ.НомерВходящегоДокумента ИЗ ТЗ КАК ТЗ ЛЕВОЕ СОЕДИНЕНИЕ ТЗ2 КАК ТЗ2 ПО ("%" + ТЗ.НомерВходящегоДокумента ПОДОБНО "%" + ТЗ2.Номер) ОБРАТИТЬ ВНИМАНИЕ на эти строчки: ЛЕВОЕ СОЕДИНЕНИЕ ТЗ2 КАК ТЗ2 ПО ("%" + ТЗ.НомерВходящегоДокумента ПОДОБНО "%" + ТЗ2.Номер) |
|||
1
H A D G E H O G s
25.07.15
✎
12:40
|
пофиг
|
|||
2
ДенисЧ
25.07.15
✎
13:00
|
Если у тебя возникает ПОДОБНО, то о производительности можешь забыть
|
|||
3
Рэйв
25.07.15
✎
13:04
|
Если челловек научился запихивать ТЗ в запрос, странно слышать от него вопросы о соединении:-)
|
|||
4
H A D G E H O G s
25.07.15
✎
13:07
|
(2) Если слушать ДенисЧ - то можно вообще в лес не ходить.
|
|||
5
Vvvvv
25.07.15
✎
13:09
|
(3) у меня с этим
"%" + ТЗ2.Номер не получается найти нужные документы, приходится делать через циклы, но это долго. |
|||
6
ДенисЧ
25.07.15
✎
13:12
|
(4) А что тебе в лесу делать? Там злые волки и денисы. Ничего хорошего от них не жди.
|
|||
7
Рэйв
25.07.15
✎
13:14
|
(6)Ты ошибаешься.Денисы всегда с тобой:-)
|
|||
8
Fragster
гуру
25.07.15
✎
13:16
|
в формировании ТЗ перед помещением их в запрос сделать колонку с "инвертированным" номером
|
|||
9
Vvvvv
25.07.15
✎
14:00
|
(8) я не знаю каким может в дальнейшем оказаться номер?
например: ТЗ2.Номер = "123456789" ТЗ.НомерВходящегоДокумента = "РТ_00123456789" или ТЗ.НомерВходящегоДокумента = "ВС_00123456789" |
|||
10
Fragster
гуру
25.07.15
✎
14:01
|
(9) просто ПОДОБНО %строка работает намного медленнее, чем ПОДОБНО Строка%
|
|||
11
Fragster
гуру
25.07.15
✎
14:02
|
ну и да - в идеале на первоначальном этапе (до помещения в спрос) префиксы отпиливать и приводить к одному формату (про лидирующие нули) и сравнивать через "="
|
|||
12
Vvvvv
25.07.15
✎
14:12
|
(11) в том то и дело, что не могу отпилить префикс, т.к. не знаю какой он и сколько символов должно быть?
|
|||
13
Vvvvv
25.07.15
✎
14:13
|
Попробовал сделать так, весь код:
ни одного сообщения не вышло: ТЗ = новый ТаблицаЗначений; тз.Очистить(); ТЗ.Колонки.Добавить("Номер", новый ОписаниеТипов("Строка"), новый КвалификаторыСтроки(30)); ТЗ.Колонки.Добавить("Дата", новый ОписаниеТипов("Дата")); ТЗ.Колонки.Добавить("Сумма", новый ОписаниеТипов("Число")); ТЗ2 = новый ТаблицаЗначений; тз2.Очистить(); ТЗ2.Колонки.Добавить("Номер", новый ОписаниеТипов("Строка"), новый КвалификаторыСтроки(30)); ТЗ2.Колонки.Добавить("Дата", новый ОписаниеТипов("Дата")); ТЗ2.Колонки.Добавить("Сумма", новый ОписаниеТипов("Число")); НСтр1 = тз.Добавить(); НСтр1.Номер = "12345"; НСтр1 = тз.Добавить(); НСтр1.Номер = "122345"; НСтр1 = тз.Добавить(); НСтр1.Номер = "7566"; НСтр1 = тз.Добавить(); НСтр1.Номер = "22243"; НСтр2 = тз2.Добавить(); НСтр2.Номер = "РС12345"; НСтр2 = тз2.Добавить(); НСтр2.Номер = "ТК122345"; НСтр2 = тз2.Добавить(); НСтр2.Номер = "ББ7566"; НСтр2 = тз2.Добавить(); НСтр2.Номер = "СС22243"; Запрос = новый Запрос; Запрос.УстановитьПараметр("ТЗ", ТЗ); //123 Запрос.УстановитьПараметр("ТЗ2", ТЗ2); //РС123 Запрос.Текст = "ВЫБРАТЬ | ВЫРАЗИТЬ(ТЗ.Номер КАК СТРОКА(30)) КАК Номер |ПОМЕСТИТЬ ТЗ |ИЗ | &ТЗ КАК ТЗ |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВЫРАЗИТЬ(ТЗ2.Номер КАК СТРОКА(30)) КАК Номер2 |ПОМЕСТИТЬ ТЗ2 |ИЗ | &ТЗ2 КАК ТЗ2 |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТЗ.Номер, | ТЗ2.Номер2 |ИЗ | ТЗ КАК ТЗ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗ2 КАК ТЗ2 | ПО (""%"" + ТЗ.Номер + ""%"" ПОДОБНО ""%"" + ТЗ2.Номер2 + ""%"")"; Выборка = Запрос.Выполнить().Выбрать(); пока Выборка.Следующий() цикл Сообщить(""+Выборка.номер + " " + Выборка.Номер2); КонецЦикла; |
|||
14
ДенисЧ
25.07.15
✎
14:14
|
(7) Не всё то денисы, что с зубами.
Не все те, кого бояться нужно - денисы... |
|||
15
Fragster
гуру
25.07.15
✎
21:32
|
если ты словами опишешь свой запрос - ты увидишь, что так и должно быть с твоими данными. а отрезать префикс можно и не зная его длину, а только то, что его последний символ - не цифра, например
|
|||
16
mistеr
25.07.15
✎
23:29
|
(0) Я не понял, зачем % с левой стороны от ПОДОБНО?
|
|||
17
Vvvvv
26.07.15
✎
10:56
|
(16) например в ТЗ1 номер = "12345"
а в ТЗ2 номер = "РС_12345", а может быть наоборот. И нужно найти запросов те поля, в которых присутствует "12345" |
|||
18
hhhh
26.07.15
✎
11:03
|
(17) ПОДОБНО здесь не подойдет. Потому что он выберет и 612345 и 8812345, а их не нужно.
|
|||
19
Vvvvv
26.07.15
✎
11:11
|
(18) для моей задачи этот вариант подойдет, т.к. префикс будет не известен.
Только этот механизм не работает "%" + ТЗ2.Номер Не могу понять как правильно? Пока никто не подсказал, возможно раньше не сталкивались? |
|||
20
ДенисЧ
26.07.15
✎
11:13
|
(19) полный текст давай.
Ибо УМВР, ЧЯДНТ? |
|||
21
Vvvvv
26.07.15
✎
11:14
|
(20) полный код в (13) от и до
|
|||
22
ДенисЧ
26.07.15
✎
11:16
|
(21) То есть реальный код, который передаётся запросу, ты показать не можешь?
Без всяких там + и т.д.? |
|||
23
Vvvvv
26.07.15
✎
11:22
|
(22) чем этот код не устраивает?
2 таблицы значения, видно чем заполняются и их нужно сравнить, даже заполняется таблица сама нужными значениями ТЗ = новый ТаблицаЗначений; тз.Очистить(); ТЗ.Колонки.Добавить("Номер", новый ОписаниеТипов("Строка"), новый КвалификаторыСтроки(30)); ТЗ2 = новый ТаблицаЗначений; тз2.Очистить(); ТЗ2.Колонки.Добавить("Номер", новый ОписаниеТипов("Строка"), новый КвалификаторыСтроки(30)); НСтр1 = тз.Добавить(); НСтр1.Номер = "РС12345"; НСтр1 = тз.Добавить(); НСтр1.Номер = "122345"; НСтр1 = тз.Добавить(); НСтр1.Номер = "7566"; НСтр1 = тз.Добавить(); НСтр1.Номер = "22243"; НСтр2 = тз2.Добавить(); НСтр2.Номер = "12345"; НСтр2 = тз2.Добавить(); НСтр2.Номер = "ТК122345"; НСтр2 = тз2.Добавить(); НСтр2.Номер = "ББ7566"; НСтр2 = тз2.Добавить(); НСтр2.Номер = "СС22243"; Запрос = новый Запрос; Запрос.УстановитьПараметр("ТЗ", ТЗ); //123 Запрос.УстановитьПараметр("ТЗ2", ТЗ2); //РС123 Запрос.Текст = "ВЫБРАТЬ | ВЫРАЗИТЬ(ТЗ.Номер КАК СТРОКА(30)) КАК Номер |ПОМЕСТИТЬ ТЗ |ИЗ | &ТЗ КАК ТЗ |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВЫРАЗИТЬ(ТЗ2.Номер КАК СТРОКА(30)) КАК Номер2 |ПОМЕСТИТЬ ТЗ2 |ИЗ | &ТЗ2 КАК ТЗ2 |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТЗ.Номер, | ТЗ2.Номер2 |ИЗ | ТЗ КАК ТЗ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗ2 КАК ТЗ2 | ПО (""%"" + ТЗ.Номер + ""%"" ПОДОБНО ""%"" + ТЗ2.Номер2 + ""%"")"; Выборка = Запрос.Выполнить().Выбрать(); пока Выборка.Следующий() цикл Сообщить(""+Выборка.номер + " " + Выборка.Номер2); КонецЦикла; |
|||
24
ДенисЧ
26.07.15
✎
11:24
|
Меня не устраивает вот это
ПО (""%"" + ТЗ.Номер + ""%"" ПОДОБНО ""%"" + ТЗ2.Номер2 + И кстати, 1с тоже вряд ли устроит. Я же не зря говорю - текст, который отдаётся запросу. Сообщить(Запрос.Текст) И результат сюда. После этого можно начать избиение младенца. |
|||
25
Vvvvv
26.07.15
✎
11:30
|
Сообщить(Запрос.Текст);
Вот что вывел: ВЫБРАТЬ ВЫРАЗИТЬ(ТЗ.Номер КАК СТРОКА(30)) КАК Номер ПОМЕСТИТЬ ТЗ ИЗ &ТЗ КАК ТЗ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВЫРАЗИТЬ(ТЗ2.Номер КАК СТРОКА(30)) КАК Номер2 ПОМЕСТИТЬ ТЗ2 ИЗ &ТЗ2 КАК ТЗ2 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТЗ.Номер, ТЗ2.Номер2 ИЗ ТЗ КАК ТЗ ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗ2 КАК ТЗ2 ПО ("%" + ТЗ.Номер + "%" ПОДОБНО "%" + ТЗ2.Номер2 + "%") |
|||
26
ДенисЧ
26.07.15
✎
11:59
|
ПО ("%" + ТЗ.Номер + "%" ПОДОБНО "%" + ТЗ2.Номер2 + "%")
Тут проблема. Подумай |
|||
27
Vvvvv
26.07.15
✎
12:12
|
(26) я знаю, что тут проблема, я еще в теме (0) об этом сказал.
|
|||
28
ДенисЧ
26.07.15
✎
12:14
|
(27) gdb dna не предлагать?
|
|||
29
Vvvvv
26.07.15
✎
12:14
|
(28) а что это?
|
|||
30
ДенисЧ
26.07.15
✎
12:18
|
||||
31
Vvvvv
27.07.15
✎
09:14
|
(30) без знания английского языка, - это мало чем поможет.
|
|||
32
mistеr
27.07.15
✎
09:25
|
(17) Я правильно понял, что ты хочешь сопоставить по номерм без префиксов? Причем префиксы могут быть и справа и слева, и они заранее не известны, и даже их длина заранее не известна?
Если да, то запросом этого сделать нельзя. |
|||
33
Vvvvv
27.07.15
✎
09:30
|
(32) Предполагается, что префикс будет слева, справа могут быть Символы.НПП. Указал справа, что бы наверняка.
Жаль, что запросом нельзя так сделать, полезная штука была бы |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |