Интеграция 1С и торгового оборудования через Bluetooth
Всем привет. Есть такая проблема: нужно настроить интеграцию между 1С и торговым оборудованием. Единственный доступный канал связи - Bluetooth. Подразумевается обмен сообщениями в формате JSON. Готового драйвера под это ТО, к сожалению, тоже нет.
Возможно, кто-то сталкивался с подобной задачей? Какие dll можно использовать? Или можно решить задачу через COM-порты? Буду признателен, если кто подтолкнет в правильном направлении.
Возможно, кто-то сталкивался с подобной задачей? Какие dll можно использовать? Или можно решить задачу через COM-порты? Буду признателен, если кто подтолкнет в правильном направлении.
По теме из базы знаний
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(11)
Добрый день. Последовал вашему совету и создал небольшую обработку на обычных формах для тестирования 32feet на 1С.
Удалось обнаружить устройства поблизости, но пока не получается к ним подключиться. В большинстве примеров на C# что мне удалось найти используется следующий вариант подключения:
Но на 1С при попытке подобного подключения вызывается исключение ("неизвестная ошибка").
Есть еще другой вариант, который используется на C#:
Но в моем случае Device.InstalledServices пуст, и получить первый элемент по индексу не получается.
Буду благодарен, если сможете чем-то помочь. На всякий случай прикрепил обработку к сообщению. Сборка на .NET хранится как макет.
Добрый день. Последовал вашему совету и создал небольшую обработку на обычных формах для тестирования 32feet на 1С.
Удалось обнаружить устройства поблизости, но пока не получается к ним подключиться. В большинстве примеров на C# что мне удалось найти используется следующий вариант подключения:
client.Connect(device.btDeviceInfo.DeviceAddress, BluetoothService.SerialPort)Но на 1С при попытке подобного подключения вызывается исключение ("неизвестная ошибка").
Есть еще другой вариант, который используется на C#:
client.Connect(Device.DeviceAddress, Device.InstalledServices[0])Но в моем случае Device.InstalledServices пуст, и получить первый элемент по индексу не получается.
Буду благодарен, если сможете чем-то помочь. На всякий случай прикрепил обработку к сообщению. Сборка на .NET хранится как макет.
Прикрепленные файлы:
InTheHand.epf
(18)
Нужно знать какие службы доступны через BT. Т.е. через что вы будете взаимодействовать со своей кассой.
Это должно быть описано в документации.
Кассу добавили в список BT-устройств операционки? Это обязательный пункт. У добавленных устройств в свойствах есть список поддерживаемых служб.
Нужно знать какие службы доступны через BT. Т.е. через что вы будете взаимодействовать со своей кассой.
Это должно быть описано в документации.
Кассу добавили в список BT-устройств операционки? Это обязательный пункт. У добавленных устройств в свойствах есть список поддерживаемых служб.
(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();
Пробуйте позвонить. Рабочий пример на 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();
А может есть смысл настроить обмен с приложением?
Если будет использоваться как POS то поставить приложение типа 1с:Мобильная касса и настроить обмен между приложениями.
Или вы планируете использовать как регистратор? И большой встает вопрос связи с ОФД, если таковая вообще будет
Если будет использоваться как POS то поставить приложение типа 1с:Мобильная касса и настроить обмен между приложениями.
Или вы планируете использовать как регистратор? И большой встает вопрос связи с ОФД, если таковая вообще будет
Нужно выяснить какие сервисы предоставляет оборудование по Блютузу.
(Можно например под Linux воспользоваться утилитой sdptool)
С большой долей вероятности это будет эмуляция COM-порта (SPP профиль).
Тогда нужно на ПК создать виртуальный BT-COM-порт и работать через него как через обычный COM-порт.
Скорее всего компоненты на C# будет достаточно
(Можно например под Linux воспользоваться утилитой sdptool)
С большой долей вероятности это будет эмуляция COM-порта (SPP профиль).
Тогда нужно на ПК создать виртуальный BT-COM-порт и работать через него как через обычный COM-порт.
Скорее всего компоненты на C# будет достаточно
(24) Добрый день. Спасибо большое. Только вот одна проблема вышла с асинхронным методом. Можете помочь?
Я вызываю метод потока ReadAsync. Вроде, все работает - я получаю результат выполнения. Но дело в том, что по окончании исполнения массив "Response" должен быть заполнен прочитанными данными, однако он остается пуст.
Самое интересное, что если я прохожу отладкой через эту строку кода, то массив заполняется - все отрабатывает на ура. А без отладки остается пустым :(
Пробовал и ПолучитьАсинхронныйВыполнитель, и Task.WaitAll, но пока безрезультатно.
Stream.ReadAsync(Response, 0, Response.GetLength()).ResultЯ вызываю метод потока ReadAsync. Вроде, все работает - я получаю результат выполнения. Но дело в том, что по окончании исполнения массив "Response" должен быть заполнен прочитанными данными, однако он остается пуст.
Самое интересное, что если я прохожу отладкой через эту строку кода, то массив заполняется - все отрабатывает на ура. А без отладки остается пустым :(
Пробовал и ПолучитьАсинхронныйВыполнитель, и Task.WaitAll, но пока безрезультатно.
Скорее всего 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;
} Показать
(28)
Добрый вечер! Сорри за беспокойство, но очень нужна помощь. В личку, к сожалению, не получается написать, поэтому пишу здесь.
Как можно в 1С сделать нечто подобное, а именно STX и EXT? Буду премного благодарен, если сможете чем-то помочь.
и чанками отправляется то попробуй
Добрый вечер! Сорри за беспокойство, но очень нужна помощь. В личку, к сожалению, не получается написать, поэтому пишу здесь.
Как можно в 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);
Показать
Н здесь .NET(C#) для 1С. Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия
Есть пример работы с Com портом. Правда там больше для получения данных
Ну и почитай
Использование классов .Net в 1С для новичков
Исходники лежат здесь
Есть пример работы с Com портом. Правда там больше для получения данных
Ну и почитай
Использование классов .Net в 1С для новичков
Исходники лежат здесь
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот