📄 cqyskbb.~pas
字号:
unit cqyskbb;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, DB, RpDefine, RpBase, RpSystem, Buttons,
ExtCtrls, Grids, DBGrids, jpeg,main;
type
Tf_cqyskbb = class(TForm)
bt: TLabel;
Panel2: TPanel;
dy: TBitBtn;
yl: TBitBtn;
BitBtn2: TBitBtn;
cx: TBitBtn;
Rprinter: TRvSystem;
Panel1: TPanel;
sj: TDateTimePicker;
Label2: TLabel;
czy: TEdit;
Label3: TLabel;
bg: TStringGrid;
tx: TImage;
procedure FormCreate(Sender: TObject);
procedure cxClick(Sender: TObject);
procedure RprinterPrint(Sender: TObject);
procedure dyClick(Sender: TObject);
procedure ylClick(Sender: TObject);
procedure bgClick(Sender: TObject);
procedure bgSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure bgDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect;
State: TGridDrawState);
private
{ Private declarations }
public
procedure SetGridFieldName;
{ Public declarations }
end;
RFont = Record //设置字体
RFontName: String;
RFontSize: Integer;
RFontColor: Integer;
RFontStyle: TFontStyles;
End;
RContent = ReCord //设置正文
TitleHeight: Real; //标题高度
BtHeight: Real;//表头与标题的间距
Bgjj: Real;//表格与表头的间距
Czyjj: real;//操作员与其标签的水平距离
sjjj: real;//时间与其标签的水平距离
Bgdqfs: integer;//表格内容的对齐方式 0居左,1居右,2居中
end;
var
f_cqyskbb: Tf_cqyskbb;
khmc: Array of String;//记录未及时付款客户的信息
yjsj: integer = 25;//假设月结时间为每月的25日
TempField: String ='';
Sumzdkd: real=0.0;// 字段总宽度
Rowzdkd: Real=0.0;//每行字段总宽度
zbj: real=0.0; //正文左边距
Content: RContent;
AZdmc: Array[0..3]of String=('客户名称','客户欠款','最近付款金额','最近付款时间');
AZdkd : Array[0..3]of Real=(1.2,1.2,1.2,1.2); //数组中的元素对应表格中相应字段的宽度
TitleFont,BtFont,BgtitleFont,BgFont: RFont;//读取或设置标题,表头,表格字体,表格标题字体
zds : integer = 4;//表格字段数
Cols: integer = 4;//每行列数
row,row1: integer;
implementation
uses DataModal,cqyskdysz;
{$R *.dfm}
const
khqc = 1;
khqk = 2;
zjfkje = 3;
zjfksj = 4;
procedure Tf_cqyskbb.FormCreate(Sender: TObject);
var
i: Integer;
begin
czy.Text := Trim(czyxx.czymc);
sj.DateTime := Now;
zds := 4;
cols := 4;
Sumzdkd := 0;
For i := 0 to zds-1 do
begin
Azdkd[i]:= 1.2;
sumzdkd := Sumzdkd+ Azdkd[i];
end;
Rowzdkd := Cols*(Sumzdkd/zds);
with TitleFont do
begin
RFontName := '宋体';
RFontSize := 18;
RFontColor := clRed;
RFontStyle := [];
end;
with BtFont do
begin
RFontName := '宋体';
RFontSize := 10;
RFontColor := clBlue;
RFontStyle := [];
end;
with BgFont do
begin
RFontName := '宋体';
RFontSize := 10;
RFontColor := clBlue;
RFontStyle := [];
end;
with BgtitleFont do
begin
RFontName := '宋体';
RFontSize := 12;
RFontColor := clBlue;
RFontStyle := [fsBold];
end;
with Content do
begin
TitleHeight := 0.8;
BtHeight := 0.4;
Bgjj := 0.4;
Czyjj := 0.8;
sjjj := 0.8;
Bgdqfs := 0;//表格居左对齐
end;
end;
procedure Tf_cqyskbb.cxClick(Sender: TObject);
var
i: Integer;//记录有多少客户没有及时结款
m,c: Integer;
fktj: String;//记录客户付款条件,例如月结2天付款
jkfs: String;//记录客户结款方式,例如月结,货到,月结月底
ts: Integer;//记录客户结款方式中的结款天数
yjksj: TDateTime;//客户应结款的时间
xsdsj: TDateTime;//记录客户最近的销售单中的时间
year,month,day,days: Word; //days记录当前月有多少天
begin
i := 0;
days := 30;
xsdsj := Now;
DecodeDate(sj.DateTime,year,month,day);
with Data.Query1 do
begin
Close;
SQL.Clear;
SQL.Add('select khmc from t_khjk'); //客户结款表中khmc字段为唯一索引
Open;
end;
setlength(khmc,Data.Query1.RecordCount);//设置数组大小为客户结款表中的记录数
Data.Query1.First;
while not Data.Query1.Eof do //利用循环将没有及时结款的客户记录到数组中
begin
//首先确定客户的应结款时间
with Data.Query3 do
begin
Close;
SQL.Clear;
SQL.Add('select * from t_khzl where khmc = :a');
ParamByName('a').AsString := Trim(Data.Query1.FieldByName('khmc').AsString);
Open;
end;
fktj := Data.Query3.FieldByName('fktj').AsString;
with Data.Query3 do
begin
Close;
SQL.Clear;
SQL.Add('select * from t_fkdm where fktj = :a');
ParamByName('a').AsString := Trim(fktj);
Open;
end;
jkfs := Data.Query3.FieldByName('fkfs').AsString;
ts := Data.Query3.FieldByName('ts').AsInteger;
if Trim(jkfs)='货到' then //以最近的销售单时间为基准计算客户应结款时间
begin
with Data.Query3 do
begin
Close;
SQL.Clear;
SQL.Add('select max(sj) from t_xsph where khmc = :a');
ParamByName('a').AsString := Trim(Data.Query1.FieldByName('khmc').AsString);
Open;
end;
xsdsj := Data.Query3.Fields[0].AsDateTime;
yjksj := xsdsj+ts;//客户应结款时间=最近与客户的销售单时间+天数
end
{todo: 由于还没有确定月结时间,所以假设月结时间为每月的25日}
else if Trim(jkfs)='月结' then
begin
yjksj := Trunc(sj.DateTime)-day+yjsj+ts;
end
else //月结月底
begin
Case Month of
1,3,5,7,8,10,12: Days := 31;
2: begin
if isLeapYear(Year)=True then
Days :=29
else
Days := 28
end;
4,6,9: Days := 30;
end;
yjksj := Trunc(sj.DateTime)-day+Days+ts;
end;
with Data.Query2 do
begin
Close;
SQL.Clear;
SQL.Add('select * from t_khjkjl where sj >= :a and sj <:b and khmc = :c');
if Trim(jkfs) = '货到' then
ParamByName('a').AsDateTime := xsdsj //起始时间
else if Trim(jkfs) = '月结' then
ParamByName('a').AsDateTime := Trunc(sj.DateTime)-day+yjsj
else //月结月底
ParamByName('a').AsDateTime := Trunc(sj.DateTime)-day+Days;
ParamByName('b').AsDateTime := Trunc(yjksj)+1; //截止时间
ParamByName('c').AsString := Data.Query1.FieldByName('khmc').AsString;
Open;
end;
if Data.Query2.RecordCount<=0 then //在结款时间内没有收到客户结款,记录客户信息
begin
khmc[i]:= Data.Query1.FieldByName('khmc').AsString;
inc(i); //在循环后i值会比数组中的元素数多一
end;
Data.Query1.Next;
end;
if i = 0 then
begin
dy.Enabled := False;
Application.MessageBox('所有客户均按期付款.','提示',64);
Exit;
end
else
begin
dy.Enabled := True;
bg.RowCount := i+1;
For m :=0 to i-1 do
begin
with Data.Query3 do
begin
Close;
SQL.Clear;
SQL.Add('select aa.khmc,aa.ysje,bb.czje,max(bb.sj) from t_khjk aa inner join t_khjkjl bb on aa.khmc = :a and bb.khmc = :a group by aa.khmc ,aa.ysje,bb.czje ');
ParamByName('a').AsString := Trim(khmc[m]);
Open;
end;
if Data.Query3.RecordCount>0 then
for c := 1 to bg.ColCount-1 do
bg.Cells[c,m+1]:= Data.Query3.Fields[c-1].AsString;
end;
end;
end;
procedure Tf_cqyskbb.RprinterPrint(Sender: TObject);
var
justify: TPrintJustify;
i,m,n,l,r: integer;
begin
with Sender as TBaseRePort do
begin
justify := pjleft;
zbj := (PageWidth-Rowzdkd)/2;
SetFont(TitleFont.RFontName,TitleFont.RFontSize);
FontColor := TitleFont.RFontColor;
if (fsBold in TitleFont.RFontStyle) then
Bold := True
else
Bold := False;
if (fsUnderline in TitleFont.RFontStyle) then
underline := True
else
underline := False;
if (fsItalic in TitleFont.RFontStyle) then
Italic := True
else
Italic := False;
if (fsStrikeOut in TitleFont.RFontStyle) then
Strikeout := True
else
Strikeout := False;
ypos := Content.TitleHeight;
PrintCenter('超期应收款报表',PageWidth/2);
setFont(BtFont.RFontName,BtFont.RFontSize);
FontColor := BtFont.RFontColor;
if (fsBold in BtFont.RFontStyle) then
Bold := True
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -