1С8: Прогресс выполнения - на сервере и в COM соединении

Публикация № 1092662

Программирование - Внешние компоненты

внешняя компонента прогрессбар прогресс на сервере сообщение UDP процесс выполнения отслеживание

3
Программа состоящая из UDP клиента (внешняя компонента) и сервера (программа) - клиент отправляет сообщения, сервер принимает. Можно получать сообщения из COM соединения. Работает только если сервер и клиент находятся в одной сети.

Программа состоящая из 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"));
        Проверка(ПараметрыПодключения.АдресУДПКлиент);
    КонецЕсли;

КонецПроцедуры

 

3

Скачать файлы

Наименование Файл Версия Размер
UDP клиент - Внешняя компонента
.zip 331,86Kb
12.07.19
0
.zip 1 331,86Kb Скачать
UDP сервер
.7z 587,74Kb
12.07.19
0
.7z 1 587,74Kb Скачать

См. также

Специальные предложения

Избранное Подписка Сортировка: Древо
В этой теме еще нет сообщений.
Оставьте свое сообщение