Имя: Пароль:
1C
 
Поиск объекта по реквизиту и несколько объектов удовлетворяющие выбору.
, ,
0 Wirtuozzz
 
28.02.17
10:48
Добрый день Мистяне. У меня появился вопросик, по работе платформы 8.3.  
Есть справочник, в нем происходит поиск по реквизиту (пусть это будет КПП), в справочнике есть несколько элементов, удовлетворяющие моему отбору. Соответственно система получает несколько элементов. Собственно вопрос: как система определяет порядок как расположить элементы в массиве? Согласно индексу?
Что надо сделать что бы находился не первый элемент из списка найденных?  Перезаписать его?
1 Волшебник
 
модератор
28.02.17
10:49
ищи запросом с фразой УПОРЯДОЧИТЬ ПО
2 Wirtuozzz
 
28.02.17
10:51
У меня кривизна полезла не в запросе
3 Wirtuozzz
 
28.02.17
10:51
Да, вопрос стоит не как исправить, а как работает.
4 DrShad
 
28.02.17
10:55
перезапись ничего не изменит
5 Wirtuozzz
 
28.02.17
10:55
Но дело я правильно говорю что в Индексе. Да?
6 Вафель
 
28.02.17
10:56
скорее всего выборка идет по кластерному индексу, если не сказано про упорядочивание
7 Вафель
 
28.02.17
10:56
но индекс это ссылка, а ее поменять у существующего элемента уже нельзя
8 xxTANATORxx
 
28.02.17
11:03
без УПОРЯДОЧИТЬ не факт что на файловой версии (на постгрии и пр.) у тебя будет таже сортировка
9 Wirtuozzz
 
28.02.17
11:04
База серверная.
10 Вафель
 
28.02.17
11:05
(8) в ЗУП 2.5 есть косяк на эту тему
11 Wirtuozzz
 
28.02.17
11:13
Но правильно я понимаю, что программная сортировка объектов выборки происходит по умолчанию по Индексу?
12 h-sp
 
28.02.17
11:35
(11) ну вы отсортируйте, проверьте. Это же быстро.
13 Wirtuozzz
 
28.02.17
13:16
(12) Что проверить? Посоветуйте как проверить, я проверю.
14 Wirtuozzz
 
28.02.17
13:19
Самое главное что СП тут не говорит внятно что будет найдено:

СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>)
НайтиПоРеквизиту (FindByAttribute)
Синтаксис:

НайтиПоРеквизиту(<ИмяРеквизита>, <ЗначениеРеквизита>, <Родитель>, <Владелец>)
Параметры:

<ИмяРеквизита> (обязательный)

Тип: Строка.
Имя реквизита, как он задан в конфигураторе, по значению которого осуществляется поиск. Тип значения произвольный, кроме ХранилищеЗначения и строк произвольной длины.
<ЗначениеРеквизита> (обязательный)

Тип: Произвольный.
Значение реквизита, по которому должен выполняться поиск.
<Родитель> (необязательный)

Тип: СправочникСсылка.<Имя справочника>.
Родитель, в пределах которого нужно выполнять поиск. Если не указан, то поиск будет проводиться во всем справочнике.
<Владелец> (необязательный)

Тип: СправочникСсылка.<Имя справочника>.
Владелец, в пределах которого нужно выполнять поиск. Если не указан, то поиск будет проводиться во всем справочнике.
Возвращаемое значение:

Тип: СправочникСсылка.<Имя справочника>.
Ссылка на найденный элемент справочника. Если не существует ни одного элемента с требуемым значением реквизита, то будет возвращена пустая ссылка.
Описание:

Осуществляет поиск элемента по значению реквизита.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Примечание:

Если существует несколько элементов с указанным значением реквизита, то будет найден только один из них.
Для реквизитов типа Строка поиск осуществляется по точному соответствию.

-------------------
Будет найден только 1, но блин как он его определит первый этот
15 mistеr
 
28.02.17
13:30
(14) Поведение системы в этом случае неопределено, вот что говорит СП. Хочешь определенности — приложи усилия.

Если же интересно именно "как работает", возьми профайлер и посмотри план запроса. В следующем релизе может поменяться.
16 Wirtuozzz
 
28.02.17
13:40
(15) можно ссылку на то где описано как это сделать?
17 mistеr
 
28.02.17
14:06
(16) Что именно?
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн