Выполняет регистрацию нового или обновление существующего ограничения потребления ресурсов.
Синтаксис
Записать()Полное описание, параметры и ограничения
АдминистрированиеОграничениеПотребленияРесурсов.Записать (AdministrationResourceConsumptionLimit.Write)
АдминистрированиеОграничениеПотребленияРесурсов (AdministrationResourceConsumptionLimit)
Записать (Write)
Доступен, начиная с версии 8.3.14.
Синтаксис:
Записать()
Описание:
Выполняет регистрацию нового или обновление существующего ограничения потребления ресурсов.
Доступность:
Тонкий клиент, сервер, толстый клиент, интеграция.
Использование в версии:
Доступен, начиная с версии 8.3.14.
Методическая информация
Практические примеры
Зарегистрировать собственный счетчик и лимит ras, изменить порог и удалить только свои объекты
Полный цикл настоящих административных объектов на отдельной VM. Только один пустой кластер точной версии, свой UUID-профиль, проверяемые паспорта и действие Нет. Урок не создает базы, не завершает сеансы и не имитирует показания.
Где и как запускать
Полный серверный общий модуль УчебныеРесурсыRAS85 собственной отдельной файловой базы УчебныеОграниченияRAS85. Административные вызовы только к127.0.0.1 на отдельной VM с одним пустым кластером, не к рабочему серверу.
Подготовка
Подготовку выполняйте вручную только на отдельной собственной VM, где нет рабочих серверов и баз. Установите сервер1С и ras8.5.1.1343. В агенте должен быть единственный кластер с точным именем Уч85ПустойКластерРесурсов, без зарегистрированных информационных баз. Код проверяет это перед административными записями. Системные службы и ras здесь не запускаются.
Нужна законная лицензия/редакция, поддерживающая управление потреблением ресурсов. Механизм первоначально предоставлен для КОРП; его наличие и права проверьте на своем сервере до опыта. Отказ лицензии не обходят привилегированным режимом. Используйте только фактический порт ras и реальные учетные данные своего агента и кластера.
В консоли своего пустого кластера вручную создайте счетчик Уч85ОбразецСчетчика с описанием ровно owned-ras85-resource-lifecycle-no-infobases. Выберите длительность накопления штатным редактором и запишите ее показанное значение/режим. Урок берет уже принятую сервером длительность из настоящего объекта, не угадывает единицы числового значения и не изменяет образец. Информационные базы и пользователь Уч85РесурсыБезСеансов для него не создаются.
На этой же VM создайте отдельную пустую ФАЙЛОВУЮ базу с именем конфигурации УчебныеОграниченияRAS85, русский встроенный язык, режим совместимости Не использовать, управляемое приложение Такси. Никаких предметных объектов, расширений и фоновых заданий не добавляйте. Не регистрируйте эту базу в учебном кластере: он должен оставаться пустым.
Создайте серверный общий модуль УчебныеРесурсыRAS85: Сервер=Истина, Клиент=Ложь, ВызовСервера=Ложь, Глобальный=Ложь, Привилегированный=Ложь. Вставьте весь основной код. В форме ниже серверный обработчик вызывает его экспортную функцию; клиент напрямую общий модуль не вызывает.
Создайте внешнюю обработку УчебныеРесурсы85 с пустой основной управляемой формой. Добавьте реквизиты ПортRAS типа Число(5,0), ПодтвержденСвойRAS типа Булево и строковые реквизиты ИмяАгента, ПарольАгента, UUIDКластера, ИмяАдминистратора, ПарольАдминистратора, ПрофильUUID, КлючВосстановления длиной200. UUIDКластера и ПрофильUUID показывайте только для просмотра. Пароли вводите полями в режиме пароля; хранение в настройках/истории отключите. Обработка запускается в своей файловой базе на VM, не в рабочей базе.
В форме создайте команды Каталог85, Создать85, Прочитать85, Изменить85, Очистить85, Удалить85, Восстановить85. У каждой действие ВыполнитьОперацию85, снимите ИзменяетСохраняемыеДанные и разместите семь кнопок. Вставьте полный вспомогательный модуль формы. Откройте свою внешнюю обработку в толстом управляемом клиенте собственной файловой базы. ПодтвержденСвойRAS включайте только после ручной проверки отдельной VM и пустого кластера.
При каждом вызове учетные данные передаются серверной функции и затем очищаются из полей формы. Не сохраняйте их в файлы и не публикуйте исключения с паролями. Значение127.0.0.1 относится к машине исполнения серверной функции файловой базы, не к произвольному удаленному серверу.
Перед созданием запишите видимый ПрофильUUID. Он формируется до первого серверного вызова и остается даже при ошибке. Если пульт закрыли, в новом пустом пульте вводите этот фактический ключ в КлючВосстановления, нажмите Восстановить85; он принимается только после нахождения сохраненного своего объекта. Новый UUID не является восстановлением старого профиля.
Порогами упражнение меняет настоящие административные записи. Из-за Действие=Нет и пустого кластера оно не проверяет прекращение вызовов, лицензирование нагрузочного сценария или реальные метрики. В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);
КонецФункцииРазбор по шагам
Введите фактический порт ras и собственные учетные данные. Каталог85 читает единственный учебный кластер и показывает его реальный UUID. Для остальных операций требуется точное совпадение UUID и имени, а также успешная аутентификация кластера.
Нажмите Создать85. Пульт сначала сохраняет свой UUID. Сервер проверяет отсутствие обоих UUID-имен. При занятом или частично созданном профиле существующие настройки не перезаписываются. Собственный счетчик-образец определяется по точному имени и описанию.
Фабрика кластера создает новый счетчик с пустыми свойствами. Код назначает свое имя/описание, группировку Пользователи, ВсеВыбранные и собственный строковый отбор user=Уч85РесурсыБезСеансов;. ЗначениеОтбора только записывается: это write-only свойство. Длительность берется из принятого сервером образца, все11 измерений явно включены. После Записать счетчик ищется заново.
Новый лимит ссылается на точное имя сохраненного счетчика. Время вызова, CPU, СУБД и сервисов задается в миллисекундах; память/дисковый ввод-вывод/трафик СУБД — в байтах; сеансы и вызовы — количественные пороги. 64*1024*1024 означает64MiB, 1024*1024 означает1MiB, не мегабит. Действие Нет не прерывает сеанс; текст СообщениеОбОшибке не доказывает его фактический показ.
После записи лимит перечитывается из кластера, его имя, описание, счетчик и действие проверяются. Прочитать85 выводит фактический паспорт всех16 свойств и число реальных накопленных показаний. На пустом кластере отсутствие показаний ожидаемо; значения нагрузки и превышение порогов не выдумываются.
Нажмите Изменить85. У уже сохраненного собственного лимита меняется только ДлительностьВызова с1000 на2000 миллисекунд. Записать обновляет, а не создает случайный другой объект. Свежий объект должен подтвердить2000; собственное имя не переименовывается.
Очистить85 вызывает реальный ОчиститьНакопленныеЗначения только на проверенном UUID-счетчике. Отбор не передается, поскольку очищаются все экземпляры именно этого собственного счетчика. На пустом кластере уже может быть пусто: вызов очистки не доказывает, что существовали реальные измерения.
Удалить85 сначала удаляет только свой лимит и повторно проверяет его отсутствие. Перед удалением своего счетчика перечитываются все ограничения: чужая ссылка на этот счетчик останавливает удаление, сам чужой лимит не меняется. После удаления счетчик ищется заново; оба флага должны стать Ложь.
Если запись или ответ ras завершились ошибкой, автоматического отката нет. Собственный счетчик/лимит мог сохраниться. Не повторяйте создание с новым ключом: прочитайте и удалите только исходный UUID. При отказе удаления лимита счетчик не удаляется; исправьте свой стенд и повторите очистку по тому же ключу.
Закройте пульт после подтвержденного удаления. Счетчик-образец создан вручную и не удаляется этим кодом. Его и одноразовую VM утилизируйте штатными средствами самостоятельно; чужие серверы и записи урок не трогает.
Как проверить результат
После Создать85 оба флага Истина, паспорт содержит свое UUID-имя, связь со своим счетчиком, действие Нет,1000ms и64MiB. Сверьте все16 исходных значений со своей консолью; это проверка реальной записи, не проверка производительности.
После Изменить85 фактически перечитанный ДлительностьВызова равен2000. Остальные пороги сверяйте с исходным паспортом; код не присваивает их при обновлении.
После Удалить85 оба флага Ложь. Прочитать85 с тем же ключом не создает новых записей. Повторное Удалить85 при отсутствии обоих объектов ничего не удаляет. Восстановить85 уже отсутствующий ключ явно отклоняется.
Отдельная зарегистрированная база, другой кластер/UUID, измененный паспорт, чужая зависимость, неизвестная операция, неправильный порт и неверная версия дают отказ без положительного отчета. Собственный UUID при ошибке остается для повторной диагностики.
Ожидаемый результат
Настоящие UUID-счетчик и ограничение зарегистрированы, прочитаны, порог обновлен и свои записи удалены с повторным чтением. Изменение действия на опасное, нагрузка, чужие объекты, реальные метрики и запуск в1С не подтверждались.
На что обратить внимание
Это не локальный массив или файл настроек: Записать/Удалить и ОчиститьНакопленныеЗначения действительно изменяют кластер при ручном запуске. Даже Действие Нет не отменяет административную запись. Учебное имя само по себе не защищает production; необходима отдельная VM, один кластер, ноль баз, UUID и паспорта.
Сигнатуры и readonly/write-only проверены по установленной справке8.5.1.1343. ЗначениеОтбора у счетчика — Только запись; код не пытается его перечитать. Подтверждение паспорта не доказывает фактический текст отбора, поэтому кластер намеренно пустой.
ДлительностьНакопления счетчика и ДлительностьВызова лимита — разные параметры. Первую копируем из реального принятого образца; второй назначаем миллисекунды по нативной справке. Не переносите числовое значение длительности между полями по совпадению слова.
Официальное руководство административного механизма: https://1c-dn.com/library/tutorials/1c_enterprise_administrator_guide_client_server_mode_8_3_27/ . Оно описывает связь лимита со счетчиком, значения/группировки/отбор. Используется как методическая информация более раннего релиза; точные BSL-контракты берутся только из установленного8.5.1.1343.
Аутентификация агента получает аргументы Пароль, Имя; аутентификация кластера — Имя, Пароль. Это разные порядки и разные учетные записи. В коде нет COMConnector, rac.exe, запуска служб и установки серверных компонентов.
Серверные массивы ограничений могут содержать административные объекты, чьи свойства читаются обращением к серверу. Сравнение имен и паспортов может завершиться ошибкой доступа или связи; в этой ветви мутации дальше не выполняются и успех не показывается.
Параллельная работа других администраторов не поддерживается: между проверкой и записью ras нет прикладной транзакции. Не меняйте собственные UUID-записи вне опыта. UUID не является криптографической защитой; паспорта и пустой отдельный кластер — ограничения учебного сценария.
Ошибка удаления лимита оставляет счетчик для ручной повторной очистки; чужую зависимость автоматически не удаляют. Частичная запись и потерянный ответ не равны откату. Сохраненный ключ следует восстановить, а не заменить новым.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.