TCP-клиент в 1С (open-source)

25.01.25

Интеграция - WEB-интеграция

Новые методы в составе Открытого пакета интеграций для работы по протоколу TCP (в качестве клиента) на основе Native API компоненты на Rust.

Если вы не слышали ранее об Открытом Пакете Интеграций (что вполне вероятно), то небольшая вводная часть ниже, под катом. Для тех, кто уже знаком с ОПИ, данный раздел можно пропустить.

 
 Что такое Открытый Пакет Интеграций

 

Открытый Пакет Интеграций (ОПИ) - это open-source набор методов для простой и быстрой интеграции с различными популярными API. Он состоит из аналогичных по функционалу 1С-расширения (CFE), OS-пакета и программы для Windows и Linux, которые предоставляют готовые функции для работы с целым набором различных онлайн-сервисов.


  • ОПИ бесплатен и имеет открытый исходный код на GitHub. Вы всегда можете получить последнюю версию библиотеки на странице репозитория, а подписавшись - узнавать о выходе обновлений. Все релизы сопровождаются статьями на Инфостарт и разделами единой документации. На Инфостарт вы можете подписаться уже хоть сейчас, а про документацию я расскажу далее.

 

 

 

  • Удобная единая документация. Она расположена на сайте opi.neocities.org и содержит в себе всю информацию, необходимую для работы: инструкции по предварительным действиям для начала интеграции, описания всех методов с параметрами и возвращаемыми значениями, примеры кода и т.д. Каждый API имеет там свой раздел.

 

 

 

 

  • Простая установка. ОПИ распространяется во множестве вариантах: как XML файлы расширения, как EDT проект расширения, как файл расширения формата .cfe (версия 1С 8.3.9), как файл пакета для OneScript и еще в целом наборе пакетов и файлов для Windows и Linux. Из этого набора вы всегда сможете выбрать тот способ установки, который лучше подойдет для вашей конкретной задачи

 

На момент последнего обновления данной статьи, доступны следующие API:

Наиболее актуальную информацию можно посмотреть в репозитории или на вводной странице документации.

 

TCP - один из основных транспортных протоколов интернета. Поверх него работает огромное количество других протоколов, уже прикладного уровня, таких как HTTP(s), FTP, SMTP, IMAP, DNS, LDAP и еще бог весть знает сколько их есть

 

Тем страннее, что в платформе 1С нет встроенной его реализации, хотя основанный на нем HTTP есть (в OneScirpt, кстати, TCP есть из коробки). Но не суть. В сегодняшнем обновлении в состав ОПИ было добавлено несколько методов для работы по этому протоколу - пока только в качестве клиента - а именно:

  • Открытие и закрытие соединения
  • Отправка данных серверу в виде строки или двоичных данных
  • Прием ответа от сервера в виде строки или двоичных данных
  • Небольшой утилитарный метод, который реализует все вышеперечисленное как одно простое действие обработки запроса

Реализовано это при помощи Native API компоненты на Rust. Это первая компонента в ОПИ и моя проба пера в принципе, так что я буду очень рад, если в случае проблем с ней вы напишите в Issues или комментарии к статье. Собрана она под все платформы: x64 и x86 Windows и Linux и хранится в общем макете (тестировалась на x64 Windows (1С) и x64 Ubuntu (через OneScript)). В приложение же для командной строки от реализации TCP попал только 1 метод - функция обработки запроса

Также огромное спасибо medigor за крейт addin1c для Rust. Это пакет, который берет на себя все вопросы организации компоненты так, чтобы 1С смог с ней работать, а тебе остается только реализовать сами методы, которые нужны для использования. Одна из самых недооцененных штук в 1Сном opensource, что я видел - поставьте этому герою звездочку, пожалуйста, а то как-то даже неудобно.

Ну, а теперь немного про другие нововведения.


 

Улучшения в CLI версии

В приложении для командной строки (если что, ОПИ это не только расширение для 1С, но и консольное приложение для Windows и Linux с тем же набором функций, которые работают без 1С) случилось несколько улучшений

Во-первых, была добавлена поддержка управляющих последовательностей: \n (перенос строки), \r (возврат каретки), \v (вертикальная табуляция) и \f (перевод формы). Теперь их можно использовать в текстовых аргументах и они будут заменены на соответствующие символы. Я хотел уменьшить риск поломки существующих процессов для тех, кто уже использует CLI версию и будет обновляться, поэтому данное нововведение не касается строк в формате JSON и путей к файлам

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



 

 

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

Спасибо за внимание!

 

 Если вам нравится ОПИ, то не забывайте поддерживать его звездочкой на GitHub и плюсом на Инфостарт!
 


 

Репозиторий ОПИ: github.com/Bayselonarrend/OpenIntegrations

Последний релиз: github.com/Bayselonarrend/OpenIntegrations/releases/latest

 
 Где? Куда?

 

Другие статьи про Открытый пакет интеграций на Инфостарт:

 

 

 Мой GitHub:    https://gitub.com/Bayselonarrend 
 OpenYellow:    https://openyellow.org
 Лицензия MIT:  https://mit-license.org

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

tcp интеграция web обмен протокол компонента

См. также

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

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

36000 руб.

03.08.2020    22870    33    24    

26

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

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

17280 руб.

20.12.2024    4988    22    4    

24

WEB-интеграция Программист 1С:Предприятие 8 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Расширение для автоматизации передачи данных между сервисом Vetmanager с 1С: Бухгалтерия 3.0. Решение позволяет загружать документы и справочники из Ветменеджер в 1С:Бухгалтерию, сокращая время на ручной ввод данных и минимизируя ошибки.

24000 руб.

02.02.2021    21534    62    52    

40

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

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

12000 руб.

29.08.2025    1340    2    0    

3

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

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

5196 руб.

28.04.2016    99531    114    218    

362

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

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

60000 руб.

07.05.2019    40604    74    45    

31
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SerVer1C 997 26.12.24 10:47 Сейчас в теме
Отлично! Теперь можно создавать сетевые игры на 1С )
lostcay; Xershi; bayselonarrend; +3 Ответить
2. aximo 2563 26.12.24 11:32 Сейчас в теме
Автору плюс! Но, почему портал об 1с слишком часто выходит из тематического поля….

И где новость о 8.5 ??????
3. bayselonarrend 3002 26.12.24 11:35 Сейчас в теме
5. Xershi 1535 26.12.24 13:12 Сейчас в теме
(2) 8.5 в бетте, смысла пока её смотреть нету, только если очень надо.
4. Xershi 1535 26.12.24 13:10 Сейчас в теме
Рекомендую статью в ворд загонять.
верстикальная
даное

Интересует почему раст?
В свое время было желание написать ВК на джаве, но учителя не было так и забросил вопрос о создании ВК.
И чем занимаешься, каждый месяц новая интеграция.
bayselonarrend; +1 Ответить
6. bayselonarrend 3002 26.12.24 13:19 Сейчас в теме
(4)
Интересует почему раст?

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

И чем занимаешься, каждый месяц новая интеграция

Это просто хобби в свободное время)
elcoan; KirillZ44; +2 Ответить
7. dill 26.12.24 13:46 Сейчас в теме
(6)
Это просто хобби в свободное время)

Вы либо не спите, либо много свободного времени. В любом случае жирный плюс)
bayselonarrend; +1 Ответить
8. VmvLer 26.12.24 15:19 Сейчас в теме
"За бугром" Раст стал корпоративным стандартом
9. bayselonarrend 3002 26.12.24 15:22 Сейчас в теме
(8) Ну, в отдельных низкоуровневых областях, вроде embedded, действительно популярен
10. ef42 27.12.24 15:54 Сейчас в теме
Автору респект! У меня уже смутные подозрения, что следующий продукт будет альтернатива 1C:Шине или подобный монстр - очень продуктивно работаете. За ОПИ спасибо - отличная и нужная вещь, почти как коннектор от Владимира!
bayselonarrend; +1 Ответить
11. bayselonarrend 3002 27.12.24 15:57 Сейчас в теме
12. user627782_skuter2008 29.12.24 20:44 Сейчас в теме
(11) Как с вами можно связаться для доработки кнопок в Телеграмме из 1с?
13. bayselonarrend 3002 29.12.24 21:09 Сейчас в теме
(12) Можете в Issues написать
14. user613124_gorchakoviv 26.01.25 00:00 Сейчас в теме
Здравствуйте. Подскажите соединение всегда должно быть открыто после подключения к серверу? Я вызываю с клиента подключение, пока процедура на сервере соединение установлено, только возвращается на клиент и соединение разрывается. И возможно ли получение данных с TCP сервера по внешнему событию формы?
Спасибо.
15. bayselonarrend 3002 26.01.25 00:52 Сейчас в теме
(14) Здравствуйте

Подскажите соединение всегда должно быть открыто после подключения к серверу?


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

Я вызываю с клиента подключение, пока процедура на сервере соединение установлено, только возвращается на клиент и соединение разрывается


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

И возможно ли получение данных с TCP сервера по внешнему событию формы?


Не очень понял: если событие прилетает от другой компоненты и вы хотите при его срабатывании подключаться к серверу - то надо пробовать, возможно у вас получится. Если речь про то, чтобы этот TCP клиент создавал какие-либо события, то нет, он их не создает

Методы, про которые идет речь в статье, рассчитаны на работу наподобие 1сных http-запросов: их можно вызывать для установки соединения, отправки и получения данных от сервера здесь же, после чего закрыть соединение (или оно само закроется при выходе из процедуры). Если вам нужно запустить функцию, которая будет бесконечно ждать новых данных и по их приходу в 1с выполнять действия, то стоит искать скорее TCP сервер, а не клиент. Либо же переодически (в цикле, по обработчику ожидания) создавать новое соединение к серверу с длинным таймаутом для ожидания новых данных. Но это блокирует выполнение дальнейшего кода
16. user613124_gorchakoviv 26.01.25 12:49 Сейчас в теме
(15)
Если вам нужно запустить функцию, которая будет бесконечно ждать новых данных и по их приходу в 1с выполнять действия, то стоит искать скорее TCP сервер, а не клиент.


Да, именно то что мне нужно. Оборудование выкидывает на TCP server (в себя же) данные с датчиков и камер. Мне надо получать их "без задержек", так сказать. Сейчас у меня все реализовано на MSWINSOCK, через обработчик ожидания, но есть трудности с задержкой обработки данных когда начинают сыпаться данные раз в 70мс. Хочу сделать по примеру работы сканеров ШК по внешнему событию.

Спасибо Вам. Буду копать в сторону TCP сервера. Просто у меня в голове картинка, что если я забираю откуда-то данные, то это клиент)
bayselonarrend; +1 Ответить
17. bayselonarrend 3002 26.01.25 12:51 Сейчас в теме
18. reg200900 05.10.25 22:24 Сейчас в теме
Скачал расширение "OpenIntegrations_1.27.0_ru.cfe". В нем была обнаружена небольшая ошибка:
ОМ.OPI_Компоненты.ПодключитьКомпонентуНеИзолированно(f). Здесь описывается переменная "ТипПодключенияВнешнейКомпоненты = Неопределено;", которая зарезервирована платформой, начиная с версии "8.3.21".
При этом эта переменная, в коде нигде не используется.
Необходимо ее закоментить и TCP-соединение поднимается.
Среда запуска:
"1С:Предприятие 8.3 (8.3.25.1394)"
Windows10x64

В целом очень классный проект.
Огромное спасибо за него.
19. bayselonarrend 3002 06.10.25 08:55 Сейчас в теме
(18) Здравствуйте. ТипПодключенияВнешнейКомпоненты = Неопределено - это заглушка, чтобы, наоборот, на более старых версиях платформы блок с НеИзолированно не выпадал в "Переменная не определена: ТипПодключенияВнешнейКомпоненты"

Но, видимо, это некорректно работает, надо пересмотреть. Спасибо!
20. egoiste__ 06.12.25 21:26 Сейчас в теме
Здравствуйте, спасибо за компоненту. Используем для обмена с принтером по raw-ip и камерами штрих-кодов. Посылка и получение данных примерно каждые 40-70 мс. Была задержка с получение данных с камеры штрих-кодов, изменил в исходниках минимальную задержку при чтении с сервера tcp с 200 мс на 1 мс. Вроде бы работает. Но есть одна проблема. При запуске в изолированном режиме addnhost64.exe растет достаточно быстро. Переменной внешней компоненты при завершении процедуры на сервере присваиваю неопределено. Однако победить рост addnhost64.exe не могу. При завершении работы addnhost64.exe не закрывается. К сожалению не знаю куда копать дальше.
21. bayselonarrend 3002 06.12.25 21:44 Сейчас в теме
(20) Здравствуйте. Первое, что стоит попробовать - добавить вызов ЗакрытьСоединение(). Оно убивает TCP соединение внутри компоненты

Также я довольно сильно перерабатывал TCP для следующей версии ОПИ: функции и их параметры в 1С не поменялись, но была оптимизирована компонента + поддержка прокси серверов. Она еще не в релизе, будет +- в течении недели, но вы можете скачать билд cfe:

https://jenkins.openintegrations.dev/job/OpiBuild/job/OpiRelease/
22. egoiste__ 06.12.25 22:05 Сейчас в теме
Спасибо, попробую. Я правда использовал close_output
(21)
ЗакрытьСоединение()
24. egoiste__ 06.12.25 22:41 Сейчас в теме
(22)
(22)
ЗакрытьСоединение()

(21)
26. egoiste__ 07.12.25 19:07 Сейчас в теме
(21) Обновил после fastfix. К сожалению, процесс продолжает расти, сегодня за день работы до 800 мег.
27. bayselonarrend 3002 07.12.25 19:10 Сейчас в теме
(26) Сделайте тогда, пожалуйста, issue на github с информацией о том, как что вызывается
https://github.com/Bayselonarrend/OpenIntegrations/issues
23. bayselonarrend 3002 06.12.25 22:10 Сейчас в теме
(22) Close_output только канал на запись закрывает, сам TcpStream не уничтожается
25. egoiste__ 06.12.25 22:41 Сейчас в теме
Для отправки сообщения требуется регистрация/авторизация