编号序列

每个可读单据编号背后的按公司生成器——生产订单、变更单、付款等等。

每个 Carbon 单据都会获得一个,例如 J000001、CN-000001 或 PAY-2026-07-000001。按公司划分的为每种单据类型维护计数器。在设置 → 序列中,可以修改序列的前缀、计数器和位数。

Carbon 会原子地格式化并推进计数器,防止编号重复:

{prefix}{next + step, zero-padded to size}{suffix}
NOTE

编号保存在单据上,不会重新计算

单据创建后编号永不改变。调整序列只影响更改之后创建的单据,绝不会对已有单据重新编号。

字段

表单会随输入实时预览下一个编号。
字段类型
加在编号前的文本。可选;支持日期标记,因此 PAY-%{yyyy}-%{mm}- 会渲染为 PAY-2026-07-。
最后发放的值;下一个单据会得到 当前值 + 步长。可用它重启或快进编号。必须 ≥ 0。当某单据以符合本序列格式的更大编号保存时(作为自定义 ID 输入,或通过 API、AI 智能体提交),当前值会推进到该编号,确保它不会被再次发放。
补零宽度:位数 6 得到 000001。允许范围 1–20;大多数序列默认为 6。计数器超出位数时会完整输出,因此位数 6 在 1000000 时输出 1000000。
计数器每次递增的量。几乎总是 1;必须 ≥ 1。
加在编号后的文本。可选;日期标记与前缀相同。

日期标记

前缀和后缀可以嵌入当前日期——付款和日记账就是这样按年/月分区。标记在生成编号时插值,而不是保存时:%{yyyy}(2026)、%{yy}(26)、%{mm}(01–12)、%{ww}(ISO 周,01–53)、%{dd}(01–31),以及表示小时和秒的 %{hh}、%{ss}。

预置默认值

新公司会为每种带编号的单据类型预置一个序列:

单据类型table前缀示例
生产订单jobJJ000001
报价单quoteQQ000001
销售订单salesOrderSOSO000001
销售 RFQsalesRfqRFQRFQ000001
销售发票salesInvoiceARAR000001
采购订单purchaseOrderPOPO000001
采购发票purchaseInvoiceAPAP000001
采购 RFQpurchasingRfqPRFQPRFQ000001
供应商报价supplierQuoteSQSQ000001
收货单receiptRERE000001
发货单shipmentSHPSHP000001
仓库调拨warehouseTransferWTWT000001
库存调拨stockTransferSTST000001
拣货单pickingListPLPL000001
库存盘点inventoryCountICIC000001
变更通知changeOrderCN-CN-000001
问题(NCR)nonConformanceNCRNCR000001
来料检验inboundInspectionIIII000001
量具gaugeGG00001
维护派生产订单maintenanceDispatchMAINMAIN000001
客户customerCUSCUS000001
供应商supplierSUPSUP000001
固定资产fixedAssetFAFA000001
折旧运行depreciationRunDRDR000001
日记账分录journalEntryJE-%{yyyy}-%{mm}-JE-2026-07-000001
付款paymentPAY-%{yyyy}-%{mm}-PAY-2026-07-000001
贷项通知单creditMemoCR-%{yyyy}-%{mm}-CR-2026-07-000001
借项通知单debitMemoDR-%{yyyy}-%{mm}-DR-2026-07-000001

较早公司的前缀可能不同:上线后新增的一些序列用不同默认值回填(生产订单为 WO,变更通知从 ECO- 改为 CN- 前缀但不重编号现有记录)。无论哪种情况,都可在设置 → 序列中修改。

会计过账是这套机制最大的使用者:每次总账过账都会获取新的 journalEntry 编号,因此该序列默认带月份标记。序列按公司划分,因此同一集团内的两家公司即使共用科目表,也各自独立编号。日常使用这些编号的地方:生产订单、变更通知和付款。