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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Конструктором создается экземпляр структуры;
  • У экземпляра вызывается метод СформироватьПредставление();
  • После этого можно использовать свойство экземпляра Представление.
@НаКлиенте
метод Алгоритм()
 
    знч Сотрудник = новый ФИО("Иванов", "Иван", "Иванович")
    Сотрудник.СформироватьПредставление()
    
    знч МестоЖительства = новый ПочтовыйАдрес("Россия", "Екатеринбург", "Лесная", "12")
    МестоЖительства.СформироватьПредставление()
    
    знч ТекстСообщения = 
                        "Уважаемый %Сотрудник.Представление!
                        По адресу %МестоЖительства.Представление будет проводиться ..."
                        
;