ЗанятьЛицензииЛимитированнойУслуги (БСП)

Автор: 1С
ОбщийМодуль.Тарификация
БСП

Занять лицензии лимитированной услуги. Выполняет попытку получить лицензии на использование лимитированной услуги в сервисе.

// Выполняет попытку получить лицензии на использование лимитированной услуги в сервисе.
//
// Параметры:
//  ИдентификаторПоставщика - Строка - уникальный строковый идентфикатор (код) поставщика услуг в сервисе.
//  ИдентификаторУслуги - Строка - уникальный строковый идентфикатор (код) услуги в сервисе.
//  КоличествоЛицензий - Число - требуемое количество лицензий (натуральное число, 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
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ОсвободитьЛицензииЛимитированнойУслуги (БСП)

КоличествоЛицензийЛимитированнойУслуги (БСП)

ЗанятьЛицензиюУникальнойУслуги (БСП)

ОсвободитьЛицензиюУникальнойУслуги (БСП)

КоличествоЛицензийУникальнойУслуги (БСП)

ЗапроситьЛицензииУникальныхУслуг_ОбработчикОбновления (БСП)

ЗапроситьЛицензииУникальныхУслуг_РегламентноеЗадание (БСП)

ЗарегистрированаЛицензияБезлимитнойУслуги (БСП)

ЗарегистрированаЛицензияУникальнойУслуги (БСП)

TurboConf 6 - расширение Конфигуратора 1С