Делаю программное обновление множества информационных баз на подобие Обновлятора .
Цель - программно (в моем случае среда выполнения .net C#) обновить множество информационных баз и принять полученные обновления программно.
Сами обновления накатываю при помощи cmd запуская 1С с параметрами (С этим проблем нет).
После запуска базы через лаунчер платформа требует принять "Легальность полученных обновлений" и только затем применяет полученные обновления.
Мне же нужно это сделать программно.
Я пытаюсь через КОМ-коннектор подклчиться к базе используя учетные данные алминистратора базы.
Пример кода:
var connectString = $@"File='\\Storage-1\Client-1\db-1';Usr='Федоров (администратор)';pwd='';";
var connectorType = Type.GetTypeFromProgID("V8.3.10.2650.COMConnector");
var connectorInst = Activator.CreateInstance(connectorType);
var comConnector = connectorInst.Connect(connectString);
var updateDbModule = comConnector.Метаданные.ОбщиеМодули.ОбновлениеИнформационнойБазы;
updateDbModule.ВыполнитьОбновлениеИнформационнойБазы();
Показать
Но при вызове функциии ВыполнитьОбновлениеИнформационнойБазы получаю исключение что такой функции не существует:
"System.__ComObject" не содержит определения для "ВыполнитьОбновлениеИнформационнойБазы"
Как правильно вызвать функцию ВыполнитьОбновлениеИнформационнойБазы ?
Использую для БП 2.0, Зуп 2.5
connection.Обработки.ОбновлениеИнформационнойБазы.Создать().ВыполнитьОбновление();
Для БП 3.0, Зуп 3.1
Result = connection.ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы();
connection.ОбновлениеИнформационнойБазыСлужебный.ЗаписатьПодтверждениеЛегальностиПолученияОбновлений();
(1) У меня используется самописная конфигурация, в которой используется такой код обновления базы данных после обновления конфигурации с обходом проверки легальности обновления. Подключение происходит по COM. Первые 3 строчки - обновление БД и проверка легальности обновления.
В типовых конфигурация при обновлении версии БД выдается окно подтверждения легальности получения обновления.
Причем даже если база запускается с параметром "РазрешитьРаботуПользователей" при этом база должна закрываться.
Это я считаю недоработкой программистов 1С.
Для того чтобы окно не появлялось достаточно внести следующую доработку в конфигурацию.
В общем модуле ПроверкаЛегальностиПолученияОбновленияКлиент подправить процедуру
// Процедура для проверки легальности получения обновления.
// Должна вызываться перед обновлением информационной базы.
//
Функция ПодтвердитьЛегальностьПолученияОбновления() Экспорт
ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента();
Если ПараметрыРаботыКлиента.ПервыйЗапуск
ИЛИ НЕ ПараметрыРаботыКлиента.НеобходимоОбновлениеИнформационнойБазы
ИЛИ НЕ ПараметрыРаботыКлиента.ЭтоГлавныйУзел Тогда
Возврат Истина;
КонецЕсли;
//>>--%%Gmix- 29.08.2011 14:00:42
Если Найти(Врег(ПараметрЗапуска),Врег("РазрешитьРаботуПользователей"))>0 Тогда
Возврат Истина;
КонецЕсли;
//<
Возврат ПроверитьЛегальностьПолученияОбновления(Истина);
(по ссылке выше)
Не обязательно модули редактировать на адаптацию к запуску скрипта, достаточно в командной строке указать ключ
"-server" , а в модулях 1С уже прописано #если клиент тогда.
в результате полная строчка у меня получилась
Использую для БП 2.0, Зуп 2.5
connection.Обработки.ОбновлениеИнформационнойБазы.Создать().ВыполнитьОбновление();
Для БП 3.0, Зуп 3.1
Result = connection.ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы();
connection.ОбновлениеИнформационнойБазыСлужебный.ЗаписатьПодтверждениеЛегальностиПолученияОбновлений();
(9) подобная ошибка говорит сама за себя - нет прав на запуск соответствующего вида клиента.
Причины ее возникновения:
- у пользователя вообще нет прав (скорее всего это наша ситуация);
- у пользователя есть права на запуск, к примеру, тонкого клиента, а запуск предприятия производит в толстом клиенте.
Раз речь идет про администратора, то наиболее вероятен первый вариант.
На примере БП 3.0:
Дело в том, что для запуска необходима либо соответствующая роль - Запуск толстого клиента, Запуск тонкого клиента и т.д, либо роль Администратор системы.
При обновлении справочника Пользователи 1С перезаписывает роли в соответствии с установленными профилями групп доступа. Если у Вас у пользователя не установлены профили, но в конфигураторе указаны роли, то при обновлении 1С может эти роли затереть. Я столкнулся именно с такой ситуацией, когда настраивал не типовые права для пользователей.