В процессе использования механизмов обмена данными часто возникает необходимость выполнять процедуру обмена автоматически (например, каждую ночь в определенные часы). В данном разделе мы рассмотрим несколько возможных вариантов организации автоматического обмена данными.
Данный способ требует обязательной поддержки со стороны конфигурации.
В демонстрационной конфигурации "Обмен данными" реализован пример использования параметра запуска платформы 1С:Предприятие.
Этот метод использует пользовательский параметр командной строки (/C). Значение этого параметра может быть проанализировано в режиме 1С:Предприятия, и на основе полученной информации могут быть выполнены некоторые действия.
Для облегчения процедуры разбора параметра запуска его значение представлено в формате XML. Данный формат не является унифицированным и используется только в демонстрационных целях.
Структура параметра запуска:
Копировать в буфер обмена<Commands> <ReadChanges> <ExchangePlan>имя плана обмена</ExchangePlan> <Node>код узла</Node> </ReadChanges> <WriteChanges> <ExchangePlan>имя плана обмена</ExchangePlan> <Node>код узла</Node> </WriteChanges> </Commands>
Кратко опишем назначение каждого из элементов:
В процедуре ПередНачаломРаботыСистемы() выполняется обработка параметра запуска, которая собственно и инициирует обмен данными в соответствии со значением параметра запуска. В случае если значение реквизита ПараметрЗапуска глобального контекста 1С:Предприятия не пустая строка - вызывается процедура ВыполнитьКомандыЗапуска(). В качестве единственного параметра ей передается строка - значение реквизита ПараметрЗапуска. После выполнения процедуры обработки происходит завершение работы программы путем установки параметра Отказ в значение Истина.
Процедура ВыполнитьКомандыЗапуска() выполняет разбор переданной строки при помощи объекта ЧтениеXML. По мере разбора получаемая информация анализируется, и распознанные команды выполняются. В демонстрационной конфигурации для команды ReadChanges будет вызвана процедура чтения сообщения обмена для указанного узла плана обмена - ПрочитатьСообщениеСИзменениями(), для команды WriteChanges - вызывается процедура записи сообщения обмена - ЗаписатьСообщениеСИзменениями(). Описание реализации данных процедур можно найти в демонстрационной конфигурации "Обмен данными".
Для выполнения обмена необходимо написать командный файл, в котором будет выполнен вызов платформы 1С:Предприятие для нужной информационной базы в режиме Предприятия с параметром командной строки /C.
Например: автоматическая загрузка и выгрузка сообщения обмена для информационной базы, расположенной в каталоге c:\IB. Обмен будет произведен по плану обмена УдаленныеОфисы для узла Офис1. Для удобства указания параметров используется файл с параметрами, путь к которому указывается при вызове платформы 1С:Предприятие
Копировать в буфер обмена1cv8.exe @c:\parameters.txt
При этом файл параметров parameters.txt может выглядеть следующим образом:
Копировать в буфер обмена/F c:\IB /C "<Commands> <ReadChanges> <ExchangePlan>УдаленныеОфисы</ExchangePlan> <Node>Офис1</Node> </ReadChanges> <WriteChanges> <ExchangePlan>УдаленныеОфисы</ExchangePlan> <Node>Офис1</Node> </WriteChanges> </Commands>" /Out c:\exchange.log
После создания командного файла его выполнение необходимо поставить в очередь планировщика (например, стандартного планировщика ОС Windows).
Автоматический обмен может быть реализован при помощи внешней программы, использующей возможности объекта COMСоединение платформы 1С:Предприятие. Данный метод может быть использован в случае, когда изменение конфигурации (для внедрения кода поддержки автоматического обмена) по каким-либо причинам невозможно или нежелательно.
Для примера напишем программу на языке VisualBasic для выполнения обмена аналогичного описанному в пункте "Использование командной строки":
Копировать в буфер обменаDim connector = CreateObject("V8.COMConnector") Dim connection = connector.connect("file=c:\IB") Dim nodeRef = connection.ПланыОбмена.УдаленныеОфисы.НайтиПоКоду("Офис1") If (Not nodeRef.Пустая()) Then Dim node = nodeRef.ПолучитьОбъект() node.ПрочитатьСообщениеСИзменениями() node.ЗаписатьСообщениеСИзменениями() End If
В данном примере используются те же процедуры узлов плана обмена УдаленныеОфисы, что и в реализации обмена с использованием командной строки.
Аналогично пункту "Использование командной строки" полученный исполняемый модуль может быть поставлен в очередь планировщика.