новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума
Форум

Обсуждение к контенту: TCP клиент для 1С. Native API внешняя компонента на C++

    • #1
    • 26.09.2022 15:45
    0
    • #2
    • 26.09.2022 15:48
    0
    Добрый день!
    Компонента подключилась, но при выполнении подключения к серверу тестовой командой из вашей обоработки:
    &НаКлиенте
    Процедура Подключиться(Команда)  
    	Если ВК.Подключиться(Сервер, Порт) Тогда
    		Сообщить("Выполнено подключение к серверу");
    	Иначе
    		Сообщить("Не удалось подключиться к серверу по причине: " + ВК.ПоследняяОшибка);
    	КонецЕсли;	
    КонецПроцедур


    платформа отрабатывает ошибку: Использование асинхронных методов на клиенте запрещено!
    Как быть?
    • #3
    • 26.09.2022 16:17
    0
    Добрый день.

    Для асинхронной работы с внешней компонентой нужно:
    Для установки свойства вызвать метод НачатьУстановкуИмяСвойства, где ИмяСвойства = реальному имени свойства.
    Для получения свойства вызвать метод НачатьПолучениеИмяСвойства, где ИмяСвойства = реальному имени свойства.
    Для вызова метода использовать НачатьВызовИмяМетода, где ИмяМетода = реальному имени метода.

    Например:

    ОписаниеОповещения = Новый ОписаниеОповещения("ПодключитьсяЗавершение", ЭтотОбъект);
    ВК.НачатьВызовПодключиться(ОписаниеОповещения );

    &НаКлиенте
    Процедура ПодключитьсяЗавершение(Результат, Параметры, ДопПараметры) Экспорт
    Если Результат Тогда
    Сообщить("Выполнено подключение к серверу");
    Иначе
    Сообщить("Не удалось подключиться к серверу");
    КонецЕсли;
    КонецПроцедуры

    Аналогично с другими методами.
    https://its.1c.ru/db/v8321doc#bookmark:dev:TI000001509
    • #4
    • 25.09.2023 11:08
    • Отредактировано: 25.09.2023 11:09:22
    0
    получится ли с помощью этой компоненты (TCPclient) отправлять сообщения в Трассир ?
    по сути нужна только отправка
    предполагалось использовать вашу разработку https://1lancer.ru/catalog/4336
    но в комментах пишут что для отправки в трассир она не подходит
    • #5
    • 25.09.2023 11:11
    0
    Если трассир принимает данные по TCP протоколу, то да получится.
    • #6
    • 30.09.2023 12:31
    • Отредактировано: 30.09.2023 12:41:26
    0
    я создал общий макет и загрузил Tcp client dll но не подклучается что делат помогите пожолуйста исползоват обработка TCPClient
    я покупал dll тоже
    • #7
    • 30.09.2023 12:48
    0
    Какую ошибку пишет?
    • #8
    • 30.09.2023 13:39
    • Отредактировано: 30.09.2023 13:40:53
    0
    спасибо всё работает норм
    как можна отправить сообшения на етом порт можете обяснит
    • #9
    • 30.09.2023 13:49
    0
    &НаКлиенте
    Процедура Подключиться(Команда)
    Если ВК.Подключиться(Сервер, Порт) Тогда
    Сообщить("Выполнено подключение к серверу");
    ВК.Send("Привет, сервер!");

    Иначе
    Сообщить("Не удалось подключиться к серверу по причине: " + ВК.ПоследняяОшибка);
    КонецЕсли;
    КонецПроцедуры


    Метод объекта не обнаружен (Send)
    как эта исправить если не трудна помогите пожалуйста
    • #10
    • 13.12.2023 11:27
    0
    А если мы удачно подключились, но произошел разрыв соединения... удастся как-то об этом узнать?
    • #11
    • 13.12.2023 11:54
    0
    При записи данных - да. У меня выходит ошибка "Не удалось записать данные по причине: Сделана попытка выполнить операцию на объекте, не являющемся сокетом."
    При чтении нет, потому что как только данные поступают в сокет, компонента считывает их и сохраняет в буфере. А потом 1С читает их из буфера.
    При разрыве соединения никакого сообщения от компоненты не будет.
    • #12
    • 23.09.2025 13:03
    0
    Здравствуйте! А компонента может несколько соединений поддерживать?

    Даже, например, если я подключу несколько экземпляров компонент. Но Внешнее Событие (в 1с) всегда придет с источником = TCPClient ?
    т.е. я не пойму какое соединение вернуло событие?
    • #13
    • 23.09.2025 13:26
    0
    Здравствуйте. Да, источник для всех экземпляров компонент будет одинаковый
    • #14
    • 24.09.2025 09:38
    0
    Плохо конечно, что не могу по внешнему событию 1с от какого оборудованию это событие прилетело понять.
    Думаю какие варианты есть. например, оборудование может вернуть какой-то префикс свой постоянный,
    Но мне нужно прочитать данные "Компонента.Прочитать(байт)". Если у меня подключено два оборудования Компонента и Компонента2, например. Как мне понять, какой вызвать метод "прочитать"? Может по "байт" ? У компоненты есть "Размер буфера" Компонента.РазмерБуфера.
    т.е. Если Компонента.РазмерБуфера = Данные (из внешнего события 1С) Тогда Компонента.Прочитать(байт) Иначе Компонента2.Прочитать(байт)
    Так получится или не обязательно ?
    • #15
    • 24.09.2025 13:00
    0
    Должно получиться
Для участия в обсуждении Вам необходимо авторизоваться либо   зарегистрироваться