v8: Безопасное извлечение ссылки| Иногда нужно извлечь ссылку или проверить, является ли значение ссылкой или объектом, содержащим ссылку, причем сделать это без конструкций попытка-исключение.
Небольшая библиотека функций обеспецивает этот функционал. |  | Автор статьи: Гений 1С | Редакторы: Fragster Последняя редакция №4 от 23.10.07 | История URL: http://kb.mista.ru/article.php?id=495 |  |  
  Ключевые слова: типы
 
  Хочу заметить, что работа с типами организована в 1с неполно, из-за чего и приходится заводить подобные костыли.
 
 //Проверяет, что значение Зн - это ссылка
//Написал, отладил 20070227 fixin
Функция обЭтоСсылка(Зн) экспорт
    Перем Ссылка;
    
    Ссылка=обИзвлечьСсылку(Зн);
    Возврат Зн=Ссылка и Ссылка<>Неопределено;
КонецФункции
//Проверяет, что значение Зн - это объект, который содержит ссылку
//Написал, отладил 20070227 fixin
Функция обЭтоОбъектССсылкой(Зн) экспорт
    Перем Ссылка;
    Ссылка=обИзвлечьСсылку(Зн);
    Возврат Зн<>Ссылка и Ссылка<>Неопределено;
КонецФункции
//Проверяет, что значение Зн - это примитивный тип (простым перебором)
//Написал, отладил 20070227 fixin
Функция обЭтоПримитивныйТип(Зн) экспорт
    Возврат
        ТипЗнч(Зн)=Тип("Null") ИЛИ 
        ТипЗнч(Зн)=Тип("Неопределено") ИЛИ 
        ТипЗнч(Зн)=Тип("Число") ИЛИ 
        ТипЗнч(Зн)=Тип("Строка") ИЛИ 
        ТипЗнч(Зн)=Тип("Дата") ИЛИ 
        ТипЗнч(Зн)=Тип("Булево") ИЛИ 
        ТипЗнч(Зн)=Тип("Тип");
КонецФункции
//Извлекает ссылку из объекта или ссылки.
//Если извлечь ссылку невозможно, возвращает Неопределено.
//Работает корректно для всех типов, в том числе и для примитивных
//Написал, отладил 20070227 fixin
Функция обИзвлечьСсылку(Зн) экспорт
    Перем С;
    Если обЭтоПримитивныйТип(Зн) Тогда
        Возврат Неопределено;
    КонецЕсли;
    С=Новый Структура("Ссылка", Неопределено);
    ЗаполнитьЗначенияСвойств(С, Зн);
    Возврат С.Ссылка;
КонецФункции
  |