Примеры реализации автоматического обмена данными

В процессе использования механизмов обмена данными часто возникает необходимость выполнять процедуру обмена автоматически (например, каждую ночь в определенные часы). В данном разделе мы рассмотрим несколько возможных вариантов организации автоматического обмена данными.

Использование командной строки

Данный способ требует обязательной поддержки со стороны конфигурации.
В демонстрационной конфигурации "Обмен данными" реализован пример использования параметра запуска платформы 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Соединение

Автоматический обмен может быть реализован при помощи внешней программы, использующей возможности объекта 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

В данном примере используются те же процедуры узлов плана обмена УдаленныеОфисы, что и в реализации обмена с использованием командной строки.

Аналогично пункту "Использование командной строки" полученный исполняемый модуль может быть поставлен в очередь планировщика.