Документація розробника

Архітектура

З точки зору веб-додатку, облікова система базується на архітектурі, яка визначається фреймворком Zippy. Вона складається з двох базових частин - ядра, з загальними сторінками                         і функціоналом (користувачі, управління системою і т.д.), і власне                         ERP частини куди входять об'єкти метаданих (документи, довідники, звіти) реалізують основну бізнес логіку.                         Також передбачено підключення будь-яких додаткових модулів по аналогії з ZippyCMS.

Основа облікової системи - об'єкти метаданих - довідники, документи, звіти, журнали.                         Об'єкти спроектовані з мінімальною залежністю один від одного і доступні через загальне меню, яке будується                         динамічно, згідно зі списком об'єктів, що задається адміністатором.                         Це дозволяє незалежно модифікувати їх без зміни інших об'єктів і модулів системи.                         Алгоритми бізнес-логіки реалізуються безпосередньо на мові PHP.                         
Шаблони (бланки) друкованих форм документів і звітів виконані в чистому HTML,                         що дозволяє як друкувати їх безпосередньо, так і експортувати в Word, Excel або PDF, а також                         коригувати їх за допомогою звичайного текстового редактора.

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

Організація даних

Основні бізнес-сутності

ТМЦ товари, матеріали, продукція
Місця зберігання склади, магазини, МОЛ
Контрагенти постачальники, покупці
Документи первинні документи фіксують господарські операції
План рахунків бухгалтерські рахунки для синтетичного обліку
Грошові рахунки каса, банківські рахунки

У відповідності з архітектурою фреймворка, всі бізнес суті реалізовані класами, наслідуваними від Entity.

Структура даних інформаційної системи

Бухгалтерські проводки (таблиця account_entry) містять синтетичні рахунки дебету і кредиту а також суму. Така структура дозволяє легко отримувати залишки і обороти простим підсумовуванням на будь-який період. Кожен запис про проведення имет посилання на первинний документ, з яким пов'язана госпоперація.

Аналітичний облік ведеться на підставі руху матеріальних і грошових коштів, відповідно до господарських операцій.                         Система не зберігає початкові і поточні залишки за період (використовується повний перерахунок рухів).                         Це спрощує огранізації даних і дозволяє вводити і змінювати інформацію заднім числом, а також переднім, що дозволяє виконувати резервування товару і планування операцій.                         

Аналітичні дані зберігаються в одній таблиці entrylist , по суті таблиці фактів в ROLAP де вимірювання - бізнес суті.                         Кожен запис містить посилання на документ і на синтетичний рахунок з яким пов'язана аналітика.                         Проведення за синтетичними і аналітичними рахунками проводяться синхронно в методі Execute, відповідного первинного документа при його проведенні.                         У разі скасування документа записи видаляються.                         Дебет по аналітиці відбивається за сумами і кількостями, з знаком плюс, а кредит зі знаком мінус.                         
З кожним аналітичним записом (субконто в термінах 1С) пов'язаний синтетичний рахунок, але документи побудовані так що, наприклад, складський облік можна вести без знання і використання бухгалтерії. або                         використовувати синтетичні рахунки для управлінського обліку.                         Також аналітичні дані, як і дані, що посилаються на інші бізнес-суті,                         зберігаються в самому документі в упакованому вигляді. Подібна денормалізація дозволяє уникнути перехресних посилань                         і "історії" атрибутів - документ зберігає всі оперативні дані.

Складський облік ведеться по партіях. Партія - той же товар за тією ж обліковою                         ціною (ціна надходження) незалежно від постачальника. Записи про рухи на складі зберігаються в таблиці store_stock де крім посилання на склад і ТМЦ вказана облікова ціна (партія) і відпускна ціна (для роздробу).

Структура основних об'єктів

Довідники

Елементи довідників - об'єкти, що знаходяться в просторі імен ZippyERP \ ERP \ Entity . Об'єкти призначені для зберігання довідкових бізнес-сутностей.
Для редагування списків об'єктів призначені відповідні сторінки в просторі імен ZippyERP\ERP\Pages\Reference.

Звіти

Сторінки звітів знаходяться в просторі імен ZippyERP\ERP\Pages\Report. З кожним звітом пов'язана друкована форма, знаходиться в папці /templates/erp/printforms

Журнали

Журнали обьединяют об'єкти і бізнес-суті за типом використання. Наприклад - журнал документів, журнал звязків, журнал замовлень.
Сторінки журналів знаходяться в просторі імен ZippyERP\ERP\Pages\Register.

Документи

Для кожного типу документа реалізований клас в просторі імен ZippyERP\ERP\Entity\Doc, успадкований від базового класу Document. Клас документа реалізує бізнес логіку відповідно до типу госп. операції і забезпечує зберігання документа в БД. З кожним типом документа пов'язані сторінка редагування документа в просторі імен ZippyERP\ERP\Pages\Doc і шаблон друкованої формі в папці /templates/erp/printforms.

Кожен клас документа передбачає два методи: generateReport і ExecuteImpl .                         Метод generateReport призначений для заповнення друкованої форми даними документа.                         Метод Execute виконує зміну даних аналітичного обліку - фіксує рух матеріальних і грошових коштів                         а також, при необхідності може виконувати бухгалтерські звязки.                         За збереження документа в БД та інші загальні операції над усіма типами документів відповідає базовий клас Document .                         
Всі документи зберігаються в одній таблиці. Таблиця містить                         кілька загальних полів (наприклад, дати, номер документа) і текстове поле де зберігається деталізація документа у вигляді XML.                         Використання XML дозволяє, при необхідності, виконувати пошук за документами, орієнтуючись на XML теги,                         а також використовувати XPath. . Упаковку і розпаковування детальних даних документа виконує базовий клас.                         Для цього клас містить масиви $ headerdata і $ detaildata для шапки і табличної частини документа.                         Сторінка редагування документа повинна записувати атрибути в ці масиви.

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

            
 

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

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

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

  
            
                    

Всі об'єкти зареєстровані в таблиці метаданих на відповідній сторінці налаштувань.                          По таблиці метаданих автоматично формується меню.                         
У таблиці вказується тип, назва об'єкта, ім'я класу (простір імен обчислюється за типом), група (для другого рівня меню).

Приклад створення документа

Припустимо потрібно додати в систему документ Банківська виписка. Необхідно внести запис в метадані, створити                         сторінку редагування документа, клас-сутність для зберігання документа в БД і HTML шаблон друкованої форми.

Необхідна послідовність:
  1. Додаємо запис на сторінці метаданих з ім'ям класу BankStatemet.
  2. Створюємо в просторі імен App \ Entity \ Doc клас сутності BankStatemet наслідуваний від класу Document .
  3.                         
  4. перевизначити методи generateReport code> і ExecuteImpl code>.                             Метод ExecuteImpl виконує відповідні проводки на бухгалтерських рахунках і робить записи в таблиці аналітичного обліку.                             Метод generateReport звертається до генератора звітів, передаючи йому шаблон друкованої форми і дані з деталізації документа, створюючи на виході                             HTML файл із заповненим бланком для друку або експорту.
  5.                         
  6. Файл з класом суті копіюємо в каталог app / entity / doc /
  7.                         
  8. Створюємо сторінку редагування документа. Сторінка створюється з ім'ям класу BankStatement в просторі імен App \ Pages \ Doc як звичайна сторінка відповідно                              з архітектурою фреймворка Zippy. Файл з класом сторінки створюємо в каталозі / app / pages / doc шаблон сторінки в каталозі / templates / pages / doc
  9.                         
  10. Створюємо файл bankstatement.tml з друкарською формою в каталозі / templates / printforms ;

Документ банківської випискі з'явиться в головному меню і буде готовий до використання.