Около года назад мы выпустили открытую и бесплатную платформу для разработки бизнес-приложений lsFusion. В первую очередь, мы ориентировались на разработчиков, которые могут на ней быстро и легко создавать различные информационные системы. Тем не менее, разработка “с нуля” системы управления, даже небольшим бизнесом, остается достаточно трудоемким процессом.
По этой причине мы решили создать базовое решение с названием MyCompany, которое реализует основные бизнес-процессы малого бизнеса. Оно полностью бесплатно, выпускается под Apache лицензией, и ее исходники находятся на Github. Решение легко устанавливается и поддерживает российское законодательство.
В качестве системы управления базой данных используется PostgreSQL. На сервере решение устанавливается и запускается как Java приложение, состоящее из сервера приложений и веб-приложения под управлением Apache Tomcat. В качестве GUI может использоваться как веб-интерфейс, так и десктоп-клиент, запускающийся через Java Web Start.
Функционал
Демо-версию с заполненными данными можно посмотреть по адресу https://demo.lsfusion.org/mycompany-ru. Авторизация по указанной ссылке отключена.
В качестве основы была взята логика, заложенная в известном в мире решении — Odoo. К сожалению, далеко не все подходы, реализованные в нем, хорошо подходят для использования в российских реалиях. Поэтому часть процессов пришлось изменить в соответствии с собственным опытом и другими популярными приложениями. Несмотря на это, логика «MyCompany» гораздо ближе к мировым стандартам, чем к логике 1С. Также в ней имеется локализация на английский язык (с возможностью добавления любого другого языка).
На данный момент в решении отсутствует реализация регламентной отчетности (бухгалтерского учета) и расчета заработной платы. В этой нише на территории РФ исторически сильны позиции решений на платформе 1С, а бухгалтера — это очень консервативные пользователи. По этой причине на первом этапе предполагается выгрузка необходимых данных в систему бухгалтерского учета, а непосредственно решение используется для ведения управленческого учета.
«MyCompany» имеет модульную архитектуру и состоит из семи крупных блоков:
Обработка большинства документов в системе построено по принципу прохождения статусов. По достижению определенных статусов изменяются соответствующие данные в учете, а также могут добавляться дополнительные колонки и действия.
Справочники (Master Data)
В систему заложены основные справочники, необходимые для работы с контрагентами и номенклатурой товаров.
Контрагенты делятся на два вида: юридические и физические лица. Любой человек может быть привязан к организации, в которой он работает. Поддерживаются ведение нескольких собственных компаний.
В качестве номенклатуры могут выступать как товары, так и услуги. Они могут быть привязаны к категориям, которые образуют дерево динамической глубины. Для каждой категории можно задать, какие атрибуты могут и должны быть заданы для всей номенклатуры, входящей в нее. Также можно указать каким образом формировать общее наименование на основе значений атрибутов. Для любой номенклатуры можно задать ее разновидности.
Есть возможность автоматически загружать данные юридических лиц через API, предоставляемый DaData.
Склад (Inventory)
В этом блоке реализована логика складского учета с расчетом остатков по местам хранения. Места хранения могут иметь иерархическую структуру. Сотрудникам компании можно предоставлять доступ только к отдельным местам хранения.
Поддерживается расчет себестоимости остатков по фиксированной и средней себестоимости, а также по методу FIFO. Способ расчета можно выбирать разным в зависимости от категории товаров.
Основными пользователями этого модуля являются работники склада, которые оперируют исключительно количественными характеристиками.
Поддерживаются четыре основных вида документов :
- Приемка. Регистрирует приемку товара на склад. Поддерживает логику ожидаемого и принятого количества, а также статусы процесса приемки и размещения.
- Отгрузка. Отражает расход со склада и перемещение между складами. Кроме того, на определенном статусе резервирует товар на складе.
- Списание. Отражает списание товара со склада.
- Инвентаризация. Регистрирует обнаружение или потерю товара на складе. Инвентаризация может проводится целиком по месту хранения, выбранной категории или определенным товарам.
Реализован поштучный учет и интеграция с Честным знаком в части получения контрольных марок, передачи и получения документов в/из ГИС МТ.
Расчеты (Invoicing)
Этот блок реализует логику регистрации входящих и исходящих накладных и платежей. Поддерживается логика связи входящих и исходящих документов для расчета долгов по документу и контрагентам. Реализована возможность разнесения стоимости услуг на себестоимость товаров различными способами.
Поддерживаются четыре основных вида документов :
- Поступление. Регистрирует входящую накладную или акт выполненных работ на товары или услуги. На основании этого документа может автоматически или вручную создаваться документ приемки на склад.
- Реализация. Регистрирует исходящую накладную или акт выполненных работ на товары или услуги. На основании этого документа может автоматически или вручную создаваться документ отгрузки со склада.
- Входящие платежи. Отражает поступление денежных средств в кассу или на расчетный счет.
- Исходящие платежи. Отражает расход денежных средств из кассы или с расчетного счета.
Реализованы печатные формы УПД, ТОРГ-12 и ТОРГ-13.
Закупки (Purchase)
В блоке реализована логика заказов товара и услуг у поставщика. Поддерживается возможность регистрации прайс-листов поставщиков с последующей автоматической подстановкой цен в заказ.
Заказ проходит несколько статусов, в ходе которых он может автоматически отправляться поставщику по электронной почте. Подтвержденный заказ автоматически создает планируемое поступление товара, которое затем обрабатывается кладовщиком. После того, как товар принят, бухгалтером создается документ поступления на основе принятого количества.
Продажи (Sales)
В этом блоке реализован функционал регистрации заказов покупателей и формирования продажных цен.
Реализована возможность задавать несколько видов цен, которые затем привязываются к покупателям или типам заказов. Цены для каждого из видов задаются при помощи документов прайс-листов с различными периодами действий. Поддерживается формирование печатных форм прайс-листов и ценников.
Для различных видов цен можно задать скидки, которые будут автоматически или вручную рассчитываться при формировании заказов или документов реализации (в том числе и в POS).
Заказ покупателя также проходит несколько статусов с возможностью отправки покупателю подтверждения заказа. При этом автоматически создается документ на отгрузку товара, который в дальнейшем исполняется работником склада. Затем бухгалтер может создать документ реализации товара на основе отгруженного количества.
Розничная торговля (Retail)
В этом блоке реализован функционал по розничной торговле товарами и услугами.
Основным элементом пакета является форма POS, при помощи которой осуществляется розничная продажа и возврат товаров. Поддерживается возможность открытия и закрытия смен, внесения и изъятия денег. Реализована интеграция с фискальным регистратором АТОЛ через веб-сервер.
К системе можно подключать несколько касс, настроенных, как для одного, так и для разных мест продаж.
Все чеки проводятся как документы реализации, автоматически отражая все изменения в учете. Чеки можно создавать на основе заказов клиентов.
Производство (Manufacturing)
Этот блок реализует возможность учитывать производство продукции и списания сырья по ней с расчетом себестоимости.
Производство и списание сырья производится на основе производственных заказов. С их помощью можно регистрировать как производство, так и разборку (разукомплектацию) готовых изделий. Реализован автоматический расчет количества продукции, отходов и сырья на основе введенных спецификаций. Поддерживается создание спецификаций с учетом их “вложенности” друг в друга. Реализована возможность автоматического создания производственных заказов на основе заказов на продажу.
Установка
Для установки решения потребуется сервер под управлением операционной системы Linux или Windows с подключением к Интернет.
На нем должно быть минимум 2 гигабайта оперативной памяти, должен быть открыт порт 8080 для работы веб-клиента и порт 7652 для работы десктоп-клиента.
Linux
Рассмотрим установку MyCompany на примере команд для сервера под управлением CentOS 7, выполняемых с правами суперпользователя root.
Установить платформу lsFusion:
root@centos7: localectl set-locale LANG=ru_RU.UTF-8
root@centos7: source <(curl -s https://download.lsfusion.org/yum/install-lsfusion4)
Установить конфигурацию MyCompany:
root@centos7: yum install -y wget
root@centos7: wget http://download.lsfusion.org/solutions/mycompany-1.0.jar -O /var/lib/lsfusion/mycompany.jar
root@centos7: echo "logics.topModule = MyCompanyRu" >> /etc/lsfusion4-server/settings.properties
Перезапустить службу сервера lsFusion:
root@centos7: systemctl stop lsfusion4-server
root@centos7: systemctl start lsfusion4-server
Процесс запуска сервера приложений можно контролировать в логе /var/log/lsfusion4-server/start.log.
Windows
Скачать и запустить установщик сервера и клиента по ссылке: 64-битная ОС, 32-битная ОС.
Оставить все параметры по умолчанию. Если необходимо, то задать пароли.
Скачать последнюю версию MyCompany по ссылке и сохранить их в папку lib сервера. (по умолчанию — C:\Program Files\lsFusion 4\Server\lib)
Перезапустить службу сервера lsFusion.
Миграция данных
В решении существует простой механизм загрузки начальных данных через файлы в формате Excel. Для импорта справочников и других объектов достаточно зайти в Администрирование / Миграция. Для каждого вида справочника есть отдельная кнопка, которая формирует шаблон в формате XLSX, из которого затем можно загрузить данные из старой системы.
Доработка
Доработка логики работы решения осуществляется путем внесения изменений в исходный код на внутреннем языке платформы lsFusion. На рабочем сервере это можно сделать добавлением новых модулей путем копирования файлов в папку /var/lib/lsfusion.
Для быстрой и удобной разработки рекомендуется установить локально дистрибутив, который содержит в себе IntelliJ IDEA Community Edition вместе с предустановленным плагином, а также клиентское приложение в виде веб-сервера. При инсталляции устанавливать серверную часть не обязательно, так как нужные библиотеки будут автоматически загружены при помощи Maven. Затем в IDEA нужно запустить Get from Version Control / Github и ввести github.com/lsfusion-solutions/mycompany.git. После этого необходимо настроить запуск сервера через Edit configurations / + / lsFusion Server. После любых изменений, сделанных в исходный код, нужно перезапускать сервер приложений.
Для того, чтобы собрать jar-файл с учетом сделанных изменений, необходимо настроить сборку artifacts. Собранный artifact нужно скопировать в папку /var/lib/lsfusion вместо исходного jar-файла решения MyCompany.
Есть вариант подключать базовое решение MyCompany через Maven. Преимущество такого подхода заключается в том, что при обновлении версии базового решения, не будет необходимости делать слияние “пересекающихся” изменений исходного кода. Недостатком же является невозможность вносить изменения в исходный код базового решения.
Для подключения решения MyCompany через Maven нужно прописать в pom.xml следующие параметры:
<repositories> |
Для большей прозрачности доработок и исключения необходимости слияния кода рекомендуется новую функциональность добавлять в отдельные модули.
Пример:
Предположим, необходимо добавить в логику приложения возможность задавать кредитный лимит для покупателя.
Сначала создаем новый модуль DebtLimit:
MODULE DebtLimit; |
Затем заходим в пользовательский интерфейс под администратором и наводим мышкой на заголовок поля с долгом покупателя:
Видим, что вычисляемое свойство, которое рассчитывает долг, объявлено в модуле DebtPartner и называется debt с единственным параметром Контрагент(Partner). В новом модуле подключаем этот модуль, чтобы можно было обращаться к его свойствам:
REQUIRE DebtPartner; |
Создадим для контрагента новое свойство Кредитный лимит, в которое пользователь сможет вводить значение и помещаем его на форму редактирования контрагента partner в контейнер headerRight:
debtLimit 'Кредитный лимит' = DATA NUMERIC[14,2] (Partner); |
Наконец, добавляем ограничение, которое будет проверять, что долг в любой момент времени не должен превышать кредитный лимит по этому покупателю:
CONSTRAINT debt(Partner p) > debtLimit(p) MESSAGE 'По покупателю превышен кредитный лимит'; |
Осталось подключить этот модуль к проекту. Создадим новый модуль RogaIKopyta и пропишем его в файле settings.properties:
logics.topModule = RogaIKopyta |
При запуске сервера приложений будут подключены только те модули, от которых зависит (в том числе рекурсивно) модуль RogaIKopyta. Соответственно, к нему подключаем созданный нами модуль и MyCompanyRu из базового решения, в котором подключены все основные модули, а также российская локализация:
MODULE RogaIKopyta; |
Чтобы установить эти изменения на боевой сервер нужно либо собрать artifact, как описано выше, либо просто скопировать два файла с модулями RogaIKopyta и DebtLimit в папку /var/lib/lsfusion. Также надо не забыть поменять logics.topModule на рабочем сервере. После изменений нужно перезапустить службу сервера приложений.
Поддержка и развитие
Разработкой решения MyCompany занимается белорусская компания ЛюксСофт. Она существует более 20 лет и является лидером на рынке автоматизации крупной розничной торговли в Беларуси. Пять из восьми крупнейших розничных сетей Беларуси используют ее решение lsFusion ERP для автоматизации своей основной деятельности.
Благодаря использованию Java-технологий можно легко подключать различные готовые библиотеки для всевозможных интеграций с внешними системами и других низкоуровневых действий. Удобство разработки обеспечивается за счет использования одной из лучших IDE в мире — IntelliJ IDEA (Community Edition).
Основной целью разработки решения MyCompany является поддержка open source движения и популяризация платформы lsFusion. Финансирование решения идет за счет продаж и поддержки коммерческих систем на базе платформы в Беларуси.
На момент написания статьи были реализованы основные функции, необходимые на наш взгляд для минимального жизнеспособного продукта. Дальнейшая разработка будет осуществляться на основе потребностей пользователей. Пожелания по доработке решения можно создавать в виде Issues на Github. Также любые вопросы по решению можно задать в нашем Slack-канале.
Мы готовы реализовывать доработки и оказывать поддержку в том числе и на коммерческой основе. При этом мы будем всячески поддерживать желающих делать это собственными силами или оказывать услуги третьим лицам. Лицензия решения Apache и LGPL лицензия самой платформы даже позволяют разрабатывать и продавать на их основе решение под собственной торговой маркой.
Модульная архитектура дает возможность создавать отдельно подключаемые открытые и коммерческие модули, которые будут расширять основную функциональность решения. При помощи Maven можно создавать и подключать отдельные библиотеки с определенной логикой, а затем собирать из них готовое решение.
По нашему опыту разработка на lsFusion требует значительно меньше усилий и квалификации, чем разработка на той же платформе 1С. В ней не требуется писать вручную запросы, управлять клиент-серверным взаимодействием и многими другими техническими аспектами. Любой 1С-программист сможет очень быстро освоить разработку на платформе и оказывать услуги по поддержке решения MyCompany. В то же время, в нашей компании есть много людей, которые не имели никакого опыта разработки на чем-либо, и без проблем научились программировать на платформе lsFusion. Большинство продвинутых пользователей Excel, которые умеют строить в нем сложные формулы, а также SQL-программисты, смогут легко освоить базовые механизмы платформы для самостоятельной доработки решения MyCompany.
Бизнес, в свою очередь, сможет сэкономить на различных лицензиях (1С, Windows, Microsoft SQL Server), получив при этом быстрое и современное решение.
Заключение
Основные преимущества MyCompany перед аналогами на российском рынке:
- Бесплатность и открытость. Никаких лицензионных условий, подписок, ограничений по пользователям, платежей, HASP-ключей и прочих неудобств.
- Скорость и удобство работы. В отличие от решений на базе 1С, веб-интерфейс работает настолько быстро, что прекрасно работает даже в мобильном браузере. В документы можно добавлять десятки тысяч записей, и это не будет вызывать значительных замедлений при работе. В абсолютно каждую таблицу на любой форме встроено множество возможностей по аналитике и навигации.
- Расширяемость. Дорабатывать функционал можно простым добавлением в папку текстовых файлов на лаконичном высокоуровневом языке lsFusion, программировать на котором могут даже продвинутые бизнес-пользователи или любой разработчик 1С.