Имя: Пароль:
1C
1С v8
v8: Поиск по уникальному идентификатору в всей базе
0 ИС-2
 
naïve
21.07.11
14:09
Требуется, зная уникальный идентификатор, найти ссылку на объект. Проблема заключается в том, что в 1C нет метода глобального поиска по всей базе. Т.е искать надо по каждому менеджеру отдельно. Таким образом перебирать все ссылки очень долго (см. кол-во справочников и документов в 1c).

Есть ли быстрый способ найти ссылку по ГУИД в всей базе?
1 Defender aka LINN
 
21.07.11
14:12
"см. кол-во справочников и документов в 1c" - посмотрел сейчас в свою самописку. 2 справочника. Не так уж и долго.
2 Живой Ископаемый
 
21.07.11
14:13
(1) а... Браво!
3 Defender aka LINN
 
21.07.11
14:14
(2) Главное - не смотреть в корпоративную самописку >_<
4 ИС-2
 
naïve
21.07.11
14:25
(1) а если смотреть УПП?
5 Живой Ископаемый
 
21.07.11
14:32
не, не надо смотреть УПП...
6 Азат
 
21.07.11
14:32
(0) а ЗначениеИзСтрокиВнутр что даст?
7 Живой Ископаемый
 
21.07.11
14:33
2(6) для базы в целом?
8 Defender aka LINN
 
21.07.11
14:33
(4) Выглядит страшнее, да. Но, в конце концов, это не авторы УПП придумали искать то, не знаю что.
9 DmitrO
 
21.07.11
14:37
напишу обработку. дорого :)
10 ИС-2
 
naïve
21.07.11
14:39
(9) Написал за 3 минут. Но вот какая скорость будет :(
11 Aleksey
 
21.07.11
14:40
(10) Очень быстрая
12 DmitrO
 
21.07.11
14:44
Если про скорость сомневаешься, значит обработку написал наверняка не правильно. я же говорил дорого. :)
13 Healer
 
21.07.11
15:14
А UUID разве не содержит сведения о типе метаданных? Да и перебор всех метаданных не так уж много времени займёт даже в УПП.
14 Живой Ископаемый
 
21.07.11
15:20
2(13) а разве содержит?
15 Defender aka LINN
 
21.07.11
15:21
(13) Если бы содержал - это была бы ссылка.
16 Рэйв
 
21.07.11
15:22
НовыйGUID = Новый УникальныйИдентификатор(ПараметрГуидЗаказаППО);
   СсылкаЗаказППО=Документы.ЗаказПокупателяППО_АРЕНА.ПолучитьСсылку(НовыйGUID);
17 Рэйв
 
21.07.11
15:23
ну..со справочниками также
18 Варвар
 
21.07.11
15:24
(13) нет.
(16) и чо?
19 Рэйв
 
21.07.11
15:25
(18)Да собственно и все.
20 Рэйв
 
21.07.11
15:25
(19)Перебрать все виды и получишь
21 Рэйв
 
21.07.11
15:26
е5сли уж вид заранее неизвестен
22 Живой Ископаемый
 
21.07.11
15:28
+(17) и с перичеслениями.. и со счетами плана счетов... и с элементами плана вида харектеристик.. и с видами расчетов...
23 Рэйв
 
21.07.11
15:29
(22)Ну да:-)  но с доками и спровочниками обычно чаще:-)
24 Defender aka LINN
 
21.07.11
15:33
(22) Забыл задачи, бизнес-процессы и планы обмена.
25 Живой Ископаемый
 
21.07.11
15:35
(24)
"- Но я же могу поехать в Лос-Анжелес! Могу ведь, да? Купить билет на автобус или на самолет и вернуться. Ведь Лос-Анжелес останется там же, где был, верно?

- Безусловно, - засмеялся дон Хуан. - И Мантека, и Темекула, и Туксон.

- И Тэкатэ, - очень серьезно добавил дон Хенаро.

- И Пьедрас Нэграс, и Транкитас, - с улыбкой сказал дон Хуан.

Дон Хенаро добавил еще несколько названий, дон Хуан - еще, и так они все перечисляли и перечисляли замысловатые и смешные названия городов и поселков."
26 Healer
 
21.07.11
15:42
Хм, сведений о типе метаданных они действительно не содержат... придётся перебирать все метаданные, однозначно. Про UID-ы уже обсуждалось на мисте, например вот здесь: v8: Где взять описание GUID, который в 1С 8?.
27 Healer
 
21.07.11
15:44
28 rs_trade
 
21.07.11
15:51
(26) так уж и все. 98% что ссылка будет либо справочник, либо документ. их в первую очередь.
29 ИС-2
 
naïve
21.07.11
16:06
Сделал. Скорость вроде как приемлемая. Только возникла проблема с сравнение с пустым значением

   Для Каждого ЭлементМетаданных из БазаКИС.Метаданные.Справочники Цикл
       Ссылка = БазаКИС.Справочники[ЭлементМетаданных.Имя].ПолучитьСсылку(ГУИД_КИС);
       //Если Ссылка = БазаКИС.Справочники[ЭлементМетаданных.Имя].ПустаяСсылка() Тогда (!!!)
       Если не ЗначениеЗаполнено(Ссылка.Код) Тогда
           Ссылка = Неопределено;
       иначе
           Возврат Ссылка;    
       КонецЕсли;
   КонецЦикла;

условие !!! не проходит т.е оно все время истина. Как проверить на пустое значение? Метод значениезаполнено тоже не работает.
30 DmitrO
 
21.07.11
16:10
31 rs_trade
 
21.07.11
16:33
(29) да проще всего проверить на наличие в строке "ОбъектНеНайден". Или как оно там пишет.
32 Aleksey
 
21.07.11
16:56
(31) или запросом
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.