ERP 匯入
解析在本機以 python-calamine 執行;NAS 端只以標準庫套用(決策 #15:每月底重匯 3 份)
每月重匯(決策 #15)
每月底重匯這 3 份即可:
進貨應付款帳款明細表.xls(材料實際單價,取價主來源)、
產品資料.xls(品項主檔)、庫存狀況.xls(庫存成本)。
匯入採 upsert 去重:以唯一鍵比對,分「新增 / 更新 / 略過」三態,重複匯出不會重複計價。
客戶自動新增規則:xls(
客戶資訊.xls)內出現的客戶,每次匯入都會比對,資料庫沒有的自動新增;
在「系統設定 › 新增/刪除客戶」建立的是 xls 裡沒有的客戶(標記為人工建立,無 ERP 編號),不會被匯入覆蓋。
10 份檔案與樣板
有效列數為 2026-09-14 實測值| 檔案 | 樣板類型 | 總列數 | 有效列數 | 唯一鍵(去重) | 目標 | 頻率 |
|---|---|---|---|---|---|---|
| 進貨應付款帳款明細表.xls | 報表式+續行 | 6,038 | 6,037 | 單號+品項+行序 | price_history(主) | 每月 |
| 產品資料.xls | 單表頭 | 15,373 | 3,843 | 產品編號 | items | 每月 |
| 庫存狀況.xls | 單表頭 | 3,595 | 3,594 | 產品編號+倉庫 | item_stock | 每月 |
| 客戶資訊.xls | 單表頭 | 2,705 | 679 | 客戶編號 | customers | 一次性 |
| 進貨廠商資料.xls | 單表頭 | 310 | 309 | 廠商編號 | vendors | 一次性 |
| 應付款明細表.xls | 單表頭 | 32,033 | 32,032 | 單據號碼+產品編號 | price_history(備援) | 一次性 |
| 應收帳款明細表.xls | 單表頭 | 44,884 | 44,883 | 單據號碼+產品編號 | sales_history | 一次性 |
| 銷貨憑單日報表.xls | 交錯式 | 129,543 | 87,214 | 單號+行號 | sales_history | 一次性 |
| 已收帳款明細.xls | 交錯式 | 8,061 | 2,018 | 收款單號 | payments_in | 一次性 |
| 已付帳款明細.xls | 交錯式 | 17,363 | 12,247 | 付款單號 | payments_out | 一次性 |
匯入批次紀錄
可整批回滾| 檔案 | 工作表 | 原始列數 | 解析後 | 時間 | 狀態 |
|---|
解析引擎(重要)
| 方案 | 結果 |
|---|---|
openpyxl | ❌ 只能讀 .xlsx |
xlrd 2.0.2 | 這批 ERP 檔全部回報 0 列(三種讀法皆同) |
python-calamine | ✅ 10 檔全通,40MB 檔 0.6 秒 |
續行陷阱:
虛擬科目:
進貨應付款帳款明細表 同一張單據的第 2 行以後,幣別/日期/單別/單號留空,
解析時必須向下填充,否則單價對不到單據。虛擬科目:
$- 補差額、PS 備註、D-UF001 運費 → 一律標為 virtual,禁止進 BOM 展開。