Книга: Разработка интерфейса прикладных решений на платформе "1С:Предприятие 8"
Назад: Пример 1
Дальше: Пример 3

Пример 2

Второй пример, который мы рассмотрим, будет заключаться в том, чтобы получить реквизит от ссылочного значения, хранящегося в реквизите формы. Как раз у документа Накладная есть реквизит ссылочного типа – Поставщик. Мы будем получать ИНН этого поставщика.

Примечание

Пример можно посмотреть в демонстрационной базе «Работа с данными объекта в форме», форма документа Накладная, группа команд Примеры, команда Реквизит от ссылки. Это локальная команда формы документа Накладная.

Мы, как и в предыдущем примере, по-прежнему находимся в модуле формы на клиенте. В контексте клиента, как мы уже упоминали выше, ссылочные типы очень сильно ограничены в своих возможностях. В частности, нельзя получить значение реквизита от ссылки «через точку». Это можно сделать только в контексте сервера.

Поэтому для решения нашей задачи мы создадим серверную внеконтекстную функцию, которую вызовем с клиента и передадим в нее ссылку на поставщика. В теле функции, на сервере, мы получим ИНН поставщика и вернем его на клиент.

Локальная команда формы, вызывающая серверную функцию, будет выглядеть следующим образом (листинг 3.22).

Листинг 3.22. Обработчик локальной команды формы

&НаКлиенте

Процедура РеквизитОтСсылки(Команда)

 

Сообщение = Новый СообщениеПользователю;

Сообщение.Текст = ПолучитьИННПоставщика(Объект.Поставщик);

Сообщение.Сообщить();

 

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

Здесь в текст сообщения мы помещаем то, что вернет нам серверная функция ПолучитьИННПоставщика(). Эту функцию мы опишем в модуле формы следующим образом (листинг 3.23).

Листинг 3.23. Серверная функция для получения реквизита от ссылочного значения

&НаСервереБезКонтекста

Функция ПолучитьИННПоставщика(Поставщик)

 

Возврат Поставщик.ИНН;

 

КонецФункции

То есть на сервере мы сразу же получаем значение реквизита «через точку» от полученной ссылки на поставщика.

Обратите внимание еще раз: эта функция не использует контекст формы. Потому что все, что нам нужно передать на сервер, – это только ссылка, и мы передаем ее в параметре функции. Использовать контекстный вызов и «гонять» на сервер весь контекст формы только ради того, чтобы на сервере взять из него значение одного реквизита формы, было бы слишком расточительно.

Назад: Пример 1
Дальше: Пример 3