Тип встроенного языка, порождаемый элементом проекта вида «КонтрактСервиса»
После того, как вы добавили в проект контракт сервиса и дали ему имя, создаст один тип встроенного языка. Имя этого типа совпадает с именем вашего контракта.
Например, если в проекте есть контракт APIСервиса, то будет создан тип APIСервиса. В общем случае имя этого типа выглядит следующим образом: имя-контракта-сервиса.
Тип «имя-контракта-сервиса»
Это абстрактный тип. Он доступен в том же окружении, которое указано в свойстве контракта Окружение: КлиентИСервер, Клиент, Сервер.
Этот тип содержит методы, объявленные в модуле контракта имя-контракта-сервиса.xbsl.
Кроме этого тип имеет статический метод, имя которого зависит от значения свойства контракта Множественный:
- Истина — имя метода ПолучитьСервисы()
- Ложь — имя метода ПолучитьСервис()
Эти методы предназначены для того, чтобы получить все экземпляры типов-одиночек, которые реализуют этот контракт.
Например, в обработчике события ПередЗаписью сначала выполняется собственный алгоритм, а затем получаются все реализации контракта КонтрактПодпискиПередЗаписью, которые имеются в проекте. После этого у каждой из них вызывается метод ПередЗаписью().@Обработчик
метод ПерезЗаписью(ПредыдущееЗначение: Товары.Данные, ПараметрыЗаписи: Товары.ПараметрыЗаписи)
// Собственный алгоритм справочника Товары.
// Получить все реализации контракта КонтрактПодпискиПередЗаписью.
пер ВсеПодписки = КонтрактПодпискиПередЗаписью.ПолучитьСервисы()
// Исполнить все реализации.
для Подписка из ВсеПодписки
Подписка.ПередЗаписью(ПредыдущееЗначение, ПараметрыЗаписи)
;
;
Модуль контракта сервиса
В проекте модуль, расширяющий тип имя-контракта-сервиса, называется модулем контракта сервиса. Он доступен в том же окружении, которое указано в свойстве контракта Окружение: КлиентИСервер, Клиент, Сервер.
В модуле контракта сервиса должны быть объявлены методы (с ключевым словом абстрактный), из которых состоит контракт. Реализация этих методов должна находиться в элементах проекта, которые реализуют этот контракт.
Также в модуле контракта сервиса могут быть объявлены:
Для методов и типов, объявляемых в модуле контракта сервиса, окружение не указывается, оно всегда равно окружению контракта (свойство Окружение).
Например, ниже показан модуль контракта сервиса, в котором объявлены два метода: ЗаписатьЗначенияОперативныхПоказателей() и ЗарегистрироватьСдельныйЗаработок().
Также в нем объявлены три типа данных, СтруктураЗаписи, СтруктураПоказателей и СтруктураЗаработка, которые используются в параметрах этих методов.
// Импорт подсистемы Главная, чтобы к справочнику Организации и НачислениеЗарплаты
// обращаться по неквалифицированному имени.
импорт Главная
// Объявление типов, использующихся в параметрах методов.
структура СтруктураЗаписи
пер Поле1: Строка
пер Поле2: Число
;
структура СтруктураПоказателей
пер Поле1: Строка
пер Поле2: Число
;
структура СтруктураЗаработка
пер Поле1: Строка
пер Поле2: Число
;
// Регистрирует значения оперативных показателей расчета зарплаты.
абстрактный метод ЗаписатьЗначенияОперативныхПоказателей(
Движения: Массив<СтруктураЗаписи>,
Организация: Организации.Ссылка,
ОперативныеПоказатели: СтруктураПоказателей,
ЗаписыватьДвижения = Ложь
)
// Регистрирует данные о сдельном заработке.
абстрактный метод ЗарегистрироватьСдельныйЗаработок(
Движения: Массив<СтруктураЗаписи>,
Организация: Организации.Ссылка,
СдельныйЗаработок: СтруктураЗаработка
)