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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также