---------项目函数库中
static function TPROJECTUTILS.SetBillCode(DataSet : TDataSet ; ATitle,ATableName,AFieldName,ADateType : string; ADateTime : TDateTime; ALength : Integer) : Boolean;
var
lCode : string;
lCurrentCode : string;
begin
Result := False;
lCurrentCode := DataSet.FieldByName(AFieldName).AsString ;
if lCurrentCode <> '' then
begin
Result := True;
exit;
end;
Result := GetBillCode(DataSet,ATitle,ATableName,AFieldname, ADateType ,ADateTime ,ALength );
end;
static function TPROJECTUTILS.GetMaxBillNumber(ATitle,ATableName,AFieldName,ADateType : string; ADateTime : TDateTime; ALength : Integer) : string;
var
lMaxNoStr : string;
lMaxNumber : Integer;
lTitle : string;
lDateString : string;
lQuery : Business.Data.TQuery;
begin
Result := '';
lQuery := Business.Data.TQuery.Create(nil);
try
lQuery.Close;
// lDateString := SysUtils.Format('(FBillDate >=%s and FBillDate <= %s)', [SysUtils.QuotedStr(SysUtils.DateToStr(ADateTime)), SysUtils.QuotedStr(SysUtils.DateToStr(ADateTime))]);
lQuery.ConnectionString :='DataBaseURL=Biz:\OPERATION\OPERATIONDB.DATABASE';
if ADateType='D' then
Sysutils.DateTimeToString(lDateString,'YYYYMMDD',ADateTime);
if ADateType='M' then
Sysutils.DateTimeToString(lDateString,'YYYYMM',ADateTime);
if ADateType='Y' then
Sysutils.DateTimeToString(lDateString,'YYYY',ADateTime);
// lDateString := Sysutils.FormatDateTime('YYYYMMDD',ADateTime);
lQuery.CommandText := 'select '+AFieldName+' from '+ATableName+ ' where '+AFieldName+ ' like '''+ ATitle + lDateString+ '%'''+' order by '+AFieldName +' DESC';
lQuery.Open;
if lQuery.IsEmpty then
Result := StringUtils.Copy('000000000000',1, ALength -1 )+'1'
else
begin
lMaxNoStr := lQuery.FieldByName(AFieldName).AsString;
lMaxNoStr := StringUtils.Copy(lMaxNoStr,lMaxNoStr.Length-ALength+1,ALength);
lMaxNumber := SysUtils.StrToInt(lMaxNoStr) + 1;
lMaxNoStr := SysUtils.IntToStr(lMaxNumber);
lTitle := StringUtils.Copy('000000000000',1,ALength-lMaxNoStr.Length);
Result := lTitle+ lMaxNoStr;
end;
finally
lQuery.Free;
end;
end;
----------------------------------
逻辑关系有误,导致2009年,序号自动生成无误,而2010年出错 |