Есть справочник "Услуги" с реквизитом "Стоимость" и "НаименованиеУслуги"
И есть документ "ОказаниеУслуги", в котором при выборе Услуги с типом Справочник.Ссылка.Услуги
У нас автоматически подгружалась цена в поле документа "ОказаниеУслуги" "Стоимость" из Справочника "НаименованиеУслуги"

И вот так выглядит мой код:

```1c
    &НаКлиенте
    Процедура УслугаПриИзменении(Элемент)
    Если Не ЭтотОбъект.Услуга.ПустаяСсылка() Тогда
    ЭтотОбъект.Стоимость = ПолучитьСтоимостьУслуги(ЭтотОбъект.Услуга);
    Иначе
    ЭтотОбъект.Стоимость = 0;
    КонецЕсли;
    КонецПроцедуры
    &НаСервере
    Функция ПолучитьСтоимостьУслуги(Услуга)
    Если Не Услуга.ПустаяСсылка() Тогда
    Стоимость = Справочники.Услуги.НайтиПоСсылке(Услуга).Стоимость;
    Возврат Стоимость;
    КонецЕсли;

    Возврат 0;
    КонецФункции
```

К полю Услуга я обращался и как Элемент.Услуга
Но все время одна и та же ошибка:
Поле объекта не обнаружено (Услуга)

В строке {Документ.ОказаниеУслуги.Форма.ФормаДокумента.Форма(3)}:Если Не ЭтотОбъект.Услуга.ПустаяСсылка() Тогда

Я и через общий модуль пробовал сделать, но никак
---
Код
&НаКлиенте
Процедура УслугаПриИзменении(Элемент)

   Объект.Стоимость = ПолучитьСтоимостьУслуги(Объект.Услуга);

КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьСтоимостьУслуги(Услуга)

   Если ЗначениеЗаполнено(Услуга) Тогда
      Возврат Услуга.Стоимость;
   Иначе
      Возврат 0;
   КонецЕсли;

КонецФункции
Показать полностью
---
Потому что Объект не Этот должен быть.
---
Стоимость = Справочники.Услуги.НайтиПоСсылке(Услуга).Стоимость;

Если у вас нет своей экспортной функции с именем "НайтиПоСсылке" в менеджере справочника "Услуги", то конечно это работать не будет.

Используйте лучше "НайтиПоКоду" или "НайтиПоНаименованию"

```1c
    Стоимость = Справочники.Услуги.НайтиПоНаименованию(Услуга.Наименование).Стоимость;
```

+ предыдущие ответы тоже корректные. "ЭтотОбъект" - не подходит. Используй "ЭтаФорма"
---
Стоимость = Справочники.Услуги.НайтиПоСсылке(Услуга).Стоимость;
У вас уже в Услуге ссылка на элемент справочника, зачем вы еще ищите ее в справочнике?
---
У вас уже в Услуге ссылка на элемент справочника, зачем вы еще ищите ее в справочнике? Военная тайна.
---
Код
&НаКлиенте
Процедура УслугаПриИзменении(Элемент)

   Объект.Стоимость = ПолучитьСтоимостьУслуги(Объект.Услуга);

КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьСтоимостьУслуги(Услуга)

   Если ЗначениеЗаполнено(Услуга) Тогда
      Возврат Услуга.Стоимость;
   Иначе
      Возврат 0;
   КонецЕсли;

КонецФункции
Показать полностью
---
А можно даже без условие на "ЗначениеЗаполнено" - у пустой ссылки значение будет 0
---
Ага, а потом Услуга станет составного типа, и всё посыпется.
---
Гадание на кофейной гуще. На начальном этапе и с ЗначениеЗаполнено и без него, одинаково нормально. Каждый напишет как привык.
Поскольку заранее не известно, что потом поменяется.
Может у нового типа вместо Стоимость будет реквизит Сумма.
А может Стоимость вообще в регистр перенесут.
Сейчас с применением ЗначениеЗаполнено не свалится при расширении типа.
А без, быстрее отловишь ошибку почему документ не правильно рассчитывается после внесенных доработок.
Ещё можно так написать

```1c
    Если ТипЗнч(Услуга) <> Тип("СправочникСсылка.Услуга") или Услуга.Пустая() Тогда
    ВызватьИсключение "Параметр Услуга - ожидается значение типа СправочникСсылка.Услуга";
    КонецЕсли;
```
---
Спасибо большое