Разработка - "Рабочее место кассира" под LINUX. GPL

Источник: habrahabr
redeyser

Предыстория


Так сложилось, что работаю программистом/админом в розничной торговой сети. Работаю уже два года, до этого никогда не сталкивался с обслуживанием специализированных программ и техники, но разобрался со временем. Особенностью моей организации является то, что вкладываться в нормальную технику начальство не собирается категорически. То есть, модернизацией и близко не пахнет, а вот носиться на замену чего-то, вновь исдохшего приходится частенько. Кроме того, большинство торговых точек не обладают лицензией на установленную ОС Windows XP. На розничных точках стоит одна или две кассы на базе умирающих от старости компьютеров, таких же старых фискальных аппаратов Штрих-М ФРК, различных сканеров штрихкода (COM, USB,Keyboard) и весов METTLER TOLEDO. Из программного обеспечения изначально было только лицензионная (с ключом) 1С v7.7 "ШТРИХ-М Кассир". 

Внедряем Linux где это возможно


Помимо обязанностей - следить за кассами, на моих плечах был и офис и удаленный филиал со всеми 1С ками, железом (тоже не новым), серверами. И чего-то я с трудом всё это успевал обслуживать на первых порах. Честно признаться - я юниксофил, потому поспешил с внедрением linux. Постепенно удалось перевести офисных клиентов на Linux, и сразу стало легче дышать, компы перестали зарастать вирусами, оставалось только следить за железом да подбирать и устанавливать нужные программы. Основная работа клиентов продолжалась в Windows, но это был уже терминал на сервере, с ним проще. По возможности сервера я перевел тоже на Linux, оставив только один с windows server 2003.


Windows на кассе - лишняя работа админу.


На кассы частенько проникали вирусы с флэшек (музыка и игры переписывались постоянно) и операционку приходилось периодически менять. Конечно, на вновь установленных операционках делался запрет на подключение внешних носителей, но отказаться от пользователя- администратора не было возможности - программа "Штрих-М кассир" отказывалась работать адекватно. Местные хаккеры-продавцы постоянно ломали защиту и записывали вирусы, игры, не лицензионное ПО на рабочие компы! Не знаю, может мне не хватило упорства, чтобы устранить все эти неприятности, но возникла идея поставить linux и на кассы. Была проблема с драйверами на фискальный регистратор, спец программа для прогрузки весов хотела работать исключительно под windows (и никаких wine!), а также не было самой программы РМК (Рабочее место кассира).

ДЭНСИ-КАССА под LINUX


Пошарив в интернете, была найдена "ДЭНСИ-КАССА" Рабочее место кассира под linux. Программа стоит 1000р, что вполне вменяемо. Пробую ставить на ubuntu/debian, вроде бы работает. Проблему с прогрузкой весов решил через прогрузку по VPN с сервера, где установлен windows. Спустя полгода работы на ДЭНСИ-КАССЕ накопился определенный опыт. Меня не устраивало, что глючно работали новые клавиатурные сканера, причем именно из за самой программы. Сама программа тоже вываливалась, хотя, возможно я был не прав в отношении ее совместимости с ubuntu. От версии к версии в программе менялись концепции и приходилось подстраиваться под обновления. Разработчики заявили о свободном программном коде, но код этот не весь открытый, да и не достаточно свежий. Делать же свою ветку от ДЭНСИ-КАССЫ просто бессмысленное занятие, ведь работает она с закрытым драйвером ФРК.
Для меня GPL это значит, что проект должен быть полностью ОТКРЫТЫЙ, ПООЩРЯЮЩИЙ СОВМЕСТНУЮ РАЗРАБОТКУ. Тут был сугубо коммерческий проект с недружелюбной политикой совместного проектирования.
Не хочу сказать, что ребята плохо делают своё дело, но если бы они не охраняли так свою интеллектуальную собственность (как им кажется залог их коммерческого успеха), то развитие бы пошло куда более эффективно.

Касса под LINUX, основанная на python драйвере ШТРИХ-М GLP


На sourceforge нашелся gpl драйвер написанный на python неким Dmitry Shamov проект на sourceforge. Списался с автором, тот подтвердил - проект GPL, делай с ним что хочешь. Воодушевившись, я прикинул такую схему нового клиента:
управлять фискальным регистратором и базой данных будет демон, с которым можно общаться через сокет (даже простым telnet) по простенькому API. Это для того, чтобы иметь прямой доступ из сети до самого проблемного оборудования, а также чтобы была возможность разрабатывать любые виды клиентов и привязывать их к этому API. Таким образом, я как бы не навязываю никому интерфейса своего клиента, способа регистрации продаж и прочих моих личных воззрений на процесс регистрации продаж. К тому же сразу появляется возможность работать с одним фискальником нескольких клиентов, мне это не обязательно, но возможно кому-то окажется полезным. Базу данных я выбрал mysql, с ней проще. Для тестов можно использовать сокетного клиента направляющего потоком запросы из STDIN. Все это должно быть написано на питоне, его легче дорабатывать и понимать, к тому же он много платформенный. Самого клиента я решил сделать на WEB, то есть с помощью html+javascript+php. Разумеется для этого потребуется web server (apache2 опять-же проще). Данная структура, на мой взгляд проста для доработки, ответвления в проекте и позволяет получить доступ для администрирования кассы в виде web страницы, не прибегая к rdp,vnc,ssh (хотя это будет не лишнее)

Что получилось


Сейчас уже фаза тестирования, правда работы много и не удается протестировать все как следует. Вообще то, что получилось, мне понравилось. Работает быстро, дописал в драйвере программирование фискальника на предмет отрезки чека, технологического обнуления, открытия денежного ящика. Демон фрк делает выгрузки транзакций, загрузку прайс-листа и дисконтных карт в формате файлов ШТРИХ-М. Визуальный подбор товара, дисконтные карты, работает в режиме регистрации как с визуальных кнопок так и с клавиатуры. ОС взял debian 6, без гнома, просто установил IceWM, сделал автозапуск X сессии, добавил минимум программ, кроме обязательных (mysql, apache, php,...) установил ssh, openvpn, x11vnc, samba, pidgin (на свой jabber-server), простенький браузер. Все это дело развернул на флешку и прям на ней тестирую, так как предполагаю жесткий диск не использовать - дорогие они сейчас, а старые не надежны. Сама система занимает 1,4ГБ, так что даже на 2ГБ флешку войдет. Обмен с бэкофисом у меня был уже до этого реализован также через сокетного клиента, который только поправил немного. Особенности взаимодействия с бэкофисом: связь через модем или выделенку через VPN. Весы подключаются по сети посредством второй сетевой карты, порт для прогрузки весов пробрасывается фаерволом на кассе. Скоро собираюсь устанавливать на торговые точки. Свой проект я размещу на sourceforge, как только все протестирую. проект будет называться IceCash. Вообще, я видел и другие драйвера на sourceforge, к другим фискальным регистраторам, но для меня достаточно было реализовать функционал ШТРИХ-М ФРК.

Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=36692