Имя: Пароль:
1C
1С v8
Отличить Объект от Ссылки
,
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 Тогда
  Сообщить("Объект");
КонецЕсли;