Пример контракта типа — структуры
Цель примера — одинаковым образом обрабатывать разные структуры.
В проекте есть структуры ФИО и ПочтовыйАдрес. Для автоматической обработки данных нужно чтобы они имели представление. Алгоритм формирования представления может быть сложным, экземпляры структур могут создаваться в разных частях проекта. Поэтому алгоритм формирования представления должен быть частью типа структуры и должен вызываться "снаружи" экземпляра одинаковым образом для разных структур.
Чтобы обеспечить такую функциональность в проекте используется контракт типа со свойством Представление и методом СформироватьПредставление().
Файл его описания КонтрактПредставления.yaml выглядит следующим образом.
ВидЭлемента: КонтрактТипа
Ид: 17d9adf4-26f1-42f1-bc7e-5ffd6b6ec7ec
ОбластьВидимости: ВПодсистеме
Имя: КонтрактПредставления
Окружение: КлиентИСервер
Свойства:
-
Имя: Представление
Тип: Строка
Модуль контракта КонтрактПредставления.xbsl выглядит следующим образом.
абстрактный метод СформироватьПредставление()
Реализация этого контракта находится в структурах ФИО и ПочтовыйАдрес. Две реализации.
В каждой из них есть поле Представление. Например, в модуле ФИО.yaml.
ВидЭлемента: Структура
Ид: bdbde9dd-b43d-482c-9873-7127fac0465d
ОбластьВидимости: ВПодсистеме
Имя: ФИО
Окружение: КлиентИСервер
Поля:
-
Имя: Фамилия
Тип: Строка
-
Имя: Имя
Тип: Строка
-
Имя: Отчество
Тип: Строка
-
Имя: Представление
Тип: Строка
НастройкиТипа:
Контракты:
- КонтрактПредставления
В модуле структуры ФИО.xbsl есть собственная реализация метода СформироватьПредставление().
@ВПроекте
@Реализация
метод СформироватьПредставление()
Представление = "%Фамилия %Имя %Отчество"
;
В модуле структуры ПочтовыйАдрес.xbsl так же есть собственная реализация метода СформироватьПредставление().
@ВПроекте
@Реализация
метод СформироватьПредставление()
Представление = "ул.%Улица д.%Дом корп.%Корпус кв.%Квартира, %Город %Страна"
;
В результате использование этих структур выглядит следующим образом:
- Конструктором создается экземпляр структуры;
- У экземпляра вызывается метод СформироватьПредставление();
- После этого можно использовать свойство экземпляра Представление.
@НаКлиенте
метод Алгоритм()
знч Сотрудник = новый ФИО("Иванов", "Иван", "Иванович")
Сотрудник.СформироватьПредставление()
знч МестоЖительства = новый ПочтовыйАдрес("Россия", "Екатеринбург", "Лесная", "12")
МестоЖительства.СформироватьПредставление()
знч ТекстСообщения =
"Уважаемый %Сотрудник.Представление!
По адресу %МестоЖительства.Представление будет проводиться ..."
;