Имя: Пароль:
1C
 
Как работает поиск по наименованию?
,
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
AdBlock убивает бесплатный контент. 1Сергей