Возникла необходимость редактировать программно уже созданную базу на сервере 1С.
По аналогии из публикации https://infostart.ru/public/146898/ получаю нужную базу на кластере и пытаюсь произвести редактирование описания и признака отключения рег. заданий:
&НаСервере
Процедура СоздатьБазуВРеестреНаСервереТест1(текБаза1С = Неопределено)
ИмяРабочейБазы = "test_Vin";
СтрокаСоединения = "test_Vin";
ИмяСервера = "MOW03-PT1C04T"; // адрес 1С сервер
АдминКластера = "";
ПарольАдминаКластера = "";
//Админ1С = "COMConnect"; // пользователь с полными правами
//ПарольАдмина1С = ""; // пароль админа 1С
Соединение = Новый COMОбъект("V82.COMConnector"); // Соединились с 1С
Попытка
СоединениеАгент = Соединение.ConnectAgent(ИмяСервера); // Соединились с 1С Агентом
Кластеры = СоединениеАгент.GetClusters(); // Получитли массив кластеров (COMSafeArray)
Исключение
#Если НаКлиенте тогда
Сообщить("Ошибка соединения с COM сервером: " + ОписаниеОшибки());
#КонецЕсли
Возврат;
КонецПопытки;
КоличествоКластеров = Кластеры.GetLength(0);
Если КоличествоКластеров < 1 тогда
#Если НаКлиенте тогда
Сообщить("Не найден кластер на сервере " + ИмяСервера);
#КонецЕсли
Возврат;
КонецЕсли;
РабочийКластер = Кластеры.GetValue(0);
Попытка
// Авторизируемся на кластере (Кластер,Имя,Пароль)
СоединениеАгент.Authenticate(РабочийКластер, АдминКластера, ПарольАдминаКластера);
Исключение
#Если НаКлиенте тогда
Сообщить("Ошибка авторизации: " + ОписаниеОшибки());
#КонецЕсли
Возврат;
КонецПопытки;
// Подключаемся к рабочему процессу
РабочийПроцесс = СоединениеАгент.GetWorkingProcesses(РабочийКластер).GetValue(0);
Порт = СтрЗаменить(Строка(РабочийПроцесс.MainPort),Символы.НПП,""); // убиваем непереносимые пробелы
СтрокаПодлючения = РабочийПроцесс.HostName + ":" + Порт;
СоединениеСРабочимПроцессом = Соединение.ConnectWorkingProcess(СтрокаПодлючения);
//СоединениеСРабочимПроцессом.AddAuthentication(Админ1С,ПарольАдмина1С);
// Ищем текущую базу данных
МассивБаз = СоединениеСРабочимПроцессом.GetInfoBases();
БазаНайдена = Ложь;
Для каждого РабочаяБаза из МассивБаз цикл
ИскомаяБаза = РабочаяБаза.Name;
БазаНайдена = Найти(СтрокаСоединения,ИскомаяБаза) > 0;
Если БазаНайдена тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если Не БазаНайдена тогда
#Если НаКлиенте тогда
Сообщить("База (" + СтрокаСоединения + ") не найдена на сервере " + ИмяСервера);
#КонецЕсли
Возврат;
КонецЕсли;
РабочаяБаза.Descr = "Тест описание";
РабочаяБаза.ScheduledJobsDenied = Истина; // Блокируем выполнения регламентных заданий
СоединениеСРабочимПроцессом.UpdateInfoBase(РабочаяБаза);
КонецПроцедуры
Показать
База на сервере SQL создавалась пустой и без пользователей.
Ругается так:
{ВнешняяОбработка.НазначениеПравВКопияхБаз.Форма.Форма.Форма(1448)}: Ошибка при вызове метода контекста (UpdateInfoBase)
СоединениеСРабочимПроцессом.UpdateInfoBase(РабочаяБаза);
по причине:
Произошла исключительная ситуация: Информационная база не зарегистрирована
Как такое может быть? если я создавал пустую базу и на SQL сервере и на сервере 1С? Может как то по другому возможно редактировать базу в сервере 1с?
(1) Через RAC/RAS. Процесс можно немного упростить использованием Deployka. Правда, деплойка использует не весь функционал RAS. Ну и еще для ее работы OScript необходим.
У вас почему то вместо com объекта строка: COMСоединитель = "v82.COMConnector". Я поправил на Новый COMОбъект("V82.COMConnector").
Все равно ошибка, что база на обнаружена. Какой то бедовый случай((. База создается, но никак не удается ее редактировать.
Я уже все перепробовал - и с аутентификацией пользователя и без. Даже создаю новую базу. Потом новосозданную редактирую. Ошибка. Может в com- компоненте какая проблема??
А у Вас база с пользователями? В кластере как аутентификация проходит - есть администраторы в одноименной ветке?
(15) База запускается. Начал копаться в УТ 11 - там этот код вызывается из обработки "Настройка разрешений на использование внешних ресурсов". Она не предназначена для непосредственного использования.
Откуда можно вызвать данную обработку а следовательно и метод который редактирует базу?
(18) проще проверить Блокировку регламентных заданий. Там аналогичное выполнение.
Начинается в Администрирование - Поддержка и обслуживание - Блокировка работы пользователей.
(19) посмотрел работу типового функционала. Кажется нашел причину ошибки. Дело все было в свойстве базы "Descr ". Почему то в связке с этим новым свойством база не перезаписывается. НО! Почему?
Если брать другие свойства как DeniedMessage, SessionsDenied - они изменяемы, а вот Descr - НЕТ.
Попробуйте не комментировать: //Админ1С и //ПарольАдмина1С = "", а присвоить им пустые значения. Или завести пользователя с полными правами и задать везде его имя и пароль.
Для каждого РабочаяБаза из МассивБаз цикл
ИскомаяБаза = РабочаяБаза.Name;
БазаНайдена = Найти(СтрокаСоединения,ИскомаяБаза) > 0;
Если БазаНайдена тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если Не БазаНайдена тогда
#Если НаКлиенте тогда
Сообщить("База (" + СтрокаСоединения + ") не найдена на сервере " + ИмяСервера);
#КонецЕсли
Возврат;
КонецЕсли;
РабочаяБаза.Descr = "Тест описание";
РабочаяБаза.ScheduledJobsDenied = Истина; // Блокируем выполнения регламентных заданий
СоединениеСРабочимПроцессом.UpdateInfoBase(РабочаяБаза);
Показать
в отладке чему равно РабочаяБаза? если цикл закончится и ничего не найдет? РабочаяБаза будет последнее значение и не факт найденное
Авторизация не нужна только для тех баз, в которых нет пользователей. Если есть хотя бы один - нужно указывать параметры полноправного пользователя. Иначе не пустит.
(10)
Ушпешно работает, могу программно устанавливать блокировку сеансов, но, когда добавляю в код изменение описания ИБ, то отвалиывается с ошибкой
"Произошла исключительная ситуация: Информационная база не зарегистрирована"
Все действия производятся на компьютере где установлен сервер1С? Если нет, то попробовать там. Возможно зарегистрированный СОМконнектор на удаленном компьютере не соответствует версии сервера1С.
(23)
Удалось ли найти причину данного поведения? На дворе 2021 год, 1с 8.3.17, а проблема та же. Изменение описания базы не доступно.
Описание изменяется только через "Соединение с агентом сервера"