Как отличить ссылку от объекта?
Есть параметр функции, в который передается либо объект, либо ссылка. Это может быть любой документ. Как понять - объект это, или ссылка?
Конструкция типа
Если Найти(ТипЗнчСтр(Документ), "ДокументОбъект") <> 0 Тогда
КонецЕсли;
Не вполне надежна, т.к. в наименовании документа может встретиться "ДокументОбъект"
Конструкция типа
Если Найти(ТипЗнчСтр(Документ), "ДокументОбъект") <> 0 Тогда
КонецЕсли;
Не вполне надежна, т.к. в наименовании документа может встретиться "ДокументОбъект"
По теме из базы знаний
- Обзор полезных методов БСП 3.1.4
- Как из 1С отдать миллионы строк в BI и успеть это сделать быстро
- Infostart Toolkit – чем инструмент будет полезен для аналитиков и консультантов
- Расширение глобального поиска 1С, или Глобальный поиск "на максималках"
- Собственная начальная страница с избранным, историей и сообщениями
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(1) Kutuzov, можно вот так
Попытка
СсылкаОбъекта = Объект.Ссылка;
ОбъектОбъекта = СсылкаОбъект.ПолучитьОбъект();
Исключение
СсылкаОбъекта = Null;
ОбъектОбъекта = Неопределено;
КонецПопытки;
ЭтоОбъектныйТип = НЕ (СсылкаОбъекта = Null);
ЭтоОбъект = ЭтоОбъектныйТип И ТипЗнч(ОбъектОбъекта) = ТипЗнч(Объект);
Показать
Можно сделать проверку следующим образом (Работает для всех документов(!)):
Если ТипЗнч(Первый) = Тип("ДокументСсылка."+ТипЗнч(Первый)) Тогда
//ссылка
...
ИначеЕсли ТипЗнч(Первый) = Тип("ДокументОбъект."+ТипЗнч(Первый)) Тогда
//объект
.....
КонецЕсли;
Показать
ДокументыМенеджер.ТипВсеСсылки (DocumentsManager.AllRefsType)
ДокументыМенеджер (DocumentsManager)
ТипВсеСсылки (AllRefsType)
Синтаксис:
ТипВсеСсылки()
Возвращаемое значение:
Тип: ОписаниеТипов.
Описание:
Получает описание типов, содержащее типы ссылок документов.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Пример:
МассивТипов = ЭлементыФормы.ПолеВводаВариант.ТипЗначения.Типы();
Для каждого ЭлементМассива Из МассивТипов Цикл
Если Документы.ТипВсеСсылки().СодержитТип(ЭлементМассива) Тогда
МассивНужныхТипов.Добавить(ЭлементМассива);
КонецЕсли;
КонецЦикла;
ДокументыМенеджер (DocumentsManager)
ТипВсеСсылки (AllRefsType)
Синтаксис:
ТипВсеСсылки()
Возвращаемое значение:
Тип: ОписаниеТипов.
Описание:
Получает описание типов, содержащее типы ссылок документов.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Пример:
МассивТипов = ЭлементыФормы.ПолеВводаВариант.ТипЗначения.Типы();
Для каждого ЭлементМассива Из МассивТипов Цикл
Если Документы.ТипВсеСсылки().СодержитТип(ЭлементМассива) Тогда
МассивНужныхТипов.Добавить(ЭлементМассива);
КонецЕсли;
КонецЦикла;
(8) (14) SeverBaP,
возможно ... но только для документов.
вариант (5) - универсален - для любых ссылочных типов
к тому же он учитывает,
что перечисления особый "ссылочный" тип - у них нет объекта
и что возможно могут передаваться не "объектного" типа значения.
возможно ... но только для документов.
вариант (5) - универсален - для любых ссылочных типов
к тому же он учитывает,
что перечисления особый "ссылочный" тип - у них нет объекта
и что возможно могут передаваться не "объектного" типа значения.
Метод БСП.
Если БСП нет, можно посмотреть внутри - реализация простая, основанная на способе из (7).
Получают .ТипВсеСсылки() всех менеджеров ссылочных типов.
ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Док));
Если БСП нет, можно посмотреть внутри - реализация простая, основанная на способе из (7).
Получают .ТипВсеСсылки() всех менеджеров ссылочных типов.
Обобщу.
Три способа:
По замеру производительности самый быстрый - первый, самый медленный второй.
Три способа:
ПоСсылке1 = ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Параметр)); //из БСП
ПоСсылке2 = ТипЗнч(Параметр)= Тип("ДокументСсылка."+Параметр.Метаданные().Имя);
ПоСсылке3 = СтрНайти(XMLТипЗнч(Параметр).ИмяТипа,"DocumentRef")>0;
По замеру производительности самый быстрый - первый, самый медленный второй.
Вакансии
Разработчик 1С (от middle до senior), до 300 К gross
Санкт-Петербург
зарплата от 195 000 руб. до 300 000 руб.
Полный день
Санкт-Петербург
зарплата от 195 000 руб. до 300 000 руб.
Полный день