Здесь рассматривается пример обновления только самой дополнительной обработки, без обновления списка команд и расписания.
Подключение к базам осуществляется через Com. Список баз формируется отдельной функцией, которая здесь не приводится.
Предварительно сформированный МассивНастроек - это массив структур с полями:
- Ссылка - ссылка на узел обмена, в котором указана подключаемая база
- ИмяБазы - имя базы для подключения
Данные для подключения хранятся в реквизитах выполняемой обработки: ИмяФайлаОбработки, ИмяПользователя, Пароль
&НаКлиенте
Процедура ОбновитьПоМассивуНастроек(МассивНастроек)
Сч = 0;
Для Каждого СтрокаНастроек Из МассивНастроек Цикл
Сч = Сч + 1;
Состояние("" + СтрокаНастроек.Ссылка, Цел(100*Сч/МассивНастроек.Количество()));
Если ЗначениеЗаполнено(СтрокаНастроек.ИмяБазы) Тогда
РезультатВыполнения = ОбновитьОбработкуНаСервере(СтрокаНастроек);
Если РезультатВыполнения <> "" Тогда
ДобавитьВПротокол(СтрокаНастроек.Ссылка, РезультатВыполнения);
КонецЕсли;
Иначе
ДобавитьВПротокол(СтрокаНастроек.Ссылка, "Не заполнено имя базы не сервере.");
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ОбновитьОбработкуНаСервере(СтрокаНастроек)
Перем Результат;
Результат = "";
ПодключениекБазе = ПодключитьсяКБазе(СтрокаНастроек);
Если ПодключениекБазе = Неопределено Тогда
Возврат "";
КонецЕсли;
Результат = Обновитьобработку(ПодключениекБазе);
ПодключениекБазе = Неопределено;
Возврат Результат;
КонецФункции
&НаСервере
Функция ПодключитьсяКБазе(СтруктураНастроек)
Коннектор = Новый COMОбъект("V83.COMConnector");
Сервер = "srv";
СтрокаПодключения = "srvr='" + Сервер + "'; ref='" + СтруктураНастроек.ИмяБазы + "'; usr='" + Объект.ИмяПользователя + "'; pwd='" + объект.Пароль + "';";
Попытка
Возврат Коннектор.Connect(СтрокаПодключения);
Исключение
ДобавитьВПротокол(СтруктураНастроек.Ссылка, "Ошибка подключения к базе: " + ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
КонецФункции
&НаСервере
Функция Обновитьобработку(ПодключениекБазе)
Перем Результат;
Результат = Неопределено;
ФайлОбработки = ПодключениекБазе.NewObject("Файл",Объект.ИмяФайлаОбработки);
Если Не ФайлОбработки.Существует() Тогда
Результат = "Ошибка: Нет доступа к файлу обработки";
Возврат Результат;
КонецЕсли;
ОбработкаСсылка = НайтиОбработку(ПодключениекБазе); //функция ищет ссылку в справочнике ДополнительныеОтчетыИОбработки по наименованию.
Если ОбработкаСсылка = Неопределено Тогда
Результат = "Не найдена обработка в базе";
Возврат Результат;
КонецЕсли;
попытка
ОбработкаОбъект = ОбработкаСсылка.ПолучитьОбъект();
ДД = ПодключениекБазе.NewObject("ДвоичныеДанные",Объект.ИмяФайлаОбработки);
Хранилище = ПодключениекБазе.NewObject("ХранилищеЗначения",ДД);
ОбработкаОбъект.ХранилищеОбработки = Хранилище;
ОбработкаОбъект.Записать();
Результат = "Обработка обновлена";
Исключение
Результат = "Ошибка обновления обработки: " + ОписаниеОшибки();
КонецПопытки;
Возврат Результат;
КонецФункции
&НаСервере
Процедура ДобавитьВПротокол(Узел, ТекстСообщения)
ТекстОтступ = "";
УзелСтрокой = Строка(Узел);
КоличествоТаб = Цел((60-СтрДлина(УзелСтрокой))/4);
Для Сч = 1 По КоличествоТаб Цикл
ТекстОтступ = ТекстОтступ + Символы.Таб;
КонецЦикла;
Объект.ПротоколВыполнения.ДобавитьСтроку("""" + Узел + """" + ТекстОтступ + ТекстСообщения);
конецПроцедуры
&НаСервере
Функция НайтиОбработку(ПодключениекБазе)
Перем Результат;
Результат = Неопределено;
Запрос = ПодключениекБазе.NewObject("Запрос");
Запрос.Текст =
"ВЫБРАТЬ
| ДополнительныеОтчетыИОбработки.Ссылка КАК Ссылка
|ИЗ
| Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки
|ГДЕ
| НЕ ДополнительныеОтчетыИОбработки.ПометкаУдаления
| И ДополнительныеОтчетыИОбработки.Наименование ПОДОБНО ""%МояОбработка%""";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Результат = ВыборкаДетальныеЗаписи.Ссылка;
КонецЦикла;
Возврат Результат;
КонецФункции
|