Реализация доступа к сокетам внешней компонентой для 1С Native API на языке Delphi (8.2)

01.10.12

Разработка - Разработка внешних компонент

Пример реализации функций работы с сокетами во внешней компоненте, написанной для 1С Native API на языке Delphi.

Скачать файл

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

Наименование По подписке [?] Купить один файл
SocketNative-20121001.zip
.zip 3,90Mb
187
187 Скачать (1 SM) Купить за 1 850 руб.

Пример реализации функций работы с сокетами во внешней компоненте, написанной для 1С Native API на языке Delphi.

Использованы исходники реализации интерфейса от пользователя v77: //infostart.ru/public/81644/

При написании руководствовался ещё реализацией Native API от romix: //infostart.ru/public/88060/ 

В файле SocketNative.zip: исходники; скомпилированные dll для Windows x86 и x64; пример конфигурации 1С (выгрузка информационной базы с запуском на сервере).

Исходники компилировались Embarcadero Delphi XE3. 

Исправление от 01.10.2012 - теперь работает и на сервере x64, спасибо юзеру romix (v77).

Функции: 

 
  • Подключиться (Connect)
  • Отключиться (Disconnect)
  • Послать (SendData)
  • Принять (RecvData) 

Порядок использования:

Подключаем внешюю компоненту (считаем, что расположена в макете интегрированной обработки TestNativeAPI):


ПодключитьВнешнююКомпоненту("Обработка.TestNativeAPI.Макет.SocketNative", "SocketNative", ТипВнешнейКомпоненты.Native); 

Сокет = Новый("AddIn.SocketNative.SocketNative");  

 

Устанавливаем свойства Сервер, Порт, Таймаут:

Сокет.Сервер = ;
Сокет.Порт = ;
Сокет.Таймаут = ;

И подключаемся:

Сокет.Подключиться();

Теперь можно, например, отправлять данные:

Сокет.Послать("Hello, world");

См. также

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

Медиадисплей покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Экран можно использовать в качестве графического меню-борда в кафе и видеовывески. В качестве устройства отображения можно использовать Android-планшеты, смарт-телевизоры с Android, мониторы или проекторы под управлением Windows или Linux-компьютера. Linux-версия успешно запускается на одноплатных компьютерах Raspberri Pi и Orange Pi. Настраивается ЛЮБОЙ ДИЗАЙН экрана при помощи встроенного графического редактора! Решение можно масштабировать от одного экрана до тысяч экранов с централизованным управлением.

18000 руб.

30.05.2017    54038    9    69    

46

Разработка внешних компонент Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

Внешняя компонента для конвертации PDF файлов в картинки без использования дополнительных программ. Работает на сервере и в тонком клиенте.

2400 руб.

25.06.2024    1125    3    4    

3

Разработка внешних компонент Телефония, SIP Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Внешняя компонента выполнена по технологии Native API для 1С 8.х, обеспечивает доступ к программным АТС Asterisk (FreePBX, Elastix) через AMI интерфейс. Через него можно управлять многими функциями Asterisk (определение номеров, перевод звонков, набор телефона и т. д.)

2400 руб.

04.05.2018    47296    124    66    

67

Разработка внешних компонент Программист Платформа 1С v8.3 Платформа 1C v8.2 Платные (руб)

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

4600 руб.

27.06.2023    3597    3    0    

5

Разработка внешних компонент Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Позволяет автоматизировать работу с картинками. С помощью компоненты можно измерять размер изображений, поворачивать их, наносить водяные знаки, конвертировать из одного формата в другой. Будет очень полезна для интернет-магазинов и всех, кому постоянно требуется работать с различными графическими форматами. Выполнена по технологии NativeAPI. Работает с форматами: jpg (jpeg), png, bmp, gif, tif

3600 руб.

02.09.2010    77510    72    257    

191

Разработка внешних компонент Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 Платные (руб)

Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).

3000 руб.

12.05.2020    28651    138    100    

91

Разработка внешних компонент Системный администратор Программист Стажер Бесплатно (free)

Библиотека для работы с базами SQLite из 1С на основе внешней компоненты. Для Linux и Windows, бесплатно и с открытым исходным кодом!

14.01.2025    1793    bayselonarrend    10    

44

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

В статье описывается приложение-конструктор внешних компонент (native API). Конструктор упрощает процесс разработки за счет удобного добавления всех нужных функций и процедур в графическом режиме, с указанием их параметров и типов параметров. На выходе приложение генерирует готовый код на С++ и Rust и позволяет сразу приступить к реализации, без настройки API компоненты вручную.

04.12.2024    4712    kovalevdmv    26    

75
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. CVZ 19.07.12 11:21 Сейчас в теме
Проверено, работает на 64-битном сервере 1С
7. phabi0z 20.08.12 22:57 Сейчас в теме
(1) CVZ,
подключить компоненту на 64 сервере 1с не удалось!
Пробовал на версии 8.2.13.209 и на версии 8.2.16.352 - результат одинаковый - зависание с последующим отсоединением от сервера


Подскажи как подключал?
9. CVZ 24.09.12 16:55 Сейчас в теме
(7) phabi0z, приношу свои извинения, как выяснилось сегодня - тестили на 32 бит...
10. vladon 23 01.10.12 12:51 Сейчас в теме
(7) phabi0z, ошибка с x64 исправлена, качайте обновлённый файл.
11. phabi0z 01.10.12 15:11 Сейчас в теме
(10) спасибо
уже решил проблему переписав свой код на си,
но все равно скачаю для анализа проблемы
12. vladon 23 01.10.12 15:29 Сейчас в теме
(11) phabi0z, а можно, если не гостайна, взглянуть на ваш код на си?

а проблема была в размерности типов, оказывается, в 64-бит delphi размерность Integer остаётся 32 бита, а размерность pointer увеличивается до 64 бит

в 32-битном дельфи sizeof(Integer)=sizeof(Pointer)=32bit

поэтому в 32-бит сервере работало, а в 64-бит сервере ссылки на функции в классе были неверными
13. phabi0z 01.10.12 16:33 Сейчас в теме
(12)
Я так и понял, что проблема в размерности типов, но не смог решить ее в delphi,
в классах ковыряться не было времени.

А для переноса своего кода на си я использовал пример с диска ИТС.
Он написан под vs2008 и там в принципе нет ничего сложного.
По себе могу сказать, что в основном программировал на delphi, но проблем с пониманием 1С-ной технологии создания внешних компонент на NativeApi у меня не возникло.

Выкладывать код ВК считаю нецелесообразным, так как каркас проекта есть на ИТС.
В дальнейшем планирую написать статью (если ее еще никто не написал)

Если очень надо - скину код проекта в личку, но без основной библиотеки раскроя(это гостайна)
14. vladon 23 01.10.12 16:38 Сейчас в теме
(13) phabi0z, вот я как раз вообще не смог разобраться с примером с ИТС, под x64 у меня не компилируется (вернее, компилируется, с ворнингами о размере переменных), VS 2012

если можно, скиньте, пожалуйста, в личку или на мыло - vladon@vladon.ru
15. phabi0z 01.10.12 16:45 Сейчас в теме
(14) ок, сейчас скину на мыло
16. phabi0z 01.10.12 17:05 Сейчас в теме
(14)
ворнинги я убрал с помощью оператора static_cast<int>(var),
в общем в коде глянешь.
2. oleg_km 19.07.12 12:57 Сейчас в теме
Так он только подключаться может, а слушать? С подключиться проблем нет, вот как слушающий организовать
3. vladon 23 19.07.12 13:18 Сейчас в теме
(2) oleg_km, ну это нужно сервер писать, в принципе несложно. Просто нет смысла организовывать её в виде компоненты.

Есть какая-то конкретная задача для "слушания"? Опишите, возможно, я смогу взяться.
4. oleg_km 19.07.12 13:22 Сейчас в теме
не понятно как делать многопоточность, как читать подключенные сокеты. Я думал ты придумал что-то. С клиентом все понятно
5. vladon 23 19.07.12 14:20 Сейчас в теме
(4) oleg_km, у меня реализована многопоточность, например, резолв IP-адреса по имени хоста происходит в отдельном потоке, посмотрите исходники.

Просто не понимаю смысла реализовывать сервер в виде ВК для 1С.
6. phabi0z 14.08.12 23:35 Сейчас в теме
Написал компоненту для оптимизации раскроя листов под win32. Недавно установили сервер 1с x64 под win 64... Конечно же ВК не работает. Перекомпилил на Delphi ex2 под x64. При подключении ВК сервер 1c падает.

Теперь вопрос. Есть ли какие-то особенности при компиляции ВК для x64?
PS. Владислав (vladon), не могли бы написать свою почту для связи, если не затруднительно?
8. vladon 23 24.09.12 16:16 Сейчас в теме
Проблему с x64 подтверждаю, работаю над этим.
17. Resha 18.05.13 13:35 Сейчас в теме
Есть один нюанс. этой компонентой не возможно передать произвольные данные.

Данные вида (26 байт, 16-й вид):

1A 00 00 00 C0 00 01 00 00 00 10 00 00 00 01 E0 01 00 33 39 37 32 35 31 37 38

передались как

1A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

и, соответствующим образом изменилась и строка в 1С после вызова метода "ОбъектСокет.SendData(СтрокаЗапроса)".

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

Вариант через Winscock так же не прошел, т.к. 1С (или Winsock) изменила строку на следующую:

1A 00 00 00 41 00 01 00 00 00 10 00 00 00 01 61 01 00 33 39 37 32 35 31 37 38
(все буквы типа À (код 192) заменены на обычные A (код 65))

К тому же так и не нашел рабочий вариант использования Winsock который можно использовать в одной процедуре (без обработчиков событий)
andrey314; +1 Ответить
34. andrey314 14 10.02.20 17:25 Сейчас в теме
(17)
Удалось решить проблему с строками в хексформате?
18. Aspirant 4 02.10.13 09:39 Сейчас в теме
Не совсем понятно как и где это можно использовать?
19. Жолтокнижниг 259 06.10.13 17:37 Сейчас в теме
{Обработка.TestSocketNative.Форма.Форма.Форма(27)}: Недостаточно фактических параметров
Сокет.Послать("Hello, world");
20. capitan 2591 10.10.14 19:55 Сейчас в теме
Обычно в этом месте кричат - Верните мой стартмани и ставят минус :)
Но я не сторонник таких мер. Как говорят профессора - раз что то ищет, значит что то знает.
Но желающим скачать обработку отсюда докладываю : на win 7 64-х не работает
{Обработка.TestSocketNative.Форма.Форма.Форма(22)}: Поле объекта не обнаружено (Сервер)
ОбъектСокет.Сервер = СокрЛП(TCPАдрес);
На сайте автора есть версия №2 в ней хотя бы реализован пример до конца.
И он работает ... &НаСервере
Нафига внешняя компонента на сервере ?
Как пожелание - здесь положить свежую версию и рабочие примеры возможно для 32 х и 64 х
И создавать компоненту на клиенте.
qSergey; chizh.84; +2 Ответить
31. alexnov 49 23.12.19 14:51 Сейчас в теме
(20) А можно мне рабочую версию? не могу найти, отсюда скачал - не работает
21. gdu199 27 13.10.14 13:36 Сейчас в теме
Ждем вариант для клиента, а то как то нехорошо получается. Неплохо было бы предупреждать в топике
22. uvsd2014 4 18.02.15 09:44 Сейчас в теме
23. KostyaBu 20 05.09.15 00:38 Сейчас в теме
ошибка {Обработка.TestSocketNative.Форма.Форма.Форма(28)}: Поле объекта не обнаружено (Сервер)
Сокет2.Сервер = Сервер;
код

Сокет2= Новый("AddIn.SocketNative.SocketNative");
Сокет2.Сервер = Сервер;
Сокет2.Порт = номерСокета;
Сокет2.Таймаут = 100;

Обработка в придложенным вариантом не работает!
igori3333; qSergey; baril; chizh.84; dinork; +5 Ответить
24. artemka 16.09.15 15:59 Сейчас в теме
Все спрашивают - нафига компонента на сервере?
Отвечаю: для выполнения обмена в автоматическом режиме сейчас используются фоновые задания 1с, которые мониторят папки на наличие файлов с данными и грузят их, когда они появляются. Т.к. интервал опроса стоит очень маленький - 10 сек, а заданий много, то грузит это сервер просто не по-детски.
А хотелось бы, чтобы была ВК которая вызывала бы событияе на сервере для загрузки данных.
Конечно можно написать службу, которая будет при появлении данных создавать сеанс 1с и вызывать там загрузку, но это долго (создание сеанса) и неэффективно (сеанс будет подниматься по нескольку раз в минуту).
25. SashasDas 14.07.18 21:10 Сейчас в теме
Попробовал зарегить 64-х разрядную компоненту из примера - не получилось.
26. SashasDas 14.07.18 21:13 Сейчас в теме
Пишет, что модуль загружен, но точка входа DllRegisterServer не найдена.
29. alexnov 49 18.12.19 12:28 Сейчас в теме
А на 8,3 работает?
(26) такая же фигня на Вин10 х64. Получилось исправить? Как оно вообще должно работать то?
27. user1122235 01.01.19 22:17 Сейчас в теме
При работе в серверном контексте, компонента самопроизвольно выгружается из платформы или работает до закрытия пользовательского сеанса, под которым была поднята? Обычно, платформа самопроизвольно выгружает компоненту и реализовать, например, периодическую отправку данных становится проблематично. Тут как?
28. alexnov 49 18.12.19 12:11 Сейчас в теме
30. Naposaram 301 22.12.19 20:20 Сейчас в теме
При подключении "Некорректная работа компоненты с памятью". (32 бита)
32. alexnov 49 23.12.19 14:52 Сейчас в теме
(30) та же ерунда, что делать?
33. Naposaram 301 23.12.19 16:14 Сейчас в теме
(32) хз, надеяться, на то, что автор не забросил публикацию )))
35. DasIsFantastich 16 29.02.20 22:07 Сейчас в теме
А как пользоваться методом Принять (RecvData) ?
Я так понял что после отправки команды сокет закрывается, когда потом вызваю принять - 1С зависает...
Попробовал в исходниках убрать закрытие сокета, но это не работает...
36. qSergey 130 17.11.20 11:26 Сейчас в теме
На x64 вообще не работает ни 32x компонента, ни x64, зря потраченные деньги
Оставьте свое сообщение