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

📄 cqyskbb.pas

📁 这是用Delphi编写的中小企业管理系统
💻 PAS
📖 第 1 页 / 共 2 页
字号:
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 + -