Приветствую Вас ГостьСуббота, 14.06.2025, 05:41

Каталог статей


Обновить дополнительную обработку в удаленной базе

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

Подключение к базам осуществляется через Com. Список баз формируется отдельной функцией, которая здесь не приводится.

Предварительно сформированный МассивНастроек  - это массив структур с полями:

  • Ссылка - ссылка на узел обмена, в котором указана подключаемая база
  • ИмяБазы - имя базы для подключения

Данные для подключения хранятся в реквизитах выполняемой обработки: ИмяФайлаОбработки, ИмяПользователя, Пароль

&НаКлиенте
Процедура ОбновитьПоМассивуНастроек(МассивНастроек) 
    
    Сч = 0;
    Для Каждого СтрокаНастроек Из МассивНастроек Цикл         
        
        Сч = Сч + 1;
        Состояние("" + СтрокаНастроек.Ссылка, Цел(100*Сч/МассивНастроек.Количество()));
        
        Если ЗначениеЗаполнено(СтрокаНастроек.ИмяБазы) Тогда
            РезультатВыполнения = ОбновитьОбработкуНаСервере(СтрокаНастроек); 
            Если РезультатВыполнения <> "" Тогда
                ДобавитьВПротокол(СтрокаНастроек.Ссылка, РезультатВыполнения);
            КонецЕсли;
        Иначе 
            ДобавитьВПротокол(СтрокаНастроек.Ссылка, "Не заполнено имя базы не сервере.");
        КонецЕсли;
        
    КонецЦикла;
    
КонецПроцедуры

&НаСервере
Функция ОбновитьОбработкуНаСервере(СтрокаНастроек)
    
    Перем Результат;
    Результат = "";
    
    ПодключениекБазе = ПодключитьсяКБазе(СтрокаНастроек); 
    Если ПодключениекБазе = Неопределено Тогда                            
        Возврат "";
    КонецЕсли; 
    
    Результат = Обновитьобработку(ПодключениекБазе);    
    
    ПодключениекБазе = Неопределено;
    
    Возврат Результат;
    
КонецФункции

&НаСервере
Функция ПодключитьсяКБазе(СтруктураНастроек) 
    
    Коннектор = Новый COMОбъект("V83.COMConnector");
    Сервер = "srv";
    СтрокаПодключения = "srvr='" + Сервер + "'; ref='" + СтруктураНастроек.ИмяБазы + "'; usr='" + Объект.ИмяПользователя + "'; pwd='" + объект.Пароль + "';"; 
    Попытка        
        Возврат Коннектор.Connect(СтрокаПодключения);
    Исключение
        ДобавитьВПротокол(СтруктураНастроек.Ссылка, "Ошибка подключения к базе: " + ОписаниеОшибки());
        Возврат Неопределено; 
    КонецПопытки; 
    
КонецФункции 

&НаСервере
Функция Обновитьобработку(ПодключениекБазе)     
    
    Перем Результат;
    Результат = Неопределено;
    
    ФайлОбработки = ПодключениекБазе.NewObject("Файл",Объект.ИмяФайлаОбработки);
    Если Не ФайлОбработки.Существует() Тогда
        Результат = "Ошибка: Нет доступа к файлу обработки";
        Возврат Результат;
    КонецЕсли;

    ОбработкаСсылка = НайтиОбработку(ПодключениекБазе); //функция ищет ссылку в справочнике ДополнительныеОтчетыИОбработки по наименованию. 
    Если ОбработкаСсылка = Неопределено Тогда
        Результат = "Не найдена обработка в базе";
        Возврат Результат;
    КонецЕсли; 
        
    попытка
        ОбработкаОбъект = ОбработкаСсылка.ПолучитьОбъект();
        ДД = ПодключениекБазе.NewObject("ДвоичныеДанные",Объект.ИмяФайлаОбработки);
        Хранилище = ПодключениекБазе.NewObject("ХранилищеЗначения",ДД);
        ОбработкаОбъект.ХранилищеОбработки = Хранилище;         
        ОбработкаОбъект.Записать(); 
        Результат = "Обработка обновлена";
    Исключение
        Результат = "Ошибка обновления обработки: " + ОписаниеОшибки();
    КонецПопытки; 
    
    Возврат Результат;
    
КонецФункции
&НаСервере
Процедура ДобавитьВПротокол(Узел, ТекстСообщения) 
    
    ТекстОтступ = "";
    УзелСтрокой = Строка(Узел);
    КоличествоТаб = Цел((60-СтрДлина(УзелСтрокой))/4);
    Для Сч = 1 По КоличествоТаб Цикл
        ТекстОтступ = ТекстОтступ + Символы.Таб;
    КонецЦикла;
    Объект.ПротоколВыполнения.ДобавитьСтроку("""" + Узел + """" + ТекстОтступ + ТекстСообщения); 
    
конецПроцедуры
&НаСервере
Функция НайтиОбработку(ПодключениекБазе)    
    
    Перем Результат;
    Результат = Неопределено;
    
    Запрос = ПодключениекБазе.NewObject("Запрос");
    Запрос.Текст = 
        "ВЫБРАТЬ
 | ДополнительныеОтчетыИОбработки.Ссылка КАК Ссылка
 |ИЗ
 | Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки
 |ГДЕ
 | НЕ ДополнительныеОтчетыИОбработки.ПометкаУдаления
 | И ДополнительныеОтчетыИОбработки.Наименование ПОДОБНО ""%МояОбработка%""";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Результат = ВыборкаДетальныеЗаписи.Ссылка;
    КонецЦикла;
    
    Возврат Результат;

КонецФункции

 

Категория: Администрирование | Добавил: leshic (11.03.2025)
Просмотров: 19 | Рейтинг: 0.0/0
Всего комментариев: 0
Вход на сайт
Поиск
Категории раздела
СКД [51]
Регистры [7]
Формы [47]
Администрирование [46]
Запросы [11]
Объекты конфигурации и типы данных [20]
Взаимодействие с другими базами, приложениями и источниками данных [16]
Программирование [46]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0