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