Перейти к основному содержимому

Пример контракта типа — структуры

Цель примера — одинаковым образом обрабатывать разные структуры.

В проекте есть структуры ФИО и ПочтовыйАдрес. Для автоматической обработки данных нужно, чтобы они имели представление. Алгоритм формирования представления может быть сложным, экземпляры структур могут создаваться в разных частях проекта. Поэтому алгоритм формирования представления должен быть частью типа структуры и должен вызываться «снаружи» экземпляра одинаковым образом для разных структур.

Чтобы обеспечить такую функциональность в проекте, используется контракт типа со свойством ПредставлениеСтруктуры и методом СформироватьПредставлениеСтруктуры().

важно

Используйте уникальные имена свойств контракта типа. Если имя свойства предопределено в типе и доступно только для чтения, то это вызовет ошибку. Например, свойство Представление нельзя реализовать в модуле объекта элемента проекта Документ.

Файл его описания КонтрактПредставления.yaml выглядит следующим образом.

КонтрактПредставления.yaml
ВидЭлемента: КонтрактТипа
Ид: 17d9adf4-26f1-42f1-bc7e-5ffd6b6ec7ec
ОбластьВидимости: ВПодсистеме
Имя: КонтрактПредставления
Окружение: КлиентИСервер
Свойства:
-
Имя: ПредставлениеСтруктуры
Тип: Строка

Модуль контракта КонтрактПредставления.xbsl выглядит следующим образом.

КонтрактПредставления.xbsl
абстрактный метод СформироватьПредставлениеСтруктуры()

Две реализации этого контракта находится в структурах ФИО и ПочтовыйАдрес.

В каждой из них есть поле ПредставлениеСтруктуры. Например, в модуле ФИО.yaml.

ФИО.yaml
ВидЭлемента: Структура
Ид: bdbde9dd-b43d-482c-9873-7127fac0465d
ОбластьВидимости: ВПодсистеме
Имя: ФИО
Окружение: КлиентИСервер
Поля:
-
Имя: Фамилия
Тип: Строка
-
Имя: Имя
Тип: Строка
-
Имя: Отчество
Тип: Строка
-
Имя: ПредставлениеСтруктуры
Тип: Строка
НастройкиТипа:
Контракты:
- КонтрактПредставления

В модуле структуры ФИО.xbsl есть собственная реализация метода СформироватьПредставлениеСтруктуры().

ФИО.xbsl
@ВПроекте
@Реализация
метод СформироватьПредставлениеСтруктуры()
ПредставлениеСтруктуры = "%Фамилия %Имя %Отчество"
;

В модуле структуры ПочтовыйАдрес.xbsl также есть собственная реализация метода СформироватьПредставлениеСтруктуры().

ПочтовыйАдрес.xbsl
@ВПроекте
@Реализация
метод СформироватьПредставлениеСтруктуры()
ПредставлениеСтруктуры = "ул. %Улица д. %Дом корп. %Корпус кв. %Квартира, %Город %Страна"
;

В результате использование этих структур выглядит следующим образом:

  • конструктором создается экземпляр структуры;
  • у экземпляра вызывается метод СформироватьПредставлениеСтруктуры();
  • после этого можно использовать свойство экземпляра ПредставлениеСтруктуры.
ОбщийМетод
@НаКлиенте
метод Алгоритм()

знч Сотрудник = новый ФИО("Иванов", "Иван", "Иванович")
Сотрудник.СформироватьПредставлениеСтруктуры()

знч МестоЖительства = новый ПочтовыйАдрес("Лесная", 42, 1, 322, "Екатеринбург", "Россия")
МестоЖительства.СформироватьПредставлениеСтруктуры()

знч ТекстСообщения =
"Уважаемый %Сотрудник.ПредставлениеСтруктуры!
По адресу %МестоЖительства.ПредставлениеСтруктуры будет проводиться ..."
;

См. также​