WebSocket'ы – это не больно

28.10.26

Разработка - Механизмы платформы 1С

В платформе 8.3.27 наконец-то появились WebSocket’ы – замечательный механизм, которого многие ждали. Однако у многих возникает вопрос: что с ними делать? Поговорим о том, что использовалось до появления WebSocket’ов и что применяется сейчас вместо них, разберемся, почему WebSocket’ы не всегда применимы, рассмотрим, как ими пользоваться и приведем примеры использования.

Часто для того, чтобы начать применять новую технологию на практике, недостаточно одной статьи – приходится самостоятельно изучать множество дополнительных материалов, потому что «не зная букв, читать сложно». И моя задача сейчас – сэкономить вам время и рассказать о веб-сокетах так, чтобы вы сразу смогли применять эти знания в своих проектах.

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

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

 

С чего начнем?

 

Для начала предлагаю вам обратить внимание на две мои статьи, опубликованные на Инфостарте:

  • Поинтегрируем: WebSocket’ы в платформе 1С. Часть 1
    //infostart.ru/1c/articles/2280032/. Статья о том, как развернуть WebSocket-сервер на Node.js, создать WebSocket-клиент на 1С и получить простую систему обмена сообщениями. В этом случае все сообщения сохраняются в оперативной памяти сервера и передаются всем клиентам, включая тех, кто подключается позднее.

  • Поинтегрируем: WebSocket’ы в платформе 1С. Часть 2
    //infostart.ru/1c/articles/2293957/. Во второй статье я развил первый пример и показал, как отправлять сообщения не всем подключенным пользователям, а конкретной сессии. Фактически это уже основа полноценного чата, опираясь на который можно создать собственный аналог Telegram или ВКонтакте.

Это то, с чего можно начать.

 

Ограничение HTTP-сервисов – однонаправленная связь

 

Прежде чем говорить о WebSocket, давайте вспомним, как задача обмена данными между клиентом и сервером решалась в 1С раньше.

 

 

Раньше для такого обмена использовались HTTP-сервисы. Их основной недостаток – однонаправленная связь.

Чтобы узнавать на клиенте об изменениях на сервере, приходилось отправлять запрос и только по ответу понимать, что что-то изменилось. Для обменов в реальном времени это неудобно.

Люди стали думать – как сделать так, чтобы получать информацию в онлайне. И первое, что пришло в голову – это «короткие опросы» или Short Polling, когда HTTP-запрос отправляется на сервер в цикле с некоторой периодичностью.

Вы мучаете сервер и все время спрашиваете: «Есть ли для меня что-нибудь?», «А сейчас?», «А теперь?».

В какой-то момент он вам отвечает: «Да, пожалуйста, данные есть», но в результате получается DDoS-атака своими руками.

Тогда люди стали думать, что еще можно придумать. И придумали «длинный опрос» или Long Polling.

Суть этого метода в том, что запрос отправляется на сервер, но сам сервер не отвечает мгновенно, а вместо этого держит соединение открытым и ждет новых данных в течение определенного промежутка времени – например, 30 секунд. Если изменения появляются, сервер отдает их на клиент – тот забирает результат и сразу же отправляет сообщение снова.

 

 

Это похоже на рыбалку – вы забрасываете удочку, ждете, и если поплавок дергается, значит, рыба клюнула: вытаскиваете улов и снова забрасываете. А если долгое время ничего не происходит, значит, наживку съели, ее нужно обновить и опять закинуть.

Подход Long Polling актуален до сих пор и применяется не только в Телеграм-ботах, но в других веб-интеграциях, хотя, казалось бы, все современные браузеры уже давно поддерживают веб-сокеты. Этому есть несколько причин:

  • Не все браузеры поддерживают WebSocket. До сих пор встречаются пользователи, которые работают с устаревшими браузерами, а там веб-сокеты могут не работать.

  • Использование WebSocket часто блокируют безопасники, объясняя это ограничениями корпоративной инфраструктуры и внутренними требованиями организации. В таких ситуациях Long Polling до сих пор must-have.

  • На поддержание сессий требуется выделение ресурсов. Для работы WebSocket-сервера необходим хороший канал связи и отдельная инфраструктура – виртуальные машины или физические серверы, способные надежно сохранять информацию об активных сеансах. Такие возможности доступны далеко не всем.

 

Двунаправленная связь. Протокол WebSocket и его сфера применения

 

А теперь все-таки поговорим про вебсокеты.

Официальная спецификация протокола WebSocket (RFC 6455) опубликована в декабре 2011 года, а возможность работать с WebSocket средствами платформы 1С у нас появилась только в 2025 году, в платформе 8.3.27. Представляете, сколько времени потребовалось, чтобы эта технология добралась до мира 1С?

Главное отличие WebSocket от традиционного HTTP-запроса – это двунаправленная связь в рамках одного постоянного соединения.

 

 

Работает это следующим образом:

  • Клиент отправляет на сервер небольшой HTTP-запрос со специальными заголовками – этот процесс называется рукопожатием или Handshake.

  • В результате рукопожатия сервер переключается на протокол WebSocket и устанавливает постоянное WebSocket-соединение.

  • После этого клиент и сервер могут использовать это соединение независимо друг от друга – отправлять по нему сообщения в любой момент времени.

Где обмен по протоколу WebSocket наиболее востребован?

  • Первое, что приходит в голову – это биржевые приложения и торговые площадки. На изменения стоимости акций нужно оперативно реагировать, а реализовать это нормально через обычные HTTP-запросы не получится.

  • Второй пример – чаты и мессенджеры. Я уже приводил в пример свои статьи, где на технологии WebSocket был реализован чат. Тоже можно использовать.

  • И третий пример – интеграции между системами. Чуть позже мы рассмотрим возможные сценарии подробнее.

 

Варианты работы с WebSocket до 8.3.27

 

До появления встроенной поддержки WebSocket в платформе 8.3.27 разработчикам приходилось искать обходные решения.

  • Например, использовать внешние компоненты – одну из таких компонент можно найти на Инфостарте.

  • Второй вариант – использовать поле HTML-документа. Многие используют его в 1С не только по прямому назначению, но и делают на его основе красивые дизайны, приспосабливают для обработки событий, и, в том числе, реализуют работу с WebSocket.

  • Третий вариант – реализовывать собственные «велосипеды» для обмена данными. Например, в платформе 8.3.26 появилась возможность оповещать клиент с сервера. А еще раньше – с платформы 8.3.20 – такую возможность можно было реализовать при помощи Системы взаимодействия. Это позволяло разработчикам на основе тех же самых HTTP-сервисов строить механизмы, частично напоминающие взаимодействие через WebSocket.

 

Новый механизм и его проблемы

 

 

Теперь ситуация изменилась, и в платформе 8.3.27 появились веб-сокеты.

Правда поначалу в этом механизме было очень много ошибок. И хотя сейчас (прим. ред. доклад от 11 октября 2025 года) большинство из них уже исправлены, на багборде до сих пор появляются новые записи об ошибках веб-сокетов.

В частности, до сих пор в платформе 8.3.27 есть ошибки в документации к обработчику ПередПодключением().

  • В описании синтаксиса указан параметр «Клиент» – ПередПодключением(<Клиент>).

  • А в примере кода почему-то используется параметр «Соединение», хотя на момент выполнения обработчика «ПередПодключением» процедура рукопожатия еще не завершена, и полноценного WebSocket-соединения там нет. Очевидно, что этот код работать не будет.

 

 

Кроме этого, мне удалось обнаружить еще одну интересную ошибку.

Многие знают, что в платформе 8.3.27 появилась встроенная обработка «Управление WebSocket-клиентами», и возможность объявлять WebSocket-клиенты предопределенными (устанавливать для них флажок «Предопределенный»).

Очевидно, что удалять предопределенные объекты нельзя, а значит, кнопка «Удалить» для предопределенного WebSocket-клиента в обработке будет не активна. Но:

  • Нам доступно нажатие «Удалить» в контекстном меню.

  • Либо мы можем выделить предопределенный WebSocketКлиент и нажать на клавиатуре клавишу Del.

В результате возникает замечательная ошибка, предлагающая перезапустить 1С.

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

 

Механизм WebSocket – что нового в платформе 8.3.27

 

А теперь давайте последовательно разберем все возможности по работе с веб-сокетами, которые у нас появились в платформе 8.3.27.

 

 

Прежде всего, появилась специальная встроенная обработка, которая может управлять WebSocket-клиентами.

 

 

Появилась отладка для WebSocket по TCP.

 

 

Также расширились возможности отладки по HTTP – появилась опция отладки для WebSocket.

 

 

Объект WebSocketКлиент можно добавлять в дерево метаданных непосредственно в конфигурацию и в расширение.

 

 

Добавленный объект WebSocketКлиент имеет перечисленные на слайде свойства, большинство из которых рассчитаны на авторизацию. Сейчас мы поговорим о них подробнее.

 

 

Свойство «Предопределенный». При выставлении для WebSocket-клиента флага «Предопределенный» его нельзя удалить программно. По крайней мере, не нужно пытаться это делать, потому что такая попытка приводит к ошибке – вы это уже видели.

Обратите внимание, что созданные в конфигурации и расширении предопределенные WebSocket-клиенты сразу сохраняются в таблице websocketclients базы данных – для того, чтобы их отличить от программно созданных экземпляров, используется поле _predefined.

 

 

Еще у WebSocketКлиента появилось свойство «Подключать автоматически».

Когда этот флаг установлен, сразу же при запуске приложения будет происходить попытка подключения к WebSocket-серверу:

  • Если соединение установить невозможно – например, у вас нет интернета или не работает WebSocket-сервер – статус будет «Открывается».

  • Как только успешное подключение произойдет, появится статус «Открыто».

 

 

В модуле WebSocket-клиента появилась возможность добавлять обработчики. Их всего пять, и мы сейчас их рассмотрим подробнее.

 

 

Первый обработчик – «ПередПодключением». Обратите внимание, как выглядит его рабочий код – именно так должна быть исправлена показанная ранее ошибка из документации.

В обработчике «ПередПодключением» мы можем переопределять параметры подключения – устанавливать заголовки для авторизации на сервере и дополнительные параметры для отладки.

Если у нас проходит рукопожатие, то срабатывает следующий обработчик – «ПриОткрытииСоединения».

После открытия соединения начинает работать обработчик «ПриПолученииСообщения». Это самый главный для нас обработчик – именно здесь мы получаем сообщения от WebSocket-сервера и выполняем с ними необходимые действия. Сообщения могут пересылаться в формате JSON или двоичными данными – в зависимости от того, какая задача решается.

 

 

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

С возможными кодами ошибок и их описанием можно ознакомиться в соответствующем разделе спецификации WebSocket.

 

 

И последний обработчик WebSocket-клиента, который тоже возвращает коды – «ПриЗакрытииСоединения». Когда соединение закрывается, мы можем получить код закрытия, по которому можно определить причину завершения работы. Например, код 1000 означает, что соединение закрылось штатно, все отработало как надо. Другие коды могут означать, что соединение завершилось из-за определенных проблем – несколько примеров я привел на слайде. Все коды закрытия описаны в том же разделе спецификации.

 

 

Еще одно свойство объекта WebSocketКлиент – «Заголовки».

У нас появилась возможность добавлять заголовки для соединений прямо в конфигураторе. Было бы неплохо увидеть что-то подобное и у HTTP-сервисов.

 

 

Кроме этого, появилась возможность переопределять те же самые заголовки программно – например, через встроенную обработку «Управление WebSocket-клиентом».

И еще у нас появилась возможность переопределять заголовки в обработчике «ПередПодключением».

На слайде как раз показано, что я переопределяю тот же самый заголовок программно, и потом в обработчике «ПередПодключением».

Здесь важно понимать, какие настройки будут применяться, если один и тот же заголовок указан в нескольких местах.

  • Самый высокий приоритет – у обработчика «ПередПодключением». Если заголовок переопределен здесь, будет использоваться именно это значение.

  • Второй по приоритету идет программная настройка – например, можно переопределить заголовок через встроенную обработку «Управление WebSocket-клиентом».

  • И последний приоритет – тот заголовок, который определен в конфигураторе.

 

Практическая часть. Три варианта работы с WebSocket-соединениями

 

Согласно ИТС, создавать WebSocket-соединения в 1С можно тремя способами:

  • Программно на стороне клиентского приложения.

  • Программно на стороне кластера серверов,

  • Через работу с WebSocket-клиентами, созданными непосредственно в конфигурации или расширении – соединения от таких WebSocket-клиентов тоже будут работать на стороне кластера серверов.

Все эти три варианта мы сейчас рассмотрим на практических примерах.

Для доклада я специально подготовил конфигурацию, WebSocket-сервер и несколько обработок, которые выложил на GitHub.

Поэтому все примеры, которые мы будем разбирать дальше, можно скачать и самостоятельно проверить у себя.

 

Пример 1. WebSocket-клиент предопределенный

 

 

Начнем с самого простого варианта – мы создадим WebSocket-клиент, не написав ни единой строчки кода.

Для этого в конфигураторе добавляем новый WebSocket клиент:

  • устанавливаем ему два флага – «Предопределенный» и «Подключать автоматически»;

  • в поле «URL сервера» указываем адрес в сети, где у нас развернут WebSocket-сервер;

  • указываем пользователя и пароль – в моем примере будет проверяться пароль «123».

Что будет происходить?

 

 

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

Если мы посмотрим на параметры соединения в отладчике, то увидим, что:

  • Логин и пароль лежат в открытом виде.

  • При этом самих заголовков в настройках клиента мы не увидим, потому что заголовок «Authorization» платформа формирует самостоятельно, используя Basic-авторизацию.

  • Хотя на стороне WebSocket-сервера я заголовок «Authorization» отлавливал – он там действительно приходит.

  •  

 

Если авторизация прошла успешно, мой тестовый WebSocket-сервер, который я приложил в репозитории, отправит сообщение: {"type": "auth_success"}

 

 

Обратите внимание: у нас в платформе появились WebSocket-клиенты, но не появилось ролей, которые разрешают или запрещают с ними работать.

В результате пользователь с базовыми правами сможет программно прочитать логин и пароль, указанные в настройках WebSocket-клиента, а потом продублировать себе и как бы работать под вами.

В связи с этим я не рекомендую использовать этот типовой механизм, поскольку он подразумевает хранение логина и пароля непосредственно в конфигураторе и расширении.

 

Пример 2. WebSocket-клиент с программной авторизацией

 

 

Второй пример – поинтереснее. Для него я подготовил обработку «wsАвторизация», которая входит в состав конфигурации, выложенной в репозитории с примерами.

В рамках второго примера мы:

  • Создадим WebSocket-клиент в расширении.

  • Настроим авторизацию через заголовки.

  • Настроим логирование в журнал регистрации.

  • И отправим сообщение в двух форматах – текстом и через двоичные данные.

 

 

Смотрите: мы также добавляем WebSocket-клиент, но уже в расширении, и указываем только URL сервера, пользователя и пароль не указываем.

Заголовок мы будем генерировать программно.

 

 

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

 

 

Перейдем непосредственно к самой обработке «wsАвторизация».

Ее код я разбил на три блока, чтобы его было удобнее показывать на слайдах.

В первом блоке мы ищем объект метаданных WebSocket-клиента по наименованию.

Потом попытаемся найти предопределенный WebSocket-клиент – этот код у нас вернет Неопределено, потому что WebSocket-клиент у нас непредопределенный. Это значит, что новый WebSocket-клиент мы будем создавать программно, на основе существующего объекта метаданных.

Здесь очень важно: для каждого создаваемого WebSocket-клиента необходимо задать уникальный ключ соединения. В моем примере все просто – создаем новый уникальный идентификатор и преобразуем его в строку.

Далее, используя объект метаданных и полученный ключ, создаем WebSocket-клиент и записываем его.

Обратите внимание, его запись появляется в таблице websocketclients базы данных, и хотя в отличие от предопределенного объекта у него в колонке _predefined будет указано Ложь, зато мы его можем находить по ключу и использовать для дальнейшей работы.

 

 

Во втором блоке WebSocket-клиент у нас уже существует, но соединение с сервером еще не установлено.

Поэтому сначала получаем текущее состояние соединения. Поскольку мы еще не подключались, оно будет закрыто.

Теперь подготовим заголовок авторизации: для этого берем логин и пароль, кодируем их в Base64, добавляем префикс Basic и формируем заголовок Authorization.

После этого передаем заголовок WebSocket-клиенту и вызываем метод подключения.

В этот момент начинается установка соединения с сервером.

Но теперь нам понадобится еще одна вещь – ключ клиента. Именно его мы будем использовать дальше для отправки сообщений.

Чтобы его получить, вызываем:

Соединение = ВебсокетКлиент.ПолучитьТекущееСоединение();
КлючКлиента = Соединение.Ключ;

Именно этот ключ мы будем использовать далее.

 

 

Обратите внимание, что в обработке есть возможность выставить галочку «Удалить», чтобы сразу последовательно выполнить весь цикл: создать клиента, подключиться, завершить соединение и удалить клиента. Но сейчас мы эту галочку выставлять не будем, потому что соединение нам понадобится для следующих примеров.

 

 

Нажмем в обработке кнопку «Авторизоваться» и посмотрим, какие логи появились в журнале регистрации.

  • Сначала вызывается обработчик «ПередПодключением».

  • Далее у нас произошло рукопожатие, выполняется авторизация и вызывается обработчик «ПриОткрытииСоединения».

  • И после успешного подключения сервер присылает сообщение, которое мы тоже увидим в журнале.

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

 

 

Теперь попробуем отправить сообщение через WebSocket.

Для этого по ключу клиента, который мы получили ранее, находим соединение и, если оно существует, вызываем метод Соединение.ОтправитьСообщение().

 

 

С двоичными данными все практически так же.

Сначала преобразуем сообщение в двоичные данные, а затем передаем их через тот же метод ОтправитьСообщение().

 

 

Посмотрим логи в журнале регистрации.

Мой тестовый WebSocket сервер, который приложен к материалам, работает по принципу эха: получает сообщение и отправляет ответ с информацией о том, что именно было получено.

Поэтому после отправки мы увидим ответы и на текстовое сообщение, и на двоичные данные.

 

Пример 3. Программное создание соединений на клиенте и сервере

 

 

Теперь перейдем к последнему примеру.

До этого мы работали с WebSocket-клиентами, созданными в конфигураторе и расширении.

А теперь попробуем создавать соединения полностью программно. Причем рассмотрим сразу два варианта – на стороне клиента и на стороне сервера. Для этого я подготовил в конфигурации два общих модуля – клиентский и серверный.

  • Модуль, который работает на клиенте, будет вызывать методы серверного модуля.

  • А в серверном модуле у нас будут происходить все основные действия по отражению событий в журнале регистрации.

 

 

Обратите внимание, в клиентском модуле мы не можем передать соединение с клиента на сервер, поэтому вместо него я передаю заглушку – строку «Клиент».

 

 

А код в модуле на сервере отвечает за запись в журнал регистрации и очень похож на то, что было описано в предыдущих примерах.

Единственное отличие – здесь нет обработчика «ПередПодключением», потому что рукопожатие при динамическом создании клиента описывается программно еще до открытия соединения.

 

 

Для иллюстрации этого примера я подготовил отдельную обработку «wsДинамический», которая также входит в состав выложенной конфигурации.

Обратите внимание, в ней есть флажок «Клиент». Если он установлен, WebSocket-соединение создается на клиенте. Если снят – на сервере.

От этого же флажка зависит, где будет выполняться отправка сообщений.

 

 

На слайде показан код, который будет выполняться при нажатии кнопки «Авторизоваться».

Прежде всего мы проверяем, выставлена ли у нас галочка «Клиент». Если выставлена, то при генерации добавляем к ключу префикс «Клиент» – чисто для себя, чтобы понимать, что WebSocket-соединение запущено на клиенте, в реальной работе так делать необязательно.

Далее описываем обработчики сокета. Обратите внимание, что для обработчиков в качестве модуля мы вызываем именно WebSocketКлиент – то есть клиентский.

Дальше перечисляем все наши обработчики – так, как они у нас названы.

Программно задаем параметры – логин и пароль.

И при открытии сессии указываем ключ, адрес сервера, обработчики и параметры.

После чего происходит создание соединения.

 

 

На сервере – все то же самое, только мы префикс добавляем «Сервер» и используем серверный модуль – WebSocketСервер.

 

Особенности создания соединений

 

 

Далее – самое интересное.

Допустим, мы создали два соединения: одно на клиенте, другое на сервере.

Если на клиенте запросить список всех доступных соединений, мы увидим только клиентское. Серверное в этом списке не появится.

 

 

И наоборот: при запросе на сервере мы получим серверные соединения, но не увидим клиентские.

Это важно учитывать при разработке.

Есть и другие особенности:

  • Если мы создали соединение на сервере и вдруг решили обновить конфигурацию, соединение не отпадает – я проверял состояние соединения в момент обновления конфигурации.

  • Если мы создали соединение на сервере, то другие пользователи могут с ним работать, обращаясь к нему на сервере по ключу.

  • Если мы создали соединение на клиенте, то оно доступно только текущему пользователю в текущем сеансе – другие пользователи с ним не могут работать.

  • Если пользователь завершает свой сеанс, то все соединения, которые были запущены под ним на клиенте, завершаются не с ошибкой, а с кодом 1000.

 

Как посмотреть активные WebSocket-соединения

 

Мы научились создавать соединения, отправлять сообщения, получать ответы. Но как узнать, какие соединения сейчас вообще запущены?

Я поискал такой инструмент среди стандартных и ничего подходящего не нашел. Поэтому пришлось написать собственную обработку – «СоединенияВебсокетов». Ее вы тоже можете найти в составе конфигурации, выложенной на GitHub.

 

 

По кнопке «Получить соединения» здесь можно посмотреть доступные серверные и клиентские WebSocket-соединения, и при необходимости закрыть их.

Причем, пока я ее делал, обнаружился еще один интересный момент.

Обратите внимание на картинку снизу на слайде – здесь показаны серверное и клиентское соединение, ключи у которых абсолютно одинаковые.

Оказалось, что платформа позволяет создать два соединения с одним и тем же ключом: одно – серверное, а другое – клиентское. Т.е. уникальность ключа для клиентских и серверных соединений проверяется отдельно. Поэтому здесь нужно быть аккуратнее, чтобы не возникла путаница.

 

Как тестировать WebSocket?

 

Ну и последний вопрос – как все это тестировать?

На самом деле здесь можно использовать практически те же подходы, что и при тестировании HTTP-сервисов.

Например, создать тестовый или мок-сервер, который будет возвращать заранее подготовленные данные. Именно такой сервер я и использовал для своих примеров.

А если вам нужно проверить работу WebSocket-клиента, можно воспользоваться готовыми инструментами.

 

 

Например, Postman.

 

 

Или Insomnia. Они позволяют устанавливать WebSocket-соединения, отправлять сообщения и смотреть ответы сервера.

Выше показаны примеры подключения к веб-сокетам через оба инструмента.

 

Где еще можно использовать веб-сокеты?

 

В завершение я обещал поделиться идеями о том, где можно применить веб-сокеты для 1С. Перечислю наиболее интересные варианты:

Дашборды и совместная работа с обновлением данных в реальном времени. Сюда же можно отнести онлайн-доски, где несколько пользователей одновременно что-то рисуют, и системы управления задачами наподобие Jira. Один пользователь передвинул задачу – у остальных она сразу переместилась.

Многопользовательские онлайн-игры. С веб-сокетами можно синхронизировать действия игроков в реальном времени.

Статусы и уведомления. Изменился статус заказа, появилась новая задача, завершилась обработка документа – отправили сообщение заинтересованным пользователям или системам. Это удобно и для интеграции с корпоративными мессенджерами.

Блокировка документов в разных базах 1С. Например, у нас есть несколько баз для разных организаций. В одной базе – «Заказ клиента», в другой – связанный с ним «Заказ поставщику». Когда пользователь открывает документ в одной базе, нужно заблокировать его редактирование в другой.

Через веб-сокеты можно передавать такие уведомления между базами. Но здесь есть нюанс: если WebSocket-сервер недоступен, сообщение о блокировке не дойдёт. Поэтому необходимо предусматреть дополнительные механизмы контроля.

Похожая идея – показывать пользователю, что документ уже кто-то редактирует. По аналогии с мессенджерами, где мы видим, что собеседник набирает сообщение.

Интеграция с искусственным интеллектом. Например, медицинская система передает снимок после эндоскопии в модель распознавания, а после через веб-сокет получает результат обработки.

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

С веб-сокетами проще: изменился план – отправили обновление. Появилась заявка на ремонт – информация сразу отобразилась на экране. Сюда же относятся мониторинг оборудования, телеметрия и различные производственные статусы.

Инвентаризация на ТСД. Несколько сотрудников одновременно сканируют товары, и каждому нужно видеть, какие позиции уже обработаны. Один сотрудник отсканировал товар – сервер отправил сообщение остальным терминалам, и информация обновилась у всех. Причём сами терминалы необязательно должны работать на платформе 1С. Например, обновление информации в реальном времени через WebSocket-протокол уже реализовано в мобильном клиенте SimpleUI – при работе на мобильных устройствах на складах или производственных рабочих местах.

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

 

*************

Статья написана по итогам доклада (видео), прочитанного на конференции INFOSTART TECH EVENT.

Инфостарт A&PM Event 2026

Вступайте в нашу телеграмм-группу Инфостарт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

WEB-интеграция Разработчик Аналитик 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

17568 руб.

20.12.2024    7738    35    4    

35

Сайты и интернет-магазины WEB-интеграция Системный администратор Разработчик Пользователь 1С:Предприятие 8 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM / LOGICSTARS. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM / LOGICSTAR разных брендов в одной информационной базе в ручном и автоматическом режиме.

42700 руб.

03.08.2020    25811    42    26    

30

WEB-интеграция Системный администратор Разработчик Пользователь 1С:Предприятие 8 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена по API между конфигурацией 1С:Альфа-Авто 6 и порталом LogicStar. Позволяет работать с несколькими обменами LogicStars разных брендов (CHERY, OMODA, JAECOO, EXEED, TENET) в одной информационной базе в ручном и автоматическом режиме. Поддерживается выгрузка заказ-нарядов, реализаций товаров и товарных остатков.

20740 руб.

13.05.2025    3065    6    0    

8

WEB-интеграция Разработчик Пользователь 1С:Предприятие 8 1C:Бухгалтерия Управленческий учет Платные (руб)

Хорошая основа вашего решения импорта данных статистики Яндекс.Метрики в информационную базу 1С. Получение счетчиков, запрос статистики, получение данных - все в одной обработке.

5094 руб.

21.06.2022    11399    12    0    

12

WEB-интеграция Загрузка и выгрузка в Excel Разработчик Пользователь 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Розница 3.0 Розничная и сетевая торговля (FMCG) Россия Платные (руб)

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

12200 руб.

29.08.2025    3740    7    8    

9
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. GarriSoft 801 28.10.26 12:14 Сейчас в теме
Коллега, спасибо за подробное описание, но на мой взгляд в 1С не хватает веб-сокет сервера.
Вы описали в разделе Где еще можно использовать веб-сокеты? полезное применение, но я не понимаю как это реализовать имея в 1с только веб-сокет клиента. Подскажите?
2. dsdred 4355 28.10.26 12:24 Сейчас в теме
(1) Добрый день, как раз упоминались две мои предыдущие статьи которые начинаются с создания сервера:
Поинтегрируем: WebSocket’ы в платформе 1С. Часть 1
//infostart.ru/1c/articles/2280032/

Поинтегрируем: WebSocket’ы в платформе 1С. Часть 2
//infostart.ru/1c/articles/2293957/


Так же у меня есть репозиторий с кучей примеров: https://github.com/dsdred/WebSocketIn1C


Самый простой путь. Создаем сервер на любом другом языке, а сейчас ИИ это делает за вас без проблем.
А потом цепляемся клиентом из 1С.

Еще есть у меня проект в разработке, уже 3 месяца пилю и до UI пока еще не дошел: https://github.com/dsdred/universal-websocket-platform
Когда доделаю тогда это будет плевое дело и без кода.
mrsmrv; starik-2005; GarriSoft; sleemp; +4 – Ответить
8. starik-2005 3309 28.10.26 16:48 Сейчас в теме
(1)
но на мой взгляд в 1С не хватает веб-сокет сервера
Любая ИИ на питоне его делает за минуты юзая только одну либу (и если нужно покрыть тестами - то еще одну). Идеальная архитектура тут - это звезда, где сердцевина - простой роутер, а лучи - подоткнутые к роутеру 1С, запрашивающие значения по ключу (связка с редисом). Зачем простое делать сложным с помощью 1С?
mrsmrv; dsdred; +2 – Ответить
10. GarriSoft 801 28.10.26 17:18 Сейчас в теме
(8)
Простой роутер - это брокер сообщений? По типу RabbitMQ?
12. starik-2005 3309 28.10.26 17:27 Сейчас в теме
(10) да любой. Его дело отдать/сохранит/обменять данные по ключу - все. Что там за ним - не особо важно но 99% потребностей 1С покрывает. Также есть телефония - открыть форму по звонку. Опрашивать сервис телефонии раз в условеую секунду слишком накладно, а отреагировать на соьытие из сервиса открытием формы - это тема. Сюда же ШК/RFID-сканеры, весы и прочее оборудование, которое должно отдать 1С блок данных, не требуя постоянного опроса. Событийная схема.
13. GarriSoft 801 28.10.26 17:33 Сейчас в теме
(12)
Коллега, посмотри тогда мой вопрос в (11), что скажешь
3. war41k 1430 28.10.26 13:43 Сейчас в теме
Веб сокеты активно используют в крипто биржах спасибо за обзор
5. dsdred 4355 28.10.26 13:47 Сейчас в теме
(3) Рад что понравился обзор (доклад прошлогодний)
Да, биржи хорошо ложатся
4. war41k 1430 28.10.26 13:45 Сейчас в теме
Раньше решалось либо ванесой либо внешними компанентами, наконец то добавили без гомороя
6. leosoft 170 28.10.26 15:31 Сейчас в теме
А можете подсказать - клиенты работают с файловой Бухгалтерией в режиме терминального сервера,
в списке активных пользователей появился пользователь "Не указан", приложение WebSocket,
которое не закрывается само с сентября. В диспетчере задач я не вижу такого сеанса.
Как можно "отключить" такого пользователя и как он вообще мог появиться?
7. dsdred 4355 28.10.26 15:39 Сейчас в теме
(6) Ну вообще с вебсокетами 1с общается через соединение
вот обработка от меня же, которая позволяет завершать соединения
https://infostart.ru/1c/tools/2523837/

попробуйте, возможно увидите сеанс и тогда его просто завершите.
9. leosoft 170 28.10.26 17:00 Сейчас в теме
(7) Спасибо большое, попробую!
11. GarriSoft 801 28.10.26 17:26 Сейчас в теме
Коллега, все же не понимаю, я вот такой момент.
Есть база 1с, скажем нет возможности опубликовать ее на вебсервере, т.е. http сервисы не доступны, но к базе желательно иметь доступ, ну скажем в рамках локальной сети.
В моем понимании идеальный вариант, запускаю обработку, которая создает WebSocket сервер в 1с и дает возможность подключиться к 1с через WebSocket скажем условному ТСД на складе.
Как это можно сделать? Хранить в макете стороне ПО, в виде WebSocket сервера (некой шины) к которой будут подключаться и 1с как клиент WebSocket и ТСД как клиент WebSocket?
Или есть другое более простое решение? В моем понимании было бы хорошо иметь в 1с не только клиента, но и сервер для WebSocket, но у нас есть только клиент.
14. starik-2005 3309 28.10.26 17:46 Сейчас в теме
(11) ws - это, обычно, протокол оповещения о событии в форму. Ты клиент, ты установил соединение и ждешь от сервера события. Ну или отправляешь туда. Это протокол реального времени с постоянным соединением. Кейсов юзания много, но от веб-сервисов отличается автоматической поддержкой соединения через PING/PONG. Есть у тебя форма, есть весы появился на весах груз - пришло событие. Сервер его посылает, клиент ловит событие и тутже отображает на форме. И вот смысла в сервере не особо есть, даже если нужно обмениваться событиями между двумя 1С. Вот ты открываешь форму в 1С 1, там пусть сервер. Допустим, это дашборд. У тебя есть условно клиенты 1С 2..10, которые, получается, с этой формой открывает соединение и кидает туда что-то. Есть в этом смысл если это все в регистр положить можнл и раз в 10 сек обновлять? Я не вижу.
15. GarriSoft 801 28.10.26 17:54 Сейчас в теме
(14)
Получается для моего варианта, описанного в (11) WebSocket - не применим?
16. starik-2005 3309 28.10.26 17:59 Сейчас в теме
(15) ТСД на складе - это железка, на которой веб-сокет клиент планируется? По моему разумению схема проста: ТСД -> Сервер на питоне -> 1С. ТСД регится на сервере, получает свой ИД, 1с получает у сервера все живые ИД и подписывается на них в конкретном сеансе. На ТСД появился скан - уехал на сервер, сервер разослал всем, кто подписан.
Dach; dsdred; +2 – Ответить
17. gybson 15 28.10.26 22:38 Сейчас в теме
(11) для ТСД мобильный клиент лучше подойдет наверное
18. sikuda 687 30.10.26 07:40 Сейчас в теме
Коллеги, нам здесь реализации от 1С не хватает - https://mista.ru/topic/903147
19. dsdred 4355 30.10.26 10:46 Сейчас в теме
(18) Реализации чего не хватает? сервера?
Вам проще морской бой сделать на любом другом языке одним промптом.
20. sikuda 687 30.10.26 13:05 Сейчас в теме
(19) Да все хватает, даже wssocket client работает в HTMLполе - https://seabattle-sikuda.mia0.amvera.tech/
Чисто в 1С я так понял никто не хочет делать клиента.
21. lekseyich 09.11.26 10:52 Сейчас в теме
Непонятны грабли про открытый пароль, не что же не мешает использовать tls соединение как по аналогии с http и https, есть ws и wss с tls шифрованием.
22. dsdred 4355 09.11.26 12:29 Сейчас в теме
(21) Грабли именно в том, что если ты внесешь логин пароль непосредственно в конфигураторе, то их легко считать простой обработочкой.
Для отправки сообщения требуется регистрация/авторизация