Простой TCP сервер с обработкой событий на стороне 1С

Публикация № 165023 05.12.12

Администрирование - Сервера

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

Приветствую!

 Немного лирики. В один прекрасный момент мне поступила задача связать 1С и некую этикировочную машину. Как- не известно. Вроде бы где то есть люди, которые что то знают, но где эти люди – никто не знает. И вот путем терзания поставщика удалось вытрясти мануал на английском, в котором был описан формат взаимодействия через TCP порт. И в связи с этим пришлось написать такое счастье.

Ну и от слов к делу. Для связи по TCP я решил использовать родимую мелкомягкую технологию WinSock (http://ru.wikipedia.org/wiki/Winsock). На основе нее можно  написать как и серверную часть, так и клиентскую. Все действа  разделяются на несколько этапов:

Общая часть

1)      Идем в родимый гугль и ищем winsock.ocx

2)      Регистрируем ее в системе (regsvr32)

3)      Прописываем регистрационные ветки в реестре (иначе ActiveX не лицензируется). Без этого у нас не будут доступны необходимые методы.

Я думаю что проблем с этими шагами не возникнет ни у кого. Если появились затруднения – в гугле огромное количество статей по этим вопросам.

4)      Создаем обработку в 1С

  1. Добавляем на форму ActiveX
    я предпочитаю это делать программно:
           ЭлементыФормы.ДобавитьActiveX("MSWinsock.Winsock","WinSock",Ложь);
  2. Форма – вставить ActiveX - Microsoft WinSock Control, version 6.0
    только при данном варианте надо убрать видимость элемента, т.к. у него отсутствует графическое отображение.

5)      Определяем необходимые методы объекта

  1. Error –если произошла какая либо ошибка.
    WinSocketError(Элемент, Number, Description, Scode, Source, HelpFile, HelpContext, CancelDisplay)
    Где:

                                                                          i.          Number – код ошибки ,

                                                                         ii.          Description – Описание ошибки,

                                                                       iii.          Scode – Еще раз код ошибки, но уже в другом типе (LONG)

                                                                       iv.          Source – Источник ошибки,

                                                                        v.          HelpFile – ссылка на справку

                                                                       vi.          HelpContext - контекст справки

                                                                     vii.          CancelDisplay - флаг отмены отображения стандартного окна об ошибке. По умолчанию значение - Истина. Окно не выводится.

  1. DataArrival – поступление данных
    WinSocketDataArrival(Элемент, bytesTotal)
    где:

                                                                          i.      bytesTotal – количество принятой информации в байтах

  1. Connect – успешное подключение к серверу (возникает только на клиенте!)
    WinSocketConnect(Элемент)
  2. ConnectionRequest -  запрос на подключение клиента (возникает на стороне сервера)
    WinSocketConnectionRequest(Элемент, requestID)
    где:

                                                                          i.      requestID – Идентификатор клиента

  1. Close- закрытие сессии
    WinsockClose(Элемент)
  2. SendProgress – Возникает при прогрессе передачи данных
    WinsockSendProgress(Элемент, bytesSent, bytesRemaining)
    где:

                                                                          i.      bytesSent – байт послано

                                                                         ii.      bytesRemaining – байт осталось

  1. SendComplete – завершение отправки данных

 

Серверная часть

 

1)      Запускаем сам сервер:
        WinSock=ЭлементыФормы.WinSock; // Наш ActiveX
        WinSock.LocalPort = Port; // Порт на котором он будет работать
        WinSock.Bind(Port, "127.0.0.1"); // IP на котором будем слушать
        WinSock.listen(); // Собственно сам запуск на прослушку сервера

2)      В процедуре ConnectionRequest указываем:
   Если WinSocket.State <>  0 Тогда // Если у нас есть активный сокет, то перед принятием нового текущий необходимо закрыть
        WinSocket.Close(); // закрывает сокет
    КонецЕсли;
    WinSocket.Accept(requestID); // Принимаем новый запрос

3)      В процедура DataArrival :
   ТекстСообщения = "";
   WinSocket.GetData(ТекстСообщения); // Принимаем сообщение с сервера
   WinSocket.SendData("Otvet server ");  // Некий ответ сервера на получение информации

Вот и все. Простейший сервер готов.  Можно стучать на него по телнету и тестировать. Сразу оговорюсь, что настройки кодовой страницы (отображение кириллицы) зависит именно от используемого клиента. 1С все отсылает в Cp1251.

 

Клиентская часть

1)      Инициализируем подключение:
 WinSocket.RemoteHost = СокрЛП(IP); // Адрес, на который соединяемя
 WinSocket.RemotePort = СокрЛП(Port); // Порт, по которому соединяемя
 WinSocket.Connect(); // Команда на соединение

Внимание! Статус в этой же процедуре WinSocket не изменит! Поэтому:

2)      В процедуре Connect:
Сообщить(WinSocket.State) // Тут мы получаем текущий статус
Таблица статусов:

Состояние

Числовое значение

Описание

sckClosed

0

Default. Closed
Значение по умолчанию. Подключение закрыто.

sckOpen

1

Open
Подключение активно. Соединение установлено.

sckListening

2

Listening
Режим "прослушки". Компонента ждет подключение по указанному порту.

sckConnectionPending

3

Connection pending
Ожидание подключения

sckResolvingHost

4

Resolving host
Получение адреса компьютера (хоста) по имени.

sckHostResolved

5

Host resolved
Адрес компьютера получен.

sckConnecting

6

Connecting
Подключение

sckConnected

7

Connected
Подключен

sckClosing

8

Peer is closing the connection
Клиент закрыл подключение

sckError

9

Error
Ошибка

3)      Процедура отправки данных:
   Если WinSocket1.State = 7 тогда //Отправляем данные только при статусе «Подключен»
WinSocket1.SendData(СокрЛП(ТекстСообщения));
   КонецЕсли;

Вот и простейший клиент готов.

 

А дальше все зависит только от вашей фантазии.

Естественно я не первопроходец в данном разделе, но надеюсь что моя статейка кому то поможет.

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. andrewks 1358 06.12.12 08:19 Сейчас в теме
непонятно, в чём новизна или уникальность по сравнению со статьёй http://infostart.ru/public/119982/ ? или с поиском проблемы?
2. VoDo 72 06.12.12 08:27 Сейчас в теме
На самом деле я и не претендую на уникальность или новизну.
Естественно я не первопроходец в данном разделе, но надеюсь что моя статейка кому то поможет.

А с поиском видать действительно проблема. Просто когда у меня была задача такого плана на 1С я не нашел ни одного примера.
d_liliya@inbox.ru; +1 Ответить
3. Elisy 947 12.12.12 11:13 Сейчас в теме
Компонент Mswinsock.ocx входит в состав Visual Basic 6.0.
Официальная поддержка для VB завершена со стороны Microsoft.
Платный аналог существует, но он максимально открытый и позволяет принимать запросы в несколько потоков. Хотя на стороне 1С все выстраивается в 1 поток.
http://infostart.ru/public/104926/
4. VoDo 72 04.02.13 10:52 Сейчас в теме
Платный аналог существует, но он максимально открытый и позволяет принимать запросы в несколько потоков.

Так это уже реклама своего ДЛЛ ? ))
5. andrey314 14 28.03.14 11:23 Сейчас в теме
Прописываем регистрационные ветки в реестре (иначе ActiveX не лицензируется). Без этого у нас не будут доступны необходимые методы.


Подскажите плис как лицензировать? В гугле найти не получилось :(

Нашел
// Winsock Control 6.0 license key
HKEY_CLASSES_ROOT\Licenses\2c49f800-c2dd-11cf-9ad6-0080c7e7b78d = mlrljgrlhltlngjlthrligklpkrhllglqlrk
6. dir2000 25.11.15 13:33 Сейчас в теме
Подскажите, пожалуйста. У меня получилось использовать этот ActiveX на компе с Windows XP. Но возникла проблема на сервере под управлением Windows Server 2003 64bit. Для иллюстрации проблемы делаю следующее: создаю внешнюю обработку, создаю обычную форму, вставляю этот ActiveX. Элемент на форме появляется, но в свойствах элемента видны лишь 1С-овские свойства и лишь одно 1С-овское событие ПриИзменении(). Специфические свойства и обработчики событий эктивикса в свойствах не видны. Соответственно и программно работать с ним не получается - при попытке получить значение свойства State вываливается ошибка, что такого свойства не существует.
Этот ActiveX уже был зарегистрирован на сервере и лежал в виндовой папке SysWOW64. Версия 6.0.89.88. На компе под Windows XP я использовал версию 6.1.98.13. Но подмена файла и повторная регистрация ничего не дала - получил сообщение об успешной регистрации но проблема осталась.
Другие ActiveX (например, компонента для печати штрих-кодов) успешно вставляются в форму и их специфические свойства/события видны.
7. lutic19 29.06.16 09:53 Сейчас в теме
(6) dir2000, попробуй инициализировать не через ActiveX-технологию, а через Com-объект:

Попытка    
		WinSock = Новый COMОбъект("mswinsock.winsock"); 
	Исключение 
		
		Возврат; 
		
	КонецПопытки; 


После попробуй вставить объект-ActiveX на элемент формы, должны появиться специфические свойства и обработчики событий, и будет тебе счастье.
8. пользователь 04.06.20 10:57
Сообщение было скрыто модератором.
...
Оставьте свое сообщение

См. также

Первый день архитектора 1С на новой работе

Мониторинг Сервера Администрирование СУБД Бесплатно (free)

Как быстро познакомиться с системой на новой работе или если вас пригласили провести аудит контура на 1С? О том, какие инструменты использовать для быстрой проверки настроек сервера 1С, сервера MS SQL и общей оценки инфраструктуры на производительность, на конференции Infostart Event 2021 Post-Apocalypse рассказал архитектор 1С Юрий Былинкин.

01.06.2023    4977    ardn    15    

62

Путь самурая. Ставим локальный Сервер взаимодействия

Сервера Администрирование веб-серверов Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Подробная пошаговая инструкция (как делал я) установки Сервера взаимодействия версия 22.0.26 на Windows Server 2022. Установка собственного объектного хранилище с помощью системы MinIO (https://min.io/). Настройка Сервера взаимодействия для обмена файлами в сообщениях.

1 стартмани

07.04.2023    3810    VPanin56    17    

56

Быстрое конфигурирование серверов с Ansible

Администрирование веб-серверов Сервера Бесплатно (free)

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

26.01.2023    1970    lopatrik    4    

21

Жизнь платформы 1C:Предприятие в кластере Kubernetes

Сервера DevOps и автоматизация разработки Облачные сервисы, хостинг Бесплатно (free)

Во многих сферах запуск приложений в Kubernetes является де-факто стандартом архитектуры, так как это позволяет быстро и эффективно задействовать ресурсы, не затрачивая на это большие деньги. Но с платформой 1С:Предприятие не все так просто, но потенциально возможно. Руслан Жданов на митапе «DevOps в 1С: CI/CD. Непрерывная интеграция и поставка решений на 1С» рассказал про то, как с помощью Kubernetes организовать в облаке управление кластером из серверов 1С и реализовать там тестирование приложений на 1С или запуск скриптов на OneScript.

24.01.2023    6101    ZhdanovR    3    

25

Замена имени сервера в файле ibases.v8i у пользователей в домене через GPO

Сети Сервера Платформа 1С v8.3 Абонемент ($m)

При переезде на новый сервер 1С возникла необходимость подготовить всех пользователей (а их 300+) к этому переезду и желательно не мешая их работе. А если быть точнее, то заменить в их списках информационных баз имя сервера. Итак, что имеем в условии.  Есть сервер 1С с именем  WIN2016.  Необходимо перенастроить всех пользователей на новый сервер с именем SRV1C. Для этого придется либо руками у каждого пользователя исправить записи по каждой базе через открытие 1С, либо поправить файл ibases.v8i, который находится в папке профиля пользователя. Второй вариант более интересен, но лезть на 300+ компьютеров не наш метод.

1 стартмани

30.11.2022    1910    0    dungeonkeeper    13    

4

Трое в лодке, не считая собаки - Автономный сервер 1С

Сервера 8.3.14 Конфигурации 1cv8 Бесплатно (free)

Краткая шпаргалка по Автономному серверу 1С. Описаны основные параметры настройки и быстрый алгоритм развертки на ПК.

17.11.2022    2360    AntoShiK86    8    

22

Мониторинг ИБП МАП и выключение, включение серверов

Сервера Мониторинг Периферийные устройства Платформа 1С v8.3 Абонемент ($m)

В качестве источника бесперебойного питания серверов можно использовать сетевой инвертор и сборку литиевых аккумуляторов. Единственное, чтобы это работало без участия человека, нужно выключать сервера, когда АКБ разряжается, и включать их обратно, когда сетевое напряжение появилось и АКБ зарядился. С этим вполне может справляться и программа на 1С. Далее описывается программа мониторинга и схема подключения МАП Тitanator UPS (Микроарт) с АКБ Vektor LFP (LiFePO4). Обмен данными ведется по протоколу HTTP.

1 стартмани

16.08.2022    3134    2    vad7    0    

1

Подключение двух и более COMConnector'ов (COM-соединений) к различным релизам сервера 1С:Предприятие 8.3 на одном компьютере

Сервера Платформа 1С v8.3 Россия Бесплатно (free)

В публикации рассматривается вопрос о создании двух и более одновременно работающих COM-соединений к различным релизам сервера 1С:Предприятие 8.3 на одном компьютере. Разрабатывалось, тестировалось и работает под платформами 1С 8.3. Но, насколько я углубился в тему, этот алгоритм должен работать и под 8.1, и под 8.2 и в комбинациях.

04.06.2022    2491    andrewbc    2    

17

Разворачиваем на Windows 11: Hyper-V, Microsoft Hyper-V Server 2019 и SQL Server 2019 Dev [Шпаргалка]

Сервера Бесплатно (free)

Шпаргалка по установке бесплатных Microsoft Hyper-V Server 2019 и MS SQL Server 2019 Dev.

08.03.2022    6464    dsdred    17    

35

Окружение сервера 1С на арендованном выделенном сервере

Сервера Linux Бесплатно (free)

Установка Proxmox на OVH, настройка VPN и контейнера для 1С.

01.03.2022    3871    malikov_pro    10    

26

Консоль администрирования серверов 1С (ras) для Linux и Windows

Сервера Россия Абонемент ($m)

Альтернатива штатной "Консоли администрирования" от 1С (основана на использовании утилит ras и rac) для Linux и Windows.

21.02.2022    5698    38    Pependos    8    

24

Поднимаем сервер 1С на UBUNTU и PostgreSQL за 20 минут

Сервера Россия Бесплатно (free)

Краткое, но рабочее описание, как развернуть сервер Postgresql и сервер 1С на Ubuntu быстро и без лишних размышлений.

13.10.2021    24660    Lichi001    17    

36

Ферма ОДИНа или как управлять множеством Серверов 1С: Предприятие из одной точки

Мониторинг Сервера Платформа 1С v8.3 Бесплатно (free)

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

26.08.2021    2417    khorevaa    8    

31

Создание приложения Red Hat Fuse на основе OSGI-контейнера Karaf

Сервера Бесплатно (free)

Red Hat Fuse - это промышленная интеграционная шина. Предлагаю вашему вниманию способ ее запуска из Red Hat Code Ready Studio и тестовый пример использования Apache Camel. Система будет считывать содержимое поступающих на её вход файлов и в зависимости от заданных в них реквизитов будет перемещать эти файлы между разными папками.

10.08.2021    698    akylov2002    4    

2

Автоматический перезапуск рабочих процессов (rphost) кластера 1С

Сервера Платформа 1С v8.3 Абонемент ($m)

Служба Windows, которая выполняет автоматический перезапуск рабочих процессов (rphost) кластера 1С по заданным настройкам. Перезапуск выполняется по превышению настроенного лимита, используемой одним рабочим процессом памяти. Настройка лимита памяти может быть задана, как общая для всех рабочих серверов кластера 1С, так и индивидуально для каждого рабочего сервера по отдельности.

10 стартмани

08.07.2021    5512    zhichkin    3    

12

Как добыть последнюю версию SQL Server 2012 Native Client

Сервера Платформа 1С v8.3 Бесплатно (free)

Краткое руководство администраторам 1С по получению свежей версии SQL Server 2012 Native Client, необходимого для работы сервера 1С.

13.05.2021    18437    tedkuban    3    

8

Настройка сборки данных в Performance Monitor Windows Server. Рецепты от Капитана

Сервера Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Каждый опытный сисадмин знает, что лучший показатель ухудшения быстродействия 1С, это главный бухгалтер, движущийся в сторону ИТ отдела со скоростью, превышающей 1.1 м/с. Но только мудрейшие из них настраивают сбор счетчиков, чтобы эта встреча не застала их врасплох. Об этом и поговорим под катом...

07.05.2021    7371    capitan    21    

48

Подбираем сервер для 1C:ERP

Сервера Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

На Infostart Meetup Ekaterinburg ведущий разработчик 1С в компании ФТО Виталий Онянов рассказал, как подобрать сервер для 1С:ERP и на какие показатели ориентироваться, чтобы оборудование для высоконагруженной системы оправдало вложения.

26.03.2021    23386    Tavalik    74    

80

Интерфейс к утилите администрирования кластера серверов для ОС Linux

Linux Сервера Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Реализация сценария администрирования кластера серверов для ОС Linux при СУБД - PostgreSQL.

1 стартмани

21.01.2021    5214    5    masterb    1    

3

Управление серверами (консоль Linux)

Linux Сервера Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Конфигурация-консоль администрирования кластера серверов 1С Linux.

1 стартмани

28.12.2020    7761    18    m_aster    2    

17

Использование полного DNS имени при обращении к серверу 1С через OpenVPN

Сервера Платформа 1С v8.3 Бесплатно (free)

В статье опишу настройки для работы клиента с сервером 1С по полному DNS имени. Приведу пример проброса доменной зоны используя OpenVPN.

03.11.2020    5116    malikov_pro    16    

9

Вариант настройки сервисов для рабочей группы

Сервера Администрирование веб-серверов Россия Бесплатно (free)

В публикации описан мой вариант построения сервисов для рабочей группы.

24.06.2020    5055    malikov_pro    0    

7

Настройка VPN Сервера из "коробки", просто и быстро (SoftEther VPN)

Сервера Абонемент ($m)

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

1 стартмани

07.01.2020    36661    ClickUp    1    

38

Тест серверного оборудования на допустимое количество пользователей: как это использовать?

HighLoad оптимизация Сервера Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Выполнил 3 разных теста для проверки серверного оборудования (тест 1С, тесты gilev) на возможное число 1С онлайн-пользователей одновременно работающих на нем и интерпретировал результаты тестов через легких, средних и тяжелых пользователей с помощью таблицы с профилями реальных пользователей.

3 стартмани

17.12.2019    16866    sapervodichka    3    

97

Таблицы серверов (как просто выбрать сервер)

Сервера Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Перед началом проекта требуется определить параметры серверного и клиентского оборудования, необходимые для работы внедряемой программы 1С:Предприятие, и учесть будущую нагрузку, которая ляжет на систему в реальной рабочей обстановке. Мощность оборудования должна быть достаточной для нормальной работы пользователей. Но как подобрать сервер простым способом?

1 стартмани

20.05.2019    98658    sapervodichka    31    

126

Рекомендации по выбору Intel-процессоров для MS SQL Server 2014

Сервера Бесплатно (free)

Перевод публикации от 08.08.2014. Первоисточник - http://sqlperformance.com/2014/08/system-configuration/recommended-processors-sql-2014 Как мне показалось, информация достаточно интересная. Автор Glenn Berry - в статусе SQL Server MVP с 2007, обладатель целой коллекции сертификатов Microsoft, таких как MCITP, MCDBA, MCSE, MCSD, MCAD и MCTS.

20.08.2014    32351    Aleksey.Bochkov    3    

13

Запуск COM x32 с x64 сервером 1С (на примере CAPICOM)

Сервера Абонемент ($m)

Дело было так... как-то решили мы всей компанией перейти на х64 сервера. Все бы хорошо, но некоторые компоненты, отлично зарекомендовавшие себя на х32, наотрез отказались работать на х64. При том, что под х32 клиентом на этом же сервере работали замечательно! И понадобилась кропотливая работа по поиску альтернативных решений. Как пример, в этот момент нами была потеряна мелкософтовая компонента CAPICOM... В данной статье я показываю как настроить работу x32 COM компонент с x64 сервером 1С под 2008 R2. Данное недостаточно запублицированное решение я нашел в нете, проверил на нескольких наших серверах и уже запустил в бой.

1 стартмани

29.07.2013    32030    Bitnikov    5    

62

Моя война с Adodb.connection "Microsoft.Jet.OLEDB.4.0" на 64-х битных серверных ОС (86х)

Сервера Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

На тонком клиенте в управляемом приложении появилась потребность работы с Adodb.Connection. В моем случае это был драйвер "Microsoft.Jet.OLEDB.4.0". В файловом варианте все взлетело без проблем... А вот в серверном начались проблемы. Решениям этих проблем и посвящается данная статья.

20.02.2013    32741    Alexander.Shvets    11    

40

Многопоточное тестирование производительности сервера 1С - СУБД

Сервера Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Тест для оценки производительности связки сервер 1с - сервер СУБД в различных вариантах, а также масштабируемости этой связки в режиме многопоточной работы.

1 стартмани

12.02.2013    103264    795    Fragster    193    

227

Сервер терминалов W7 для небольшой фирмы

Сервера Платформа 1С v8.3 Конфигурации 1cv8 Украина Абонемент ($m)

Небольшая фирма : 1) Персонал от ... до 50 работающих, 2) Генеральный (или просто) директор, 3) Его заместители , 4) Производство (торговая площадь ), 5) до двух десятков компьютеров, объединенных в сеть (друг друга видят в сетевом окружении), 6) Администратор IT : провода, Wi-Fi, настройка и ремонт оборудования, картриджи и пр. , серверочек W2003 файловый и т.д. Франчайзи подсуетились - продали 1С:Предприятие 8. Бухгалтерия и исчезли.

1 стартмани

09.01.2013    19246    77    kompas-dm    23    

12

Пример выбора серверного оборудования для 250 пользователей 1С:Предприятие 8.1

Сервера Россия Бесплатно (free)

Все чаще крупные компании в условиях кризиса посматривают в сторону 1С:Предприятие 8.1 как альтернативы дорогим SAPам. И одной из задач конечно является выбор серверного оборудования. В этой статье речь пойдет о конкретном примере. В качестве исходных данных формулируется задача подобрать сервера для использования 1С:Предприятие 8.1 для 250 пользователей.

15.12.2008    27867    Gilev.Vyacheslav    34    

38