Схема потоков: прайс → заказ → ERP → склад → остатки → статистика.
Строки заказа сопоставляются с номенклатурой ERP по китайскому названию. Если позиция не найдена — строка пропускается, накладная остаётся черновиком: её правит менеджер.
Остаток = сумма всех движений moves по позиции и складу. Других источников остатка нет — и ERP, и склад, и кабинет читают одно представление v_stock.
| Операция | Где | Что пишется | Остаток |
|---|---|---|---|
| Приход (поставка) | Склад, ERP | moves.kind=in | + |
| Продажа / отгрузка | ERP, проведение накладной | moves.kind=out | − |
| Списание в брак | Склад | kind=writeoff | − |
| Перемещение между складами | Склад | kind=move, wh_id → wh_to | 0 |
| Инвентаризация | ERP, проведение накладной | kind=adjust | ± |
Склад не даёт уйти в минус: перед списанием проверяется текущий остаток. Продажа уменьшает остаток только в момент проведения, а не в момент черновика.
| Что | Как |
|---|---|
| Отдельные учётки | ERP → «Пользователи»: логин, пароль, роль admin / manager / staff, блокировка. Роль admin одна — управление справочниками и людьми. |
| Свои документы | Каждый черновик записан на автора (sales.user); менеджер видит свои накладные, админ — все. |
| Одновременная запись | SQLite в режиме WAL, busy_timeout 10 c: читатели не блокируют писателей, писатели встают в очередь и не падают с «database is locked». |
| Номера документов | XSCK-ГГГГММДД-00001; при совпадении номера вставка повторяется с новым номером (до 6 попыток) — гонки нет. |
| Двойное проведение | Проведение — одна транзакция BEGIN IMMEDIATE с условием approved=0. Второй менеджер получает «уже проведено», движения не дублируются. |
| История действий | Каждое действие пишется в audit с логином: кто провёл, кто списал, кто создал пользователя. |
Практика: 4 менеджера собирают заказы и черновики, проведение — одна точка (админ). Это исключает двойные списания и расхождение остатков без блокировок и ожиданий.
| Система | Адрес | Данные |
|---|---|---|
| Центр управления | hub.redbutton.beer | читает обе базы, ничего не меняет |
| ERP | erp2.redbutton.beer | bb_erp.db |
| Склад | stock.redbutton.beer | bb_erp.db · moves |
| Кабинет менеджера | manager.redbutton.beer | bb_erp.db · черновики |
| Прайс-лист | bbprice.redbutton.beer | bb_reg.db · orders |