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

1. KamranV21 29 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 29 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 29 23.09.20 11:48 Сейчас в теме
(5)

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

Где-то нашел, что для работы по Bluetooth можно воспользоваться winsock. Пока прорабатываю этот вариант.
8. THEBESTolo4b 10 23.09.20 11:54 Сейчас в теме
7. XAKEP 23.09.20 11:51 Сейчас в теме
9. KamranV21 29 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 29 24.09.20 09:28 Сейчас в теме
(11)
Спасибо, интересное предложение. Посмотрим, что получится.
18. KamranV21 29 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 29 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 29 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 29 10.11.20 16:05 Сейчас в теме
(26)
В цикле я тоже пробовал, но тут другая проблема выходит: точный размер ответа я не знаю, а когда Read (или ReadAsync, не принципиально для задачи) уже нечего возвращать, то поток просто зависает в ожидании данных.
29. KamranV21 29 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 29 26.01.21 12:45 Сейчас в теме
(31)
Он преобразуется к byte[] { 0x0


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

Привет всем.

Камран салам.Получилось ли у тебя подключить кассу Verifone x990?
Оставьте свое сообщение
Вакансии
Программист 1С
Казань
зарплата от 150 000 руб.
Полный день

Программист 1С:ERP
Москва
зарплата от 100 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 200 000 руб. до 300 000 руб.
Полный день

Программист 1С (удаленно)
Самара
зарплата от 230 000 руб. до 230 000 руб.
Полный день

Руководитель группы разработки 1С
Москва
зарплата от 250 000 руб. до 250 000 руб.
Полный день