Вступление
В январе 2015 года исполняется 10 лет приложению Openbravo POS. За эти годы Openbravo POS(включая форки) стало лидером в мире СПО для автоматизации розничной торговли (POS, Point of Sale – торговая точка или более конкретно, рабочее место кассира). Данная статья предварительный итог того, что удалось и не удалось реализовать в проекте Openbravo POS за прошедшие 10 лет.
История имени
Отцом основателем, бессменным руководителем и практически единоличным коммитером проекта был Эдриан Ромеро из Испании. У проекта изначальное название с 2005 по 2007 год было Tina POS, но в августе 2007 года возник конфликт с этой торговой маркой и пришлось переименовать проект в Libre POS. В отличии от первого, второе название не продержалось и пол года, так как Эдриан перешёл работать в Openbravo и первая часть названия была «забрендирована», оставив от старого только «POS» на конце, что подчёркивало с этого момента принадлежность проекта к экосистеме данной ERP-системы в качестве дополнения в сфере розничной торговли. Также в феврале 2008 года вышла и первая версия Openbravo POS сразу за номером 2.00.
В это-же время и я, ища ERP-систему работающую под Linux, узнал о существовании проекта Openbravo. А приложение Openbravo POS стало отправной точкой в освоении исходного кода данного проекта. Начал я с перевода интерфейса на русский язык. Но в итоге не удержался, и в ходе локализации приложения для рынка стран бывшего СССР, уже к имеющемуся чековому принтеру, дисплею покупателя, сканеру, весам и терминалу сбора данных, добавил поддержку кассового аппарата, принтера этикеток, фискального регистратора и весов с печатью этикеток. За что через год, весной 2009 года, в Барселоне, получил Openbravo Community Awards, уже не как лучший локализатор, а как лучший в 2008 году разработчик Openbravo POS.
Энтерпрайз за прилавком
Для меня основным в Openbravo POS стало то, что в небольшом (на первый взгляд) десктоп приложении, скрывалась мощь полноценного энтерпрайз решения с возможностью подстройки под любые задачи автоматизации малого бизнеса. Это достигалось за счёт перечисленных ниже сильных сторон, которые были заложены в Openbravo POS практически изначально.
- Первое, это кросплатформенность. Здесь в 2008 году всё было очень просто, где запускалась Java SE 1.6, там приложение и работало.
- Подключение через JDBC практически к любой СУБД. Это могут быть, как встроенные системы HSQLDB, Apache Derby или реализованный уже в рамках моего проекта Firebird, так и полноценные серверные MySQL, PostgreSQL или Oracle.
- Удобный панельный интерфейс с настройкой через ресурсы хранимые в базе данных. А так как, ещё задолго до появления сенсорных экранов на мобильных устройствах, для POS сенсорное управление было де-факто стандартом, интерфейс Openbravo POS сразу был разработан для использования на тачскрин мониторах.
- Наличие возможности, всё в тех-же ресурсах, реализовывать шаблоны для печати на чековом принтере и скрипты для выполнения, без необходимости менять код самого приложения.
- Для построения отчётов в приложении изначально была интегрирована очень мощная библиотека JasperReports. Она по заложенному функционалу превосходила даже само вызывающее её приложение.
- Но наибольшей ценностью для меня в этом проекте стал открытый исходный код, который очень хорошо иллюстрировал возможности работы приложения с периферийным оборудованием. Достигалось это не только за счёт использования библиотек RXTX и JavaPOS, но и за счёт грамотного симбиоза бизнес-логики приложения и возможностей конкретного оборудования. В Openbravo POS всё можно сделать и без подключения торговой периферии, но тогда это будет очередная система учёта, которых даже в сфере OpenSource немало. И только после подключения чекового принтера, дисплея покупателя, сканера и весов, становится видна мощь скрытая в этой системе. Только тогда удаётся не просто вести учёт, а делать это с максимальной скоростью, а это для программного обеспечения рабочего места кассира основная задача.
Лебединая песня
В то-же время 2009 год стал и последним годом развития Openbravo POS, вышедшая в декабре версия 2.30 была последней, где были внесены большие изменения, в минорных версиях 2.30.1 и 2.30.2 была исправлена только пара багов и переделана логика расчёта налогов (появилась возможность задавать налоги на период времени). В версии Openbravo POS 2.30 было заложено несколько функций, которые и сейчас отличают её от других POS, как проприетарных, так и свободных.
Учёт по атрибутам
Каждой единице товара или услуги назначается параметр (характеристика), который определяет его потребительские свойства (размер, цвет и т.п.) или идентифицируют отдельные его единицы (номер партии, серийный номер и т. д.) В дальнейшем в разрезе этих атрибутов можно вести учёт и формировать отчёты.
Синхронизация Pentaho Data Integration
Для обмена данными с внешними системами было предложено использовать ETL решение от Pentaho, это позволило интегрировать программное обеспечение торговой точки в систему учёта уже внедрённую на предприятии. Для примера в релиз вошли схемы для загрузки в Openbravo POS справочников и выгрузки продаж через REST веб-интерфейс в Openbravo ERP.
Модуль для КПК
Уже тогда было понятно, что развивать только десктоп версию приложения невозможно. Внедряя POS приходится учитывать потребность заказчика в использовании мобильных устройств. Для решения этой задачи было предложено использовать Java сервлет подключенный вместе с десктоп приложением к единой базе данных. Для иллюстрации такого подхода в релиз Openbravo POS 2.30 входило основанное на фреймворке Struts 1 веб-приложение позволявшее официанту принимать заказы с КПК.
К сожалению в дальнейшем эти изменения в рамках Openbravo POS не получили развития и с 2010 года проект был заморожен, а в дальнейшем развитие шло только в рамках форков основанных на исходном коде Openbravo POS. Это было вызвано тем, что компания Openbravo отказалось от идеи использовать десктоп приложение в качестве клиента для ERP и решила делать на базе платформы Openbravo 3 онлайн веб-клиент, назвав его Openbravo Web POS. При этом разработчикам хоть и предоставляется исходный код Openbravo Web POS, но его распространение стало возможным только при подписке на профессиональную версию Openbravo 3. Также, кроме приложения для управления оборудованием, разработку которого по прежнему ведёт Эдриан Ромеро, в данном проекте ничего о десктоп версии Openbravo POS не напоминает.
Время форков
Далее, с 2010 года, начал действовать механизм заложенный открытым кодом и лицензией GNU GPL, то есть начали появляться приложения основанные на исходном коде Openbravo POS. Ниже перечислены наиболее популярные из них.
- uniCenta POS. На сегодня это самый популярный форк, в нём не только реализуются всё время что-то новое, а его авторы стараются ещё собрать интересное из других ответвлений Openbravo POS и внедрить в код uniCenta POS. Список изменений по сравнению с оригинальной версией огромен, но из недостатков могу отметить, что до сих в него не были добавлены последние патчи из Openbravo POS 2.30.1 и 2.30.2.
- POSper. Не столь динамично развивающееся, но интересное с точки зрения разработки ответвление от Openbravo POS. Вместо Ant в нём для сборки используется Maven, что обеспечивает возможность постоянного обновления библиотек и отслеживание зависимостей.
- SmartPOS и Wanda POS. Сами по себе это два разных проекта, Wanda POS вышла в октябре 2014 и была уже основана на исходном коде uniCenta POS. Но их объединяет одно, они являются POS для iDempiere. iDempiere является следующим поколением ADempiere ERP. Она также как и Openbravo использует веб-интерфейс, но лидер проекта Red1 решил, что для неё всё-таки необходим десктоп клиент и выбрал в его качестве Openbravo POS. При этом, в свою очередь ADempiere и Openbravo являются форками Compiere, возникшими по причине нараставшей закрытости этой ERP. И теперь история уже на примере Openbravo повторяется, оставшейся открытой частью проекта Openbravo пользуются участники из параллельно развивающегося сообщества ADempiere.
- Русская версия Openbravo POS. Это уже мой проект, развивал я его с 2008 по 2012 год. Главное на что он был нацелен, это поддержка торгового оборудования используемого на территории бывшего СССР, в основном это заключалось в реализации работы с кириллицей, о чем я уже упоминал. Так как дальнейшее развитие в этом русле я для себя не видел, то принял решение развивать код в рамках ещё одного, но уже своего форка NORD POS. Главная его цель, это быть платформой для равёртывания компактных Java сервлет для мобильного веб, но об этом подробнее расскажу уже в другой статье.
Главное, что объединяет все ветви отпочковавшиеся от родительского проекта, это единая структура базы данных. Она не очень сложная, но благодаря неизменному ядру позволяет сохранять совместимость между любым из ответвлений, что иллюстрирует проект nordpos.mobi. В нём я продолжил развивать идею веб-модуля для КПК, а получившиеся в итоге Java-сервлеты можно подключать, как к оригинальной базе данных Openbravo POS, так и к базам данных форков построенных на ней.
Заключение
С 2008 года я являюсь один из самых активных участников этого проекта. Для меня эти 7 лет уж точно не прошли даром, я получил новые знания, новые знакомства и новые идеи. Разработкой СПО можно занимать не ради больших денег, а просто ради мысли, что твоя работа в будущем кому-то будет нужна, и если ты в итоге охладеешь к своему детищу, то всегда найдётся тот, кто её подхватит и будет развивать дальше, не забросив «на самом интересном месте».
Автор: Svininykh