История началась с того, что наша маленькая, но гордая компания решила создать приложение для собственных логистических нужд. Обсудив нюансы работы и обозначив конкретные цели, я приступил к реализации. Спустя некоторое время была написана первая версия java приложения и отдана на растерзание тестирование логистам и сотрудникам склада. Более года все шло хорошо, баги успешно создавались и фиксились, функционал приложения постоянно расширялся и совершенствовался, автоматизируя все больше процессов, пока мы не столкнулись с необходимостью использования фискального принтера Posnet Temo HS FV Ej.
Первая проблема возникла при попытке подключить принтер к MacOS. Система выбрасывала ошибку «Error opening device» и упорно отказывалась работать с принтером. Как и всякий уважающий себя программист, перед которым возникла сложная задача, прежде, чем углубиться в документацию – я загуглил в надежде найти подсказку или решение. Но поисковик выдавал бесполезные результаты.
Я не стал унывать, поскольку компания Posnet имеет службу поддержки. А раз она есть, значит мне помогут, наивно полагал подумал я, и написал им письмо детально описав проблему. Немного потянув время, мне все же отписали:
«Unfortunately because of complexity in MacOS (in managing devices) we are unable to help you with creating connection with our device.
Just as a remainder, there is a possibility that you can connect with Temo HS by Bluetooth port — of course if your Temo has a proper bluetooth module installed.
It isn't much but that's all I can currently help you with.»
Итак, у нас было 2 дня, потраченных на поиск готовых решений и переписку с сапортом, крайне запутанная документация с ошибками в примерах, один программист и проблема, которая оставалась не решенной. Не то чтобы это все тормозило работу нашей компании, но раз начал автоматизировать процессы, то иди в этом до конца. Единственное, что меня беспокоило – это С++. Но, после некоторого копания в коде, я нашел спасительный комментарий разработчика, который гласил, что принтер не будет работать с Linux или MacOS, пока включена опция зарядки через usb. Но проблема не возникнет, если использовать Windows. Остается загадкой, почему столь ценная информация не была включена в документацию, но это действительно помогло.
Вторая проблема выявилась при попытке собрать проект для печати с Windows. Код не компилился, поскольку сборка проекта была заточена под:
— VisualC++ .NET 2003;
— Borland C++ Builder 4;
— Delphi 7;
— Visual Basic for Applications (MS Excel).
Опыта работы с С++ у меня было не много, а дедлайн приближался, поэтому было решено работать напрямую с Serial/Com портом используя библиотеку nrjavaserial, которая являет собой fork RXTX. Основные преимущества – более стабильная работа, в сравнении с RXTX, а так же то, что все native библиотеки запакованы в один jar-архив.
Имплементировав протокол передачи данных, мне все же удалось упешно распечатать тестовые чеки с как Windows, так и с MacOS системы. Описанная проблема достаточно специфична, но надеюсь, что мое решение сможет помочь людям, которые окажутся в аналогичной ситуации. Особенно, учитывая то, что большинство програм, для работы с фискальными принтерами, расчитаны исключительно на Windows.
Ссылка на библиотеку:NeuronRobotics/nrjavaserial
Автор: Леонид Якубович