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

📄 csh810_01.pas.svn-base

📁 这是一个功能齐全的,代码完整的ERP企业信息管理系统,现在上传和大家分享
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
unit Csh810_01;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, BAS200_09, dxExEdtr, StdCtrls, wwdbdatetimepicker, Buttons, DB,
  ADODB, ActnList, Menus, dxCntner, dxTL, wwfltdlg,
  dxDBCtrl, dxDBTL, ExtCtrls, ComCtrls, ToolWin, dxDBTLCl, TeEngine,
  Series, TeeProcs, Chart, DbChart;

type
  TCsh810_01Form = class(TBas200_09Form)
    lblItem: TLabel;
    lblDate1: TLabel;
    lblType: TLabel;
    lblDate2: TLabel;
    cbItem: TComboBox;
    edtFromDate1: TwwDBDateTimePicker;
    edtToDate1: TwwDBDateTimePicker;
    cbType: TComboBox;
    edtFromDate2: TwwDBDateTimePicker;
    edtToDate2: TwwDBDateTimePicker;
    ADODataSet1FCurNm: TStringField;
    ADODataSet1FNo: TIntegerField;
    ADODataSet1FParent: TIntegerField;
    ADODataSet1FName: TStringField;
    ADODataSet1FAmount: TBCDField;
    ADODataSet1FLevel: TIntegerField;
    ADODataSet1FSeqNo: TIntegerField;
    ADODataSet1FDate1: TBCDField;
    ADODataSet1FDate2: TBCDField;
    ADODataSet1FPercent: TFloatField;
    dxDBTreeList1FCurNm: TdxDBTreeListMaskColumn;
    dxDBTreeList1FName: TdxDBTreeListMaskColumn;
    dxDBTreeList1FDate1: TdxDBTreeListCurrencyColumn;
    dxDBTreeList1FDate2: TdxDBTreeListCurrencyColumn;
    dxDBTreeList1FAmount: TdxDBTreeListCurrencyColumn;
    dxDBTreeList1FPercent: TdxDBTreeListCurrencyColumn;
    sbSearch: TSpeedButton;
    Panel2: TPanel;
    DBChart1: TDBChart;
    BarSeries1: TBarSeries;
    Splitter1: TSplitter;
    Series1: TBarSeries;
    ActOpen: TAction;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure sbSearchClick(Sender: TObject);
    procedure cbTypeChange(Sender: TObject);
    procedure ActPrintExecute(Sender: TObject);
    procedure ActOpenExecute(Sender: TObject);
  private
    { Private declarations }
  public
    procedure SetInterface; override;
    procedure RefreshEvent; override;
    procedure ReportGetValue(const ParName: String; var ParValue: Variant); override;
    { Public declarations }
  end;

var
  Csh810_01Form: TCsh810_01Form;
  ALevelNo:Integer;  //层次号

implementation

uses SYSDATA, CommFun, Csh510_01;

{$R *.dfm}

procedure TCsh810_01Form.SetInterface;
begin
  inherited;
  Caption:=GetDBString('CSH81001001');  //比较分析报表
  lblItem.Caption:=GetDBString('CSH81001002');  //项目
  lblDate1.Caption:=GetDBString('CSH81001003');  //期段1
  lblType.Caption:=GetDBString('CSH81001004');  //类型
  lblDate2.Caption:=GetDBString('CSH81001005');  //期段2
  sbSearch.Caption:=GetDBString('CSH81001006');  //查询
  ADODataSet1FCurNm.DisplayLabel:=GetDBString('CSH81001007');  //币别
  ADODataSet1FName.DisplayLabel:=GetDBString('CSH81001008');  //名称
  ADODataSet1FDate1.DisplayLabel:=GetDBString('CSH81001003');  //期段1
  ADODataSet1FDate2.DisplayLabel:=GetDBString('CSH81001005');  //期段2
  ADODataSet1FAmount.DisplayLabel:=GetDBString('CSH81001009');  //增长额
  ADODataSet1FPercent.DisplayLabel:=GetDBString('CSH81001010');  //增长率

  cbItem.Items.Clear;
  cbItem.Items.Add(GetDBString('CSH81001011'));  //业务分类
  cbItem.Items.Add(GetDBString('CSH81001012'));  //客户
  cbItem.Items.Add(GetDBString('CSH81001013'));  //部门
  cbItem.Items.Add(GetDBString('CSH81001014'));  //项目
  cbItem.ItemIndex:=0;

  cbType.Items.Clear;
  cbType.Items.Add(GetDBString('CSH81001023'));  //本月与上月比较
  cbType.Items.Add(GetDBString('CSH81001015'));  //本季与上季比较
  cbType.Items.Add(GetDBString('CSH81001016'));  //本年与上年比较
  cbType.Items.Add(GetDBString('CSH81001024'));  //本年与上年同期比较
  cbType.ItemIndex:=0;
  cbTypeChange(cbType);
end;

procedure TCsh810_01Form.FormCreate(Sender: TObject);
begin
  inherited;
  SetInterface;
  sbSearch.Click;
end;

procedure TCsh810_01Form.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  inherited;
  ADODataSet1.Close;
end;

//设置顶层分类数据
procedure SetParentData(ADataSet:TADODataSet;ACurNm:string);
begin
  if not ADataSet.Active then Abort;
  if ADataSet.Locate('FCurNm',ACurNm,[]) then Exit;
  ADataSet.Append;
  ADataSet.FieldByName('FCurNm').Value:=ACurNm;
  ADataSet.FieldByName('FNo').Value:=-2;
  ADataSet.FieldByName('FParent').Value:=-2;
  ADataSet.FieldByName('FName').Value:=GetDBString('CSH80001017');  //收支差额
  ADataSet.FieldByName('FAmount').Value:=0;
  ADataSet.Post;

  ADataSet.Append;
  ADataSet.FieldByName('FCurNm').Value:=ACurNm;
  ADataSet.FieldByName('FNo').Value:=-1;
  ADataSet.FieldByName('FParent').Value:=-2;
  ADataSet.FieldByName('FName').Value:=GetDBString('CSH80001018');  //收入
  ADataSet.FieldByName('FAmount').Value:=0;
  ADataSet.Post;

  ADataSet.Append;
  ADataSet.FieldByName('FCurNm').Value:=ACurNm;
  ADataSet.FieldByName('FNo').Value:=0;
  ADataSet.FieldByName('FParent').Value:=-2;
  ADataSet.FieldByName('FName').Value:=GetDBString('CSH80001019');  //支出
  ADataSet.FieldByName('FAmount').Value:=0;
  ADataSet.Post;
end;

//将下级分类金额累加到上级分类
procedure UpdateClassParent(ANo:Integer;AValue1,AValue2:Double;ADataSet:TDataSet;ACurrName:String);
var
  AParent,AType:Integer;
  AClassName:String;
begin
  ALevelNo:=ALevelNo+1;
  //查找业务分类表中该记录是否有上级分类
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select * from CSH140 where C140_001='+IntToStr(ANo));
  SYSDM.qryQuery.Open;
  AClassName:=SYSDM.qryQuery.FieldByName('C140_002').AsString;
  AParent:=SYSDM.qryQuery.FieldByName('C140_004').AsInteger;
  AType:=SYSDM.qryQuery.FieldByName('C140_003').AsInteger;
  if AParent=0 then AParent:=AType-1;
  if ADataSet.Locate('FNo',ANo,[]) then
  begin
    ADataSet.Edit;
    ADataSet.FieldByName('FDate1').Value:=ADataSet.FieldByName('FDate1').Value+AValue1;
    ADataSet.FieldByName('FDate2').Value:=ADataSet.FieldByName('FDate2').Value+AValue2;
    ADataSet.Post;
  end else
  begin
    ADataSet.Append;
    ADataSet.FieldByName('FCurNm').Value:=ACurrName;
    ADataSet.FieldByName('FNo').Value:=ANo;
    ADataSet.FieldByName('FName').Value:=AClassName;
    ADataSet.FieldByName('FParent').Value:=AParent;
    ADataSet.FieldByName('FLevel').Value:=0;
    ADataSet.FieldByName('FSeqNo').Value:=0;
    ADataSet.FieldByName('FDate1').Value:=AValue1;
    ADataSet.FieldByName('FDate2').Value:=AValue2;
    ADataSet.Post;
  end;
  if AParent>0 then UpdateClassParent(AParent,AValue1,AValue2,ADataSet,ACurrName);
end;

//取得上级业务分类
procedure GetParentClass(ADataSet:TADODataSet);
var
  ABookmark:TBookmark;
  ACurrName:string;
  AMount1,AMount2:Double;
  AClassNo:Integer;
begin
  ADataSet.First;
  while not ADataSet.Eof do
  begin
    ABookmark:=ADataSet.GetBookmark;
    ACurrName:=ADataSet.FieldByName('FCurNm').AsString;
    AMount1:=ADataSet.FieldByName('FDate1').AsFloat;
    AMount2:=ADataSet.FieldByName('FDate2').AsFloat;
    AClassNo:=ADataSet.FieldByName('FParent').AsInteger;
    ALevelNo:=0;
    if AClassNo>0 then UpdateClassParent(AClassNo,AMount1,AMount2,ADataSet,ACurrName);
    ADataSet.GotoBookmark(ABookmark);
    ADataSet.FreeBookmark(ABookmark);
    //修改层次号 0=最顶层
    ADataSet.Edit;
    ADataSet.FieldByName('FLevel').Value:=ALevelNo;
    ADataSet.Post;
    ADataSet.Next;
  end;
end;

//将下级项目金额累加到上级项目
procedure UpdateProjectParent(ANo:Integer;AValue1,AValue2:Double;ADataSet:TDataSet;ACurrName:String);
var
  AParent:Integer;
  AProjectName:String;
begin
  ALevelNo:=ALevelNo+1;
  //查找项目资料表中该记录是否有上级分类
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select * from CSH150 where C150_001='+IntToStr(ANo));
  SYSDM.qryQuery.Open;
  AProjectName:=SYSDM.qryQuery.FieldByName('C150_002').AsString;
  AParent:=SYSDM.qryQuery.FieldByName('C150_003').AsInteger;
  if ADataSet.Locate('FNo',ANo,[]) then
  begin
    ADataSet.Edit;
    ADataSet.FieldByName('FDate1').Value:=ADataSet.FieldByName('FDate1').Value+AValue1;
    ADataSet.FieldByName('FDate2').Value:=ADataSet.FieldByName('FDate2').Value+AValue2;
    ADataSet.Post;
  end else
  begin
    ADataSet.Append;
    ADataSet.FieldByName('FCurNm').Value:=ACurrName;
    ADataSet.FieldByName('FNo').Value:=ANo;
    ADataSet.FieldByName('FName').Value:=AProjectName;
    ADataSet.FieldByName('FParent').Value:=AParent;
    ADataSet.FieldByName('FLevel').Value:=0;
    ADataSet.FieldByName('FSeqNo').Value:=0;
    ADataSet.FieldByName('FDate1').Value:=AValue1;
    ADataSet.FieldByName('FDate2').Value:=AValue2;
    ADataSet.Post;
  end;
  if AParent<>0 then UpdateProjectParent(AParent,AValue1,AValue2,ADataSet,ACurrName);
end;

//取得上级项目
procedure GetParentProject(ADataSet:TADODataSet);
var
  ABookmark:TBookmark;
  ACurrName:string;
  AMount1,AMount2:Double;
  AProjectNo:Integer;
begin
  ADataSet.First;
  while not ADataSet.Eof do
  begin
    ABookmark:=ADataSet.GetBookmark;
    ACurrName:=ADataSet.FieldByName('FCurNm').AsString;
    AMount1:=ADataSet.FieldByName('FDate1').AsFloat;
    AMount2:=ADataSet.FieldByName('FDate2').AsFloat;
    AProjectNo:=ADataSet.FieldByName('FParent').AsInteger;
    ALevelNo:=0;
    if AProjectNo<>0 then UpdateProjectParent(AProjectNo,AMount1,AMount2,ADataSet,ACurrName);
    ADataSet.GotoBookmark(ABookmark);
    ADataSet.FreeBookmark(ABookmark);
    //修改层次号 0=最顶层
    ADataSet.Edit;
    ADataSet.FieldByName('FLevel').Value:=ALevelNo;
    ADataSet.Post;
    ADataSet.Next;
  end;
end;

//更新收支余额、收入、支出的金额
procedure UpdateSumAmount(ADataSet:TADODataSet;AFieldName:string;ABalance,AIncome,APayment:Double);
begin
  if AFieldName='' then Exit;
  if ADataSet.Locate('FNo',-2,[]) then
  begin
    ADataSet.Edit;
    ADataSet.FieldByName(AFieldName).Value:=ABalance;
    ADataSet.Post;
  end;

  if ADataSet.Locate('FNo',-2,[]) then
  begin
    ADataSet.Locate('FNo',-1,[]);
    ADataSet.Edit;
    ADataSet.FieldByName(AFieldName).Value:=AIncome;
    ADataSet.Post;
  end;

  if ADataSet.Locate('FNo',-2,[]) then
  begin
    ADataSet.Locate('FNo',0,[]);
    ADataSet.Edit;
    ADataSet.FieldByName(AFieldName).Value:=APayment;
    ADataSet.Post;
  end;
end;

//比较分析--按业务分类
procedure GetClassAmount(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, C140_001 as FNo, C140_002 as FName, C140_003 as FType, C140_004 as FParent, sum(C510B_006) as FAmount from CSH510A,CSH510B, CSH140, CSH550, GLD100');
  SYSDM.qryQuery.SQL.Add('where C510B_007=C140_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, C140_001, C140_002, C140_003, C140_004');
  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 GetCustAmount(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 C.G100_003 as FCurNm, D.O150_001 as FNo, D.O150_003 as FName, A.C510A_005 as FType, 0 as FParent, sum(A.C510A_009) as FAmount from CSH510A A, CSH550 B, GLD100 C,');
  SYSDM.qryQuery.SQL.Add('(select O150_001, O150_003, 0 as FCustType from ORD150');
  SYSDM.qryQuery.SQL.Add('union');
  SYSDM.qryQuery.SQL.Add('select H150_001 as O150_001, H150_003 as O150_003, 1 as FCustType from HRM150) as D');
  SYSDM.qryQuery.SQL.Add('where A.C510A_003=B.C550_001 and B.C550_005=C.G100_001 and A.C510A_008=D.O150_001 and A.C510A_007=D.FCustType and A.C510A_004 not in (0,3) and A.C510A_010>='+GetDateString(AStartDate)+' and A.C510A_010<='+GetDateString(AEndDate));
  SYSDM.qryQuery.SQL.Add('group by C.G100_003, D.O150_001, D.O150_003, A.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;

⌨️ 快捷键说明

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