Имя: Пароль:
1C
1C 7.7
v7: НайтиПоКоду в справочнике с несквозной нумерацией
,
0 Patrio_
O_Muerte
 
11.12.11
15:31
Доброго времени суток.
Господа.
Есть справочник с нумерацией в пределах подчинения, то есть возможно наличие элементов с одинаковыми кодами. При использовании метода НайтиПоКоду() какой именно элемент он вернет?
1 ДенисЧ
 
11.12.11
15:32
Если родителя укажешь, то вернёт по родителю. Иначе  - с минимальным ИД
2 Patrio_
O_Muerte
 
11.12.11
15:34
Не, без родителя.
Минимальный ИД - это че?
Это по времени создания?
3 ДенисЧ
 
11.12.11
15:35
по численному значению :-)
Хотя тут я прогнал слегка. Вернуть может всё, что угодно, ибо в SQL не определён порядок выборки, если нет явного указания сортировки.
Нужно поставить экскремент и посмотреть на запрос, который 1с генерит при этом...
4 Patrio_
O_Muerte
 
11.12.11
15:39
Не, это тижило.
:) В смысле много времени займет - потом разбираться что к чему :)
Спасибо за ответ.
5 ДенисЧ
 
11.12.11
15:40
да я про себя говорил :-) Если не забуду, завтра поставлю опыт...
6 Patrio_
O_Muerte
 
11.12.11
15:47
Если не затруднит отпишись по результату эксперимента:)
7 Rie
 
11.12.11
15:49
(0) НайтиПоКоду - какие параметры указаны?
Если уникальность стоит в пределах подчинения, то НайтиПоКоду по умолчанию ищет по полному коду.
8 Patrio_
O_Muerte
 
11.12.11
15:52
(7)Никаких, только код (числовой).
9 ДенисЧ
 
11.12.11
15:54
Вот результат профайлинга

select * from SC1817(NOLOCK INDEX=CODE) where CODE='    1' order by CODE,ROW_ID

То есть действительно, первый по времени создания.
10 Patrio_
O_Muerte
 
11.12.11
15:55
(9)гг шикарус :)
11 Злопчинский
 
11.12.11
15:55
(7) это как??? указываем НафтиПоКоду("007") - то по какому ПОЛНОМУ коду будет поиск?
12 Rie
 
11.12.11
15:56
(8) Значит, искомый код будет рассматриваться как полный код элемента справочника - то есть будет найден на верхнем уровне или вообще не найден.
13 Rie
 
11.12.11
15:56
(11)
"НайтиПоКоду(<?>,);
Синтаксис:
НайтиПоКоду(<Код>,<ФлагПоиска>)
Назначение:
Найти элемент справочника по коду.
Возвращает: 1 - если действие выполнено;
0 - если действие не выполнено (элемент не найден).
Параметры:
<Код> - выражение со значением искомого кода,
<ФлагПоиска> - флаг поиска (необязателен):
 0 - поиск во всем справочнике вне зависимости от родителя;
 1 - поиск внутри установленного подчинения (родителя);
 2 - поиск по полному коду через разделитель.
Значение по умолчанию:
 0 - если код уникален во всем справочнике;
 2 - если код уникален только в группе.
Замечание:
Метод  можно использовать только для объектов, созданных функцией СоздатьОбъект".
14 Patrio_
O_Muerte
 
11.12.11
15:56
+(10)То есть насколько бы бездарно не была бы построена структура БД, 1С всегда нас спасет своей непредсказуемостью :)
15 Patrio_
O_Muerte
 
11.12.11
16:00
Всем спасибо за участие, тему можно закрывать.
Хотя если есть желание холивар какой-нить устроить, я не против, ща тока пива возьму :)
16 Rie
 
11.12.11
16:03
Утверждение (12) проверено электроникой: не находит элементы внутри группы.
   Спр = СоздатьОбъект("Справочник.Новый1");
   Если спр.НайтиПоКоду("00001")=1 Тогда
       Сообщить(Спр.Наименование);
   Иначе
       Сообщить(",,,");
   КонецЕсли;
выдало
,,,

Справочник Ноыф
17 Rie
 
11.12.11
16:04
+(16) Справочник Новый1 содержал группу с кодом 00002, в которой был элемент с кодом 00001