Как известно, некоторое торговое оборудование в 1С под Linux использовать невозможно из-за отсутствия соответствующих драйверов, особенно это касается конфигураций, оставшихся на обычных формах.
У меня имеется клиент, который долго работал на связке 1С(несколько конф на обычных формах)+XUbuntu+NX+Wine@Etersoft, однако Wine@Etersoft перестал устраивать (не работают программные лицензии, проект заброшен и т.п.), однако перейти на native 1C linux-клиент не получалось, т.к. имелось несколько считывателей (ридеров) магнитных карт, которые без wine в 1С запускать не получалось.
Однако сегодня я докопался до рабочего варианта и это простой шелл-скрипт запускаемый из 1С!
Вот примерный вариант получения кода магнитной карты:
ТекстСкрипта = "#!/bin/bash
|rm /tmp/result
|stty -F /dev/ttyUSB0 raw
|stty -F /dev/ttyUSB0 -echo
|while read -rs -n 1 c && [[ $c != '?' ]]
|do
| echo ""$c""
|done < /dev/ttyUSB0 >> /tmp/result";
РаздРазделитель = "\n";
ИмяВремФайла = ПолучитьИмяВременногоФайла();
Скрипт = Новый ЗаписьТекста(ИмяВремФайла,,,,РаздРазделитель);
Скрипт.Записать(ТекстСкрипта);
Скрипт.Закрыть();
КомандаСистемы("mv "+ИмяВремФайла+" ~/scanscript");
КомандаСистемы("chmod +x ~/scanscript");
КомандаСистемы("~/scanscript");
Текст = Новый ЧтениеТекста("/tmp/result");
Результат = Текст.Прочитать();
Текст.Закрыть();
КомандаСистемы("rm ~/scanscript");
Результат = СтрЗаменить(Результат,Символы.ПС,"");
Сообщить(""+Результат);
Замечания :
- Используется /dev/ttyUSB0 - это VirtualCOM порт, так что думаю порядочное количество устройств можно так обработать
- КомандаСистемы("~/scanscript") ожидает ввода именно кода магнитной карты, который оканчивается на ? если у вас не так - она зависнет - правьте текст скрипта
- Новый ЗаписьТекста("~/scanscript") выдавал ошибку, поэтому пришлось заморочиться с mv
- КомандаСистемы ждет выполнения, причем и в управляемых формах, так что код должен работать и под упр. форм
- не ошибитесь с параметрами rm :)
- Скорее всего скрипт можно и оптимизировать, например не использовать -echo и посимвольный вывод, но в linux я не особо специалист, хотя именно знание того что в linux устройства могут быть обработаны через файлы и натолкнуло на эту идею
- ВАЖНО! Для работы с этим скриптом из 1С пользователь должен иметь права на чтение у файла /dev/ttyUSB0 (sudo o+r /dev/ttyUSB0) - для Debian-based дистрибутивов достаточно добавить пользователя в группу dialout