|
Отличить Объект от Ссылки | ☑ | ||
---|---|---|---|---|
0
Liova
24.04.12
✎
11:16
|
Всем привет, правильно ли так определить Ссылка это или объект, либо есть более элегантный способ?
Функция ЭтоСсылка(СсылкаИлиОбъект); Возврат (СсылкаИлиОбъект = СсылкаИлиОбъект.Ссылка); КонецФункции |
|||
1
zak555
24.04.12
✎
11:17
|
как бы Ссылка = Сссылка.Ссылка
|
|||
2
Ненавижу 1С
гуру
24.04.12
✎
11:18
|
(1) а он что-то другое написал?
|
|||
3
H A D G E H O G s
24.04.12
✎
11:19
|
ТипЗнч()
|
|||
4
H A D G E H O G s
24.04.12
✎
11:19
|
(1) pfff
|
|||
5
zak555
24.04.12
✎
11:20
|
(2) я к тому, что если переменная ссылка, то у её всё равно будет "свойство" ссылка
|
|||
6
Ненавижу 1С
гуру
24.04.12
✎
11:20
|
(5) а он в (0) именно это и пользует ))
|
|||
7
Liova
24.04.12
✎
11:23
|
(3) - мне всё равно, какой конкретно объект или ссылка, даже пофиг, справочник это или документ или ещё что. Главное отличить, ссылка это или объект.
|
|||
8
D_Pavel
24.04.12
✎
11:23
|
Вообще-то он спросил более элегантный способ чем (0), (1)
|
|||
9
zak555
24.04.12
✎
11:25
|
Функция ЭтоСсылка(СсылкаИлиОбъект);
Возврат ( Найти(ТипЗнч (СсылкаИлиОбъект, "Ссылка")) > 0 ); КонецФункции |
|||
10
D_Pavel
24.04.12
✎
11:26
|
(0) Ничего более хорошего я не нашел. Твой вариант лучший.
|
|||
11
Liova
24.04.12
✎
11:27
|
(9) Здесь лучше "Ссылка.", а то мало ли будут метаданные с подстрокой "Ссылка". Но это может работать быстрее, чем (0), надо попробовать.
|
|||
12
Ненавижу 1С
гуру
24.04.12
✎
11:28
|
(9) садись 2
Сообщить(ТипЗнч(Справочники.Валюты.ПустаяСсылка())); //в 8.2 выдает "Валюты" |
|||
13
acsent
24.04.12
✎
11:34
|
(9) небезопасный вариант, а если Reference ?
|
|||
14
hhhh
24.04.12
✎
11:36
|
самый элегантный способ в типовых
Функция ОпределитьПоЭлементуЭтоСсылка(Элемент, ИмяБазовогоТипа, ТипЭлемента, ИмяДляЗапроса) МетаданныеЭлемента = Элемент.Метаданные(); Если ИмяБазовогоТипа = "Справочники" Тогда ТипСсылки = Тип("СправочникСсылка." + МетаданныеЭлемента.Имя); ИмяДляЗапроса = "Справочник." + МетаданныеЭлемента.Имя; ИначеЕсли ИмяБазовогоТипа = "Документы" Тогда ТипСсылки = Тип("ДокументСсылка." + МетаданныеЭлемента.Имя); ИмяДляЗапроса = "Документ." + МетаданныеЭлемента.Имя; Иначе ТипСсылки = Неопределено; КонецЕсли; Возврат ТипЭлемента = ТипСсылки; КонецФункции |
|||
15
Ненавижу 1С
гуру
24.04.12
✎
11:36
|
(14) пистец
|
|||
16
hhhh
24.04.12
✎
11:38
|
(15) ну согласись, за Ссылка.Ссылка и если ещё это в цикле - нужно сразу руки отрубать, и лучше если выше локтя.
|
|||
17
zak555
24.04.12
✎
11:40
|
(12) тогда так :
Функция ЭтоСсылка(СсылкаИлиОбъект) Если НЕ ЗначениеЗаполнено(СсылкаИлиОбъект) Тогда Ложь; КонецЕсли; Возврат ( Найти(ТипЗнч (СсылкаИлиОбъект, "Ссылка")) > 0 ); КонецФункции |
|||
18
zak555
24.04.12
✎
11:42
|
перепутал
|
|||
19
zak555
24.04.12
✎
11:45
|
Функция ЭтоСсылка(СсылкаИлиОбъект)
_ТипЗнч = ТипЗнч (СсылкаИлиОбъект) ; Если Найти(_ТипЗнч, "Ссылка") > 0 Тогда Рез = Истина; ИначеЕсли Найти(_ТипЗнч, "Объект") > 0 Тогда Рез = Ложь; ИначеЕсли ЗначениеЗаполнено(СсылкаИлиОбъект) Тогда Рез = Истина; Иначе Рез = = Неопределено; // =))))) КонецЕсли; Возврат ( Рез ); КонецФункции |
|||
20
ll13
24.04.12
✎
11:51
|
(19) Ай молодец! а если у меня справочник называется "СсылкаОбъект" ?!
Функция ЭтоСсылкаНаСправочник(Значение) Возврат Лев(XMLТипЗнч(Значение).ИмяТипа,10) = "CatalogRef"; КонецФункции |
|||
21
zak555
24.04.12
✎
11:53
|
(20) специально для тебя
Функция ЭтоСсылка(СсылкаИлиОбъект) _ТипЗнч = ТипЗнч (СсылкаИлиОбъект) ; Если Найти(_ТипЗнч, "Ссылка.") > 0 или Найти(_ТипЗнч, "Ref.") > 0 Тогда Рез = Истина; ИначеЕсли Найти(_ТипЗнч, "Объект.") > 0 или Найти(_ТипЗнч, "Ref.") > 0 Тогда Рез = Ложь; ИначеЕсли ЗначениеЗаполнено(СсылкаИлиОбъект) Тогда Рез = Истина; Иначе Рез = = Неопределено; // =))))) КонецЕсли; Возврат ( Рез ); КонецФункции |
|||
22
Песец
24.04.12
✎
11:54
|
Попытка
х=ЧтоТо.ЭтотОбъект Возврат "Объект"; Исключение Возврат "Ссылка"; КонецПопытки |
|||
23
aleks-id
24.04.12
✎
11:54
|
Функция ЭтоСсылка(СсылкаИлиОбъект)
Возврат СтрДлина(ЗначениеВСтрокуВнутр(СсылкаИлиОбъект)) > 42 КонецФункции |
|||
24
Ненавижу 1С
гуру
24.04.12
✎
11:56
|
(21) ты забодал, смотри (12)
|
|||
25
zak555
24.04.12
✎
12:01
|
(24) там НЕ в 3тьем условие
|
|||
26
aleks-id
24.04.12
✎
12:05
|
(25) ты не вкурил. и на объект и на ссылку ТипЗнч в 8.2 возвращает одинаковую строку
|
|||
27
Ненавижу 1С
гуру
24.04.12
✎
12:05
|
(25) причем тут заполнено или нет, пример приведен на пустой ссылке по случаю, ссылка может быть заполнена
Строка(ТипЗнч(Справочники.Качество.Новый))="Качество" нет там подстроки Ссылка |
|||
28
zak555
24.04.12
✎
12:08
|
(26) (27) вот уж ваша 8ка =)
|
|||
29
aleks-id
24.04.12
✎
12:13
|
ну что, я выиграл? где мой пирожок?
|
|||
30
mooo
24.04.12
✎
12:15
|
(27) Строка(ТипЗнч(Справочники.Качество.Новый)) = "Справочник ссылка: Качество"
|
|||
31
mooo
24.04.12
✎
12:17
|
(23) +1
|
|||
32
Ненавижу 1С
гуру
24.04.12
✎
12:22
|
(30) в 8.2 это не так ))
|
|||
33
zak555
24.04.12
✎
12:23
|
(32) т.е. это из-за нововведений 8.2 ?
|
|||
34
Ненавижу 1С
гуру
24.04.12
✎
12:23
|
(33) именно
|
|||
35
zak555
24.04.12
✎
12:25
|
(34) и решается только, как в (23) ?
|
|||
36
Ненавижу 1С
гуру
24.04.12
✎
12:25
|
(35) я бы не стал так решать
|
|||
37
Liova
24.04.12
✎
12:27
|
Да, я смотрю тема даже более интересная, чем мне казалось.
|
|||
38
Ненавижу 1С
гуру
24.04.12
✎
12:28
|
(37) если что, я за (0)
|
|||
39
D_Pavel
24.04.12
✎
12:30
|
+1
(0) лучший |
|||
40
aleks-id
24.04.12
✎
12:32
|
(36) обоснуй?
|
|||
41
Ненавижу 1С
гуру
24.04.12
✎
12:33
|
(40) если в 8.3 изменится длина внутреннего представления?
|
|||
42
Kashemir
24.04.12
✎
12:34
|
(26)
ТипЗнч(Ссылка) Категория работника (агро) Тип ТипЗнч(Объект) Справочник объект: Категория работника (агро) Тип |
|||
43
aleks-id
24.04.12
✎
12:36
|
(41) а если в 8.3 изменится Ссылка на что то еще?
|
|||
44
Ненавижу 1С
гуру
24.04.12
✎
12:37
|
(43) тогда это будет другой язык, как 7.7 и 8.х
вероятность есть, но, имхо, меньше |
|||
45
aleks-id
24.04.12
✎
12:38
|
(44) посмотри представление идентификаторов в 7,8 и скажи - могут они поменять длину?
|
|||
46
ЧеловекДуши
24.04.12
✎
12:39
|
(45)Могут, кто мешает? ;)
|
|||
47
ЧеловекДуши
24.04.12
✎
12:39
|
+ если ты разработчик языка :)
|
|||
48
D_Pavel
24.04.12
✎
12:43
|
Причем здесь длина идентификатора? Где в документации написано какой он длины у ссылки и объекта? Нет такого, так что не используйте
|
|||
49
fisher
24.04.12
✎
12:55
|
XMLИмяТипа = XMLТипЗнч(Хрень).ИмяТипа;
Если Найти(XMLИмяТипа, "Ref") > 0 Тогда Сообщить("Ссылка"); ИначеЕсли Найти(XMLИмяТипа, "Object") > 0 Тогда Сообщить("Объект"); КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |