Тип встроенного языка, порождаемый элементом проекта вида «КонтрактСервиса»

После того, как вы добавили в проект контракт сервиса и дали ему имя, создаст один тип встроенного языка. Имя этого типа совпадает с именем вашего контракта.

Например, если в проекте есть контракт APIСервиса, то будет создан тип APIСервиса. В общем случае имя этого типа выглядит следующим образом: имя-контракта-сервиса.

Тип «имя-контракта-сервиса»

Это абстрактный тип. Он доступен в том же окружении, которое указано в свойстве контракта Окружение: КлиентИСервер, Клиент, Сервер.

Этот тип содержит методы, объявленные в модуле контракта имя-контракта-сервиса.xbsl.

Кроме этого тип имеет статический метод, имя которого зависит от значения свойства контракта Множественный:

  • Истина — имя метода ПолучитьСервисы()
  • Ложь — имя метода ПолучитьСервис()

Эти методы предназначены для того, чтобы получить все экземпляры типов-одиночек, которые реализуют этот контракт.

Например, в обработчике события ПередЗаписью сначала выполняется собственный алгоритм, а затем получаются все реализации контракта КонтрактПодпискиПередЗаписью, которые имеются в проекте. После этого у каждой из них вызывается метод ПередЗаписью().
@Обработчик
метод ПерезЗаписью(ПредыдущееЗначение: Товары.Данные, ПараметрыЗаписи: Товары.ПараметрыЗаписи)
 
   // Собственный алгоритм справочника Товары.
    
   // Получить все реализации контракта КонтрактПодпискиПередЗаписью.
   пер ВсеПодписки = КонтрактПодпискиПередЗаписью.ПолучитьСервисы() 
 
   // Исполнить все реализации.
   для Подписка из ВсеПодписки  
      Подписка.ПередЗаписью(ПредыдущееЗначение, ПараметрыЗаписи)
   ;
;

Модуль контракта сервиса

В проекте модуль, расширяющий тип имя-контракта-сервиса, называется модулем контракта сервиса. Он доступен в том же окружении, которое указано в свойстве контракта Окружение: КлиентИСервер, Клиент, Сервер.

В модуле контракта сервиса должны быть объявлены методы (с ключевым словом абстрактный), из которых состоит контракт. Реализация этих методов должна находиться в элементах проекта, которые реализуют этот контракт.

Также в модуле контракта сервиса могут быть объявлены:

Для методов и типов, объявляемых в модуле контракта сервиса, окружение не указывается, оно всегда равно окружению контракта (свойство Окружение).

Например, ниже показан модуль контракта сервиса, в котором объявлены два метода: ЗаписатьЗначенияОперативныхПоказателей() и ЗарегистрироватьСдельныйЗаработок().

Также в нем объявлены три типа данных, СтруктураЗаписи, СтруктураПоказателей и СтруктураЗаработка, которые используются в параметрах этих методов.

// Импорт подсистемы Главная, чтобы к справочнику Организации и НачислениеЗарплаты
// обращаться по неквалифицированному имени.
импорт Главная

// Объявление типов, использующихся в параметрах методов.
структура СтруктураЗаписи 
    пер Поле1: Строка
    пер Поле2: Число
;

структура СтруктураПоказателей
    пер Поле1: Строка
    пер Поле2: Число
;

структура СтруктураЗаработка
    пер Поле1: Строка
    пер Поле2: Число
;

// Регистрирует значения оперативных показателей расчета зарплаты.
абстрактный метод ЗаписатьЗначенияОперативныхПоказателей(
   Движения: Массив<СтруктураЗаписи>, 
   Организация: Организации.Ссылка, 
   ОперативныеПоказатели: СтруктураПоказателей,
   ЗаписыватьДвижения = Ложь
)

// Регистрирует данные о сдельном заработке.
абстрактный метод ЗарегистрироватьСдельныйЗаработок(
   Движения: Массив<СтруктураЗаписи>, 
   Организация: Организации.Ссылка, 
   СдельныйЗаработок: СтруктураЗаработка
)