|
|
|
Можно ли без перебора метаданных найти ссылку по GUID? | ☑ | ||
|---|---|---|---|---|
|
0
Гений 1С
гуру
07.06.07
✎
12:36
|
А то метод ПолучитьСсылку работает только для конкретного менеджера.
А если я не знаю тип? Функция обНайтиСсылкуПоГУИД(ГУИД) Экспорт Перем РезСсылка; Для Каждого МД Из Метаданные.Справочники Цикл РезСсылка=Справочники[МД.Имя].ПолучитьСсылку(ГУИД); Если РезСсылка.ПолучитьОбъект()<>Неопределено Тогда Возврат РезСсылка; КонецЕсли; КонецЦикла; Для Каждого МД Из Метаданные.Документы Цикл РезСсылка=Документы[МД.Имя].ПолучитьСсылку(ГУИД); Если РезСсылка.ПолучитьОбъект()<>Неопределено Тогда РезСсылка.ПолучитьОбъект(); Возврат РезСсылка; КонецЕсли; КонецЦикла; Возврат Неопределено; КонецФункции |
|||
|
1
ТелепатБот
гуру
07.06.07
✎
12:36
|
||||
|
2
Гений 1С
гуру
07.06.07
✎
18:23
|
ап
|
|||
|
3
Ferz
08.06.07
✎
09:10
|
только через SQL
|
|||
|
4
FLENDGER
08.06.07
✎
10:13
|
офф:
гениальное решение - сразу пиши в книгу знаний... тупой перебор - рулит... я так чувствую, ты во всех случаях, когда не можешь придумать хоть какое-то реальное решение, просто прогоняешь данные через тупой перебор... сочувствую тем, кто пользуется твоими поделками :( |
|||
|
5
FLENDGER
08.06.07
✎
10:30
|
+4
создаем рег. сведений, в который пишем при записи объектов ссылки и в качестве ресурса - тип объекта или имя из метаданных... а потом просто ищем ссылку в этом регистре... :) |
|||
|
6
Гений 1С
гуру
08.06.07
✎
10:46
|
(5) Хахаха.... А про транзакционную нагрузку на базу ты подумал? К тому же это не универсальное и даже вредное явление. Яйца курицу учат? Гыгыгы
|
|||
|
7
MRAK
08.06.07
✎
10:58
|
(5) ужос
|
|||
|
8
PowerBoy
08.06.07
✎
11:13
|
(0) Тоже, искал решение и не нашел. Делал перебором из списка.
Кстати РезСсылка.ПолучитьОбъект() работает очень, очень медленно. Строка(РезСсылка) = "" работает в два раза быстрей, но тоже медленно. |
|||
|
9
НЕА123
08.06.07
✎
12:01
|
(0) ОФФ
Справочники[МД.Имя] в контексте можно просто МД. |
|||
|
10
FLENDGER
08.06.07
✎
14:59
|
то (6)
Вот в (4) такая же бредовая хрень, как и в (0)... Особенно в плане того, чтобы пихать подобные хрени в КЗ... А вот теперь иди и считай, сколько такой хрени ты занес в КЗ, где неопытные вместо того, чтобы найти что-нибудь стоящее, забивают голову ерундой... P.S. какова задача - такого решение... чтобы получить запросом данные по гуиду, надо чтобы он был там в той форме, куда позволяет доставать запрос... отсюда и решение (4) ;) а теперь попробуй доказать, что на данный момент есть еще решение, при котором ты ЗАПРОСОМ вытянешь ссылку по гуиду... PPS а про курицу мне понравилось... :) |
|||
|
11
dolter
08.06.07
✎
15:08
|
А откуда взят ГУИД? если из таблицы, то можно для ускорения перебора узнать ограничения типа...
|
|||
|
12
НЕА123
08.06.07
✎
15:16
|
НайтиПоСсылкам(<Список ссылок>)
Параметры: <Список ссылок> (обязательный) Тип: Массив. Массив со списком ссылок на объекты, ссылки на которые нужно найти. Возвращаемое значение: Тип: ТаблицаЗначений. Возвращает ссылки на найденные объекты в виде ТаблицаЗначений, состоящей из колонок с индексами: 0 - искомая ссылка; 1 - ссылка на объект, если найденная ссылка соответствует объектной таблице или значение, идентифицирующее запись необъектной таблицы; 2 - объект метаданных, которому соответствуют данные, в которых найдена ссылка. Описание: Осуществляет поиск ссылок на объекты, переданные в параметре <Список ссылок>. |
|||
|
13
НЕА123
08.06.07
✎
15:18
|
(12)-точно, бред. не читать.:((
|
|||
|
14
Леха Дум
08.06.07
✎
15:27
|
(11) а какая разница, нам ведь нужно гениальное решение. гы куриц всегда с динозаврами сравниваю - после просмотра фильма "парк юрского периода"
|
|||
|
15
Гений 1С
гуру
08.06.07
✎
15:27
|
(13) я так и понял.
(10) ваш бред не осилил. При чем здесь запросом. Задача четкая - есть GUID, нужно найти объект. НАпример, если данные пришли из журнала регистрации. Для универсальности ищу решение, когда вид ссылки неизвестен. |
|||
|
16
Wladimir_spb
08.06.07
✎
15:36
|
Запросом можно, но не уверен, что будет быстрее, чем (0).
|
|||
|
17
Гений 1С
гуру
08.06.07
✎
16:07
|
(16) да, запросом можно, но тоже не уверен, а если сразу по всем тэйблам, можно напороться на ошибку 255 таблиц. ;-) или только порциями по 255 таблиц, тогда можно. ;-)
|
|||
|
18
FarFar
08.06.07
✎
16:55
|
(0) Интересно,в 8.1 упростили поиск по ГУИДу?
|
|||
|
19
Гений 1С
гуру
08.06.07
✎
16:56
|
(18) с чего бы это, гыгыгы...
|
|||
|
20
oleg_km
08.06.07
✎
17:43
|
В запросах ГУИД тоже недоступен, только в объекте
|
|||
|
21
Гений 1С
гуру
08.06.07
✎
17:47
|
(20) а да, точно. ;-)
|
|||
|
22
РазДва
09.06.07
✎
09:37
|
(15) Если говорить про универсальность, то может быть ситуация, когда два элемента РАЗНЫХ справочников или документов имеют одинаковый ГУИД.
|
|||
|
23
Ferz
09.06.07
✎
10:38
|
(22) нужно проверить.. вероятность ничтожна
|
|||
|
24
РазДва
09.06.07
✎
10:50
|
(23) Если вы напишете при создании элемнетов УстановитьСсылкуНового(ОдинаковыйГУИД), то вероятность будет 100%.
На вероятность нельзя полагаться при универсальном решении. |
|||
|
25
НЕА123
09.06.07
✎
10:50
|
(22)+
ЗначениеВСТрокуВнутр(Объект.Ссылка) выдает нечто1. Объект.Ссылка.УникальныйИдентийикатор() тоже выдает нечто2. Нечто2 являнтся подмножеством Нечто1. (все перетасовано, но видно). |
|||
|
26
Immortal
09.06.07
✎
11:35
|
мням..надо повернуть задачу в другую плоскость..
исать тип объекта. |
|||
|
27
Immortal
09.06.07
✎
11:37
|
искать то есть..
|
|||
|
28
Immortal
09.06.07
✎
11:38
|
в гуиде есть информация о таблице в которой храниццо элемент или нет?
|
|||
|
29
НЕА123
09.06.07
✎
11:43
|
(28) - судя по (25) - нет. +(РазДва).
|
|||
|
30
Immortal
09.06.07
✎
11:46
|
мдамс.. странно.
|
|||
|
31
Гений 1С
гуру
09.06.07
✎
11:52
|
(28) Ничего странного, так задумано. В GUID нет типа объекта, иначе бы не хватило места на уникальность.
|
|||
|
32
Immortal
09.06.07
✎
12:18
|
(31) ты неправ.. есть там привязка или нет к таблице при формировании гуида
никак не скажется на уникальности. если только на очень больших объёмах записей(~триллионы) |
|||
|
33
FLENDGER
09.06.07
✎
12:52
|
Если есть задача оптимизировать данную процедуру в (0), если возможность не использовать ПолучитьОбъект, который работает очень медленно, кроме того обращается к базе и требует от пользователя дополнительных прав на объекты...
В качестве альтернативы можно использовать подобную функцию Функция ПроверитьСсылку(Знач Ссылка, Знач Гуид) Перем Результат; Результат = Истина; //Получаем из ГУИДа ссылку в том формате, который использует сама 1С ТекстГуид = "" + ГУИД; СсылкаИзГУИД = ""; ПозицияТире = Найти(ТекстГуид, "-"); к = 0; Пока ПозицияТире > 0 И к <= 2 Цикл СсылкаИзГУИД = Лев(ТекстГуид, ПозицияТире-1) + СсылкаИзГУИД; ТекстГуид = Сред(ТекстГуид, ПозицияТире+1); ПозицияТире = Найти(ТекстГуид, "-"); к = к + 1; КонецЦикла; СсылкаИзГУИД = СтрЗаменить(ТекстГуид, "-", "") + СсылкаИзГУИД; //Проверяем, есть в полученной ссылке системные строки Если Найти("" + Ссылка, "Объект не найден") > 0 И Найти("" + Ссылка, СсылкаИзГУИД) > 0 Тогда Результат = Ложь; КонецЕсли; Возврат Результат; КонецФункции Алгоритм не оптимален, но в принципе довольно надежен... |
|||
|
34
Гений 1С
гуру
09.06.07
✎
15:34
|
(33) клево, слушай, а разве запрос в представлении не вернет для несущетвующего объекта Объект не найден? Тогда можно и запросом шебуршать, строго порциями по 255 таблиц, гыгыгы...
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |