Программа состоящая из UDP клиента (внешняя компонента) и сервера (exe - программа) - клиент отправляет сообщения, сервер принимает.
При запуске UDP клиента (на сервере и в COM соединении), он возвращает порт на котором запустился (диапазон портов указывается в ВК).
UDP сервер запускается на указанном порту, и получает широковещательные сообщения.
Если UDP сервер будет не доступен, это никак не повлияет на работу UDP клиента. (1С тормозить не будет)
UDP сервер - приложение 1cProgress.exe, запускается с параметром "порт", например: "1cProgress.exe 50500"
Не забываем создать правило в брандмауэре, для портов.
Имя класса компоненты: "УДПКлиент"
Функции и процедуры внешней компоненты:
Порт = ВК.Запустить(ПортНачальный, ПортКонечный, ШироковещательныйАдрес);
Аналог: Begin
Запускает UDP клиента, при запуске ищется свободный порт из указанного диапазона.
Порт - порт на котором запущен UDP клиент
ПортНачальный - начальный порт из диапазона (по умолчанию 50500)
ПортКонечный - начальный порт из диапазона (по умолчанию 50500)
ШироковещательныйАдрес - широковещательный адрес, например: 192.168.1.255
ВК.Прогресс(ТекстСостояния, ТекстСообщения, ПроцентВыполнения);
Аналог: Progress
Отправляет сообщение на UDP сервер.
ТекстСостояния - выводится под прогрессбаром
ТекстСообщения - выводится в окно сообщений (добавляется новая строка)
ПроцентВыполнения - прогрессбар
ВК.Закрыть();
Аналог: Closed
Отправляет сообщение "закрытия" на UDP сервер.
При получении, окно прогресса закроется.
******************************************************************
Логи UDP клиента (на 1С сервере имя пользователя "USR1CV8"): C:\Users\<имя пользователя>\Documents\UDP_Progress.log
Пример моей реализации:
ОбщийМакет.УДПКлиент - двоичный файл "УДПКлиент.zip"
ОбщийМакет.УДПСервер - двоичный файл "1cProgress.exe"
Общий модуль: УДП_Сообщения
&НаСервере
Функция ПодключитьУДПКомпоненту() Экспорт
КомпУст=Ложь;
Попытка
КомпУст=ПодключитьВнешнююКомпоненту("ОбщийМакет.УДПКлиент","компонента",ТипВнешнейКомпоненты.Native);
Исключение
ЗаписьЖурналаРегистрации("УДПКлиент",УровеньЖурналаРегистрации.Ошибка,,"Произошла исключительная ошибка при подключении компоненты!");
КонецПопытки;
Если Не КомпУст Тогда
ЗаписьЖурналаРегистрации("УДПКлиент",УровеньЖурналаРегистрации.Ошибка,,"Произошла ошибка при подключении компоненты!");
КонецЕсли;
УДПКлиент = Новый("AddIn.компонента.УДПКлиент");
Порт = УДПКлиент.Запустить(50500,50600,"192.168.10.255");
Попытка
СтруктураКомпонента = Новый Структура("УДПКлиент",УДПКлиент);
АдресУДПКлиент = ПоместитьВоВременноеХранилище(СтруктураКомпонента,Новый УникальныйИдентификатор);
Возврат Новый Структура("АдресУДПКлиент,Порт",АдресУДПКлиент,Порт);
Исключение
ЗаписьЖурналаРегистрации("УДПКлиент",УровеньЖурналаРегистрации.Ошибка,,ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
КонецФункции
&НаСервере
Функция ПолучитьКомпоненту(АдресУДПКлиент) Экспорт
Попытка
Если НЕ ПустаяСтрока(АдресУДПКлиент) Тогда
Подключение = ПолучитьИзВременногоХранилища(АдресУДПКлиент).УДПКлиент;
Возврат Подключение;
КонецЕсли;
Исключение
Возврат Неопределено;
КонецПопытки;
КонецФункции
&НаСервере
Процедура ОсвободитьКомпоненту(АдресУДПКлиент) Экспорт
УдалитьИзВременногоХранилища(АдресУДПКлиент);
КонецПроцедуры
Модуль формы, обработки:
&НаСервере
Функция КомандаНаСервере()
Возврат УДП_Сообщения.ПодключитьУДПКомпоненту();
КонецФункции
&НаСервере
Процедура Проверка(АдресУДПКлиент)
Об=УДП_Сообщения.ПолучитьКомпоненту(АдресУДПКлиент);
ы = 100000;
Для ф=1 По ы Цикл
Справочники.Контрагенты.НайтиПоКоду("1527278");
Если (ф%1000) = 0 Тогда //каждые 1000
Об.Прогресс("Выгрузка: "+Строка(ф)+" из "+Строка(ы) ,"Выгруженно: "+Строка(ф),ф/ы*100);
КонецЕсли;
КонецЦикла;
Об.Закрыть();
УДП_Сообщения.ОсвободитьКомпоненту(АдресУДПКлиент);
КонецПроцедуры
&НаКлиенте
Процедура Команда(Команда)
ПараметрыПодключения = КомандаНаСервере();
Если НЕ ПараметрыПодключения = Неопределено Тогда
//ПараметрыПодключения.АдресУДПКлиент
//ПараметрыПодключения.Порт
Попытка
ПолучитьОбщийМакет("УДПСервер").Записать(КаталогВременныхФайлов()+"UDPServer.exe");
Исключение
КонецПопытки;
ЗапуститьПриложение(КаталогВременныхФайлов()+"UDPServer.exe "+Формат(ПараметрыПодключения.Порт,"ЧГ=0"));
Проверка(ПараметрыПодключения.АдресУДПКлиент);
КонецЕсли;
КонецПроцедуры