Интеграция 1С и торгового оборудования через Bluetooth

1. KamranV21 124 23.09.20 10:54 Сейчас в теме
Всем привет. Есть такая проблема: нужно настроить интеграцию между 1С и торговым оборудованием. Единственный доступный канал связи - Bluetooth. Подразумевается обмен сообщениями в формате JSON. Готового драйвера под это ТО, к сожалению, тоже нет.

Возможно, кто-то сталкивался с подобной задачей? Какие dll можно использовать? Или можно решить задачу через COM-порты? Буду признателен, если кто подтолкнет в правильном направлении.
Pervin; sam271091_m; +2
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
11. papami 55 23.09.20 19:34 Сейчас в теме +1 $m
На C# использовал библиотеку 32feet.NET для работы с bluetooth. Попробуйте её.
Как использовать NET библиотеки в 1С можно тут поискать на Инфостарте. По аналогии.
https://infostart.ru/public/238584/
KamranV21; +1
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. XAKEP 23.09.20 11:23 Сейчас в теме
назовите хотя бы оборудование
( модель, если не секрет )
+
3. KamranV21 124 23.09.20 11:26 Сейчас в теме
(2)
назовите хотя бы оборудование
( модель, если не секрет )


Онлайн касса Verifone X990. На территории РФ не используется.
+
4. THEBESTolo4b 10 23.09.20 11:33 Сейчас в теме
(3)
Verifone X990
от 10 $ за ккт, понятно почему никаких DLL нет))
+
5. THEBESTolo4b 10 23.09.20 11:36 Сейчас в теме
(3) а Verifon что служба поддерки говорит?
+
6. KamranV21 124 23.09.20 11:48 Сейчас в теме
(5)

Помощи, к сожалению, от них не много. Предоставили приложение под Android для тестирования, но на этом поддержка ограничилась.

Где-то нашел, что для работы по Bluetooth можно воспользоваться winsock. Пока прорабатываю этот вариант.
+
8. THEBESTolo4b 10 23.09.20 11:54 Сейчас в теме
7. XAKEP 23.09.20 11:51 Сейчас в теме
как вам
https://infostart.ru/public/693906/

или автору стучитесь
+
9. KamranV21 124 23.09.20 12:03 Сейчас в теме
(7)

Все верно. ТО два в одном: и POS-терминал, и онлайн-касса.

Для POS, возможно, и предоставляется библиотека, но по кассе мы получили ответ, что никаких dll нет.
+
10. XAKEP 23.09.20 12:14 Сейчас в теме
olegon***ru вместо звездочек точка
там еще поспрашивайте.нужна регистрация

больше вариантов у меня нет...
+
11. papami 55 23.09.20 19:34 Сейчас в теме +1 $m
На C# использовал библиотеку 32feet.NET для работы с bluetooth. Попробуйте её.
Как использовать NET библиотеки в 1С можно тут поискать на Инфостарте. По аналогии.
https://infostart.ru/public/238584/
KamranV21; +1
14. KamranV21 124 24.09.20 09:28 Сейчас в теме
(11)
Спасибо, интересное предложение. Посмотрим, что получится.
+
18. KamranV21 124 28.09.20 09:43 Сейчас в теме
(11)

Добрый день. Последовал вашему совету и создал небольшую обработку на обычных формах для тестирования 32feet на 1С.

Удалось обнаружить устройства поблизости, но пока не получается к ним подключиться. В большинстве примеров на C# что мне удалось найти используется следующий вариант подключения:

client.Connect(device.btDeviceInfo.DeviceAddress, BluetoothService.SerialPort)


Но на 1С при попытке подобного подключения вызывается исключение ("неизвестная ошибка").

Есть еще другой вариант, который используется на C#:

client.Connect(Device.DeviceAddress, Device.InstalledServices[0])


Но в моем случае Device.InstalledServices пуст, и получить первый элемент по индексу не получается.

Буду благодарен, если сможете чем-то помочь. На всякий случай прикрепил обработку к сообщению. Сборка на .NET хранится как макет.
Прикрепленные файлы:
InTheHand.epf
+
19. papami 55 28.09.20 10:06 Сейчас в теме
(18)
Нужно знать какие службы доступны через BT. Т.е. через что вы будете взаимодействовать со своей кассой.
Это должно быть описано в документации.
Кассу добавили в список BT-устройств операционки? Это обязательный пункт. У добавленных устройств в свойствах есть список поддерживаемых служб.
+
20. KamranV21 124 28.09.20 10:23 Сейчас в теме
(19)

Честно говоря, пока к самой кассе не пробовал подключиться. Сейчас просто ради примера пытаюсь отправить файл на смартфон. Смартфон в список устройств добавлен. Список поддерживаемых устройств не нашел, но есть свойство GUID службы.
Прикрепленные файлы:
+
21. papami 55 28.09.20 10:47 Сейчас в теме
(20)
Пробуйте позвонить. Рабочий пример на C#
String deviceAddr = "28:BE:03:9A:B3:45";
BluetoothAddress addr = BluetoothAddress.Parse(deviceAddr);
BluetoothEndPoint rep = new BluetoothEndPoint(addr, BluetoothService.Handsfree);

BluetoothClient cli = new BluetoothClient();
cli.Connect(rep);
Stream peerStream = cli.GetStream();
String dialCmd1 = "AT+CMER\r";
String dialCmd2 = "AT+CIND=?\r";
String dialCmd3 = "AT+BRSF=\r";
String dialCmd4 = "ATD "+callNumber.Text+";\r";

Byte[] dcB = System.Text.Encoding.ASCII.GetBytes(dialCmd1);
peerStream.Write(dcB, 0, dcB.Length);

Byte[] sRes = new Byte[200];
peerStream.Read(sRes, 0, 199);

dcB = System.Text.Encoding.ASCII.GetBytes(dialCmd2);
peerStream.Write(dcB, 0, dcB.Length);

peerStream.Read(sRes, 0, 199);

dcB = System.Text.Encoding.ASCII.GetBytes(dialCmd3);
peerStream.Write(dcB, 0, dcB.Length);

peerStream.Read(sRes, 0, 199);

sRes = new Byte[200];
dcB = System.Text.Encoding.ASCII.GetBytes(dialCmd4);
peerStream.Write(dcB, 0, dcB.Length);

peerStream.Read(sRes, 0, 199);

peerStream.Close();
cli.Close();
KamranV21; +1
23. papami 55 28.09.20 17:36 Сейчас в теме
(20) во так список служб выглядит к телефону
Прикрепленные файлы:
+
12. muskul 24.09.20 02:30 Сейчас в теме
купить какую то фигню за копье и потом потратить кучу времени и сил что бы все это настроить. Купили бы тогда лучше эватор (или в аренду взяли бы) там хотя бы все интеграции за 300 р в месяц работают как по маслу.
+
13. papami 55 24.09.20 08:45 Сейчас в теме
(12)
Слишком мало инфы, чтобы делать такие выводы) Может там планируется инсталляция 3000 штук в какой-то сети. Тогда и копье не копье и 300 р будет не 300 р.
+
16. muskul 24.09.20 10:30 Сейчас в теме
(13)Я просто еще от вики принта не отошел )
+
15. antonal123 24.09.20 09:52 Сейчас в теме
Может скажу глупость, но, можно расковырять атоловские dll, у 11 есть функционал связи по синезубу, если конечно не боитесь низкоуровневого программирования. И приспособить этот функционал под Ваше железо.
+
17. jasperss 12 24.09.20 13:42 Сейчас в теме
А может есть смысл настроить обмен с приложением?
Если будет использоваться как POS то поставить приложение типа 1с:Мобильная касса и настроить обмен между приложениями.
Или вы планируете использовать как регистратор? И большой встает вопрос связи с ОФД, если таковая вообще будет
+
22. MadDAD 152 28.09.20 15:37 Сейчас в теме
Нужно выяснить какие сервисы предоставляет оборудование по Блютузу.
(Можно например под Linux воспользоваться утилитой sdptool)

С большой долей вероятности это будет эмуляция COM-порта (SPP профиль).
Тогда нужно на ПК создать виртуальный BT-COM-порт и работать через него как через обычный COM-порт.
Скорее всего компоненты на C# будет достаточно
+
25. KamranV21 124 10.11.20 15:34 Сейчас в теме
(24) Добрый день. Спасибо большое. Только вот одна проблема вышла с асинхронным методом. Можете помочь?

Stream.ReadAsync(Response, 0, Response.GetLength()).Result


Я вызываю метод потока ReadAsync. Вроде, все работает - я получаю результат выполнения. Но дело в том, что по окончании исполнения массив "Response" должен быть заполнен прочитанными данными, однако он остается пуст.

Самое интересное, что если я прохожу отладкой через эту строку кода, то массив заполняется - все отрабатывает на ура. А без отладки остается пустым :(

Пробовал и ПолучитьАсинхронныйВыполнитель, и Task.WaitAll, но пока безрезультатно.
+
26. Serginio 938 10.11.20 15:58 Сейчас в теме
Скорее всего Stream.ReadAsync читает не полный поток

Правилнее будет в цикле

private static byte[] GetByteArrayFromStream(NetworkStream ns, int Length)
        {
            byte[] result = new byte[Length];
            int ReadBytes = 0;
            while (Length > ReadBytes)
            {
                ReadBytes += ns.Read(result, ReadBytes, Length - ReadBytes);
            }

            return result;
        }
Показать
+
27. KamranV21 124 10.11.20 16:05 Сейчас в теме
(26)
В цикле я тоже пробовал, но тут другая проблема выходит: точный размер ответа я не знаю, а когда Read (или ReadAsync, не принципиально для задачи) уже нечего возвращать, то поток просто зависает в ожидании данных.
+
29. KamranV21 124 25.01.21 18:07 Сейчас в теме
(28)
и чанками отправляется то попробуй


Добрый вечер! Сорри за беспокойство, но очень нужна помощь. В личку, к сожалению, не получается написать, поэтому пишу здесь.

Как можно в 1С сделать нечто подобное, а именно STX и EXT? Буду премного благодарен, если сможете чем-то помочь.

private byte[] STX = new byte[] { 0x02 };
private byte[] EXT = new byte[] { 0x03 };
...
    byte[] bytes = System.Text.Encoding.ASCII.GetBytes(richTextBoxSend.Text);
    myserial.Write(STX, 0 , 1);
    myserial.Write(bytes, 0, bytes.Length);
    myserial.Write(ETX, 0, 1);
Показать
+
30. Serginio 938 25.01.21 23:52 Сейчас в теме
Н здесь .NET(C#) для 1С. Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия

Есть пример работы с Com портом. Правда там больше для получения данных
https://infostart.ru/1c/articles/417830/

Ну и почитай
Использование классов .Net в 1С для новичков
https://infostart.ru/1c/articles/448668/

Исходники лежат здесь
https://ru.stackoverflow.com/questions/527763/%d0%9a%d0%b0%d0%ba-%d0%b2%d1%8b%d0%b7%d0%b2%d0%b0%d1%82%d1%8c-%d0%bc%d0%b5%d1%82%d0%be%d0%b4-%d0%b8%d0%b7-c-%d0%b2-1%d0%a1/527802#527802
KamranV21; +1
31. Serginio 938 26.01.21 10:19 Сейчас в теме
Да при работе с массивами байт можно использовать COMSafeArray
мас=Новый COMSafeArray("VT_UI1",1); 
мас.SetValue(0,2);


Он преобразуется к byte[] { 0x02 };
KamranV21; +1
32. KamranV21 124 26.01.21 12:45 Сейчас в теме
(31)
Он преобразуется к byte[] { 0x0


Спасибо большое. Так и сделал: 2 - для начала текста, 3 - для его окончания.
+
33. user967647 19.09.21 20:18 Сейчас в теме
(32)

Привет всем.

Камран салам.Получилось ли у тебя подключить кассу Verifone x990?
+
Внимание! Тема сдана в архив

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