Основи

За програмата MultiFlow: как работи, изисквания, база данни и сигурностЗа програмата MultiFlow: как работи, изисквания, база данни и сигурност

MultiFlow – Warehouse & POS е програма за обект, магазин и заведение: приемане, продажби с касов бон, фактури, наличности по обекти и партиди, клиенти и задължения, справки, сервиз, производство, маси, онлайн магазини и куриери.

От Di-Sklad до MultiFlow. Историята започва през 2009 г. с Di-Sklad – онлайн складова програма за магазини, складове и заведения. MultiFlow е нейното продължение: повече от 15 години нужди на реални клиенти и натрупан опит, събрани в една платформа, написана наново с днешна технология. Работи онлайн от всеки компютър, таблет и телефон в обекта – и в пълен офлайн режим: касата продава и издава касов бон дори при спрян интернет или сървър, а после се синхронизира сама.

Как работи

  • Един компютър е сървър. На него работи програмата - един-единствен .exe файл, в който е всичко нужно: екраните, базата данни, програмата за фискалните принтери (ErpNet.FP) и разпознаването на текст от фактури. Не се инсталират отделно Apache, MySQL, .NET и т.н.
  • Всички останали работят през браузъра - Chrome, Edge, Firefox, Safari, на компютър, таблет или телефон в същата мрежа: адресът е https://IP-на-сървъра:8443 (или http://...:8080). На тях не се инсталира нищо.
  • Касовият апарат е свързан към компютъра на касата (USB/COM). Програмата говори с него през ErpNet.FP, който тръгва сам заедно с нея.
  • Интернет не е задължителен за ежедневната работа - продажби, обект, бонове и фактури работят и без него. Интернет трябва само за: имейли, онлайн магазин, куриери, Търговския регистър и AI разчитането на фактури.

Базата данни

  • Данните са в SQLite - една от най-използваните бази в света (има я във всеки телефон и браузър). Не изисква отделен сървър и администриране.
  • Всичко е в папката data до програмата:
    • sklad.db - самата база (продукти, документи, наличности, каса, история). До нея има и временни файлове sklad.db-wal и sklad.db-shm - те са част от базата, докато програмата работи.
    • files - снимките на продуктите и файловете от чата; tls - сертификатите за https; erpnetfp, tesseract - помощните програми (създават се сами).
  • Парите и количествата се пазят като цели числа (центове, хилядни) - няма грешки от закръгляне.
  • Нищо важно не се изтрива и не се презаписва. Наличностите се менят само с движения, касата - с записи, а грешен документ се поправя с нов (връщане, сторно, корекция). Затова историята винаги може да се провери: кой, кога, какво.

Минимални системни изисквания

МинимумПрепоръчително
Сървър (компютърът с програмата)Windows 10 64-bit, 2-ядрен процесор, 4 GB RAM, 2 GB свободно място Windows 10/11 64-bit, 4 ядра, 8 GB RAM, SSD диск, UPS (непрекъсваемо захранване)
Каси и други работни меставсеки компютър, таблет или телефон със съвременен браузър Chrome или Edge; за голям тъч екран (POS) - 15" и повече
Мрежалокална мрежа (кабел или Wi-Fi)кабел за касите; сървърът с постоянен IP адрес
Касов апаратодобрен от НАП фискален принтер, който ErpNet.FP поддържа (Datecs, Tremol, Daisy, Eltrade, Incotex, ISL), свързан към компютъра на касата
Везна, четец, POS терминалпо желание: везна на COM/USB, четец за баркод/карти (работи като клавиатура), myPOS терминал

Един сървър спокойно обслужва 10-20 едновременни работни места. Сървърът може да е и самият компютър на касата.

Колко ще порасне базата и ще се забави ли

Измерено с програмата: генерирани 500 клиента и 20 000 продажби (общо 90 000 реда, средно 4.5 реда на продажба), всяка с издадена фактура, плащане в брой или с карта, движение в обекта и касата.

КаквоКолко място
1 клиент0.3 KB
1 продажба с фактура (≈4.5 реда, движения, каса, копие на редовете във фактурата)2.7 KB
20 000 продажби с фактури≈ 57 MB
Малък обект - 50 продажби с фактура на ден≈ 50 MB на година, ≈ 0.5 GB за 10 години
Натоварен магазин - 300 продажби с фактура на ден≈ 300 MB на година, ≈ 3 GB за 10 години

Продажбите без фактура заемат по-малко (нямат копие на редовете във фактурата). Снимките на продуктите не са в базата, а в папката files. SQLite работи с бази от стотици гигабайти, така че 3 GB за 10 години не е проблем.

Компютърът на измерването: лаптоп с Intel Core i5-10210U (4 ядра, 1.6 GHz), 16 GB RAM, NVMe SSD диск, Windows 11 Pro - обикновен офис компютър. При 20 000 продажби нова продажба с 3 реда и плащане отнема ≈ 8 ms, фактура ≈ 3 ms, търсене на продукт ≈ 2 ms, справка „продажби по дни“ за целия период ≈ 32 ms, а пълен бекъп на базата (55 MB) ≈ 0.6 s. На по-стар компютър с HDD диск времената са няколко пъти по-големи, но пак в милисекунди.

Как да се четат числата: 1 ms (милисекунда) = една хилядна от секундата. Времето е за една продажба (или една справка), когато в базата вече има 20 000 продажби - касиерът не усеща разлика между първата продажба и продажба № 20 000. За проба тестът създаде всичките 20 000 продажби с фактури наведнъж за около 4 минути (≈ 12 ms на продажба с фактура) - това е изкуственото пълнене на базата, не чакане в работата. Преди оптимизацията същото отнемаше 30 минути, защото всяка следваща продажба ставаше малко по-бавна; сега времето не расте с базата.
  • Ежедневната работа не се забавя с годините - продажбата, търсенето, наличностите и разписките ползват индекси и четат само това, което им трябва; времето им не зависи от броя на старите продажби.
  • Справките за много години обработват повече редове - при 10 години натоварен магазин справка за целия период може да отнеме 1-2 секунди. Справките за месец или година остават мигновени.
  • Не трябва да се „орязва“ (изтриват стари данни) - и не бива: счетоводните документи се пазят 10 години по закон, а историята на наличностите е нужна, за да са верни количествата.
  • Бекъпът расте с базата: при 3 GB е около 30 секунди (програмата работи през това време; заявките изчакват секунди).
  • Ако някога се наложи (много голям обект след 10+ години): нова база от началото на годината с пренесени продукти, клиенти и наличности, а старата остава за справки. Това е изключение, не нужда.

Какво точно прави програмата при бекъпа

Всеки ден след часа от Настройки → Бекъп (проверява се на 10 минути; ако компютърът е бил изключен - при следващото пускане):

  1. Копие на базата (VACUUM INTO) в папката за бекъп, напр. multiflow-2026-10-26-2200.db. Копието е цялостно и „сгъстено“ - без празните места от изтрити чернови, затова е по-малко от самата база. Прави се и докато се работи.
  2. Чистене на старите копия - пазят се последните N (Настройки → Бекъп, по подразбиране 14), по-старите се трият.
  3. Обновяване на статистиката (PRAGMA optimize) - SQLite записва колко данни има във всяка таблица и индекс, за да избира най-бързия път при търсене. С годините данните се менят и статистиката се освежава.
  4. Прехвърляне на дневника (wal_checkpoint) - промените от деня се пренасят от временния файл sklad.db-wal в самата база и файлът се нулира, за да не расте.
  5. Проверка за повреди (quick_check) - бърза проверка на цялата база. Ако открие проблем (напр. след спиране на тока или повреден диск), управителят вижда червено известие на началната страница, а бекъпите от преди остават - от тях може да се възстанови.

Индексите SQLite поддържа сама при всяко записване - ръчно „индексиране“ или „дефрагментиране“ не трябва.

Справките не спират касите

Продажбите, приеманията и другите записи минават по една основна връзка към базата. Справките (меню Справки, износ в Excel) четат през отделни връзки само за четене: докато в офиса се прави годишна справка, касите във всички обекти продават без забавяне. Справката вижда всичко, записано до момента на пускането ѝ. Един сървър обслужва спокойно около 20 обекта с 50 каси; обектите се свързват по VPN, а отвън - през Cloudflare (виж Достъп отвън).

Колко заявки прави програмата и защита от претоварване

Всяко действие в браузъра (отваряне на страница, бутон, търсене) е заявка към сървъра. Базата е една и пише по една заявка наведнъж, затова програмата пази сървъра от задръстване - напр. от заседнал скрипт, устройство, което повтаря заявки, или чужд компютър в мрежата.

ДействиеКолко заявки
Импорт от Excel (продукти, клиенти) - колкото и редове да има файлът1 (целият файл се качва наведнъж; после страницата с резултата - под 10 общо)
Отваряне на страница1 + иконите и снимките (те не се броят)
Търсене докато пишеш (продажба, приемане)по 1 на клавиш - до 5-10 в секунда при бързо писане
Скенер за баркод1 на сканиране
Чат и значката в горната лента1 на 4-15 секунди (само ако има поне двама оператори с чат)
Синхронизация с онлайн магазините и eMAG, бекъп, имейливървят вътре в програмата - не се броят
Каса в режим каса1 на 15 секунди без връзка, синхронизация на 1 минута

Лимитите (далеч над нормалната работа):

  • 20 заявки в секунда от един компютър, с кратък изблик до 40 (отваряне на голяма страница). Над тях за 2-3 секунди излиза „Твърде много заявки за кратко време“, а в дневника (logs\multiflow-ГГГГ-ММ.log, по един файл на месец) - кой адрес е бил спрян.
  • Най-много 2 тежки заявки наведнъж от един компютър - справки, експорт в Excel, PDF, разпознаване на фактура. Третата чака да свърши някоя от тях („Вече се изготвят 2 справки...“).
  • Касите (режим каса) - отделен лимит по ключа на касата: 10 в секунда.
  • Не се броят: иконите, снимките, иконата в трея и всичко от самия сървър (браузър на компютъра със сървъра).

Другите защити: ограничен брой опити за парола (после временно заключване), разрешени IP адреси по оператор, пароли в неразчитаем вид (bcrypt), проверка, че формите идват от самата програма (не от чужд сайт), изход след бездействие, таван на размера на качваните файлове (32 MB) и на времето за една заявка.

Поддръжка

  • Бекъп: Настройки → Бекъп - включете дневния бекъп към друг диск (външен диск, мрежово устройство), не на същия. Програмата пази последните N копия. Веднъж месечно копирайте последния бекъп и извън обекта (облак, флашка вкъщи).
  • Възстановяване: спрете програмата, сложете копието на мястото на data\sklad.db (изтрийте sklad.db-wal и sklad.db-shm) и я пуснете отново. Виж темата „Бекъп и поддръжка“.
  • Обновяване: спрете програмата, сменете .exe файла с новия и я пуснете. Базата се обновява сама при старта (промените в нея се прилагат автоматично); данните остават. Преди да промени базата, новата версия прави копие в data\pre-update\ (пазят се последните 3). Ако след обновяване нещо не е наред, върнете старата версия на .exe и това копие (както при възстановяване).
  • Сертификатът за https се подновява сам; на нов компютър/телефон трябва веднъж да се инсталира (виж темата „HTTPS“).

На какво да внимавате

  • Не копирайте sklad.db докато програмата работи - копието може да е непълно. За копие ползвайте бекъпа.
  • Не дръжте базата в OneDrive, Dropbox, Google Drive или на мрежов/USB диск, от който се работи - синхронизирането по време на работа може да повреди базата. Бекъпите - да, могат да отиват там.
  • Не пускайте програмата два пъти с една и съща база (два сървъра към една папка data).
  • Внезапно спиране на тока рядко поврежда базата, но е най-честата причина за проблем - сложете UPS на сървъра.
  • Антивирусната програма: добавете папката на програмата като изключение, ако забавя работата или блокира ErpNet.FP.
  • Часовникът на сървъра трябва да е верен (дати на документите, касови бонове) - „Свери часа“ в Работни места сверява и касовия апарат.
  • Защитната стена на сървъра трябва да пропуска портовете 8080 и 8443 от локалната мрежа, за да влизат другите устройства.
  • Паролата на управителя - пазете я; при 3 грешни опита входът се спира за 5 минути и се праща имейл.

Дневник на програмата (лог)

Съобщенията на програмата (грешки, спрени опити за вход, връзка с касовия апарат) се пишат в папка logs до базата - по един файл на месец: multiflow-2026-10.log, multiflow-2026-11.log ... Пазят се последните 12 месеца, по-старите се трият сами, така че файловете не растат безкрайно. При инсталация: C:\ProgramData\MultiFlow\data\logs.

Лицензи на използвания код

Програмата използва библиотеки и ресурси с отворен код (Go, SQLite, Excelize, иконите Font Awesome Free, Tesseract OCR, libwebp (cwebp), ErpNet.FP и др.). Списъкът с лицензите им е във файла NOTICES.txt.