Занять лицензии лимитированной услуги. Выполняет попытку получить лицензии на использование лимитированной услуги в сервисе.
// Выполняет попытку получить лицензии на использование лимитированной услуги в сервисе.
//
// Параметры:
// ИдентификаторПоставщика - Строка - уникальный строковый идентфикатор (код) поставщика услуг в сервисе.
// ИдентификаторУслуги - Строка - уникальный строковый идентфикатор (код) услуги в сервисе.
// КоличествоЛицензий - Число - требуемое количество лицензий (натуральное число, 10 разрядов).
// КодОбластиДанных - Число - код области данных (если мы вызываем функцию из неразделенного сеанса).
//
// Возвращаемое значение:
// Структура с ключами:
// * Результат - Булево - результат выполнения (Истина = лицензия успешно получена).
// * ДоступноЛицензий - Число - максимально доступное абоненту количество лицензий на указанную услугу (если "-1", значит неограниченное количество).
// * ЗанятоЛицензий - Число - количество уже полученных (использованных) лицензий на услугу.
// * СвободноЛицензий - Число - количество свободных лицензий (если "-1", значит неограниченное количество).
//
Функция ЗанятьЛицензииЛимитированнойУслуги(ИдентификаторПоставщика, ИдентификаторУслуги, КоличествоЛицензий, КодОбластиДанных = Неопределено) Экспорт
НачатьТранзакцию();
Попытка
ОтветЗанятияУслуги = ОтветЗанятияЛицензий();
ИмяСобытия = ИмяСобытияЖР() + НСтр("ru = 'Заем лицезний лимитированной услуги из приложения'");
ЗаголовокКомментария = ЗаголовокКомментария(ИдентификаторПоставщика,
ИдентификаторУслуги,
,
КоличествоЛицензий,
,
КодОбластиДанных);
// Предопределенные проверки, которые сразу помогают определить: есть доступ к услуге или нет.
Результат = РезультатПредопределенныхПроверокОперацийСЛицензиями();
Если Результат <> Неопределено Тогда
ОтветЗанятияУслуги.Результат = Результат;
ОтветЗанятияУслуги.ДоступноЛицензий = -1;
ОтветЗанятияУслуги.СвободноЛицензий = -1;
ЗафиксироватьТранзакцию();
Возврат ОтветЗанятияУслуги;
КонецЕсли;
Услуга = УслугаПоИдентификаторуИИдентификаторуПоставщика(ИдентификаторУслуги, ИдентификаторПоставщика);
ЗначениеРазделителя = ЗначениеРазделителя(КодОбластиДанных);
ЗаблокироватьЗанятыеЛицензии(Услуга, ЗначениеРазделителя);
Результат = ЕстьДоступныеЛицензии(Услуга, КоличествоЛицензий, ЗначениеРазделителя);
ЗаполнитьЗначенияСвойств(ОтветЗанятияУслуги, Результат);
БылоЗанятоЛицензий = ?(ОтветЗанятияУслуги.Результат, КоличествоЛицензий, 0);
УстановитьПривилегированныйРежим(Истина);
ОбновитьКоличествоЗанятыхЛицензий(Услуга, КоличествоЛицензий, ЗначениеРазделителя);
УстановитьПривилегированныйРежим(Ложь);
ОтветЗанятияУслуги.ЗанятоЛицензий = ОтветЗанятияУслуги.ЗанятоЛицензий + БылоЗанятоЛицензий;
Если Не ЛимитированнаяУслугаТарифицируется(Услуга) Тогда
ОтветЗанятияУслуги.Результат = Истина;
ОтветЗанятияУслуги.ДоступноЛицензий = -1;
ОтветЗанятияУслуги.СвободноЛицензий = -1;
КонецЕсли;
ЗаписатьИнформацию(ИмяСобытия, ЗаголовокКомментария, НСтр("ru = 'Успех'"));
ЗафиксироватьТранзакцию();
Возврат ОтветЗанятияУслуги;
Исключение
ОтменитьТранзакцию();
Комментарий = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
ЗаписатьОшибку(ИмяСобытия, ЗаголовокКомментария, Комментарий);
ВызватьИсключение Комментарий;
КонецПопытки;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ОсвободитьЛицензииЛимитированнойУслуги (БСП)
КоличествоЛицензийЛимитированнойУслуги (БСП)
ЗанятьЛицензиюУникальнойУслуги (БСП)
ОсвободитьЛицензиюУникальнойУслуги (БСП)
КоличествоЛицензийУникальнойУслуги (БСП)
ЗапроситьЛицензииУникальныхУслуг_ОбработчикОбновления (БСП)
ЗапроситьЛицензииУникальныхУслуг_РегламентноеЗадание (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)