单据单号的自动生成算法

单据单号算法

1)单据的前缀

单据前缀是在单据编号或代码开头使用的特定字符组合,主要用于快速识别单据的类型、业务环节或所属部门,从而提升管理效率和数据检索速度。‌

常见单据前缀示例 不同业务领域的单据前缀命名规则有所差异,以下是一些常见示例:

‌生产管理‌:生产订单常以“mo”为前缀(如manufacturing order),成品入库单可能使用“fi”(finished goods inward)。‌ 

‌财务管理‌:付款申请单常用“pa”(payment application),收款确认单以“rc”(receipt confirmation)开头,费用报销单则可能以“er”(expense report)为前缀。‌ 

‌库存管理‌:库存调整单常以“ai”(adjustment inventory)为前缀,盘点单使用“pi”(physical inventory)。‌

采购与销售‌:采购订单可能以“po”表示,销售订单以“so”开头,入库单可能用“grn”,而应收款和应付款分别以“ar”和“ap”标识。‌

也有用汉字拼音简码作为单据前缀的:

CG(采购),KC(库存),XS(销售)。。。。。。

2)单号的自动生成算法

以采购订单为例:

function TCaiGouDingDan.CaiGouDanHao: string;
begin
  Result := 'PO';    //采购订单的前缀
  Result := Result + '-' + FDMemTable1.FieldByName('MenDianBianHao').Text; //门店号
  Result := Result + '-' + FormatDateTime('yyyymmdd', now); //年月日
  var
    sql: string := 'select count(*) from ' + TableName +
      ' where CaiGouDanHao like ' + QuotedStr(Result + '%');
  var
    qry: TFDMemTable := TFDMemTable.Create(nil);
  qry.Query(dbid, sql);
  var
    count: Integer := qry.Fields[0].AsInteger + 1; //采购订单的序号
  qry.Free;
  Result := Result + FormatDateTime('hhnnss', now);  //时分秒
  var
    no: string := count.ToString;
  while Length(no) < 4 do   //序号的长度统一4位
    no := '0' + no;
  Result := Result + no;
end;

生成的采购订单的单号示例:PO-8888-202512071036510004

之所以加入门店号,是为了用于连锁企业。

posted @ 2025-12-07 15:55  delphi中间件  阅读(16)  评论(0)    收藏  举报