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

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

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

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

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

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

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

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

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

    Если ПараметрыРаботыКлиента.ПервыйЗапуск
     ИЛИ НЕ ПараметрыРаботыКлиента.НеобходимоОбновлениеИнформационнойБазы
     ИЛИ НЕ ПараметрыРаботыКлиента.ЭтоГлавныйУзел Тогда
        Возврат Истина;
    КонецЕсли;
    //>>--%%Gmix- 29.08.2011 14:00:42
    Если Найти(Врег(ПараметрЗапуска),Врег("РазрешитьРаботуПользователей"))>0 Тогда
        Возврат Истина;
    КонецЕсли;
    //<
    Возврат ПроверитьЛегальностьПолученияОбновления(Истина);
Показать
4. Timur.V 67 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.Метаданные.Роли.АдминистраторСистемы); 
ПользовательИБ.Записать();
AfterEarth; user982256; +2 Ответить
13. user982256 29.06.18 06:53 Сейчас в теме
(12) Вы мой герой ! Спасибо огромное за ваш отклик !
Оставьте свое сообщение
Вакансии
Консультант 1С ERP
Москва
зарплата от 200 000 руб. до 250 000 руб.
Полный день

Аналитик 1C
Москва
зарплата от 200 000 руб. до 240 000 руб.
Полный день

Старший программист 1С
Москва
зарплата от 120 000 руб. до 250 000 руб.
Полный день

Руководитель группы разработки 1С
Москва
зарплата от 500 000 руб.
Полный день

Разработчик 1С (от middle до senior), до 300 К gross
Санкт-Петербург
зарплата от 195 000 руб. до 300 000 руб.
Полный день