Пример контракта сервиса
Цель примера — изолировать код подсистемы от других частей приложения.
В проекте есть подсистема ПодсистемаРасчетЗарплаты. К ней за данными обращаются другие подсистемы. Для этого они используют контракт APIРасчетаЗарплаты, который объявлен в подсистеме.
Реализация этого контракта находится в этой же подсистеме в общем модуле РасчетЗарплаты.
Разработчики зарплаты могут менять реализацию своей подсистемы от версии к версии, но контракт остается неизменным, что позволяет не изменять остальной проект.
Контракт будет иметь единственную реализацию, поэтому свойство контракта Множественный
имеет значение Ложь
.
ВидЭлемента: КонтрактСервиса
Ид: 090080db-f78f-4d6e-b4e5-0ed5dc39c6e4
ОбластьВидимости: ВПроекте
Имя: APIРасчетаЗарплаты
Окружение: КлиентИСервер
Обязательный: Истина
Множественный: Ложь
Значение свойства Обязательный
равное Истина
говорит о том, что одна реализация у этого контракта обязана быть. Это позволяет упростить использование этого контракта и не проверять перед использованием, существует ли его реализация.
Модуль контракта APIРасчетаЗарплаты.xbsl выглядит следующим образом.
// Импорт подсистемы Главная, чтобы к справочникам
// Организации и НачислениеЗарплаты обращаться по неквалифицированному имени.
импорт Главная
// Объявление типов, использующихся в параметрах методов.
структура СтруктураЗаписи
пер Поле1: Строка
пер Поле2: Число
;
структура СтруктураПоказателей
пер Поле1: Строка
пер Поле2: Число
;
структура СтруктураЗаработка
пер Поле1: Строка
пер Поле2: Число
;
// Регистрирует значения оперативных показателей расчета зарплаты.
абстрактный метод ЗаписатьЗначенияОперативныхПоказателей(
Движения: Массив<СтруктураЗаписи>,
Организация: Организации.Ссылка,
ОперативныеПоказатели: СтруктураПоказателей,
ЗаписыватьДвижения = Ложь
)
// Регистрирует данные о сдельном заработке.
абстрактный метод ЗарегистрироватьСдельныйЗаработок(
Движения: Массив<СтруктураЗаписи>,
Организация: Организации.Ссылка,
СдельныйЗаработок: СтруктураЗаработка
)
// Возвращает ссылку на заполненный документ начисления зарплаты
// или создает новый.
абстрактный метод ДокументНачисленияЗарплаты(
МесяцНачисления: ДатаВремя,
Организация: Организации.Ссылка,
Подразделение: Неопределено
): НачислениеЗарплаты.Ссылка?
// Процедура предназначена для создания документа отражения в бухучете
// из о бработки РасчетЗарплаты.
абстрактный метод СоздатьДокументОтраженияВБухучете(
Организация: Организации.Ссылка,
МесяцНачисления: ДатаВремя,
СтандартнаяОбработка: Булево
)
В нем объявлены четыре метода, из которых и состоит API подсистемы:
ЗаписатьЗначенияОперативныхПоказателей()
;ЗарегистрироватьСдельныйЗаработок()
;ДокументНачисленияЗарплаты()
;СоздатьДокументОтраженияВБухучете()
.
Также в нем объявлены три типа данных, СтруктураЗаписи
, СтруктураПоказателей
и СтруктураЗаработка
, которые используются в параметрах этих методов.
Описание общего модуля РасчетЗарплаты.yaml, который реализует контракт, выглядит следующим образом.
ВидЭлемента: ОбщийМодуль
Ид: d417a5cc-a09a-403f-9c39-0c5d0ffeb8a1
ОбластьВидимости: ВПроекте
Имя: РасчетЗарплаты
Окружение: КлиентИСервер
НастройкиТипа:
Контракты:
- APIРасчетаЗарплаты