Основи
За програмата MultiFlow: как работи, изисквания, база данни и сигурност
MultiFlow – Warehouse & POS е програма за обект, магазин и заведение: приемане, продажби с касов бон, фактури, наличности по обекти и партиди, клиенти и задължения, справки, сервиз, производство, маси, онлайн магазини и куриери.
Как работи
- Един компютър е сървър. На него работи програмата - един-единствен .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 диск времената са няколко пъти по-големи, но пак в милисекунди.
- Ежедневната работа не се забавя с годините - продажбата, търсенето, наличностите и разписките ползват индекси и четат само това, което им трябва; времето им не зависи от броя на старите продажби.
- Справките за много години обработват повече редове - при 10 години натоварен магазин справка за целия период може да отнеме 1-2 секунди. Справките за месец или година остават мигновени.
- Не трябва да се „орязва“ (изтриват стари данни) - и не бива: счетоводните документи се пазят 10 години по закон, а историята на наличностите е нужна, за да са верни количествата.
- Бекъпът расте с базата: при 3 GB е около 30 секунди (програмата работи през това време; заявките изчакват секунди).
- Ако някога се наложи (много голям обект след 10+ години): нова база от началото на годината с пренесени продукти, клиенти и наличности, а старата остава за справки. Това е изключение, не нужда.
Какво точно прави програмата при бекъпа
Всеки ден след часа от Настройки → Бекъп (проверява се на 10 минути; ако компютърът е бил изключен - при следващото пускане):
- Копие на базата (
VACUUM INTO) в папката за бекъп, напр.multiflow-2026-10-26-2200.db. Копието е цялостно и „сгъстено“ - без празните места от изтрити чернови, затова е по-малко от самата база. Прави се и докато се работи. - Чистене на старите копия - пазят се последните N (Настройки → Бекъп, по подразбиране 14), по-старите се трият.
- Обновяване на статистиката (
PRAGMA optimize) - SQLite записва колко данни има във всяка таблица и индекс, за да избира най-бързия път при търсене. С годините данните се менят и статистиката се освежава. - Прехвърляне на дневника (
wal_checkpoint) - промените от деня се пренасят от временния файлsklad.db-walв самата база и файлът се нулира, за да не расте. - Проверка за повреди (
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.