Применение обновлений к информационной базе программно

1. user982256 26.06.18 09:43 Сейчас в теме
Доброго времени суток всем.

Делаю программное обновление множества информационных баз на подобие Обновлятора .

Цель - программно (в моем случае среда выполнения .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" не содержит определения для "ВыполнитьОбновлениеИнформационнойБазы"


Как правильно вызвать функцию ВыполнитьОбновлениеИнформационнойБазы ?
AfterEarth; +1 Ответить
По теме из базы знаний
Найденные решения
8. neuro88 26.06.18 10:35 Сейчас в теме
Какие конфигурации обновляете?

Использую для БП 2.0, Зуп 2.5
connection.Обработки.ОбновлениеИнформационнойБазы.Создать().ВыполнитьОбновление();

Для БП 3.0, Зуп 3.1
Result = connection.ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы();
connection.ОбновлениеИнформационнойБазыСлужебный.ЗаписатьПодтверждениеЛегальностиПолученияОбновлений();
AfterEarth; user982256; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. ediks 335 26.06.18 10:27 Сейчас в теме
(1) У меня используется самописная конфигурация, в которой используется такой код обновления базы данных после обновления конфигурации с обходом проверки легальности обновления. Подключение происходит по COM. Первые 3 строчки - обновление БД и проверка легальности обновления.
ОбновлениеИнформационнойБазыСлужебный.УстановитьЗапускОбновленияИнформационнойБазы(Истина);
ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы();
ОбновлениеИнформационнойБазыСлужебный.ЗаписатьПодтверждениеЛегальностиПолученияОбновлений();

// Шаблон Снять блокировку сеансов и регламентных заданий. (БСП)
ПараметрыАдминистрированияКластера = АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера();
ПараметрыАдминистрированияКластера.ТипПодключения = "COM";
ПараметрыАдминистрированияКластера.АдресАгентаСервера = {АдресАгентаСервера};
ПараметрыАдминистрированияКластера.ПортАгентаСервера = {ПортАгентаСервера};
ПараметрыАдминистрированияКластера.ПортКластера = {ПортКластера};
ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера = {ИмяАдминистратораКластера};
ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера = {ПарольАдминистратораКластера};
ПараметрыАдминистрированияКластера.Вставить("ИмяВКластере", {ИмяВКластере});

ПараметрыАдминистрированияИБ = АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера();
ПараметрыАдминистрированияИБ.ИмяВКластере = {ИмяВКластере};
СвойстваБлокировкиСеансовИЗаданий = АдминистрированиеКластераКлиентСервер.СвойстваБлокировкиСеансовИРегламентныхЗаданий();
СвойстваБлокировкиСеансовИЗаданий.БлокировкаСеансов = Ложь;
СвойстваБлокировкиСеансовИЗаданий.ДатаС = ТекущаяДата();
//СвойстваБлокировкиСеансовИЗаданий.Сообщение = "Доступ в базу закрыт. Идут регламентные работы.";
СвойстваБлокировкиСеансовИЗаданий.КодРазрешения = "";
СвойстваБлокировкиСеансовИЗаданий.БлокировкаРегламентныхЗаданий = Ложь;

АдминистрированиеКластераCOMКлиентСервер.УстановитьБлокировкуСеансовИЗаданийИнформационнойБазы(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ, СвойстваБлокировкиСеансовИЗаданий);

Показать
14. hrom 69 29.05.23 08:40 Сейчас в теме
(1)
КОМ-коннектор


КОМ-коннектор не работает на Линукс, а Новый АдминистрированиеСервера() работает
2. Timur.V 78 26.06.18 10:03 Сейчас в теме
Как правило, процедура вызывается из функции ПриНачалеРаботыСистемы модуля приложения.
5. user982256 26.06.18 10:20 Сейчас в теме
(2)
ботыСистемы модуля прил
Можете пример показать ?
7. Timur.V 78 26.06.18 10:29 Сейчас в теме
(5) я не скачивал обработку.
Можно открыть конфигуратор и поискать по названию функции.
3. Timur.V 78 26.06.18 10:13 Сейчас в теме
Делятся секретами
https://infostart.ru/public/106228/

В типовых конфигурация при обновлении версии БД выдается окно подтверждения легальности получения обновления.

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

Это я считаю недоработкой программистов 1С.

Для того чтобы окно не появлялось достаточно внести следующую доработку в конфигурацию.

В общем модуле ПроверкаЛегальностиПолученияОбновленияКлиент подправить процедуру

// Процедура для проверки легальности получения обновления.
// Должна вызываться перед обновлением информационной базы.
//
Функция ПодтвердитьЛегальностьПолученияОбновления() Экспорт

    ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента();

    Если ПараметрыРаботыКлиента.ПервыйЗапуск
     ИЛИ НЕ ПараметрыРаботыКлиента.НеобходимоОбновлениеИнформационнойБазы
     ИЛИ НЕ ПараметрыРаботыКлиента.ЭтоГлавныйУзел Тогда
        Возврат Истина;
    КонецЕсли;
    //>>--%%Gmix- 29.08.2011 14:00:42
    Если Найти(Врег(ПараметрЗапуска),Врег("РазрешитьРаботуПользователей"))>0 Тогда
        Возврат Истина;
    КонецЕсли;
    //<
    Возврат ПроверитьЛегальностьПолученияОбновления(Истина);
Показать
4. Timur.V 78 26.06.18 10:14 Сейчас в теме
(по ссылке выше)
Не обязательно модули редактировать на адаптацию к запуску скрипта, достаточно в командной строке указать ключ
"-server" , а в модулях 1С уже прописано #если клиент тогда.
в результате полная строчка у меня получилась

str_command=""""&Str_Path1C&""""&" ENTERPRISE "& Str_ConectionBase & Srt_infoBaseAuthorization &" /UC"&Str_CodeEnabelBase&" /CРазрешитьРаботуПользователей /RunModeOrdinaryApplication -server"
8. neuro88 26.06.18 10:35 Сейчас в теме
Какие конфигурации обновляете?

Использую для БП 2.0, Зуп 2.5
connection.Обработки.ОбновлениеИнформационнойБазы.Создать().ВыполнитьОбновление();

Для БП 3.0, Зуп 3.1
Result = connection.ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы();
connection.ОбновлениеИнформационнойБазыСлужебный.ЗаписатьПодтверждениеЛегальностиПолученияОбновлений();
AfterEarth; user982256; +2 Ответить
9. user982256 26.06.18 20:21 Сейчас в теме
(8) Ваш метод работает спасибо огромное!!!
Единсвенное после принятия обновлений, база не хочет запускаться под администратором
Сообщение об ошибке:
Прикрепленные файлы:
10. neuro88 27.06.18 10:35 Сейчас в теме
(9) подобная ошибка говорит сама за себя - нет прав на запуск соответствующего вида клиента.
Причины ее возникновения:
- у пользователя вообще нет прав (скорее всего это наша ситуация);
- у пользователя есть права на запуск, к примеру, тонкого клиента, а запуск предприятия производит в толстом клиенте.

Раз речь идет про администратора, то наиболее вероятен первый вариант.

На примере БП 3.0:
Дело в том, что для запуска необходима либо соответствующая роль - Запуск толстого клиента, Запуск тонкого клиента и т.д, либо роль Администратор системы.
При обновлении справочника Пользователи 1С перезаписывает роли в соответствии с установленными профилями групп доступа. Если у Вас у пользователя не установлены профили, но в конфигураторе указаны роли, то при обновлении 1С может эти роли затереть. Я столкнулся именно с такой ситуацией, когда настраивал не типовые права для пользователей.
Прикрепленные файлы:
11. user982256 27.06.18 11:43 Сейчас в теме
(10) Да я понимаю о чем ошибка.
Проверяю до обовления:
comConnector.РольДоступна("ПолныеПрава") //истина
comConnector.РольДоступна("АдминистраторСистемы")  //истина


После обновления -ложь

Вот и вопрос, как можно через КОМ-коннектор задать-вернуть права назад ?
12. neuro88 28.06.18 13:46 Сейчас в теме
(11)
Добавлять роли по com:
ПользовательИБ = connection.ПользователиИнформационнойБазы.НайтиПоИмени("Администратор"); 
ПользовательИБ.Роли.Добавить(connection.Метаданные.Роли.ПолныеПрава); 
ПользовательИБ.Роли.Добавить(connection.Метаданные.Роли.АдминистраторСистемы); 
ПользовательИБ.Записать();
kaaasteeen; AfterEarth; user982256; +3 Ответить
13. user982256 29.06.18 06:53 Сейчас в теме
(12) Вы мой герой ! Спасибо огромное за ваш отклик !
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот