Применение обновлений к информационной базе программно
Доброго времени суток всем.
Делаю программное обновление множества информационных баз на подобие .
Цель - программно (в моем случае среда выполнения .net C#) обновить множество информационных баз и принять полученные обновления программно.
Сами обновления накатываю при помощи cmd запуская 1С с параметрами (С этим проблем нет).
После запуска базы через лаунчер платформа требует принять "Легальность полученных обновлений" и только затем применяет полученные обновления.
Мне же нужно это сделать программно.
Я пытаюсь через КОМ-коннектор подклчиться к базе используя учетные данные алминистратора базы.
Пример кода:
Но при вызове функциии ВыполнитьОбновлениеИнформационнойБазы получаю исключение что такой функции не существует:
Как правильно вызвать функцию ВыполнитьОбновлениеИнформационнойБазы ?
Делаю программное обновление множества информационных баз на подобие .
Цель - программно (в моем случае среда выполнения .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" не содержит определения для "ВыполнитьОбновлениеИнформационнойБазы"Как правильно вызвать функцию ВыполнитьОбновлениеИнформационнойБазы ?
По теме из базы знаний
- Выгрузка-загрузка любых данных из 1С (и измененных) в XML между похожими конфигурациями (ФАЙЛ, HTTP) ЛЮБЫХ баз 1С 8.1-8.3 с обработкой и поиском данных по произвольным полям поиска
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2/3.0
- Система управления интеграциями на базе 1С:Шины
- 1С:Управление ландшафтом
- Решение на базе 1С:Предприятие.Элемент в информационном ландшафте предприятия
Найденные решения
Какие конфигурации обновляете?
Использую для БП 2.0, Зуп 2.5
connection.Обработки.ОбновлениеИнформационнойБазы.Создать().ВыполнитьОбновление();
Для БП 3.0, Зуп 3.1
Result = connection.ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы();
connection.ОбновлениеИнформационнойБазыСлужебный.ЗаписатьПодтверждениеЛегальностиПолученияОбновлений();
Использую для БП 2.0, Зуп 2.5
connection.Обработки.ОбновлениеИнформационнойБазы.Создать().ВыполнитьОбновление();
Для БП 3.0, Зуп 3.1
Result = connection.ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы();
connection.ОбновлениеИнформационнойБазыСлужебный.ЗаписатьПодтверждениеЛегальностиПолученияОбновлений();
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) У меня используется самописная конфигурация, в которой используется такой код обновления базы данных после обновления конфигурации с обходом проверки легальности обновления. Подключение происходит по COM. Первые 3 строчки - обновление БД и проверка легальности обновления.
ОбновлениеИнформационнойБазыСлужебный.УстановитьЗапускОбновленияИнформационнойБазы(Истина);
ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы();
ОбновлениеИнформационнойБазыСлужебный.ЗаписатьПодтверждениеЛегальностиПолученияОбновлений();
// Шаблон Снять блокировку сеансов и регламентных заданий. (БСП)
ПараметрыАдминистрированияКластера = АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера();
ПараметрыАдминистрированияКластера.ТипПодключения = "COM";
ПараметрыАдминистрированияКластера.АдресАгентаСервера = {АдресАгентаСервера};
ПараметрыАдминистрированияКластера.ПортАгентаСервера = {ПортАгентаСервера};
ПараметрыАдминистрированияКластера.ПортКластера = {ПортКластера};
ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера = {ИмяАдминистратораКластера};
ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера = {ПарольАдминистратораКластера};
ПараметрыАдминистрированияКластера.Вставить("ИмяВКластере", {ИмяВКластере});
ПараметрыАдминистрированияИБ = АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера();
ПараметрыАдминистрированияИБ.ИмяВКластере = {ИмяВКластере};
СвойстваБлокировкиСеансовИЗаданий = АдминистрированиеКластераКлиентСервер.СвойстваБлокировкиСеансовИРегламентныхЗаданий();
СвойстваБлокировкиСеансовИЗаданий.БлокировкаСеансов = Ложь;
СвойстваБлокировкиСеансовИЗаданий.ДатаС = ТекущаяДата();
//СвойстваБлокировкиСеансовИЗаданий.Сообщение = "Доступ в базу закрыт. Идут регламентные работы.";
СвойстваБлокировкиСеансовИЗаданий.КодРазрешения = "";
СвойстваБлокировкиСеансовИЗаданий.БлокировкаРегламентныхЗаданий = Ложь;
АдминистрированиеКластераCOMКлиентСервер.УстановитьБлокировкуСеансовИЗаданийИнформационнойБазы(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ, СвойстваБлокировкиСеансовИЗаданий);
Показать
Делятся секретами
В типовых конфигурация при обновлении версии БД выдается окно подтверждения легальности получения обновления.
Причем даже если база запускается с параметром "РазрешитьРаботуПользователей" при этом база должна закрываться.
Это я считаю недоработкой программистов 1С.
Для того чтобы окно не появлялось достаточно внести следующую доработку в конфигурацию.
В общем модуле ПроверкаЛегальностиПолученияОбновленияКлиент подправить процедуру
В типовых конфигурация при обновлении версии БД выдается окно подтверждения легальности получения обновления.
Причем даже если база запускается с параметром "РазрешитьРаботуПользователей" при этом база должна закрываться.
Это я считаю недоработкой программистов 1С.
Для того чтобы окно не появлялось достаточно внести следующую доработку в конфигурацию.
В общем модуле ПроверкаЛегальностиПолученияОбновленияКлиент подправить процедуру
// Процедура для проверки легальности получения обновления.
// Должна вызываться перед обновлением информационной базы.
//
Функция ПодтвердитьЛегальностьПолученияОбновления() Экспорт
ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента();
Если ПараметрыРаботыКлиента.ПервыйЗапуск
ИЛИ НЕ ПараметрыРаботыКлиента.НеобходимоОбновлениеИнформационнойБазы
ИЛИ НЕ ПараметрыРаботыКлиента.ЭтоГлавныйУзел Тогда
Возврат Истина;
КонецЕсли;
//>>--%%Gmix- 29.08.2011 14:00:42
Если Найти(Врег(ПараметрЗапуска),Врег("РазрешитьРаботуПользователей"))>0 Тогда
Возврат Истина;
КонецЕсли;
//<
Возврат ПроверитьЛегальностьПолученияОбновления(Истина); Показать
(по ссылке выше)
Не обязательно модули редактировать на адаптацию к запуску скрипта, достаточно в командной строке указать ключ
"-server" , а в модулях 1С уже прописано #если клиент тогда.
в результате полная строчка у меня получилась
str_command=""""&Str_Path1C&""""&" ENTERPRISE "& Str_ConectionBase & Srt_infoBaseAuthorization &" /UC"&Str_CodeEnabelBase&" /CРазрешитьРаботуПользователей /RunModeOrdinaryApplication -server"
Не обязательно модули редактировать на адаптацию к запуску скрипта, достаточно в командной строке указать ключ
"-server" , а в модулях 1С уже прописано #если клиент тогда.
в результате полная строчка у меня получилась
str_command=""""&Str_Path1C&""""&" ENTERPRISE "& Str_ConectionBase & Srt_infoBaseAuthorization &" /UC"&Str_CodeEnabelBase&" /CРазрешитьРаботуПользователей /RunModeOrdinaryApplication -server"
Какие конфигурации обновляете?
Использую для БП 2.0, Зуп 2.5
connection.Обработки.ОбновлениеИнформационнойБазы.Создать().ВыполнитьОбновление();
Для БП 3.0, Зуп 3.1
Result = connection.ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы();
connection.ОбновлениеИнформационнойБазыСлужебный.ЗаписатьПодтверждениеЛегальностиПолученияОбновлений();
Использую для БП 2.0, Зуп 2.5
connection.Обработки.ОбновлениеИнформационнойБазы.Создать().ВыполнитьОбновление();
Для БП 3.0, Зуп 3.1
Result = connection.ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы();
connection.ОбновлениеИнформационнойБазыСлужебный.ЗаписатьПодтверждениеЛегальностиПолученияОбновлений();
(9) подобная ошибка говорит сама за себя - нет прав на запуск соответствующего вида клиента.
Причины ее возникновения:
- у пользователя вообще нет прав (скорее всего это наша ситуация);
- у пользователя есть права на запуск, к примеру, тонкого клиента, а запуск предприятия производит в толстом клиенте.
Раз речь идет про администратора, то наиболее вероятен первый вариант.
На примере БП 3.0:
Дело в том, что для запуска необходима либо соответствующая роль - Запуск толстого клиента, Запуск тонкого клиента и т.д, либо роль Администратор системы.
При обновлении справочника Пользователи 1С перезаписывает роли в соответствии с установленными профилями групп доступа. Если у Вас у пользователя не установлены профили, но в конфигураторе указаны роли, то при обновлении 1С может эти роли затереть. Я столкнулся именно с такой ситуацией, когда настраивал не типовые права для пользователей.
Причины ее возникновения:
- у пользователя вообще нет прав (скорее всего это наша ситуация);
- у пользователя есть права на запуск, к примеру, тонкого клиента, а запуск предприятия производит в толстом клиенте.
Раз речь идет про администратора, то наиболее вероятен первый вариант.
На примере БП 3.0:
Дело в том, что для запуска необходима либо соответствующая роль - Запуск толстого клиента, Запуск тонкого клиента и т.д, либо роль Администратор системы.
При обновлении справочника Пользователи 1С перезаписывает роли в соответствии с установленными профилями групп доступа. Если у Вас у пользователя не установлены профили, но в конфигураторе указаны роли, то при обновлении 1С может эти роли затереть. Я столкнулся именно с такой ситуацией, когда настраивал не типовые права для пользователей.
Прикрепленные файлы:
(10) Да я понимаю о чем ошибка.
Проверяю до обовления:
После обновления -ложь
Вот и вопрос, как можно через КОМ-коннектор задать-вернуть права назад ?
Проверяю до обовления:
comConnector.РольДоступна("ПолныеПрава") //истина
comConnector.РольДоступна("АдминистраторСистемы") //истинаПосле обновления -ложь
Вот и вопрос, как можно через КОМ-коннектор задать-вернуть права назад ?
(11)
Добавлять роли по com:
Добавлять роли по com:
ПользовательИБ = connection.ПользователиИнформационнойБазы.НайтиПоИмени("Администратор");
ПользовательИБ.Роли.Добавить(connection.Метаданные.Роли.ПолныеПрава);
ПользовательИБ.Роли.Добавить(connection.Метаданные.Роли.АдминистраторСистемы);
ПользовательИБ.Записать();
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот