Внешняя компонента для 1С 7.7/8.х по технологии СОМ. Позволяет запустить процесс в отдельном потоке без отображения окна и общаться с ним через stdout, stdin. Данные внешнего приложения вызывают "ОбработкаВнешнегоСобытия" что позволяет эмулировать различное оборудование, а так же асинхронно регировать на события внешей программы.
- Можно запускать любую консольную программу или скрипт (python, php, perl, cmd, vbs, js)
- Процесс запускается в отдельном потоке и не мешает выполнению основного процесса 1С.
- При завершении 1С, процесс убивается.
- Можно запустить несколько процессов создав несколько объектов
- Строка с переносом передается в 1С в качестве события "ОбработкаВнешнегоСобытия"
- Можно передать свои данные в процесс через Записать("какие то данные")
- Ошибки во внешнем процессе не приводят к падению 1С, как это бывает при использовании внешних компонент.
Код 1С
- Процедура ЗапуститьВнешний2()
- П = СоздатьОбъект("AddIn.Process"); П.СобытиеИсточник = "test"; П.СобытиеДействие = "msg"; П.ПоказыватьОкно = ""; П.Запустить("c:python27python.exe -u "+КаталогИБ()+"test.py");
КонецПроцедуры
- Процедура ОбработкаВнешнегоСобытия(а,п,в)
- Сообщить("ОБРАБОТКА:"+а+" "+п+" "+в);
КонецПроцедуры
ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"AddIn.dll");
Код скрипта
#coding: utf-8 from __future__ import unicode_literals
print("start") print("Привет".encode('cp1251'))
- while True:
- line = sys.stdin.readline() print(line)
Компонента писалась для запуска python скриптов, но использоваться может любая консольная программа.
На данный момент я использую для работы сканеров штрихкодов через сервер redis. Такой подход позволил добиться стабильной работы rs232 сканеров с удаленным сервером терминалов даже при переодических потерях связи. Скрипты для сканеров не включены в этот проект.
Второе применение это связка python + selenium: http://www.seleniumhq.org/ позволила сделать простую обработку для размещения заказа поставщику через его веб интерфейс. При запуске открывает браузер и выполняется заполнение как бы это приходилось делать менеджеру. В обработке 1С запускается скрипт, а в обработке внешнего события ожидается команда готовности получать данные о строках заказа.
Исходники компоненты на Delphi XE5.
Для компиляции нужен Delphi не ниже XE2, т.к. шаблон компоненты переделан с использованием RTTI. Теперь создавать компоненты для 1С намного проще. Основной код располагается в модуле PipeRunner.Pas:https://github.com/WorldException/v7SimpleAddIn/blob/master/v7AddIn/PipeRunner.pas
--
Стоянов Евгений <[email protected]>