Общие сведения

ZippyERP - учетная система, предназначена для автоматизации бизнеса небольших предприятий. Может быть использована как открытая и бесплатная альтернатива 1С и другим платным системам с закрытым кодом.

Цель разработки - создание платформы, которую можно расширять для любого бизнеса не изменяя ядро, структуру БД, системные классы.


Преимущества решения:

  • открытый код
  • вэб интерфейс, что позволяет менеджерам оперативно работать с мобильных устройств.
  • легкость расширения и настройки под любой бизнес и изменяющееся законодательство.
  • кроссплатформенность

Учетная система максимально ориентирована на разрабочиков, в отличие от систем ориентированных на пользователей и предоставляющих множество настроек и конструкторов, с которыми все равно приходится работать програмистам.

Планируемый функционал:

  • складской учет
  • бухгалтерский учет
  • управление персоналом.
  • торговля.
  • взаиморасчеты с контрагентами.
  • управление заказами и проектами.
  • элементы документооборота с разделением прав доступа
  • управленческий учет по методологии ТОС.
  • API для экспорта-импорта данных

Демонстрационная версия ERP находится на девелоперском сайте (вход admin admin).

Скриншоты

Архитектура

С точки зрения веб-приложения, учетная система базируется на архитектуре, определяемой фреймворком Zippy. Она состоит из двух базовых частей - ядра, с общими страницами и функционалом (пользователи, управление системой и т.д.), и собственно ERP части куда входят объекты метаданных (документы, справочники, отчеты) реализующие основную бизнес логику. Также предусмотренно подключение любых дополнительных модулей по аналогии с ZippyCMS.

Основа учетной системы - объекты метаданных - справочники, документы. отчеты, журналы. Объекты спроектированы с минимальной зависимостью друг от друга и доступны через общее меню, которое строится динамически, согласно списку объектов, задаваемому администатором. Это позволяет независимо модифицировать их без изменения остальных объектов и модулей системы. Алгоритмы бизнес-логики реализуются непосредственно на языке PHP.
Шаблоны (бланки) печатных форм документов и отчетов выполнены в чистом HTML, что позволяет как печатать их непосредственно так и экспортировать в Word, Excel или PDF, а также корректировать их с помощью обычного текстового редактора.
Еще одним объектом метаданных является пользовательская страница. Разработчик может создать собственную страницу (класс страницы и ее шаблон) которая появится в меню наряду с остальными метаобъектами.

Таким образом, разработка настройка и сопровождение решений на основе Zippy ERP не требует знаний специальных технологий и не зависит от какого либо производителя. Разработчики по аналогии с конструктором Lego могут легко создавать различные конфигурации (в терминологии 1С) под различные типы бизнеса, обмениваться реализацией отдельных объектов системы и печатными формами простым копированием файлов.

Организация данных и метаданных

Основные бизнес-сущности

ТМЦ товары, материалы, продукция
Места хранения склады, магазины, МОЛ
Физ. лица сотрудники и другие физ. лица
Контрагенты поставщики, покупатели
Документы первичные документы фиксирующие хозяйственные операции
План счетов бухгалтерские счета для синтетического учета
Денежные счета касса, банковские счета

В соответствии с архитектурой фреймворка, все бизнес сущности реализованы классами, наследованными от Entity.

Архитектура объектов метаданных

Основные объекты, на которых строится бизнес-логика системы - справочники, документы, журналы и отчеты. Наиболее сложным является документ. Все документы хранятся в одной таблице. Таблица содержит несколько общих полей (таких как дата, номер документа) и текстовое поле где хранится детализация документа в виде XML. Использование XML позволяет, при необходимости, выполнять поиск по документам, ориентируясь на XML теги а таксже использовать XPath.

Для каждого типа документа реализован класс, унаследованный от базового класса Document реализующий бизнес логику в соответствии с типом хоз. операции. Каждый класс документа переопределяет два метода: generateReport и ExecuteImpl. Метод generateReport предназначен для генерации печатной формы документа. Метод Execute выполняет изменение данных аналитического учета - фиксирует движение материальных и денежных средств а также, при необходимости может выполнять бухгалтерские проводки. Также с каждым типом документа связаны страница редактирования документа и шаблон печатной формы. За сохранение документа в БД и прочие общие операции над всеми типами документов отвечает базовый класс Document.

Описание структуры данных информационной системы

Аналитический учет ведется на основании движения материальных и денежных средств, в соответствии с хозяйственными операциями. Система не хранит начальные и текущие остатки за период (используется полный пересчет движений). Это упрощает огранизацию данных и позволяет вводить и изменять информацию задним числом а также передним, что позволяет выполнять резервирование товара и планирование операций.
  Аналитические данные хранятся в одной таблице, по сути таблице фактов в ROLAP где измерения - бизнес сущности. С каждой аналитической записью (субконто в терминах 1С) связан синтетический счет, но документы построены так что ,к примеру, складской учет можно вести без знания и использования бухгалтерии. либо использовать синтетические счета для управленческого учета. Также аналитические данные, как и данные, ссылающиеся на другие бизнес-сущности, хранятся в самом документе в упакованом виде. Подобная денормализация позволяет избежать перекрестных ссылок и "исторических" атрибутов - документ хранит все оперативные данные.

Бухгалтерские проводки содержат счета дебета и кредита а также сумму. Положительное значение означает оборот по дебету отрицательное - по кредиту. Такая структура позволяет легко получать остатки и обороты простым суммированием на любой период.

Складской учет ведется по партиям. Партия - тот же товар по той же учетной цене (цена поступления) независимо от поставщика.

Пример операции - оплата поставщику. Выполняется в методе Execute() при проведении документа (в данном случае банковская выписка).

            
 

        $acc = 63;
        if ($prepayment == 'true') {  //предоплата
            $acc = 371;
        }

        //проводка
        Entry::AddEntry($acc, 31, $amount, $this->document_id, $this->document_date);
        //аналитика
        $sc = new SubConto($this, $acc, $amount);
        $sc->setCustomer($customer_id);
        $sc->save();
        $sc = new SubConto($this, 31, 0 - $amount);
        $sc->setMoneyfund($bankaccount_id);
        $sc->save();

        if ($nds > 0) {   //НДС
            //проводка
            Entry::AddEntry(644, $acc, $nds, $this->document_id, $this->document_date);
            //аналитика
            $sc = new SubConto($this, $acc, 0 - $nds);
            $sc->setCustomer($customer_id);
            $sc->save();
        }

  
            
          

Описание модулей

Под модулями в данном контексте подразумевается логическое объединение объектов системы для выполнения определенного функционала. Разделение модулей условно. Модули отличаются только набором документов, отчетов и справочников которые создаются в системе единообразным способом.
Общими для всех модулей являются такие объекты как журнал документов, где находятся документы всех модулей и частей системы которые не выделены в отдельные модули (например кассовые операции). К каждому документу могут быть написаны коментарии, прикреплены внешние файлы а также указаны связанные документы.

Складской учет.

Учет поступления, выбытия, перемещения ТМЦ. Печать накладных, прайсов. Учет по нескольким местам хранения. Резервирование.

Контрагенты. Взаиморасчеты

Справочник контрагентов. Отчеты по взаиморасчетам.

Зарплата и управление персоналом.

Справочники сотрудников, подразделений, должностей. Начисление зарплаты, печать платежных ведомостей.

Управление заказами.

Журналы заказов покупателей и заказов поставшикам. Контроль выполнения и оплаты.

Управление проектами.

Создание и веденние журнала проектов. Разбиение проекта на задачи. Назначение задачам исполнителей, периода выполнения, приоритета. Генерация диаграммы Ганта, таймшитов исполнителей. Коменнтарии к проектам и задачам.

Торговля.

Торговая наценка, розница, суммовой учет.

Бухгалтерский учет.

План счетов, журнал бухгалтерских проводок, соответствующие отчеты (главная книга, шахматка.) Бух. учет ведется по синтетический счетам. Аналитических учет ведется на соответствующих регистрах каждого модуля. Бухгалтерские провдки выполняются первичными документами. При необходимости, бухгалтерский учет может быть проигнорирован или использоватся для управленческого учета.

Финансовый и управленческий учет.

Генерация соответствующих отчетов. Аналих и оценка по ТОС.

Ведение базы клиентов и контактов.

Контакты, коментарии, прикрепленные файлы, письма, почтовые рассылки, напоминалки и т.д.

Взаимодействие с внешним ПО.

API для обмена информацией с другими информационными системами. Например интернет-магазин может на основании заказа посетителя создавать первичный документ в журнале заказов. Также предусмотрен экспорт НН и регламентированых отчетов в ГНАУ формат XML для электронной отчетности.

Установка

Процес установки зависит от уровня пользователя.

Для IT специалистов:
1. Получить дистрибутив с GitHub репозитория.
2. Выполнить загрузку библиотек через Composer.
3. Выполнить SQL скрипты из папки DB. Сначала db.sql затем init.sql
4. Прописать конект к БД в config/config.ini.
5. Залогинится дефолтным пользователем admin admin.

Менее опытные разработчики могут скачать дистрибутив в сборе со всеми библиотеками и сразу перейти к пункту 3.

Пользователи, не обладающие навыками в конфигурировании сайтов, могут скачать программу - WAMP сервер с предустановленным веб сервером и сервером БД (для windows 7 и выше). Программа собрана на основе проекта Z-WAMP.

Конфигурирование

Редактирование списка метаданных

Список объектов редактируется администратором (скриншоты выше). Наиболее важным является поле имени класса. Именно по этому значению система находит классы сущностей, страницы редактирования и шаблоны печатных форм. Для добавления нового документа или отчета нужно только прописать объект в системе и скопировать в соответствующие каталоги файлы классов и шаблонов. таким образом расширение и обновление функционала производится без какого либо изменения в настройках, данных и коде остальных модулей.

Пример создания объекта

Допустим нужно добавить в систему документ Банковская выписка. Необходимо внести запись в метаданные, создать страницу редактирования документа, класс-сущность для хранения документа в БД и HTML шаблон печатной формы.

Необходимая последовательность:
  1. Добавляем запись на странице метаданных с именем класса BankStatemet.
  2. Создаем в пространстве имен ZippyERP\ERP\Entity\Doc класс сущности BankStatemet отнаследованный от класса Document.
  3. Переопределим методы generateReport и ExecuteImpl. Метод ExecuteImpl выполняет соответствующие проводки на бухгалтерских счетах и делает записи в таблице аналитического учета . Метод generateReport обращается к генератору отчетов, передавая ему шаблон печатной формы и данные из детализации документа, создавая на выходе HTML файл с заполненным бланком для печати или експорта.
  4. Файл с классом сущности копируем в каталог /erp/entity/doc/
  5. Создаем страницу редактирования документа. Страница создается с именем класса BankStatement в пространстве имен ZippyERP\ERP\Pages\Doc как обычная страница в соответствии с архитектурой фреймворка Zippy. Файл с классом страницы создаем в каталоге /erp/pages/doc шаблон страницы в каталоге /templates/erp/pages/doc
  6. Создаем файл bankstatement.tml с печатной формой в каталоге /templates/erp/printforms;

Документ банковская выписка появится в главном меню и будет готов к использованию. Добавление отчетов несколько проще - кроме регистрации в списке метаданных требует только создания страницы и печатной формы.