Есть параметр функции, в который передается либо объект, либо ссылка. Это может быть любой документ. Как понять - объект это, или ссылка?
Конструкция типа

Если Найти(ТипЗнчСтр(Документ), "ДокументОбъект") <> 0 Тогда
КонецЕсли;

Не вполне надежна, т.к. в наименовании документа может встретиться "ДокументОбъект"
---
ДокументыМенеджер.ТипВсеСсылки (DocumentsManager.AllRefsType)
ДокументыМенеджер (DocumentsManager)
ТипВсеСсылки (AllRefsType)
Синтаксис:

ТипВсеСсылки()
Возвращаемое значение:

Тип: ОписаниеТипов.

Описание:

Получает описание типов, содержащее типы ссылок документов.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Пример:

МассивТипов = ЭлементыФормы.ПолеВводаВариант.ТипЗначения.Типы();
Для каждого ЭлементМассива Из МассивТипов Цикл
    Если Документы.ТипВсеСсылки().СодержитТип(ЭлементМассива) Тогда
        МассивНужныхТипов.Добавить(ЭлементМассива);
    КонецЕсли;
КонецЦикла;
---
Kutuzov, Не надо на вхождение строки проверять, надо проверять на типЗнч(НекоеЗначение)=ТипЗнч(Документ.ОказаниеУслугНапример.ПустаяСсылка()) тогда ссылка
---
deniseek77, я же написал:
>Это может быть любой документ
Ваша конструкция не годится, т.к. вид документа не известен.
---
Kutuzov, можно вот так

```1c
    Попытка
    СсылкаОбъекта = Объект.Ссылка;
    ОбъектОбъекта = СсылкаОбъект.ПолучитьОбъект();
    Исключение
    СсылкаОбъекта = Null;
    ОбъектОбъекта = Неопределено;
    КонецПопытки;

    ЭтоОбъектныйТип = НЕ (СсылкаОбъекта = Null);
    ЭтоОбъект = ЭтоОбъектныйТип И ТипЗнч(ОбъектОбъекта) = ТипЗнч(Объект);
```
---
```1c
    Если Документ.Ссылка = Документ Тогда
    // это ссылка
    Иначе
    // это объект
    КонецЕсли;
```
---
fnxash, нельзя через точку обращаться, это снижает быстродействие.
---
А передавать в ф-цию только ссылку или только объект не судьба?
---
ZergKRSK, если код обработки ссылки и объекта примерно одинаковый, то не судьба.
---
Можно сделать проверку следующим образом (Работает для всех документов(!)):

```1c
    Если ТипЗнч(Первый) = Тип("ДокументСсылка."+ТипЗнч(Первый)) Тогда
    //ссылка
    ...
    ИначеЕсли ТипЗнч(Первый) = Тип("ДокументОбъект."+ТипЗнч(Первый)) Тогда
    //объект
    .....
    КонецЕсли;
```
---
mrmasson, не работает, проверьте - выдает ошибку.
---
ДокументыМенеджер.ТипВсеСсылки (DocumentsManager.AllRefsType)
ДокументыМенеджер (DocumentsManager)
ТипВсеСсылки (AllRefsType)
Синтаксис:

ТипВсеСсылки()
Возвращаемое значение:

Тип: ОписаниеТипов.

Описание:

Получает описание типов, содержащее типы ссылок документов.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Пример:

МассивТипов = ЭлементыФормы.ПолеВводаВариант.ТипЗначения.Типы();
Для каждого ЭлементМассива Из МассивТипов Цикл
    Если Документы.ТипВсеСсылки().СодержитТип(ЭлементМассива) Тогда
        МассивНужныхТипов.Добавить(ЭлементМассива);
    КонецЕсли;
КонецЦикла;
---
starjevschik, Ага хороший вариант
---
(14) SeverBaP,
возможно ... но только для документов.

вариант (5) - универсален - для любых ссылочных типов

к тому же он учитывает,
что перечисления особый "ссылочный" тип - у них нет объекта

и что возможно могут передаваться не "объектного" типа значения.
---
Rothschild, нужно всегда стремится к избавлению всяких "попыток исключение конецпопытки"
---
SeverBaP,

нужно всегда стремится к избавлению всяких "попыток исключение конецпопытки"

есть аргументированное обоснование?
---
ЗЫ
следует избегать передачи объектов (в смысле значений вроде "ДокументОбъект")
с клиента на сервер - это "мутабельные" значения
для файловой базы проканает, а для клиент-серверной - нет
---
starjevschik,
как я понимаю, задача стоит так:
как понять, что передали через параметр:
- ссылочный (объектный) это тип или нет
- и перадана ссылка на объект или сам объект
---
Rothschild, я так же понимаю, поэтому и предлагаю правильное штатное решение :)

```1c
    Если Документы.ТипВсеСсылки().СодержитТип
```
---
Искал ответ на этот же вопрос. Почитал... Что-то все не понравилось. А так не пойдет?

```1c
    Если Док.Ссылка = Док Тогда
    // Док - это ссылка
    Иначе
    // Док - это объект
    КонецЕсли;
```
---
Или даже так:

```1c
    Если ТипЗнч(Док.Ссылка) = ТипЗнч(Док) Тогда
    // Док - это ссылка
    Иначе
    // Док - это объект
    КонецЕсли;
```
---
Метод БСП.

```1c
    ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Док));
```

Если БСП нет, можно посмотреть внутри - реализация простая, основанная на способе из (7).
Получают .ТипВсеСсылки() всех менеджеров ссылочных типов.
---
ТипЗначенияСтрокой = XMLТипЗнч(Документ).ИмяТипа;
ЭтоОбъект = СтрНайти(ТипЗначенияСтрокой, "Object.") > 0;
---
```1c
    ТипЗнч(Параметр) = Тип("ДокументСсылка." + Параметр.Метаданные().Имя)
```
---
Обобщу.

Три способа:

```1c
    ПоСсылке1 = ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Параметр)); //из БСП
    ПоСсылке2 = ТипЗнч(Параметр)= Тип("ДокументСсылка."+Параметр.Метаданные().Имя);
    ПоСсылке3 = СтрНайти(XMLТипЗнч(Параметр).ИмяТипа,"DocumentRef")>0;
```

По замеру производительности самый быстрый - первый, самый медленный второй.
---
По первому способу Документы из расширений в пролете.
---
В актуальной версии платформы должно работать уже.
---
```1c
    Если ТипЗНЧ(Источник) = ТипЗНЧ(Источник.Ссылка) Тогда
    //В переменной ссылка
    Иначе
    //В Переменной объект
    КонецЕсли;
```