РИБ на 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 Тогда
ПодключитьОбработчикОжидания
(«АвтообменДанными»,
ЧастотаОбмена
)
;
Иначе
Сообщить
(«Не задана частота авто обмена, подключение не возможно.»,
СтатусСообщения
.
Внимание
)
;
КонецЕсли
;
КонецЕсли
;
КонецПроцедуры

