АдминистрированиеОграничениеПотребленияРесурсов.КоличествоСеансов

Свойства · SessionCount

Тип: Число. Содержит предельное значение количества сеансов.

Полное описание, параметры и ограничения

АдминистрированиеОграничениеПотребленияРесурсов.КоличествоСеансов (AdministrationResourceConsumptionLimit.SessionCount)

АдминистрированиеОграничениеПотребленияРесурсов (AdministrationResourceConsumptionLimit)

КоличествоСеансов (SessionCount)

Доступен, начиная с версии 8.3.14.

Использование:
Чтение и запись.
Описание:
Тип: Число.
Содержит предельное значение количества сеансов.
Доступность:

Тонкий клиент, сервер, толстый клиент, интеграция.

Использование в версии:

Доступен, начиная с версии 8.3.14.

Методическая информация

Практические примеры

Зарегистрировать собственный счетчик и лимит ras, изменить порог и удалить только свои объекты

Полный цикл настоящих административных объектов на отдельной VM. Только один пустой кластер точной версии, свой UUID-профиль, проверяемые паспорта и действие Нет. Урок не создает базы, не завершает сеансы и не имитирует показания.

Где и как запускать

Полный серверный общий модуль УчебныеРесурсыRAS85 собственной отдельной файловой базы УчебныеОграниченияRAS85. Административные вызовы только к127.0.0.1 на отдельной VM с одним пустым кластером, не к рабочему серверу.

Подготовка

  1. Подготовку выполняйте вручную только на отдельной собственной VM, где нет рабочих серверов и баз. Установите сервер1С и ras8.5.1.1343. В агенте должен быть единственный кластер с точным именем Уч85ПустойКластерРесурсов, без зарегистрированных информационных баз. Код проверяет это перед административными записями. Системные службы и ras здесь не запускаются.

  2. Нужна законная лицензия/редакция, поддерживающая управление потреблением ресурсов. Механизм первоначально предоставлен для КОРП; его наличие и права проверьте на своем сервере до опыта. Отказ лицензии не обходят привилегированным режимом. Используйте только фактический порт ras и реальные учетные данные своего агента и кластера.

  3. В консоли своего пустого кластера вручную создайте счетчик Уч85ОбразецСчетчика с описанием ровно owned-ras85-resource-lifecycle-no-infobases. Выберите длительность накопления штатным редактором и запишите ее показанное значение/режим. Урок берет уже принятую сервером длительность из настоящего объекта, не угадывает единицы числового значения и не изменяет образец. Информационные базы и пользователь Уч85РесурсыБезСеансов для него не создаются.

  4. На этой же VM создайте отдельную пустую ФАЙЛОВУЮ базу с именем конфигурации УчебныеОграниченияRAS85, русский встроенный язык, режим совместимости Не использовать, управляемое приложение Такси. Никаких предметных объектов, расширений и фоновых заданий не добавляйте. Не регистрируйте эту базу в учебном кластере: он должен оставаться пустым.

  5. Создайте серверный общий модуль УчебныеРесурсыRAS85: Сервер=Истина, Клиент=Ложь, ВызовСервера=Ложь, Глобальный=Ложь, Привилегированный=Ложь. Вставьте весь основной код. В форме ниже серверный обработчик вызывает его экспортную функцию; клиент напрямую общий модуль не вызывает.

  6. Создайте внешнюю обработку УчебныеРесурсы85 с пустой основной управляемой формой. Добавьте реквизиты ПортRAS типа Число(5,0), ПодтвержденСвойRAS типа Булево и строковые реквизиты ИмяАгента, ПарольАгента, UUIDКластера, ИмяАдминистратора, ПарольАдминистратора, ПрофильUUID, КлючВосстановления длиной200. UUIDКластера и ПрофильUUID показывайте только для просмотра. Пароли вводите полями в режиме пароля; хранение в настройках/истории отключите. Обработка запускается в своей файловой базе на VM, не в рабочей базе.

  7. В форме создайте команды Каталог85, Создать85, Прочитать85, Изменить85, Очистить85, Удалить85, Восстановить85. У каждой действие ВыполнитьОперацию85, снимите ИзменяетСохраняемыеДанные и разместите семь кнопок. Вставьте полный вспомогательный модуль формы. Откройте свою внешнюю обработку в толстом управляемом клиенте собственной файловой базы. ПодтвержденСвойRAS включайте только после ручной проверки отдельной VM и пустого кластера.

  8. При каждом вызове учетные данные передаются серверной функции и затем очищаются из полей формы. Не сохраняйте их в файлы и не публикуйте исключения с паролями. Значение127.0.0.1 относится к машине исполнения серверной функции файловой базы, не к произвольному удаленному серверу.

  9. Перед созданием запишите видимый ПрофильUUID. Он формируется до первого серверного вызова и остается даже при ошибке. Если пульт закрыли, в новом пустом пульте вводите этот фактический ключ в КлючВосстановления, нажмите Восстановить85; он принимается только после нахождения сохраненного своего объекта. Новый UUID не является восстановлением старого профиля.

  10. Порогами упражнение меняет настоящие административные записи. Из-за Действие=Нет и пустого кластера оно не проверяет прекращение вызовов, лицензирование нагрузочного сценария или реальные метрики. В1С, ras и сеть пример не запускались; подготовка и ручной опыт остаются за пользователем.

Функция Выполнить85(Операция, ПортRAS, ИмяАгента, ПарольАгента, UUIDКластера,
    ИмяАдминистратора, ПарольАдминистратора, ПрофильUUID, ПодтвержденСвойRAS) Экспорт
    ПроверитьСвойПустойСтенд();
    Если ТипЗнч(ПодтвержденСвойRAS) <> Тип("Булево") Или Не ПодтвержденСвойRAS Тогда
        ВызватьИсключение "Подтвердите собственную отдельную VM с пустым учебным кластером";
    КонецЕсли;
    Операции = СтрРазделить("Каталог85,Создать85,Прочитать85,Изменить85,Очистить85,Удалить85,Восстановить85", ",");
    Если Операции.Найти(Операция) = Неопределено Тогда
        ВызватьИсключение "Неизвестная учебная операция";
    КонецЕсли;
    Если ТипЗнч(ПортRAS) <> Тип("Число") Тогда
        ВызватьИсключение "Нужен фактический числовой порт своего ras";
    КонецЕсли;
    Если ПортRAS < 1 Или ПортRAS > 65535 Или ПортRAS <> Цел(ПортRAS) Тогда
        ВызватьИсключение "Недопустимый порт";
    КонецЕсли;
    Параметры = Новый Структура("ИмяАгента,ПарольАгента,UUIDКластера,ИмяАдминистратора,ПарольАдминистратора,ПрофильUUID",
        ИмяАгента, ПарольАгента, UUIDКластера, ИмяАдминистратора, ПарольАдминистратора, ПрофильUUID);
    Для Каждого Параметр Из Параметры Цикл
        Если ТипЗнч(Параметр.Значение) <> Тип("Строка") Тогда
            ВызватьИсключение "Учетные данные и UUID должны быть строками";
        КонецЕсли;
    КонецЦикла;
    Агент = Новый АдминистрированиеСервера("127.0.0.1", ПортRAS);
    Агент.ВыполнитьАутентификацию(ПарольАгента, ИмяАгента);
    Если Агент.ПолучитьВерсию() <> "8.5.1.1343" Тогда
        ВызватьИсключение "Нужен ras и сервер точной версии8.5.1.1343";
    КонецЕсли;
    Кластеры = Агент.ПолучитьКластеры();
    Если Кластеры.Количество() <> 1 Тогда
        ВызватьИсключение "В собственном агенте должен быть только один учебный кластер";
    КонецЕсли;
    Кластер = Кластеры[0];
    Если Кластер.Имя <> "Уч85ПустойКластерРесурсов" Тогда
        ВызватьИсключение "Имя собственного пустого кластера не совпало";
    КонецЕсли;
    Если Операция = "Каталог85" Тогда
        Возврат Новый Структура("Операция,UUIDКластера,Имя", Операция, Строка(Кластер.ИдентификаторКластера), Кластер.Имя);
    КонецЕсли;
    ПроверитьUUID85(UUIDКластера);
    Если UUIDКластера <> Строка(Кластер.ИдентификаторКластера) Тогда
        ВызватьИсключение "UUID собственного кластера не совпал";
    КонецЕсли;
    Кластер.ВыполнитьАутентификацию(ИмяАдминистратора, ПарольАдминистратора);
    Если Кластер.ПолучитьИнформационныеБазы().Количество() <> 0 Тогда
        ВызватьИсключение "Учебный кластер должен быть полностью пустым; формы запускаются в отдельной файловой базе";
    КонецЕсли;
    ПроверитьUUID85(ПрофильUUID);
    ИмяСчетчика = "own-r85-counter-" + ПрофильUUID;
    ИмяЛимита = "own-r85-limit-" + ПрофильUUID;
    Счетчик = НайтиСвойСчетчик85(Кластер, ИмяСчетчика);
    Лимит = НайтиСвойЛимит85(Кластер, ИмяЛимита, ИмяСчетчика);
    Если Операция = "Создать85" Тогда
        Если Счетчик <> Неопределено Или Лимит <> Неопределено Тогда
            ВызватьИсключение "Собственный профиль уже существует или создан частично; используйте чтение и очистку, не перезапись";
        КонецЕсли;
        Образец = НайтиСчетчикПоИмени85(Кластер, "Уч85ОбразецСчетчика");
        Если Образец = Неопределено Тогда
            ВызватьИсключение "Сначала вручную создайте свой счетчик-образец в консоли";
        КонецЕсли;
        Если Образец.Описание <> "owned-ras85-resource-lifecycle-no-infobases" Тогда
            ВызватьИсключение "Паспорт собственного счетчика-образца не совпал";
        КонецЕсли;
        ДлительностьОбразца = Образец.ДлительностьНакопления;
        Если ТипЗнч(ДлительностьОбразца) <> Тип("Число") Или ДлительностьОбразца < 0 Тогда
            ВызватьИсключение "Не получена реальная допустимая длительность образца";
        КонецЕсли;
        Счетчик = Кластер.СоздатьСчетчикПотребленияРесурсов();
        Счетчик.Имя = ИмяСчетчика;
        Счетчик.Описание = "owned-ras85-resource-lifecycle-no-infobases";
        Счетчик.Группировка = АдминистрированиеТипГруппировкиСчетчикаПотребленияРесурсов.Пользователи;
        Счетчик.ТипОтбора = АдминистрированиеТипОтбораСчетчикаПотребленияРесурсов.ВсеВыбранные;
        Счетчик.ЗначениеОтбора = "user=Уч85РесурсыБезСеансов;";
        Счетчик.ДлительностьНакопления = ДлительностьОбразца;
        Счетчик.СчитатьДлительностьВызовов = Истина;
        Счетчик.СчитатьДлительностьВызововСервисов = Истина;
        Счетчик.СчитатьДлительностьВызововСУБД = Истина;
        Счетчик.СчитатьКоличествоАктивныхСеансов = Истина;
        Счетчик.СчитатьКоличествоВызовов = Истина;
        Счетчик.СчитатьКоличествоСеансов = Истина;
        Счетчик.СчитатьОбъемДанныхЗаписанныхНаДиск = Истина;
        Счетчик.СчитатьОбъемДанныхПереданныхИПолученныхСУБД = Истина;
        Счетчик.СчитатьОбъемДанныхСчитанныхСДиска = Истина;
        Счетчик.СчитатьПотреблениеПамяти = Истина;
        Счетчик.СчитатьПроцессорноеВремя = Истина;
        Счетчик.Записать();
        Счетчик = НайтиСвойСчетчик85(Кластер, ИмяСчетчика);
        Если Счетчик = Неопределено Тогда
            ВызватьИсключение "Запись счетчика не подтверждена повторным чтением; собственный UUID сохраните для диагностики";
        КонецЕсли;
        Лимит = Кластер.СоздатьОграничениеПотребленияРесурсов();
        Лимит.Имя = ИмяЛимита;
        Лимит.Описание = "owned-ras85-resource-lifecycle-no-infobases";
        Лимит.Счетчик = ИмяСчетчика;
        Лимит.Действие = АдминистрированиеДействиеПриПревышенииОграниченияПотребленияРесурсов.Нет;
        Лимит.СообщениеОбОшибке = "Уч85 только свой учебный профиль; действие Нет";
        Лимит.ДлительностьВызова = 1000;
        Лимит.ПроцессорноеВремя = 1000;
        Лимит.ДлительностьВызововСУБД = 1000;
        Лимит.ДлительностьВызововСервисов = 1000;
        Лимит.ПотреблениеПамяти = 64 * 1024 * 1024;
        Лимит.ОбъемДанныхЗаписанныхНаДиск = 1024 * 1024;
        Лимит.ОбъемДанныхСчитанныхСДиска = 1024 * 1024;
        Лимит.ОбъемДанныхПереданныхИПолученныхСУБД = 1024 * 1024;
        Лимит.КоличествоАктивныхСеансов = 2;
        Лимит.КоличествоСеансов = 2;
        Лимит.КоличествоВызовов = 10;
        Лимит.Записать();
        Лимит = НайтиСвойЛимит85(Кластер, ИмяЛимита, ИмяСчетчика);
        Если Лимит = Неопределено Тогда
            ВызватьИсключение "Запись лимита не подтверждена; счетчик мог уже сохраниться, проверьте свой UUID";
        КонецЕсли;
    ИначеЕсли Операция = "Изменить85" Тогда
        Если Лимит = Неопределено Тогда
            ВызватьИсключение "Собственного лимита нет";
        КонецЕсли;
        Лимит.ДлительностьВызова = 2000;
        Лимит.Записать();
        Лимит = НайтиСвойЛимит85(Кластер, ИмяЛимита, ИмяСчетчика);
        Если Лимит = Неопределено Тогда
            ВызватьИсключение "Повторное чтение измененного лимита не подтверждено";
        КонецЕсли;
        Если Лимит.ДлительностьВызова <> 2000 Тогда
            ВызватьИсключение "Изменение собственного порога не подтверждено";
        КонецЕсли;
    ИначеЕсли Операция = "Очистить85" Тогда
        Если Счетчик = Неопределено Тогда
            ВызватьИсключение "Собственного счетчика нет";
        КонецЕсли;
        Счетчик.ОчиститьНакопленныеЗначения();
    ИначеЕсли Операция = "Удалить85" Тогда
        Если Лимит <> Неопределено Тогда
            Лимит.Удалить();
        КонецЕсли;
        Лимит = НайтиСвойЛимит85(Кластер, ИмяЛимита, ИмяСчетчика);
        Если Лимит <> Неопределено Тогда
            ВызватьИсключение "Удаление собственного лимита не подтверждено; счетчик не удаляется";
        КонецЕсли;
        Если Счетчик <> Неопределено Тогда
            Для Каждого ЗависимыйЛимит Из Кластер.ПолучитьОграниченияПотребленияРесурсов() Цикл
                Если ЗависимыйЛимит.Счетчик = ИмяСчетчика Тогда
                    ВызватьИсключение "На свой счетчик ссылается другой лимит; он и счетчик не удаляются";
                КонецЕсли;
            КонецЦикла;
            Счетчик.Удалить();
        КонецЕсли;
        Счетчик = НайтиСвойСчетчик85(Кластер, ИмяСчетчика);
        Если Счетчик <> Неопределено Тогда
            ВызватьИсключение "Удаление собственного счетчика не подтверждено";
        КонецЕсли;
    ИначеЕсли Операция = "Восстановить85" Тогда
        Если Счетчик = Неопределено И Лимит = Неопределено Тогда
            ВызватьИсключение "Нет сохраненного собственного профиля для восстановления ключа";
        КонецЕсли;
    КонецЕсли;
    Отчет = Новый Структура("Операция,ПрофильUUID,СчетчикСуществует,ЛимитСуществует,ПаспортЛимита,НакопленныхПоказаний",
        Операция, ПрофильUUID, Счетчик <> Неопределено, Лимит <> Неопределено, Новый Структура, 0);
    Если Лимит <> Неопределено Тогда
        Отчет.ПаспортЛимита = ПаспортЛимита85(Лимит);
    КонецЕсли;
    Если Счетчик <> Неопределено Тогда
        Показания = Счетчик.ПолучитьНакопленныеЗначения();
        Если ТипЗнч(Показания) <> Тип("Массив") Тогда
            ВызватьИсключение "Не получен реальный массив накопленных значений";
        КонецЕсли;
        Отчет.НакопленныхПоказаний = Показания.Количество();
    КонецЕсли;
    Возврат Отчет;
КонецФункции

Процедура ПроверитьUUID85(Значение)
    Если ТипЗнч(Значение) <> Тип("Строка") Или СтрДлина(Значение) <> 36 Тогда
        ВызватьИсключение "Нужен точный собственный UUID из консоли или сохраненного пульта";
    КонецЕсли;
    UUID = Новый УникальныйИдентификатор(Значение);
    Если Строка(UUID) <> Значение Тогда
        ВызватьИсключение "Нужна каноническая строка UUID без пробелов";
    КонецЕсли;
КонецПроцедуры

Функция НайтиСчетчикПоИмени85(Кластер, Имя)
    Найденный = Неопределено;
    Для Каждого Кандидат Из Кластер.ПолучитьСчетчикиПотребленияРесурсов() Цикл
        Если Кандидат.Имя = Имя Тогда
            Если Найденный <> Неопределено Тогда
                ВызватьИсключение "Имя счетчика не уникально";
            КонецЕсли;
            Найденный = Кандидат;
        КонецЕсли;
    КонецЦикла;
    Возврат Найденный;
КонецФункции

Функция НайтиСвойСчетчик85(Кластер, Имя)
    Счетчик = НайтиСчетчикПоИмени85(Кластер, Имя);
    Если Счетчик <> Неопределено Тогда
        Если Счетчик.Описание <> "owned-ras85-resource-lifecycle-no-infobases"
            Или Счетчик.Группировка <> АдминистрированиеТипГруппировкиСчетчикаПотребленияРесурсов.Пользователи
            Или Счетчик.ТипОтбора <> АдминистрированиеТипОтбораСчетчикаПотребленияРесурсов.ВсеВыбранные Тогда
            ВызватьИсключение "Паспорт собственного счетчика не совпал";
        КонецЕсли;
    КонецЕсли;
    Возврат Счетчик;
КонецФункции

Функция НайтиСвойЛимит85(Кластер, Имя, ИмяСчетчика)
    Найденный = Неопределено;
    Для Каждого Кандидат Из Кластер.ПолучитьОграниченияПотребленияРесурсов() Цикл
        Если Кандидат.Имя = Имя Тогда
            Если Найденный <> Неопределено Тогда
                ВызватьИсключение "Имя собственного лимита не уникально";
            КонецЕсли;
            Если Кандидат.Описание <> "owned-ras85-resource-lifecycle-no-infobases" Или Кандидат.Счетчик <> ИмяСчетчика
                Или Кандидат.Действие <> АдминистрированиеДействиеПриПревышенииОграниченияПотребленияРесурсов.Нет Тогда
                ВызватьИсключение "Паспорт собственного лимита не совпал; чужое правило не изменяется";
            КонецЕсли;
            Найденный = Кандидат;
        КонецЕсли;
    КонецЦикла;
    Возврат Найденный;
КонецФункции

Функция ПаспортЛимита85(Лимит)
    Паспорт = Новый Структура;
    Паспорт.Вставить("Действие", Строка(Лимит.Действие));
    Паспорт.Вставить("ДлительностьВызова", Лимит.ДлительностьВызова);
    Паспорт.Вставить("ДлительностьВызововСервисов", Лимит.ДлительностьВызововСервисов);
    Паспорт.Вставить("ДлительностьВызововСУБД", Лимит.ДлительностьВызововСУБД);
    Паспорт.Вставить("Имя", Лимит.Имя);
    Паспорт.Вставить("КоличествоАктивныхСеансов", Лимит.КоличествоАктивныхСеансов);
    Паспорт.Вставить("КоличествоВызовов", Лимит.КоличествоВызовов);
    Паспорт.Вставить("КоличествоСеансов", Лимит.КоличествоСеансов);
    Паспорт.Вставить("ОбъемДанныхЗаписанныхНаДиск", Лимит.ОбъемДанныхЗаписанныхНаДиск);
    Паспорт.Вставить("ОбъемДанныхПереданныхИПолученныхСУБД", Лимит.ОбъемДанныхПереданныхИПолученныхСУБД);
    Паспорт.Вставить("ОбъемДанныхСчитанныхСДиска", Лимит.ОбъемДанныхСчитанныхСДиска);
    Паспорт.Вставить("Описание", Лимит.Описание);
    Паспорт.Вставить("ПотреблениеПамяти", Лимит.ПотреблениеПамяти);
    Паспорт.Вставить("ПроцессорноеВремя", Лимит.ПроцессорноеВремя);
    Паспорт.Вставить("СообщениеОбОшибке", Лимит.СообщениеОбОшибке);
    Паспорт.Вставить("Счетчик", Лимит.Счетчик);
    Возврат Паспорт;
КонецФункции

Процедура ПроверитьСвойПустойСтенд()
    Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
    КонецЕсли;
    Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
        ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
    КонецЕсли;
    Источники = Новый Массив;
    Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
    Для Каждого Источник Из Источники Цикл
        Расширения = РасширенияКонфигурации.Получить(, Источник);
        Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
            ВызватьИсключение "Native список расширений должен иметь тип Массив";
        КонецЕсли;
        Если Расширения.Количество() <> 0 Тогда
            ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
        КонецЕсли;
    КонецЦикла;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
    КонецЕсли;
КонецПроцедуры
Полный модуль управляемого пульта УчебныеРесурсы85

Модуль управляемой основной формы собственной внешней обработки в отдельной файловой учебной базе на VM.

&НаКлиенте
Процедура ВыполнитьОперацию85(Команда)
    Операция = Команда.Имя;
    Если Операция = "Создать85" И ПрофильUUID = "" Тогда
        ПрофильUUID = Строка(Новый УникальныйИдентификатор);
    КонецЕсли;
    Если Операция = "Восстановить85" И ПрофильUUID <> "" Тогда
        ВызватьИсключение "У пульта уже есть профиль; не заменяйте его восстановленным ключом";
    КонецЕсли;
    КлючВызова = ПрофильUUID;
    Если Операция = "Восстановить85" Тогда
        КлючВызова = КлючВосстановления;
    КонецЕсли;
    Попытка
        Отчет = ВыполнитьНаСервере85(Операция, ПортRAS, ИмяАгента, ПарольАгента, UUIDКластера,
            ИмяАдминистратора, ПарольАдминистратора, КлючВызова, ПодтвержденСвойRAS);
        Если Операция = "Восстановить85" Тогда
            ПрофильUUID = Отчет.ПрофильUUID;
        КонецЕсли;
        Если Операция = "Каталог85" Тогда
            UUIDКластера = Отчет.UUIDКластера;
            Сообщить("Настоящий UUID собственного кластера: " + UUIDКластера);
        Иначе
            Сообщить("Свой профиль: " + Отчет.ПрофильUUID);
            Сообщить("Счетчик существует: " + Строка(Отчет.СчетчикСуществует));
            Сообщить("Лимит существует: " + Строка(Отчет.ЛимитСуществует));
            Сообщить("Накопленных показаний: " + Строка(Отчет.НакопленныхПоказаний));
            Для Каждого Поле Из Отчет.ПаспортЛимита Цикл
                Сообщить(Поле.Ключ + ": " + Строка(Поле.Значение));
            КонецЦикла;
        КонецЕсли;
    Исключение
        Сообщить("Операция не подтверждена. Сохраните свой UUID, проверьте расхождение в серверном отладчике без публикации паролей. Частичная запись могла остаться; чтение и удаление выполняйте только по этому ключу");
    КонецПопытки;
    ПарольАгента = "";
    ПарольАдминистратора = "";
КонецПроцедуры

&НаСервереБезКонтекста
Функция ВыполнитьНаСервере85(Операция, ПортRAS, ИмяАгента, ПарольАгента, UUIDКластера,
    ИмяАдминистратора, ПарольАдминистратора, КлючВызова, ПодтвержденСвойRAS)
    Возврат УчебныеРесурсыRAS85.Выполнить85(Операция, ПортRAS, ИмяАгента, ПарольАгента, UUIDКластера,
        ИмяАдминистратора, ПарольАдминистратора, КлючВызова, ПодтвержденСвойRAS);
КонецФункции

Разбор по шагам

  1. Введите фактический порт ras и собственные учетные данные. Каталог85 читает единственный учебный кластер и показывает его реальный UUID. Для остальных операций требуется точное совпадение UUID и имени, а также успешная аутентификация кластера.

  2. Нажмите Создать85. Пульт сначала сохраняет свой UUID. Сервер проверяет отсутствие обоих UUID-имен. При занятом или частично созданном профиле существующие настройки не перезаписываются. Собственный счетчик-образец определяется по точному имени и описанию.

  3. Фабрика кластера создает новый счетчик с пустыми свойствами. Код назначает свое имя/описание, группировку Пользователи, ВсеВыбранные и собственный строковый отбор user=Уч85РесурсыБезСеансов;. ЗначениеОтбора только записывается: это write-only свойство. Длительность берется из принятого сервером образца, все11 измерений явно включены. После Записать счетчик ищется заново.

  4. Новый лимит ссылается на точное имя сохраненного счетчика. Время вызова, CPU, СУБД и сервисов задается в миллисекундах; память/дисковый ввод-вывод/трафик СУБД — в байтах; сеансы и вызовы — количественные пороги. 64*1024*1024 означает64MiB, 1024*1024 означает1MiB, не мегабит. Действие Нет не прерывает сеанс; текст СообщениеОбОшибке не доказывает его фактический показ.

  5. После записи лимит перечитывается из кластера, его имя, описание, счетчик и действие проверяются. Прочитать85 выводит фактический паспорт всех16 свойств и число реальных накопленных показаний. На пустом кластере отсутствие показаний ожидаемо; значения нагрузки и превышение порогов не выдумываются.

  6. Нажмите Изменить85. У уже сохраненного собственного лимита меняется только ДлительностьВызова с1000 на2000 миллисекунд. Записать обновляет, а не создает случайный другой объект. Свежий объект должен подтвердить2000; собственное имя не переименовывается.

  7. Очистить85 вызывает реальный ОчиститьНакопленныеЗначения только на проверенном UUID-счетчике. Отбор не передается, поскольку очищаются все экземпляры именно этого собственного счетчика. На пустом кластере уже может быть пусто: вызов очистки не доказывает, что существовали реальные измерения.

  8. Удалить85 сначала удаляет только свой лимит и повторно проверяет его отсутствие. Перед удалением своего счетчика перечитываются все ограничения: чужая ссылка на этот счетчик останавливает удаление, сам чужой лимит не меняется. После удаления счетчик ищется заново; оба флага должны стать Ложь.

  9. Если запись или ответ ras завершились ошибкой, автоматического отката нет. Собственный счетчик/лимит мог сохраниться. Не повторяйте создание с новым ключом: прочитайте и удалите только исходный UUID. При отказе удаления лимита счетчик не удаляется; исправьте свой стенд и повторите очистку по тому же ключу.

  10. Закройте пульт после подтвержденного удаления. Счетчик-образец создан вручную и не удаляется этим кодом. Его и одноразовую VM утилизируйте штатными средствами самостоятельно; чужие серверы и записи урок не трогает.

Как проверить результат

  1. После Создать85 оба флага Истина, паспорт содержит свое UUID-имя, связь со своим счетчиком, действие Нет,1000ms и64MiB. Сверьте все16 исходных значений со своей консолью; это проверка реальной записи, не проверка производительности.

  2. После Изменить85 фактически перечитанный ДлительностьВызова равен2000. Остальные пороги сверяйте с исходным паспортом; код не присваивает их при обновлении.

  3. После Удалить85 оба флага Ложь. Прочитать85 с тем же ключом не создает новых записей. Повторное Удалить85 при отсутствии обоих объектов ничего не удаляет. Восстановить85 уже отсутствующий ключ явно отклоняется.

  4. Отдельная зарегистрированная база, другой кластер/UUID, измененный паспорт, чужая зависимость, неизвестная операция, неправильный порт и неверная версия дают отказ без положительного отчета. Собственный UUID при ошибке остается для повторной диагностики.

Ожидаемый результат

Настоящие UUID-счетчик и ограничение зарегистрированы, прочитаны, порог обновлен и свои записи удалены с повторным чтением. Изменение действия на опасное, нагрузка, чужие объекты, реальные метрики и запуск в1С не подтверждались.

На что обратить внимание

  1. Это не локальный массив или файл настроек: Записать/Удалить и ОчиститьНакопленныеЗначения действительно изменяют кластер при ручном запуске. Даже Действие Нет не отменяет административную запись. Учебное имя само по себе не защищает production; необходима отдельная VM, один кластер, ноль баз, UUID и паспорта.

  2. Сигнатуры и readonly/write-only проверены по установленной справке8.5.1.1343. ЗначениеОтбора у счетчика — Только запись; код не пытается его перечитать. Подтверждение паспорта не доказывает фактический текст отбора, поэтому кластер намеренно пустой.

  3. ДлительностьНакопления счетчика и ДлительностьВызова лимита — разные параметры. Первую копируем из реального принятого образца; второй назначаем миллисекунды по нативной справке. Не переносите числовое значение длительности между полями по совпадению слова.

  4. Официальное руководство административного механизма: https://1c-dn.com/library/tutorials/1c_enterprise_administrator_guide_client_server_mode_8_3_27/ . Оно описывает связь лимита со счетчиком, значения/группировки/отбор. Используется как методическая информация более раннего релиза; точные BSL-контракты берутся только из установленного8.5.1.1343.

  5. Аутентификация агента получает аргументы Пароль, Имя; аутентификация кластера — Имя, Пароль. Это разные порядки и разные учетные записи. В коде нет COMConnector, rac.exe, запуска служб и установки серверных компонентов.

  6. Серверные массивы ограничений могут содержать административные объекты, чьи свойства читаются обращением к серверу. Сравнение имен и паспортов может завершиться ошибкой доступа или связи; в этой ветви мутации дальше не выполняются и успех не показывается.

  7. Параллельная работа других администраторов не поддерживается: между проверкой и записью ras нет прикладной транзакции. Не меняйте собственные UUID-записи вне опыта. UUID не является криптографической защитой; паспорта и пустой отдельный кластер — ограничения учебного сценария.

  8. Ошибка удаления лимита оставляет счетчик для ручной повторной очистки; чужую зависимость автоматически не удаляют. Частичная запись и потерянный ответ не равны откату. Сохраненный ключ следует восстановить, а не заменить новым.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.