起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 193|回复: 3

【结贴】项目函数库PROJECTUTILS中SetBillCode出错。[请求]

[复制链接]
发表于 2010-3-15 10:41:29 | 显示全部楼层 |阅读模式
项目函数库PROJECTUTILS:

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;

功能PROJECTPLANCHANGEWRITE2中窗体MAINFORM代码:

procedure TMAINFORM.dsbslaveBeforePost(DataSet: TDataSet);
var
  lDate : TDateTime;
begin
  lDate := DataSet.FieldByName('MonDate').AsdateTime;
  PROJECTUTILS.TPROJECTUTILS.SetBillCode(DataSet,'GHTD-','PROJECTPLANCHANGELIST2','ProjectCode','Y',lDate,3);
end;

本来应生成编号GHTD-2010-038,结果生成编号GHTD-2010-0-8,2009年的时候,没有此现象,2010年开始出现问题。
回复

使用道具 举报

发表于 2010-3-15 11:38:24 | 显示全部楼层
呵呵,楼主你设置断点看一下
lDate := DataSet.FieldByName('MonDate').AsdateTime;
  PROJECTUTILS.TPROJECTUTILS.SetBillCode(DataSet,'GHTD-','PROJECTPLANCHANGELIST2','ProjectCode','Y',lDate,3);
这两个,在2009年和2010年有啥区别,就知道了,应该是逻辑的问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-15 16:54:40 | 显示全部楼层
---------项目函数库中

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年出错
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-22 17:13:15 | 显示全部楼层
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;
-----------------------------------------------------------

问题已解决,就是原来2010年的编号数据有误,导致系统判断失误。

将2010年全部编号规整好了,就正常了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-9 23:52 , Processed in 0.041760 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表