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

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

Данный способ требует обязательной поддержки со стороны конфигурации.
В демонстрационной конфигурации "Обмен данными" реализован пример использования параметра запуска платформы 1С:Предприятие.

Этот метод использует пользовательский параметр командной строки (/C). Значение этого параметра может быть проанализировано в режиме 1С:Предприятия, и на основе полученной информации могут быть выполнены некоторые действия.

Описание параметра запуска

Для облегчения процедуры разбора параметра запуска его значение представлено в формате XML. Данный формат не является унифицированным и используется только в демонстрационных целях.

Структура параметра запуска:

<Commands>
  <ReadChanges>
  <ExchangePlan>имя плана обмена</ExchangePlan>
  <Node>код узла</Node>
  </ReadChanges>
  <WriteChanges>
  <ExchangePlan>имя плана обмена</ExchangePlan>
  <Node>код узла</Node>
  </WriteChanges>
</Commands>


Кратко опишем назначение каждого из элементов:


  • <Commands> - элемент, обозначающий список команд запуска, может содержать различные команды, которые могут быть обработаны данной конфигурацией;
  • <ReadChanges> - команда чтения сообщения обмена;
  • <WriteChanges> - команда записи сообщения обмена;
  • <ExchangePlan> - имя плана обмена, для которого необходимо выполнить команду;
  • <Node> - код узла плана обмена, для которого необходимо выполнить команду.
Реализация

В процедуре ПередНачаломРаботыСистемы() выполняется обработка параметра запуска, которая собственно и инициирует обмен данными в соответствии со значением параметра запуска. В случае если значение реквизита ПараметрЗапуска глобального контекста 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


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