Подгрузка реквизита из Справочника в Документ

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

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

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


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


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

Я и через общий модуль пробовал сделать, но никак
По теме из базы знаний
Найденные решения
4. scarl1n 12 17.01.25 11:06 Сейчас в теме
Код
&НаКлиенте
Процедура УслугаПриИзменении(Элемент)
   
   Объект.Стоимость = ПолучитьСтоимостьУслуги(Объект.Услуга);

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

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

КонецФункции
Показать полностью
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 17.01.25 11:01 Сейчас в теме
(1) Потому что Объект не Этот должен быть.
6. Vhett 17.01.25 16:35 Сейчас в теме
(1)
Стоимость = Справочники.Услуги.НайтиПоСсылке(Услуга).Стоимость;


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

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

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


+ предыдущие ответы тоже корректные. "ЭтотОбъект" - не подходит. Используй "ЭтаФорма"
Прикрепленные файлы:
3. melenaspb 208 17.01.25 11:04 Сейчас в теме
Стоимость = Справочники.Услуги.НайтиПоСсылке(Услуга).Стоимость;
У вас уже в Услуге ссылка на элемент справочника, зачем вы еще ищите ее в справочнике?
7. user2107191 17.01.25 17:12 Сейчас в теме
(3)
У вас уже в Услуге ссылка на элемент справочника, зачем вы еще ищите ее в справочнике?
Военная тайна.
4. scarl1n 12 17.01.25 11:06 Сейчас в теме
Код
&НаКлиенте
Процедура УслугаПриИзменении(Элемент)
   
   Объект.Стоимость = ПолучитьСтоимостьУслуги(Объект.Услуга);

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

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

КонецФункции
Показать полностью
5. scarl1n 12 17.01.25 11:07 Сейчас в теме
(4) А можно даже без условие на "ЗначениеЗаполнено" - у пустой ссылки значение будет 0
8. user2107191 17.01.25 17:13 Сейчас в теме
(5) Ага, а потом Услуга станет составного типа, и всё посыпется.
9. miniogn 44 17.01.25 22:28 Сейчас в теме
(8) Гадание на кофейной гуще. На начальном этапе и с ЗначениеЗаполнено и без него, одинаково нормально. Каждый напишет как привык.
Поскольку заранее не известно, что потом поменяется.
Может у нового типа вместо Стоимость будет реквизит Сумма.
А может Стоимость вообще в регистр перенесут.
Сейчас с применением ЗначениеЗаполнено не свалится при расширении типа.
А без, быстрее отловишь ошибку почему документ не правильно рассчитывается после внесенных доработок.
Ещё можно так написать
Если ТипЗнч(Услуга) <> Тип("СправочникСсылка.Услуга") или Услуга.Пустая() Тогда
	ВызватьИсключение "Параметр Услуга - ожидается значение типа СправочникСсылка.Услуга";
КонецЕсли;
10. user2122899 18.01.25 04:10 Сейчас в теме
(4)
&НаКлиенте
Процедура УслугаПриИзменении(Элемент)

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

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

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

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

КонецФункции
Показать


Спасибо большое
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот