⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csh810_01.pas.svn-base

📁 这是一个功能齐全的,代码完整的ERP企业信息管理系统,现在上传和大家分享
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
    AName:=SYSDM.qryQuery.FieldByName('FName').Value;
    if ACurNm<>SYSDM.qryQuery.FieldByName('FCurNm').Value then
    begin
      ACurNm:=SYSDM.qryQuery.FieldByName('FCurNm').Value;
      SetParentData(ADataSet,ACurNm);  //设置顶层分类数据
    end;
    if not ADataSet.Locate('FCurNm;FNo',VarArrayOf([ACurNm,ANo]),[]) then
    begin
      ADataSet.Append;
      ADataSet.FieldByName('FCurNm').Value:=ACurNm;
      ADataSet.FieldByName('FNo').Value:=ANo;
      ADataSet.FieldByName('FParent').Value:=AParent;
      ADataSet.FieldByName('FName').Value:=AName;
      ADataSet.FieldByName('FDate1').Value:=0;
      ADataSet.FieldByName('FDate2').Value:=0;
      ADataSet.FieldByName('FAmount').Value:=0;
      ADataSet.FieldByName('FPercent').Value:=0;
      ADataSet.FieldByName('FLevel').Value:=0;
      ADataSet.FieldByName('FSeqNo').Value:=0;
      ADataSet.Post;
    end;
    case APeriod of
      1:AFieldName:='FDate1';
      2:AFieldName:='FDate2';
    end;
    ADataSet.Edit;
    ADataSet.FieldByName(AFieldName).Value:=AAmount;
    ADataSet.Post;
    if AType=0 then AIncome:=AIncome+AAmount else APayment:=APayment+AAmount;
    SYSDM.qryQuery.Next;
  end;
  if ADataSet.IsEmpty then Exit;
  ABalance:=AIncome-APayment;
  //更新收支余额、收入、支出的金额
  UpdateSumAmount(ADataSet,AFieldName,ABalance,AIncome,APayment);
end;

//比较分析--按部门
procedure GetDeptAmount(ADataSet:TADODataSet;AStartDate,AEndDate:TDateTime;APeriod:Integer);
var
  AType,AParent,ANo:Integer;
  AAmount,AIncome,APayment,ABalance:Double;
  ACurNm,AName,AFieldName:string;
begin
  AIncome:=0;
  APayment:=0;
  //按部门、收入支出类型分组求和
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select G100_003 as FCurNm, H100_001 as FNo, H100_002 as FName, 0 as FParent, C510A_005 as FType, sum(C510B_006) as FAmount from CSH510A,CSH510B, HRM100, CSH550, GLD100');
  SYSDM.qryQuery.SQL.Add('where C510B_009=H100_001 and C510A_004 not in (0,3) and C510A_003=C550_001 and C550_005=G100_001 and C510A_010>='+GetDateString(AStartDate)+' and C510A_010<='+GetDateString(AEndDate)+' and C510A_001=C510B_001');
  SYSDM.qryQuery.SQL.Add('group by G100_003, H100_001, H100_002, H100_003, C510A_005');
  SYSDM.qryQuery.Open;
  while not SYSDM.qryQuery.Eof do
  begin
    AType:=SYSDM.qryQuery.FieldByName('FType').AsInteger;
    AParent:=SYSDM.qryQuery.FieldByName('FParent').Value;
    if AParent=0 then AParent:=AType-1;
    AAmount:=SYSDM.qryQuery.FieldByName('FAmount').Value;
    ANo:=SYSDM.qryQuery.FieldByName('FNo').Value;
    AName:=SYSDM.qryQuery.FieldByName('FName').Value;
    if ACurNm<>SYSDM.qryQuery.FieldByName('FCurNm').Value then
    begin
      ACurNm:=SYSDM.qryQuery.FieldByName('FCurNm').Value;
      SetParentData(ADataSet,ACurNm);  //设置顶层分类数据
    end;
    if not ADataSet.Locate('FCurNm;FNo',VarArrayOf([ACurNm,ANo]),[]) then
    begin
      ADataSet.Append;
      ADataSet.FieldByName('FCurNm').Value:=ACurNm;
      ADataSet.FieldByName('FNo').Value:=ANo;
      ADataSet.FieldByName('FParent').Value:=AParent;
      ADataSet.FieldByName('FName').Value:=AName;
      ADataSet.FieldByName('FDate1').Value:=0;
      ADataSet.FieldByName('FDate2').Value:=0;
      ADataSet.FieldByName('FAmount').Value:=0;
      ADataSet.FieldByName('FPercent').Value:=0;
      ADataSet.FieldByName('FLevel').Value:=0;
      ADataSet.FieldByName('FSeqNo').Value:=0;
      ADataSet.Post;
    end;
    case APeriod of
      1:AFieldName:='FDate1';
      2:AFieldName:='FDate2';
    end;
    ADataSet.Edit;
    ADataSet.FieldByName(AFieldName).Value:=AAmount;
    ADataSet.Post;
    if AType=0 then AIncome:=AIncome+AAmount else APayment:=APayment+AAmount;
    SYSDM.qryQuery.Next;
  end;
  if ADataSet.IsEmpty then Exit;
  ABalance:=AIncome-APayment;
  //更新收支余额、收入、支出的金额
  UpdateSumAmount(ADataSet,AFieldName,ABalance,AIncome,APayment);
end;

//比较分析--按项目
procedure GetProjctAmount(ADataSet:TADODataSet;AStartDate,AEndDate:TDateTime;APeriod:Integer);
var
  AType,AParent,ANo:Integer;
  AAmount,AIncome,APayment,ABalance:Double;
  ACurNm,AName,AFieldName:string;
begin
  AIncome:=0;
  APayment:=0;
  //按项目分组求和
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select G100_003 as FCurNm, C150_001 as FNo, C150_002 as FName, C150_003 as FParent, C510A_005 as FType, sum(C510B_006) as FAmount from CSH510A,CSH510B,CSH150, CSH550, GLD100');
  SYSDM.qryQuery.SQL.Add('where C510B_008=C150_001 and C510A_004 not in (0,3) and C510A_003=C550_001 and C550_005=G100_001 and C510A_010>='+GetDateString(AStartDate)+' and C510A_010<='+GetDateString(AEndDate));
  SYSDM.qryQuery.SQL.Add('group by G100_003, C150_001, C150_002, C150_003, C510A_005');
  SYSDM.qryQuery.Open;
  while not SYSDM.qryQuery.Eof do
  begin
    AType:=SYSDM.qryQuery.FieldByName('FType').AsInteger;
    AParent:=SYSDM.qryQuery.FieldByName('FParent').Value;
    if AParent=0 then AParent:=AType-1;
    AAmount:=SYSDM.qryQuery.FieldByName('FAmount').Value;
    if AType=1 then AAmount:=AAmount*-1;
    ANo:=SYSDM.qryQuery.FieldByName('FNo').Value;
    AName:=SYSDM.qryQuery.FieldByName('FName').Value;
    ACurNm:=SYSDM.qryQuery.FieldByName('FCurNm').Value;
    if not ADataSet.Locate('FCurNm',ACurNm,[]) then
    begin
      ADataSet.Append;
      ADataSet.FieldByName('FCurNm').Value:=ACurNm;
      ADataSet.FieldByName('FNo').Value:=0;
      ADataSet.FieldByName('FParent').Value:=0;
      ADataSet.FieldByName('FName').Value:=GetDBString('COM00004008');  //所有项目
      ADataSet.FieldByName('FAmount').Value:=0;
      ADataSet.FieldByName('FLevel').Value:=0;
      ADataSet.FieldByName('FSeqNo').Value:=0;
      ADataSet.Post;
    end;
    if not ADataSet.Locate('FCurNm;FNo',VarArrayOf([ACurNm,ANo]),[]) then
    begin
      ADataSet.Append;
      ADataSet.FieldByName('FCurNm').Value:=ACurNm;
      ADataSet.FieldByName('FNo').Value:=ANo;
      ADataSet.FieldByName('FParent').Value:=AParent;
      ADataSet.FieldByName('FName').Value:=AName;
      ADataSet.FieldByName('FDate1').Value:=0;
      ADataSet.FieldByName('FDate2').Value:=0;
      ADataSet.FieldByName('FAmount').Value:=0;
      ADataSet.FieldByName('FPercent').Value:=0;
      ADataSet.FieldByName('FLevel').Value:=0;
      ADataSet.FieldByName('FSeqNo').Value:=0;
      ADataSet.Post;
    end;
    case APeriod of
      1:AFieldName:='FDate1';
      2:AFieldName:='FDate2';
    end;
    ADataSet.Edit;
    ADataSet.FieldByName(AFieldName).Value:=AAmount;
    ADataSet.Post;
    if AType=0 then AIncome:=AIncome+AAmount else APayment:=APayment+AAmount;
    SYSDM.qryQuery.Next;
  end;
  if ADataSet.IsEmpty then Exit;
  ABalance:=AIncome+APayment;
  ADataSet.Locate('FNo',0,[]);
  ADataSet.Edit;
  ADataSet.FieldByName(AFieldName).Value:=ABalance;
  ADataSet.FieldByName('FAmount').Value:=ADataSet.FieldByName('FDate1').Value-ADataSet.FieldByName('FDate2').Value;
  ADataSet.Post;
end;

procedure TCsh810_01Form.sbSearchClick(Sender: TObject);
var
  AStartDate1,AEndDate1,AStartDate2,AEndDate2:TDateTime;
begin
  inherited;
//查询
  if cbItem.Text='' then Exit;
  if cbType.Text='' then Exit;
  if (edtFromDate1.Text='') or (edtToDate1.Text='') then
  begin
    ShowMsg('UMS10000156');  //起始日期或结束日期不能为空
    if edtFromDate1.Text='' then edtFromDate1.SetFocus else edtToDate1.SetFocus;
    Abort;
  end;
  if (edtFromDate2.Text='') or (edtToDate2.Text='') then
  begin
    ShowMsg('UMS10000156');  //起始日期或结束日期不能为空
    if edtFromDate2.Text='' then edtFromDate2.SetFocus else edtToDate2.SetFocus;
    Abort;
  end;
  AStartDate1:=edtFromDate1.Date;
  AEndDate1:=edtToDate1.Date;
  AStartDate2:=edtFromDate2.Date;
  AEndDate2:=edtToDate2.Date;
  if AStartDate1>AEndDate1 then
  begin
    ShowMsg('UMS10000044');  //起始日期不能大于结束日期
    edtFromDate1.SetFocus;
    Abort;
  end;
  if AStartDate2>AEndDate2 then
  begin
    ShowMsg('UMS10000044');  //起始日期不能大于结束日期
    edtFromDate2.SetFocus;
    Abort;
  end;
  //建立临时表
  Screen.Cursor:=crHourGlass;
  ADODataSet1.DisableControls;
  ADODataSet1.Close;
  ADODataSet1.FieldDefs.Clear;
  ADODataSet1.FieldDefs.Add('FCurNm',ftString,30);
  ADODataSet1.FieldDefs.Add('FNo',ftInteger,0);
  ADODataSet1.FieldDefs.Add('FParent',ftInteger,0);
  ADODataSet1.FieldDefs.Add('FName',ftString,50);
  ADODataSet1.FieldDefs.Add('FDate1',ftCurrency,0);
  ADODataSet1.FieldDefs.Add('FDate2',ftCurrency,0);
  ADODataSet1.FieldDefs.Add('FAmount',ftCurrency,0);
  ADODataSet1.FieldDefs.Add('FPercent',ftFloat,0);
  ADODataSet1.FieldDefs.Add('FLevel',ftInteger,0);
  ADODataSet1.FieldDefs.Add('FSeqNo',ftInteger,0);
  ADODataSet1.CreateDataSet;
  case cbItem.ItemIndex of
    0:  //业务分类
      begin
        GetClassAmount(ADODataSet1,AStartDate1,AEndDate1,1);
        GetClassAmount(ADODataSet1,AStartDate2,AEndDate2,2);
        //插入上级业务分类
        GetParentClass(ADODataSet1);
      end;
    1:  //客户
      begin
        GetCustAmount(ADODataSet1,AStartDate1,AEndDate1,1);
        GetCustAmount(ADODataSet1,AStartDate2,AEndDate2,2);
      end;
    2:  //部门
      begin
        GetDeptAmount(ADODataSet1,AStartDate1,AEndDate1,1);
        GetDeptAmount(ADODataSet1,AStartDate2,AEndDate2,2);
      end;
    3:  //项目
      begin
        GetProjctAmount(ADODataSet1,AStartDate1,AEndDate1,1);
        GetProjctAmount(ADODataSet1,AStartDate2,AEndDate2,2);
        //插入上级项目
        GetParentProject(ADODataSet1);  //取得上级项目
      end;
  end;
  //计算增长额、增长率
  ADODataSet1.First;
  while not ADODataSet1.Eof do
  begin
    ADODataSet1.Edit;
    ADODataSet1.FieldByName('FAmount').Value:=ADODataSet1.FieldByName('FDate2').Value-ADODataSet1.FieldByName('FDate1').Value;
    if ADODataSet1.FieldByName('FDate1').Value<>0 then
      ADODataSet1.FieldByName('FPercent').Value:=ADODataSet1.FieldByName('FAmount').Value/ADODataSet1.FieldByName('FDate1').Value*100
    else
      ADODataSet1.FieldByName('FPercent').Value:=0;
    ADODataSet1.Post;
    ADODataSet1.Next;
  end;
  ADODataSet1.First;
  ADODataSet1.Next;
  ADODataSet1.EnableControls;
  DBChart1.RefreshData;
  Screen.Cursor:=crDefault;
end;

procedure TCsh810_01Form.ReportGetValue(const ParName: String;
  var ParValue: Variant);
begin
  inherited;
  if ParName='CURNM' then ParValue:=GetDBString('CSH81001007')  //'币别'
  else if ParName='TYPNM' then ParValue:=GetDBString('CSH81001008')  //'名称'
  else if ParName='FRDAT' then ParValue:=GetDBString('CSH81001003')  //'期段1'
  else if ParName='TODAT' then ParValue:=GetDBString('CSH81001005')  //'期段2'
  else if ParName='AMOUNT' then ParValue:=GetDBString('CSH81001009')  //'增长额'
  else if ParName='PERCENT' then ParValue:=GetDBString('CSH81001010')  //'增长率'
  else if ParName='ITEM' then ParValue:=GetDBString('CSH81001018')+cbItem.Text  //'项目:'
  else if ParName='TYPE' then ParValue:=GetDBString('CSH81001019')+cbType.Text  //'类型:'
  else if ParName='DATE1' then ParValue:=GetDBString('CSH81001020')+edtFromDate1.Text  //'期段1:'
  else if ParName='DATE2' then ParValue:=GetDBString('CSH81001021')+edtToDate1.Text  //'至 '
  else if ParName='DATE3' then ParValue:=GetDBString('CSH81001022')+edtFromDate2.Text  //'期段2:'
  else if ParName='DATE4' then ParValue:=GetDBString('CSH81001021')+edtToDate2.Text  //'至 '
end;

procedure TCsh810_01Form.cbTypeChange(Sender: TObject);
var
  ADate:TDateTime;
begin
  inherited;
  ADate:=Date;
  case cbType.ItemIndex of
    0:  //本月与上月比较
      begin
        edtFromDate1.Date:=GetMonthFirstDate(ADate);
        edtToDate1.Date:=GetMonthEndDate(ADate);
        edtFromDate2.Date:=GetLastMonthFirstDate(ADate);
        edtToDate2.Date:=GetLastMonthEndDate(ADate);
      end;
    1:  //本季与上季比较
      begin
        edtFromDate1.Date:=GetSeasonFirstDate(ADate);
        edtToDate1.Date:=GetSeasonEndDate(ADate);
        edtFromDate2.Date:=GetLastSeasonFirstDate(ADate);
        edtToDate2.Date:=GetLastSeasonEndDate(ADate);
      end;
    2:  //本年与上年比较
      begin
        edtFromDate1.Date:=GetYearFirstDate(ADate);
        edtToDate1.Date:=GetYearEndDate(ADate);
        edtFromDate2.Date:=GetLastYearFirstDate(ADate);
        edtToDate2.Date:=GetLastYearEndDate(ADate);
      end;
    3:  //本年与上年同期比较
      begin
        edtFromDate1.Date:=GetMonthFirstDate(ADate);
        edtToDate1.Date:=GetMonthEndDate(ADate);
        edtFromDate2.Date:=GetLastYearSameDate(edtFromDate1.Date);
        edtToDate2.Date:=GetLastYearSameDate(edtToDate1.Date);
      end;
  end;
end;

procedure TCsh810_01Form.ActPrintExecute(Sender: TObject);
var
  I:Integer;
  ALastNode:TdxTreeListNode;
begin
  //打印前,先排序,按显示的顺序
  I:=1;
  ADODataSet1.DisableControls;
  dxDBTreeList1.GotoLast(True);
  ALastNode:=dxDBTreeList1.FocusedNode;
  dxDBTreeList1.GotoFirst;
  while dxDBTreeList1.FocusedNode<>ALastNode do
  begin
    ADODataSet1.Edit;
    ADODataSet1.FieldByName('FSeqNo').Value:=I;
    ADODataSet1.Post;
    dxDBTreeList1.GotoNext(True);
    I:=I+1;
  end;
  ADODataSet1.Edit;
  ADODataSet1.FieldByName('FSeqNo').Value:=I;
  ADODataSet1.Post;
  ADODataSet1.EnableControls;
  try
    SYSDM.frReport2.OnGetValue:=ReportGetValue;
    inherited;
  finally
    SYSDM.frReport2.OnGetValue:=nil;
  end;
end;

procedure TCsh810_01Form.ActOpenExecute(Sender: TObject);
var
  AFieldInfo:TwwFieldInfo;
begin
  inherited;
//查看
  if ADODataSet1.IsEmpty then Exit;
  Screen.Cursor:=crHourGlass;
  Csh510_01Form:=TCsh510_01Form.Create(Application);
  Csh510_01Form.edtFromDate.Date:=edtFromDate1.Date;
  Csh510_01Form.edtToDate.Date:=edtToDate1.Date;
  Csh510_01Form.sbSearch.Click;
  AFieldInfo:=TwwFieldInfo.Create;
  FilterDialog(Csh510_01Form.DataSource1,False);
  AFieldInfo.FieldName:='I120_003';
//  AFieldInfo.DisplayLabel:=Csh510_01Form.ADOQuery1I120_003.DisplayLabel;
  AFieldInfo.MatchType:=fdMatchStart;
  AFieldInfo.CaseSensitive:=False;
  AFieldInfo.NonMatching:=False;
//  AFieldInfo.FilterValue:=ADODataSet1FName.Value;;
  SYSDM.wwFilterDialog1.FieldInfo.Add(AFieldInfo);
  SYSDM.wwFilterDialog1.ApplyFilter;
  Screen.Cursor:=crDefault;
  Csh510_01Form.ShowModal;
//  if Assigned(AFieldInfo) then AFieldInfo.Free;
end;

procedure TCsh810_01Form.RefreshEvent;
begin
  inherited;
  sbSearch.Click;
end;

initialization
  RegisterClass(TCsh810_01Form);

finalization
  UnRegisterClass(TCsh810_01Form);

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -