Каталог решений - РИБ на v 8: Автоматический прием сообщения обмена, содержащего изменения в конфигурации

РИБ на v 8: Автоматический прием сообщения обмена, содержащего изменения в конфигурации

РИБ на v 8: Автоматический прием сообщения обмена, содержащего изменения в конфигурации

В наличии

В статье приведен пример решения проблемы автоматического приема сообщения обмена, содержащего изменения в метаданных.

Категория:

Описание

При реализации в распределенной информационной базе автоматического обмена данными, возникает проблема при приеме сообщения, содержащего изменение метаданных. Так как в этом случае, необходим запуск конфигуратора и обновление конфигурации информационной базы.
Реализацию автоматического приема такого сообщения можно разделить на следующие этапы:
1. При чтении сообщения, определить, что получены изменения конфигурации.
2. Выполнить обновление конфигурации базы данных.
3. «Дочитать» сообщение обмена.
Что бы определить факт получения изменений в метаданных можно воспользоваться методом глобального контекста КонфигурацияИзменена() или, выполняя чтение сообщения обмена в конструкции Попытка, проанализировать ОписаниеОшибки(). Например:
Попытка

ЧтениеXML

=

Новый ЧтениеXML;
 	ЧтениеXML

.

ОткрытьФайл

(

ИмяФайлаСообщения

)

;
 	ЧтениеСообщения

=

ПланыОбмена

.

СоздатьЧтениеСообщения

()

;
 	ЧтениеСообщения

.

НачатьЧтение

(

ЧтениеXML

)

;
 	ПланыОбмена

.

ПрочитатьИзменения

(

ЧтениеСообщения

)

;
 	ЧтениеСообщения

.

ЗакончитьЧтение

()

;
 	ЧтениеXML

.

Закрыть

()

;

Исключение

СтрОписания

=«Обновление может быть выполнено в режиме Конфигуратор.»

;
   	

Если

Прав

(

ОписаниеОшибки

(),

СтрДлина

(

СтрОписания

))=

СтрОписания 

Тогда

ОбновитьКонфигурацию

()

;  

// процедура обновления конфигурации Иначе

Сообщить

(

ОписаниеОшибки

())

;
   	

КонецЕсли

;

КонецПопытки

;

Для выполнения обновления конфигурации информационной базы, необходимым условием является монопольный режим, т.е. отсутствие в базе других активных пользователей. Таким образом, предварительно необходимо «выгнать» из базы работающих пользователей. В типовых конфигурациях это можно сделать, установив константу РежимЗавершенияРаботыПользователей. Исходя из этого, наша процедура обновления конфигурации выглядит следующим образом:
Процедура

ОбновитьКонфигурацию

()

ОтключитьОбработчикОжидания

(«АвтообменДанными»)

;  

// отключим наш обработчик, в котором происходит обмен сообщениями

Константы

.

РежимЗавершенияРаботыПользователей

.

Установить

(

Перечисления

.

РежимыЗавершенияРаботыПользователей

.

ЗавершитьПослеОжиданияПодтвержденияПользователя

)

;
	ПодключитьОбработчикОжидания

(«ОбновлениеКонфигурацииИБ»,10)

;

КонецПроцедуры
Обработчик ожидания ОбновлениеКонфигурацииИБ, предназначен для того, что бы с установленным интервалом (в данном случае 10 сек.), проверять вышли ли все пользователи из базы и если да, то запускать обновление конфигурации информационной базы. Само обновление конфигурации реализовано с помощью внешнего скрипта. Ниже приведен программный код этого обработчика:
Процедура

ОбновлениеКонфигурацииИБ

() Экспорт

МассивСоединений

=

ПолучитьСоединенияИнформационнойБазы

()

;
	

Если

МассивСоединений

.

Количество

()>1 Тогда Возврат

;  

// ждем дальше… КонецЕсли

;
   	СтрокаСоединения

=

СтрокаСоединенияИнформационнойБазы

()

;
 	ПутьКСкрипту

=

КаталогВременныхФайлов

()+«exchange.vbs»

;
   	Скрипт

=

Новый ЗаписьТекста

(

ПутьКСкрипту

,

КодировкаТекста

.

ANSI

)

;
   	Скрипт

.

ЗаписатьСтроку

(«WScript.Sleep 5000»)

; 

// на всякий случай

Скрипт

.

ЗаписатьСтроку

(«Set WshShell=CreateObject(«»WScript.Shell»»)»)

;
   	Команда

=«»»»»»+

КаталогПрограммы

()+«1CV8.EXE»»»» CONFIG»+

?

(

НСтр

(

СтрокаСоединения

,«File»)<>«»,» /F «+

НСтр

(

СтрокаСоединения

,«File»),» /S «+

НСтр

(

СтрокаСоединения

,«Srvr»)+«\»+

НСтр

(

СтрокаСоединения

,«Ref»))+» /N Exchange /P Exchange /UpdateDBCfg»

;
   	Скрипт

.

ЗаписатьСтроку

(«ReturnCode=WshShell.Run(«»»+

Команда

+«»»,1,1)»)

;
   	Скрипт

.

ЗаписатьСтроку

(«If ReturnCode=0 Then»)

; 

// если обновились удачно, то пытаемся дочитать сообщение

Команда

=«»»»»»+

КаталогПрограммы

()+«1CV8.EXE»»»» ENTERPRISE»+

?

(

НСтр

(

СтрокаСоединения

,«File»)<>«»,» /F «+

НСтр

(

СтрокаСоединения

,«File»),» /S «+

НСтр

(

СтрокаСоединения

,«Srvr»)+«\»+

НСтр

(

СтрокаСоединения

,«Ref»))+» /N Exchange /P Exchange»

;
   	Скрипт

.

ЗаписатьСтроку

(«WshShell.Run «»»+

Команда

+«»»,1,0″)

;
   	Скрипт

.

ЗаписатьСтроку

(«End If»)

;
   	Скрипт

.

ЗаписатьСтроку

(«Set FSO=CreateObject(«»Scripting.FileSystemObject»»)»)

;
   	Скрипт

.

ЗаписатьСтроку

(«Set File=FSO.GetFile(WScript.ScriptFullName)»)

;
   	Скрипт

.

ЗаписатьСтроку

(«File.Delete»)

;
   	Скрипт

.

Закрыть

()

;
   	ЗапуститьПриложение

(

ПутьКСкрипту

)

;
   	ЗавершитьРаботуСистемы

(

Ложь

)

;

КонецПроцедуры
Сформированный в результате скрипт, запускает обновление конфигурации базы данных, затем базу в режиме Предприятия и после этого сам себя удаляет. Подразумевается, что при старте системы, происходит подключение обработчика ожидания, в котором выполняется авто обмен данными с установленной частотой. Так же, важно не забывать при этом «выключать» РежимЗавершенияРаботыПользователей. Ниже приведен пример реализации подключения авто обмена:
Процедура

ПриНачалеРаботыСистемы

() // Инициализация авто обмена Если

РольДоступна

(«АвтоОбмен») Тогда // Если нами был включен запрет для обновления конфигурации ИБ Если

Константы

.

РежимЗавершенияРаботыПользователей

.

Получить

()<>

Перечисления

.

РежимыЗавершенияРаботыПользователей

.

РазрешитьРаботу 

Тогда

Константы

.

РежимЗавершенияРаботыПользователей

.

Установить

(

Перечисления

.

РежимыЗавершенияРаботыПользователей

.

РазрешитьРаботу

)

;
		

КонецЕсли

;
		ЧастотаОбмена

=

Константы

.

ЧастотаАвтоОбменаДанными

.

Получить

()

;
		

Если

ЧастотаОбмена

<>0 Тогда

ПодключитьОбработчикОжидания

(«АвтообменДанными»,

ЧастотаОбмена

)

;
		

Иначе

Сообщить

(«Не задана частота авто обмена, подключение не возможно.»,

СтатусСообщения

.

Внимание

)

;
		

КонецЕсли

;
	

КонецЕсли

;

КонецПроцедуры

has been added to your cart:
Оформление заказа