📄 ord400_01.pas.svn-base
字号:
unit Ord400_01;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, BAS200_12, dxExEdtr, DB, ADODB, ActnList, Menus, dxCntner, dxTL,
dxDBCtrl, dxDBTL, ExtCtrls, ComCtrls, ToolWin, StdCtrls, wwfltdlg, fr_Class,
wwdbdatetimepicker, Buttons, TeeProcs, TeEngine, Chart, DbChart, Series,
dxDBTLCl;
type
TOrd400_01Form = class(TBas200_12Form)
ADODataSet1FNo: TIntegerField;
ADODataSet1FName: TStringField;
ADODataSet1FParent: TIntegerField;
ADOQuery1: TADOQuery;
ActOpen: TAction;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
ADODataSet1FAmount: TFloatField;
dxDBTreeList1FName: TdxDBTreeListMaskColumn;
dxDBTreeList1FQty: TdxDBTreeListMaskColumn;
dxDBTreeList1FAmount: TdxDBTreeListMaskColumn;
lblType: TLabel;
cbType: TComboBox;
lblDate: TLabel;
edtFromDate: TwwDBDateTimePicker;
edtToDate: TwwDBDateTimePicker;
sbSearch: TSpeedButton;
ADODataSet1FQty: TFloatField;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure sbSearchClick(Sender: TObject);
private
ABusy:Boolean;
ATotal:array[1..2] of double;
procedure ByCustomer(AFromDate,AToDate:TDateTime); //按客户
procedure ByCustomerClass(AFromDate,AToDate:TDateTime); //按客户类别
procedure ByItem(AFromDate,AToDate:TDateTime); //按产品
procedure ByItemClass(AFromDate,AToDate:TDateTime); //按产品类别
procedure BySeller(AFromDate,AToDate:TDateTime); //按销售员
procedure ByArea(AFromDate,AToDate:TDateTime); //按地区
{ Private declarations }
public
procedure SetInterface; override;
procedure RefreshEvent; override;
procedure ReportGetValue(const ParName: String; var ParValue: Variant); override;
{ Public declarations }
end;
var
Ord400_01Form: TOrd400_01Form;
implementation
uses SYSDATA, CommFun;
{$R *.dfm}
procedure TOrd400_01Form.SetInterface;
begin
inherited;
Caption:=GetDBString('ORD40001001'); //销售数量分析
lblDate.Caption:=GetDBString('ORD40001002'); //起止日期
lblType.Caption:=GetDBString('ORD40001003'); //类型
sbSearch.Caption:=GetDBString('ORD40001004'); //查询
ADODataSet1FName.DisplayLabel:=GetDBString('ORD40001005'); //编号名称
ADODataSet1FQty.DisplayLabel:=GetDBString('ORD40001006'); //销售数量
ADODataSet1FAmount.DisplayLabel:=GetDBString('ORD40001007'); //销售金额
cbType.Clear;
cbType.Items.Add(GetDBString('ORD40001008')); //按客户
cbType.Items.Add(GetDBString('ORD40001009')); //按客户类别
cbType.Items.Add(GetDBString('ORD40001010')); //按产品
cbType.Items.Add(GetDBString('ORD40001011')); //按产品类别
cbType.Items.Add(GetDBString('ORD40001012')); //按销售员
cbType.Items.Add(GetDBString('ORD40001013')); //按地区
cbType.ItemIndex:=0;
end;
procedure TOrd400_01Form.FormCreate(Sender: TObject);
var
ADate:TDateTime;
begin
inherited;
SetInterface;
ADate:=GetServerDate;
edtFromDate.Date:=GetMonthFirstDate(ADate);
edtToDate.Date:=GetMonthEndDate(ADate);
sbSearch.Click;
end;
procedure TOrd400_01Form.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
inherited;
ADOQuery1.Close;
end;
//将下级任务类别数量累加到上级任务类别
procedure UpdateParent(AParentNo:Integer;AValue:Double;ADataSet:TDataSet;AFieldName,ATableName,AKey,ANameField,AParentField:string);
var
AParent:Integer;
AClassName:String;
begin
//查找任务类别表中该记录是否有上级分类
AParent:=GetValue('select '+AParentField+' from '+ATableName+' where '+AKey+'='+IntToStr(AParentNo));
if ADataSet.Locate('FNo',AParentNo,[]) then
begin
ADataSet.Edit;
ADataSet.FieldByName(AFieldName).Value:=ADataSet.FieldByName(AFieldName).AsFloat+AValue;
ADataSet.Post;
end else
begin
AClassName:=GetValue('select '+ANameField+' from '+ATableName+' where '+AKey+'='+IntToStr(AParentNo));
ADataSet.Append;
ADataSet.FieldByName('FNo').Value:=AParentNo;
ADataSet.FieldByName('FName').Value:=AClassName;
ADataSet.FieldByName('FParent').Value:=AParent;
ADataSet.FieldByName(AFieldName).Value:=AValue;
ADataSet.Post;
end;
end;
procedure TOrd400_01Form.ByCustomer(AFromDate,AToDate:TDateTime); //按客户
begin
//销售数量和销售金额统计 按销售日期
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select O150_001 as FNo,''[''+O150_002+'']''+O150_003 as FName,O150_001 as FParent,sum(O510B_005) as FQty,sum(O510B_013) as FAmount');
ADOQuery1.SQL.Add('from ORD510A,ORD510B,ORD150');
ADOQuery1.SQL.Add('where O510A_001=O510B_001 and O510A_017=O150_001 and');
ADOQuery1.SQL.Add(' O510A_003>='+GetDateString(AFromDate)+' and O510A_003<='+GetDateString(AToDate));
ADOQuery1.SQL.Add('group by O150_001,''[''+O150_002+'']''+O150_003,O150_001');
ADOQuery1.SQL.Add('order by ''[''+O150_002+'']''+O150_003');
ADOQuery1.Open;
while not ADOQuery1.Eof do
begin
ADODataSet1.Append;
ADODataSet1.FieldByName('FNo').Value:=ADOQuery1.FieldByName('FNo').AsInteger;
ADODataSet1.FieldByName('FName').Value:=ADOQuery1.FieldByName('FName').AsString;
ADODataSet1.FieldByName('FParent').Value:=ADOQuery1.FieldByName('FParent').AsInteger;
ADODataSet1.FieldByName('FQty').Value:=ADOQuery1.FieldByName('FQty').AsFloat;
ADODataSet1.FieldByName('FAmount').Value:=ADOQuery1.FieldByName('FAmount').AsFloat;
ADODataSet1.Post;
ADOQuery1.Next;
end;
ADODataSet1.First;
end;
procedure TOrd400_01Form.ByCustomerClass(AFromDate, AToDate: TDateTime); //按客户类别
var
ABookmark:TBookmark;
AValue,AParentNo:Integer;
begin
//销售数量和销售金额统计 按销售日期
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select O110_001 as FNo,O110_002 as FName,O110_003 as FParent,sum(O510B_005) as FQty,sum(O510B_013) as FAmount');
ADOQuery1.SQL.Add('from ORD510A,ORD510B,ORD150,ORD110');
ADOQuery1.SQL.Add('where O510A_001=O510B_001 and O510A_017=O150_001 and O150_010=O110_001 and');
ADOQuery1.SQL.Add(' O510A_003>='+GetDateString(AFromDate)+' and O510A_003<='+GetDateString(AToDate));
ADOQuery1.SQL.Add('group by O110_001,O110_002,O110_003');
ADOQuery1.SQL.Add('order by O110_001');
ADOQuery1.Open;
while not ADOQuery1.Eof do
begin
ADODataSet1.Append;
ADODataSet1.FieldByName('FNo').Value:=ADOQuery1.FieldByName('FNo').Value;
ADODataSet1.FieldByName('FName').Value:=ADOQuery1.FieldByName('FName').Value;
ADODataSet1.FieldByName('FParent').Value:=ADOQuery1.FieldByName('FParent').Value;
ADODataSet1.FieldByName('FQty').Value:=ADOQuery1.FieldByName('FQty').Value;
ADODataSet1.FieldByName('FAmount').Value:=ADOQuery1.FieldByName('FAmount').Value;
ADODataSet1.Post;
ADOQuery1.Next;
end;
//累加數量到上級類別
ADODataSet1.First;
while not ADODataSet1.Eof do
begin
ABookmark:=ADODataSet1.GetBookmark;
AParentNo:=ADODataSet1.FieldByName('FParent').Value;
if AParentNo<>0 then
begin
AValue:=ADODataSet1.FieldByName('FQty').AsInteger;
UpdateParent(AParentNo,AValue,ADODataSet1,'FQty','ORD110','O110_001','O110_002','O110_003');
ADODataSet1.GotoBookmark(ABookmark);
AValue:=ADODataSet1.FieldByName('FAmount').AsInteger;
UpdateParent(AParentNo,AValue,ADODataSet1,'FAmount','ORD110','O110_001','O110_002','O110_003');
end;
ADODataSet1.GotoBookmark(ABookmark);
ADODataSet1.FreeBookmark(ABookmark);
ADODataSet1.Next;
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -