|
Как работает поиск по наименованию? | ☑ | ||
---|---|---|---|---|
0
Kvant1C
18.05.15
✎
09:13
|
Уважаемые коллеги, разъясните пожалуйста, что это такое недокументированное поведение функции или неправильное ее использование?
В коде есть такая строка: Результат = Неопределено; Результат = Справочники.Партнеры.НайтиПоНаименованию(""); После выполнения этой строки в переменной Результат "сидит первый элемент справочника" Читаем СП: Возвращаемое значение: Тип: СправочникСсылка.<Имя справочника>; Неопределено. Ссылка на найденный элемент справочника. Если не существует ни одного элемента с требуемым наименованием, то будет возвращена пустая ссылка. Если для справочника наименование не задано (длина = 0), то будет возвращено Неопределено. Платформа 1С:Предприятие 8.3 (8.3.6.1977) ЧЯНТД? |
|||
1
Fragster
гуру
18.05.15
✎
09:13
|
(0) прочитай СП целиком
|
|||
2
ДенисЧ
18.05.15
✎
09:13
|
F tckb Результат = Справочники.Партнеры.НайтиПоНаименованию("", Истина); ?
|
|||
3
Kvant1C
18.05.15
✎
09:15
|
(1) прочитал уже 5 раз
|
|||
4
Fragster
гуру
18.05.15
✎
09:15
|
(3) не верю
|
|||
5
Kvant1C
18.05.15
✎
09:16
|
(2) Да, так пустышка
|
|||
6
ДенисЧ
18.05.15
✎
09:17
|
(5) И спосле этого ты утверждаешь, что прочитал весь СП?
|
|||
7
Defender aka LINN
18.05.15
✎
09:17
|
(0) Читать не умеешь, вестимо. Какая длина наименования справочника "Номенклатура" в конфигураторе?
|
|||
8
Fragster
гуру
18.05.15
✎
09:18
|
(7) ты тоже не умеешь..
|
|||
9
Cyberhawk
18.05.15
✎
09:19
|
(0) "в переменной Результат "сидит первый элемент справочника""
Покажи на картинке |
|||
10
Kvant1C
18.05.15
✎
09:19
|
(6) Там написано
Поиск будет успешным, если строка поиска: в случае значения параметра Ложь - будет соответствовать левой части наименования; в случае значения параметра Истина - будет полностью совпадать с наименованием (за исключением "хвостовых" пробелов в наименовании). Про то что будет найден первый элемент если значение параметра - ложь ничего не сказано |
|||
11
Fragster
гуру
18.05.15
✎
09:20
|
(10) целиком читай...
|
|||
12
ДенисЧ
18.05.15
✎
09:20
|
(10) А что в твоём понимании "первый"?
|
|||
13
Lama12
18.05.15
✎
09:22
|
(10) Так первый элемент и соответствует пустой строке в левой части. Разве нет?
|
|||
14
Fragster
гуру
18.05.15
✎
09:22
|
(12) то, что скуль юзал индекс по наименованию и так уж получилось, что он отсортирован по наименованию. кстати, то, что он "первый" - недокументировано, потому что это не всегда так.
|
|||
15
Kvant1C
18.05.15
✎
09:23
|
(12) Делаю запрос:
ВЫБРАТЬ Партнеры.Ссылка, Партнеры.Наименование ИЗ Справочник.Партнеры КАК Партнеры В первой строке тот элемент, который возвращает функция. Проверял на нескольких справочниках |
|||
16
Cyberhawk
18.05.15
✎
09:24
|
(15) тебя смущает, что поиск по наименованию идентичен запросу к БД?
|
|||
17
Fragster
гуру
18.05.15
✎
09:24
|
(15) тогда в (14) не индекс по наименованию, а кластерный индекс, который по ссылке. но сути это не меняет - это может быть и не так.
|
|||
18
Kvant1C
18.05.15
✎
09:24
|
(11) Там больше ничего нет, там дальше про родителя и владельца и еще Примечание:
Если существует несколько элементов с указанным наименованием, то будет найден только один из них. |
|||
19
Fragster
гуру
18.05.15
✎
09:25
|
(18) все правильно. то, что будет найден один из них - никак не противоречит тому, что тебе возвращается один из них...
|
|||
20
Fragster
гуру
18.05.15
✎
09:25
|
а вот то, что он "первый" не написано, так что на это полагаться не надо.
|
|||
21
Kvant1C
18.05.15
✎
09:30
|
(16) Да нет, это как раз не смущает, просто ожидал, что функция вернет мне пустышку.
Ну теперь буду знать эту особенность :) |
|||
22
fisher
18.05.15
✎
09:31
|
(0) Насколько я понимаю, при поиске по неполному соответствию пустой строки - найдутся ВСЕ элементы справочника. Можно сказать, они все начинаются с пустой строки. Ну а возвращает первый попавшийся (без гарантий какой именно, т.к. без явного упорядочивания СУБД никакой определенный порядок не гарантирует).
|
|||
23
Fragster
гуру
18.05.15
✎
09:34
|
Сообщить(Лев("Как же работает поиск по наименованию",0) = "");
|
|||
24
fisher
18.05.15
✎
09:37
|
На этой фишке (отсутствие неявного упорядочивания в SQL) еще в 7.7 палились. Ибо в DBF неявное упорядочивание было, как и в файловом движке 8-ки. И при переходе на клиент-сервер алгоритмы на это завязанные - "ломались". Сам недавно погорел, хотя прекрасно про эту фишку знал. Отладил пакетную печать на файловой и не обратил внимание, что забыл по ссылке упорядочить один запрос. А там последовательный обход двух связанных выборок. В итоге на файловой - всё ок, а в клиент-серверной бессистемно "пропускались" некоторые печатные формы. Чуть голову не сломал. Так и не вкурил, пока сервер в режим отладки не перевёл.
|
|||
25
Kvant1C
18.05.15
✎
09:41
|
(19) Элемента с пустым наименованием не существует...
|
|||
26
fisher
18.05.15
✎
09:42
|
(25) Зато наименования ВСЕХ элементов НАЧИНАЮТСЯ с пустой строки.
|
|||
27
Славен
18.05.15
✎
09:44
|
(25) до кучи иди учи простейшие типы, тебе нужна Строка.
|
|||
28
fisher
18.05.15
✎
09:45
|
(27) Причем здесь типы сами по себе? Речь о правилах поиска.
|
|||
29
Serg_1960
18.05.15
✎
09:45
|
Имхо, сравнение строк различной длины, не только для 1С "проблематично", но и при разработке других алгоритмических языков стаяло. Ибо не в математике "проблематично", а в логике И то, как она "решается" в том или ином языке, становится видно на строке "нулевой" длины.
|
|||
30
Serg_1960
18.05.15
✎
09:47
|
А по поводу "Если для справочника наименование не задано..." - это к метаданным 1С. У документов есть дата и номер, а у справочников есть код и наименование... даже если их нет :)
|
|||
31
Drac0
18.05.15
✎
09:48
|
(21) Это не особенность, это вполне документированное поведение функции в зависимости от параметра. А вот не уметь понимать прочитанное - особенность, да.
|
|||
32
Kvant1C
18.05.15
✎
09:52
|
(31) Ну так написанное можно по разному трактовать...
|
|||
33
Serg_1960
18.05.15
✎
09:55
|
(31) Насчёт "А вот не уметь понимать прочитанное" можно ещё поспорить. "А вот не уметь объяснить написанное" - это я бы к к разработчикам предъявил. Язык написали, а объяснения к нему... другие, видать, писали. Не на столько умные :) Иногда в СП так "объяснят", что крышу срывает в попытке осознать прочитанное.
|
|||
34
fisher
18.05.15
✎
09:56
|
Вот приколупались к человеку. То, что по пустой строке будут найдены все элементы - зависит от конкретной реализации поиска и нифига неочевидно на первый вгляд. Ну, кроме опытнейших разработчиков, собравшихся в этой ветке, конечно же.
|
|||
35
Serg_1960
18.05.15
✎
10:06
|
(34) Ценю Ваш юмор и сарказм... но по сути - всё верно, "... не всё так однозначно."(цы)
|
|||
36
Kvant1C
18.05.15
✎
10:09
|
(34) (35) Спасибо за поддержку!
ДенисЧ Огромное спасибо! |
|||
37
МаксимМП23
18.05.15
✎
10:13
|
(15) ВЫБРАТЬ ПЕРВЫЕ 1 же...
|
|||
38
Smallrat
18.05.15
✎
10:19
|
Там еще дальше параметр на точное соответствие - по умолчанию "Ложь"
|
|||
39
Smallrat
18.05.15
✎
10:20
|
Поставить в "Истина" и уже ничего не найдется
|
|||
40
ДенисЧ
18.05.15
✎
10:23
|
(38) (39) Ему это объяснили уже в самом начале
|
|||
41
Smallrat
18.05.15
✎
10:29
|
(40) чукча писатель)
|
|||
42
Гёдза
18.05.15
✎
10:58
|
(0) твой код эквивалентен
Наименование ПОДОБНО "" + % то бишь все элементы |
|||
43
Лефмихалыч
18.05.15
✎
10:59
|
(24) что значит "неявное упорядочивание"?
|
|||
44
fisher
18.05.15
✎
11:30
|
(43) Наличие некоторого порядка при отсутствии явных указаний на конкретный порядок.
|
|||
45
Лефмихалыч
18.05.15
✎
12:46
|
(44) значит в (24) брехня. Все таблицы БД 1С в sql всегда и строго упорядочены по кластерному индексу
|
|||
46
fisher
18.05.15
✎
13:06
|
(45) Резкий ты мой :) Это же не гарантирует, что результат сложного запроса будет отсортирован по кластерному индексу первой таблицы, в нём описанному.
|
|||
47
fisher
18.05.15
✎
13:14
|
Это не говоря уже о том, что насколько я понимаю, в postgresql нет прямого аналога кластерных индексов mssql
|
|||
48
Kvant1C
18.05.15
✎
13:23
|
(47) Кстати да, у нас postgresql
|
|||
49
Kvant1C
18.05.15
✎
13:33
|
Вот что нашел на счет упорядочивания в запросах:
>>Если в запросе не указано упорядочивание, то сортировка происходит по внутреннему идентификатору записи в таблице, по сути никак. http://zapros-1c-8.ru/9-yazik-zaprosov-1c-8/8-order |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |