Вызов клиента из фонового задания (с сервера), используя протокол TCP.

10.02.18

Разработка - Инструментарий разработчика

В примере используется COM объект MSWinsock для организации прослушки TCP порта и отправки сообщения по протоколу TCP.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Вызов клиента из фонового задания (с сервера), используя протокол TCP.: конфигурация и необходимые файлы
.zip 71,49Kb
24
24 Скачать (1 SM) Купить за 1 850 руб.

Суть метода - на машине клиента слушается порт.

Сервер посылает на этот порт строку. В строке - код на встроенном языке 1С:Предприятия.

Клиент эту строку выполняет встроенной функцией Выполнить()

 

За основу взята разработка Работа с Windows Sockets в 1С Предприятие и комментарии к ней. Допилил, чтобы обработка работала на сервере. Для этого пришлось отказаться от использования ActiveX элемента формы - вместо него используется Новый COMОбъект("MSWinsock.Winsock").

Обработчики событий подключаются оператором ДобавитьОбработчик:

ДобавитьОбработчик WinSocket.Connect, ПриПодключении;

Где

  • WinSocket - COM объект
  • Connect - событие COM объекта
  • ПриПодключении - Процедура текущего модуля (обработчик события)

Для тех, кому лень скачивать и смотреть код, приведу минимально необходимый кусок кода:

Отправка данных:

Перем WinsocketClient;
Перем КодДляПередачи;
Функция ВыполнитьКодНаРМ(Хост, Код) Экспорт
	Порт = 33338;
	КодДляПередачи = Код;
	WinsocketClient = Новый COMObject("MSWinsock.Winsock");		
	ДобавитьОбработчик  WinsocketClient.Connect, ПриПодключенииКлиентаКсерверу; 
	WinsocketClient.RemoteHost = Хост;
	WinsocketClient.RemotePort = Порт;
	Попытка
		WinsocketClient.Connect();
		// само подключение состоится только после выхода из текущего метода
		// после подключения выполнится ПриПодключенииКлиентаКсерверу
		Возврат Истина;
	Исключение
		Возврат Ложь;
	КонецПопытки;
КонецФункции

Процедура ПриПодключенииКлиентаКсерверу() Экспорт
	Если ЗначениеЗаполнено(КодДляПередачи) Тогда
		WinsocketClient.SendData(КодДляПередачи);
	КонецЕсли; 
	УдалитьОбработчик WinsocketClient.Connect, ПриПодключенииКлиентаКсерверу; 
КонецПроцедуры

Получение:

Перем Winsocket Экспорт;
Функция ИнициализацияСервера() Экспорт
	Порт = 33338;
	Попытка
		Winsocket = Новый COMОбъект("MSWinsock.Winsock");
		WinSocket.LocalPort  = Порт;
		ДобавитьОбработчик  WinSocket.ConnectionRequest, ЗапросПодключения; 
		ДобавитьОбработчик  WinSocket.DataArrival, ПриПолученииДанных; 
		ДобавитьОбработчик  WinSocket.Close, ПриЗакрытииСоединения; 
		Если WinSocket.State <> 7 Тогда		
			Если WinSocket.State <> 0 Тогда
				WinSocket.Close();
			КонецЕсли;
			WinSocket.Protocol = 0;
			WinSocket.Listen(); 	
		КонецЕсли; 	
	Исключение
		Возврат Ложь;
	КонецПопытки;
	Возврат Истина;
КонецФункции

Процедура ЗапросПодключения(requestID) Экспорт
	State = Winsocket.State;
	Если State <> 0 Тогда
		Winsocket.Close();
	КонецЕсли;
	
	Winsocket.Accept(requestID);
	Winsocket.Listen();

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

Процедура ПриПолученииДанных(КоличествоБайт) Экспорт
	ТекстСообщения = "";
	WinSocket.GetData(ТекстСообщения);
	ПерезапуститьСервер();
	ОбработатьСообщение(ТекстСообщения);
КонецПроцедуры

Процедура ОбработатьСообщение(ТекстСообщения)
	Попытка
		Выполнить(ТекстСообщения);
	Исключение
		// TODO
	КонецПопытки;
КонецПроцедуры

Процедура ПриЗакрытииСоединения() Экспорт
	ПерезапуститьСервер();		
КонецПроцедуры

Процедура ПерезапуститьСервер()
	WinSocket.Close();
	WinSocket.Listen();
КонецПроцедуры

Вообще, оператор ДобавитьОбработчик незаслуженно редко используется. Например, в известных мне инструментах для подсветки 1С кода он не подсвечивается, как оператор.

Код тестировался на платформе 8.3.10.2561
 

TCP Socket Winsock

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    183446    1020    403    

966

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    23839    157    84    

155

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

22200 руб.

06.10.2023    20179    51    19    

86

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

15000 руб.

10.11.2023    13581    55    33    

76

Инструментарий разработчика Программист Платформа 1С v8.3 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    30372    103    48    

147

Инструментарий разработчика Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    2287    4    0    

7

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    19063    7    32    

43
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. alexspiter 16.08.18 23:28 Сейчас в теме
Нечто подобное пробовали на УФ реализовать, но не получалось когда шел запрос на подключение (WinSocket.ConnectionRequest) клиентское приложение крэшилось по непонятным причинам (ошибка ничего не давала - сбой платформы). А у вас на УФ работало?
Оставьте свое сообщение