📄 cj_main.~pas
字号:
unit CJ_Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, Grids, DBGrids, Provider, DB, DBClient, ADODB, DateUtils,
Menus, ShellAPI, ExtCtrls, registry, jpeg, ToolWin, IniFiles;
type
TSpxx = class(TObject)
spdl: integer; //商品代号
spmc: string; //商品名称
sl: double; //数量
je: double; //金额
thflag: Boolean; //退货标志
end;
TJyfsList = class(TObject)
jymc: string; //交易名称
jyje: double; //交易金额
end;
TScxx = class(TObject)
public
rq: string; //日期+时间
xq: word; //星期
jqh: integer; //机器号
sjh: integer; //收据号
fwyh: integer; //服务员号
fwym: string; //服务员名称
skyh: integer; //收款员号
skym: string; //收款员名称
spsl: integer; //商品数量
filterflag: Boolean; //该笔交易是否入库成功,真为成功,否为失败
Spxx: TStrings; //商品信息
JyfsList: TStrings; //交易方式列表
zkl: double; //折扣率
zkflag: integer; //打折标志,1为打折,0为不打折
zje: double; //总金额
jyfs: integer; //交易方式
jyfsm: string; //交易方式名称
constructor ACreate;
destructor Destroy; override;
end;
CjThread = class(TThread)
private
QsDate, ZzDate, Sj: TDate; // 采集起始终止日期,采集的当前时间
CjLx, jqhm, JqhmQs, JqhmZz: Integer; //采集类型
protected
procedure Execute; override;
public
myFormCj: TForm;
procedure ss;
constructor Create(CjSj, Date1, Date2: TDate; Lx, Jqh1, Jqh2: Integer;
AFormCj:
TForm);
end;
TFrmCJ_Main = class(TForm)
Panel2: TPanel;
Image2: TImage;
Panel1: TPanel;
Notebook1: TNotebook;
GroupBox2: TGroupBox;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
GroupBox3: TGroupBox;
Label3: TLabel;
Label4: TLabel;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
DateTimePicker1: TDateTimePicker;
DateTimePicker2: TDateTimePicker;
DBGrid1: TDBGrid;
CoolBar2: TCoolBar;
ToolBar2: TToolBar;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
ToolButton9: TToolButton;
Panel3: TPanel;
Panel4: TPanel;
Label5: TLabel;
Memo1: TMemo;
Panel5: TPanel;
Panel6: TPanel;
Panel8: TPanel;
Panel9: TPanel;
Label6: TLabel;
Memo2: TMemo;
Memo3: TMemo;
Memo4: TMemo;
Label7: TLabel;
Memo5: TMemo;
Memo6: TMemo;
Label8: TLabel;
Memo7: TMemo;
Memo8: TMemo;
GroupBox4: TGroupBox;
Button1: TButton;
Button5: TButton;
Memo9: TMemo;
Memo10: TMemo;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
Label9: TLabel;
Memo11: TMemo;
Button30: TButton;
Button40: TButton;
Button60: TButton;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button70Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
procedure RadioButton2Click(Sender: TObject);
procedure DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure DBGrid1DblClick(Sender: TObject);
procedure Button13Click(Sender: TObject);
procedure Button21Click(Sender: TObject);
procedure Button22Click(Sender: TObject);
procedure ToolButton4Click(Sender: TObject);
procedure Button60Click(Sender: TObject);
procedure Button90Click(Sender: TObject);
procedure Button30Click(Sender: TObject);
procedure Button40Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
RecordList: TStrings;
CjCxThread: CjThread;
CjSuccessFlag: Boolean;
CancelFlag: Boolean;
CancelNum: Integer;
UpdateNum: Integer;
UpdateFlag: Boolean;
BackFlag: Boolean;
function DataCollect(Date1, Date2: TDate; Lx, Jqh: Integer): Boolean;
function OpenFile(var ATextFile: Textfile; var TextFileName: string; Jqh:
integer): Boolean;
function ReadFromDll(czlx: pchar; filename1: pchar;
WBaud: integer; Wport: smallint; Wmc: smallint; Wtype: smallint;
Wformx: smallint; Wformy: smallint): smallint;
procedure CollectDataFromText(jlh: integer; s: string; ItemValue: TStrings);
function GetName(Bh, lx: integer): string;
function GetClerkName(skyname: string): string;
function InsertAllToDb(SelSum: TStrings; Date1, Date2: TDate): Boolean;
function InsertPartToDb(SelSum: TStrings; Date1, Date2: TDate): Boolean;
function EmptyMachineRecord(MachineNo: integer; Date1, Date2: TDate):
Boolean;
function EmptyTh(MachineNo: integer; Date1, Date2: TDate): Boolean;
function EmptyJyfs(MachineNo: integer; Date1, Date2: TDate): Boolean;
function EmptyCurrentRecord(MachineNo, SjNo: integer; Date1, Date2: TDate):
Boolean;
function EmptyCurrentTh(MachineNo, SjNo: integer; Date1, Date2: TDate):
Boolean;
function EmptyCurrentJyfs(MachineNo, SjNo: integer; Date1, Date2: TDate):
Boolean;
function InsertRecord(jlh: integer): Boolean;
function InsertJyRecord(jlh: integer): Boolean;
function InsertToTh(jlh, xh: integer): Boolean;
procedure ResultLog(Sj: TDate; Jqh: integer; StartRq, EndRq: TDate;
CjResult: string);
function UpdateZkxx(Date1, Date2: TDate; Lx, Jqhm: Integer): Boolean;
procedure Checkrq(Date1, Date2: TDate; rqxh, Recordcon: TStrings);
procedure DeletePart(Jqh: integer; FromDate, ToDate: TDate);
procedure DeleteAll;
procedure ShowResult(FromDate, ToDate: TDate; jqh, lx: integer);
procedure SjScan(FromDate, ToDate: TDate; jqh, jqh1: integer);
procedure AdjustGrid;
procedure ClearLS(Jqh: smallint);
function IfValid: Boolean;
procedure IniJqList;
end;
procedure SetWork;
implementation
uses PZ_SJPZ, CJ_DataModule, PublicUnit, Main;
{$R *.DFM}
procedure SetWork;
var
FrmCJ_Main: TFrmCJ_Main;
begin
Application.CreateForm(TFrmCJ_Main, FrmCJ_Main);
FrmCJ_Main.ShowModal;
FrmCJ_Main.Free;
end;
{-------------------------------------------------------------------------------}
constructor TScxx.ACreate;
begin
inherited Create;
Spxx := TStringList.Create;
JyfsList := TStringList.Create;
spsl := -1;
end;
destructor Tscxx.destroy;
var
i: integer;
begin
for i := 0 to Spxx.Count - 1 do
if Spxx.Objects[i] <> nil then
TSpxx(Spxx.Objects[i]).Free;
for i := 0 to JyfsList.Count - 1 do
if JyfsList.Objects[i] <> nil then
TJyfsList(JyfsList.Objects[i]).Free;
Spxx.Free;
JyfsList.Free;
inherited;
end;
{-------------------------------------------------------------------------------}
procedure TFrmCJ_Main.FormShow(Sender: TObject);
begin
NoteBook1.PageIndex := 0;
with FrmCJ_DataModule.ADOConnection1 do
begin
Close;
ConnectionString := 'Provider=SqlOLEDB.1;Persist Security Info=True;User ID='
+ PublicUnit.DBUser + ';Password=' + PublicUnit.DBPass +
';Initial Catalog='
+ PublicUnit.DbName + ';Data Source=' + PublicUnit.ServerName;
try
Open;
except
ShowMessage('连接业务数据库失败,该系统无法正常工作!');
end;
end;
with FrmCJ_DataModule.ADOConnection2 do
begin
{ Close;
ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;Data Source=DBText';
try Open;
except
ShowMessage('连接文本数据库失败,该系统无法正常工作!');
end;}
end;
RecordList := TStringList.Create;
DateTimePicker1.DateTime := StrToDateTime('2001-08-27');
DateTimePicker2.DateTime := Now;
SjScan(StrToDateTime('2001-08-27'), Now, 1, 9);
DateTimePicker1.Enabled := False;
DateTimePicker2.Enabled := False;
Button1.Enabled := False;
IniJqList;
//ComboBox1.ItemIndex := 0;
//ComboBox2.ItemIndex := 0;
end;
procedure TFrmCJ_Main.FormClose(Sender: TObject; var Action: TCloseAction);
var
i: integer;
begin
for i := 0 to RecordList.Count - 1 do
if RecordList.Objects[i] <> nil then
TSpxx(RecordList.Objects[i]).Free;
RecordList.Free;
FrmCJ_DataModule.ADOQuery1.Close;
FrmCJ_DataModule.ADOQuery2.Close;
FrmCJ_DataModule.ADOConnection1.Close;
FrmCJ_DataModule.ADOConnection2.Close;
end;
{---------------------------------线程有关---------------------------------}
constructor CjThread.Create(CjSj, Date1, Date2: TDate; Lx, Jqh1, Jqh2: Integer;
AFormCj: TForm);
begin
inherited Create(False);
QsDate := Date1;
ZzDate := Date2;
CjLx := Lx;
Sj := CjSj;
JqhmQs := Jqh1;
JqhmZz := Jqh2;
FreeOnTerminate := true;
myFormCj := AFormCj;
end;
procedure CjThread.ss;
begin
//TFrmCJ_Main(myFormCj).DataCollect(QsDate,ZzDate,CjLx);
end;
procedure CjThread.Execute;
var
i: integer;
begin
for i := JqhmQs to JqhmZz do
if not TFrmCJ_Main(myFormCj).DataCollect(QsDate, ZzDate, CjLx, i) then
TFrmCJ_Main(myFormCj).ResultLog(Sj, Jqhm, QsDate, ZzDate, '采集失败')
else
TFrmCJ_Main(myFormCj).ResultLog(Sj, Jqhm, QsDate, ZzDate, '采集成功');
//synchronize(ss);
if Terminated then
Exit;
end;
{------------------------采集过程(日期为参数)-----------------}
function TFrmCJ_Main.DataCollect(Date1, Date2: TDate; Lx, Jqh: Integer):
Boolean;
var
s, ss, rq: string;
ATextFile: Textfile;
TextFileName: string;
year1, s1, t: word;
jlh: Integer; {jlh代表交易数}
CjFlag: Boolean; {采集标志}
ItemValue, SelSum: TStrings;
scxx: TScxx;
begin
Result := False;
RecordList.Clear;
Screen.Cursor := crHourGlass;
if not OpenFile(ATextFile, TextFileName, Jqh) then
Exit;
jlh := -1;
ItemValue := TStringList.Create;
SelSum := TStringList.Create;
while not Eof(ATextFile) do
begin
Readln(ATextFile, s);
if s = '' then
Break;
if (Trim(Copy(s, 1, pos(',', s) - 1)) = '0') then
begin
Inc(jlh);
CjFlag := False;
scxx := TScxx.ACreate;
BackFlag := False;
scxx.zkflag := 0;
RecordList.AddObject('', scxx);
Continue;
end;
{采集交易时间}
if LowerCase(Trim(Copy(s, 1, 4))) = 'time' then
begin
rq := Trim(copy(s, pos('=', s) + 1, 10));
if Lx = 1 then
CjFlag := True
else if (Lx = 2) and ((strtodate(rq) >= Date1) and (strtodate(rq) <=
Date2)) then
CjFlag := True;
if CjFlag then
begin
SelSum.Add(IntToStr(jlh));
ss := copy(s, pos('=', s) + 1, 20);
TScxx(RecordList.Objects[jlh]).rq := trim(ss);
DecodeDateWeek(strtodatetime(TScxx(RecordList.Objects[jlh]).rq), year1,
s1, t);
TScxx(RecordList.Objects[jlh]).xq := t;
end;
Continue;
end;
if CjFlag then
CollectDataFromText(jlh, s, ItemValue);
end;
CloseFile(ATextFile);
//if FileExists(TextFileName) then DeleteFile(TextFileName);
ItemValue.Free;
//if Lx = 1 then
//if not InsertAllToDb(SelSum,Date1,Date2) then Exit;
//if Lx = 2 then
if not InsertPartToDb(SelSum, Date1, Date2) then
Exit;
if not UpdateZkxx(Date1, Date2, Lx, Jqh) then
Exit;
SjScan(Date1, Date2, Jqh, Jqh);
ShowResult(Date1, Date2, Jqh, Lx);
SelSum.Free;
Screen.Cursor := crDefault;
Result := True;
end;
function TFrmCJ_Main.OpenFile(var ATextFile: Textfile; var TextFileName: string;
Jqh: integer): Boolean;
var
i, ReturnValue: Integer;
begin
Result := False;
TextFileName := ExtractFilePath(Application.ExeName);
//TextFileName:=Copy(TextFileName,1,Pos('bin',LowerCase(TextFileName))-1)+'Data\dd.dat';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -