Книга знаний

1С:Предприятие / v8 / Приемы программирования / Встроенный язык

v8: Безопасное извлечение ссылки

Иногда нужно извлечь ссылку или проверить, является ли значение ссылкой или объектом, содержащим ссылку, причем сделать это без конструкций попытка-исключение. Небольшая библиотека функций обеспецивает этот функционал.Автор статьи:
Последняя редакция №1 от 27.02.07
URL: http://kb.mista.ru/article.php?id=495

Ключевые слова: типы


Хочу заметить, что работа с типами организована в 1с неполно, из-за чего и приходится заводить подобные костыли.

//Проверяет, что значение Зн - это ссылка
//Написал, отладил 20070227 fixin
Функция обЭтоСсылка(Зн) экспорт
    Перем Ссылка;
    
    Ссылка=обИзвлечьСсылку(Зн);
    Возврат Зн=Ссылка и Ссылка<>Неопределено;
КонецФункции

//Проверяет, что значение Зн - это объект, который содержит ссылку
//Написал, отладил 20070227 fixin
Функция обЭтоОбъектССсылкой(Зн) экспорт
    Перем Ссылка;
    Ссылка=обИзвлечьСсылку(Зн);
    Возврат Зн<>Ссылка и Ссылка<>Неопределено;
КонецФункции


//Проверяет, что значение Зн - это примитивный тип (простым перебором)
//Написал, отладил 20070227 fixin
Функция обЭтоПримитивныйТип(Зн) экспорт
    Возврат
        ТипЗнч(Зн)=Тип("Null") ИЛИ 
        ТипЗнч(Зн)=Тип("Неопределено") ИЛИ 
        ТипЗнч(Зн)=Тип("Число") ИЛИ 
        ТипЗнч(Зн)=Тип("Строка") ИЛИ 
        ТипЗнч(Зн)=Тип("Дата") ИЛИ 
        ТипЗнч(Зн)=Тип("Булево") ИЛИ 
        ТипЗнч(Зн)=Тип("Тип");
КонецФункции


//Извлекает ссылку из объекта или ссылки.
//Если извлечь ссылку невозможно, возвращает Неопределено.
//Работает корректно для всех типов, в том числе и для примитивных
//Написал, отладил 20070227 fixin
Функция обИзвлечьСсылку(Зн) экспорт
    Перем С;
    Если обЭтоПримитивныйТип(Зн) Тогда
        Возврат Неопределено;
    КонецЕсли;
    С=Новый Структура("Ссылка", Неопределено);
    ЗаполнитьЗначенияСвойств(С, Зн);
    Возврат С.Ссылка;
КонецФункции

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика