Доброго времени суток. Каким образом программными средствами 1С возможно создать новую базу на реестре кластеров 1с?
Есть публикация в которой показан пример подключения к агенту сервера и отключения сеансов и соединений с информационной базой.
https://infostart.ru/public/77671/
По-видимому таким же способом акутуально и подключиться к рабочему процессу сервера.
В синтакс. помошнике нашел метод CreateInfoBase. Данный метод отностся к методу "Соединение с рабочим процессом".
Тоесть получается вначале нужно приконнектиться к рабочему процессу. Есть метод Connect(<ИнформационнаяБаза>, <ИмяПользователя>, <Пароль>) . НО!
Почему первый параметр это ИБ, которую по идее нужно создать? Или как то можно по-другому?
BaseInfo = Process.CreateInfoBaseInfo();
//заполняем все параметры базы:
BaseInfo.dbServerName = "ИмяСервера";
//... и т.д. Все свойства, необходимые для создания информационной базы (Name, dbServerName, dbName, dbUser, dbPassword, Locale, [DateOffset]) должны быть заполнены.
ИБ = Process.CreateInfoBase(BaseInfo,1);
Если опираться на приведенную статью, то Process это РабПроц там.
BaseInfo = Process.CreateInfoBaseInfo();
//заполняем все параметры базы:
BaseInfo.dbServerName = "ИмяСервера";
//... и т.д. Все свойства, необходимые для создания информационной базы (Name, dbServerName, dbName, dbUser, dbPassword, Locale, [DateOffset]) должны быть заполнены.
ИБ = Process.CreateInfoBase(BaseInfo,1);
Если опираться на приведенную статью, то Process это РабПроц там.
На кластере серверов нет аутентификации - не создано ниодного админа.
На сервере SQL доменная аутенцификация. База там физически создал
Выдает такую ошибку:
{ВнешняяОбработка.НазначениеПравВКопияхБаз.Форма.Форма.Форма(1275)}: Ошибка при вызове метода контекста (CreateInfoBase)
ИБ = РабПроц.CreateInfoBase(BaseInfo,0); //,1
по причине:
Произошла исключительная ситуация: Ошибка информационной базы
Ошибка при выполнении операции с информационной базой
Ошибка СУБД:
Microsoft SQL Server Native Client 11.0: Named Pipes Provider: Could not open a connection to SQL Server [2].
HRESULT=80004005, HRESULT=80004005, HRESULT=80004005, SQLSrvr: SQLSTATE=08001, state=1, Severity=10, native=2, line=0
(3) Возникла необходимость редактировать программно уже созданную базу на сервере 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(РабочаяБаза);
КонецПроцедуры
Показать
Ругается так:
{ВнешняяОбработка.НазначениеПравВКопияхБаз.Форма.Форма.Форма(1448)}: Ошибка при вызове метода контекста (UpdateInfoBase)
СоединениеСРабочимПроцессом.UpdateInfoBase(РабочаяБаза);
по причине:
Произошла исключительная ситуация: Информационная база не зарегистрирована
Как такое может быть? если я создавал пустую базу и на SQL сервере и на сервере 1С? Может как то по другому возможно редактировать базу в сервере 1с?