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

📄 spxs.~pas

📁 已经给出使用的每个SQL Server数据库
💻 ~PAS
📖 第 1 页 / 共 4 页
字号:
unit spxs;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBGrids, StdCtrls, ComCtrls, Grids, ExtCtrls, Buttons,
  RpDefine, RpBase, RpSystem;

type
  Tf_spxs = class(TForm)
    Label2: TLabel;
    Label1: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Shape1: TShape;
    Panel2: TPanel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    xsxj: TEdit;
    xsse: TEdit;
    zj: TEdit;
    xszr: TEdit;
    bg: TStringGrid;
    xsph: TEdit;
    kh: TEdit;
    sj: TDateTimePicker;
    ksb: TComboBox;
    ywy: TEdit;
    lb: TListBox;
    fktj: TEdit;
    Grid1: TDBGrid;
    DataSource1: TDataSource;
    DataSource2: TDataSource;
    bzqlb: TListBox;
    Label13: TLabel;
    dhph: TEdit;
    tj: TBitBtn;
    bc: TBitBtn;
    dy: TBitBtn;
    qx: TBitBtn;
    tc: TBitBtn;
    Rprinter: TRvSystem;
    procedure FormShow(Sender: TObject);
    procedure khChange(Sender: TObject);
    procedure khKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Grid1DblClick(Sender: TObject);
    procedure Grid1Exit(Sender: TObject);
    procedure Grid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure lbKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure lbExit(Sender: TObject);
    procedure lbDblClick(Sender: TObject);
    procedure bgKeyPress(Sender: TObject; var Key: Char);
    procedure bgSelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure bgSetEditText(Sender: TObject; ACol, ARow: Integer;
      const Value: String);
    procedure xsxjChange(Sender: TObject);
    procedure xszrChange(Sender: TObject);
    procedure xszrKeyPress(Sender: TObject; var Key: Char);
    procedure xsseChange(Sender: TObject);
    procedure bgKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure xsphEnter(Sender: TObject);
    procedure ywyExit(Sender: TObject);
    procedure bzqlbDblClick(Sender: TObject);
    procedure bzqlbKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure bzqlbExit(Sender: TObject);
    procedure tjClick(Sender: TObject);
    procedure qxClick(Sender: TObject);
    procedure bcClick(Sender: TObject);
    procedure tcClick(Sender: TObject);
    procedure bgDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect;
      State: TGridDrawState);
    procedure bgClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure dyClick(Sender: TObject);
    procedure RprinterPrint(Sender: TObject);
  private
    { Private declarations }
  public
    Function GroupPrice: real;//统计金额
    Procedure FindNext;
    Procedure ReadDataFromdhph;
    Function CurrentIsNull: Boolean;
    Procedure ClearEndRow;
    Function EditIsNull: Boolean;//判断窗体中编辑框是否为空
    Procedure ClearCurrentRow;
    Function IsGq: Boolean;//判断保质期是否过期
    Function GridIsNull: Boolean;//判断表格是否为空
    Function GroupTax: real;//统计税额
    Function CalculateCbj(spbh: String): real;//计算成本价
    Function GroupSum(spbh: String): Real;overload;//统计商品数量,在保存时判断商品数量是否少于库存下限
    Function GroupSum(spbh,kcmc,bzqx: String): Real;overload;//统计同库存,同商品,同保质期的商品数量
    Function FirstRowIsNull: Boolean;//判断表格首行数据(除保质期为)是否为空
    Procedure SetListPos(WinControl: TWinControl);
    Procedure SelectTable(TableName: String);overload;
    Procedure SelectTable(TableName,FieldName: String;FieldValue: Variant);Overload;//参数FieldName为查询条件
    { Public declarations }
  end;

var
  f_spxs: Tf_spxs;
  Row1: Integer = 1;//记录当前被选中的单元格的横坐标
  Col1: Integer = 0;//记录当前被选中的单元格的纵坐标
  kc: Boolean= False;//在设置库存信息时,如果库存信息不存在会清空库存信息,使用该变量防止
  //清空库存信息时再次触发列表的OnSetEditText事件
  zrb: Real = 0.0;//记录折让比
  Sumzdkd: real=0.0;// 字段总宽度
  Rowzdkd: Real=0.0;//每行字段总宽度
  zbj: real=0.0; //正文左边距
  AZdmc: Array[0..12]of String=('仓库名称','仓库类别','商品代码','商品名称','基本单位','数量','折扣','单价','税率','税额','无折让金额','交易金额','保质期');
  AZdkd : Array[0..12]of Real=(1,1,1,1,1,1,1,1,1,1,1,1,1); //数组中的元素对应表格中相应字段的宽度
  zds : integer = 13;//表格字段数
  Cols: integer = 7;//每行列数
implementation
  uses DataModal;
{$R *.dfm}
Const
  ckmc = 0;
  cklb = 1;
  spdm = 2;
  spmc = 3;
  jbdw= 4;
  num = 5;
  zk = 6;
  dj = 7;
  sl = 8;
  se = 9;
  wzrje = 10;
  je = 11;
  bzq = 12;
procedure Tf_spxs.FormShow(Sender: TObject);
begin
  ksb.ItemIndex := 0;
  sj.Date := Now;
end;

procedure Tf_spxs.khChange(Sender: TObject);
begin
  fktj.Clear;
end;

procedure Tf_spxs.khKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if dhph.Focused = False then
    if Trim(xsph.Text)='' then
    begin
      Application.MessageBox('请添加采购票号.','提示',64);
      Exit;
    end;
  if (Key = vk_Next)and(Sender is TEdit) then
  begin
    if TEdit(Sender).Name = 'kh' then
    begin
      SelectTable('t_khzl');
      if lb.Items.Count>0 then
      begin
        lb.Tag := 1;
        SetListPos(kh);
        lb.SetFocus;
        lb.ItemIndex := 0;
      end
      else
        Application.MessageBox('客户资料不存在.','提示',64);
    end
    else if TEdit(Sender).Name = 'ywy' then
    begin
      SelectTable('t_employee','bmmc','销售部');
      if lb.Items.Count> 0 then
      begin
        lb.Tag := 2;
        SetListPos(ywy);
        lb.SetFocus;
        lb.ItemIndex := 0;
      end
      else
        Application.MessageBox('客户不存在.','提示',64);
    end
    else if TEdit(Sender).Name ='dhph'then
    begin
      SelectTable('t_dhph','bs',0);
      if lb.Items.Count>0 then
      begin
        lb.Tag := 3;
        SetListPos(dhph);
        lb.SetFocus;
        lb.ItemIndex := 0;
      end
      else
        Application.MessageBox('订货票号不存在或已经完成送货.','提示',64);
    end;
  end
  else if Key = vk_Return  then
  begin
    if Sender is TEdit then
    begin
      if TEdit(Sender).Name = 'kh' then
      begin
        With Data.Query1 do
        begin
          Close;
          SQL.Clear;
          SQL.Add('select * from t_khzl where khdm = :a or khmc = :a');
          ParamByName('a').AsString := Trim(kh.Text);
          Open;
        end;
        if Data.Query1.RecordCount>0 then
        begin
          kh.Text := Data.Query1.Fields[1].AsString;
          fktj.Text := Data.Query1.FieldByName('fktj').AsString;
          ksb.ItemIndex := ksb.Items.IndexOf(Trim(Data.Query1.FieldByName('ksb').AsString));
        end
        else
        begin
          Application.MessageBox('该客户不存在.','提示',64);
          kh.Clear;
          kh.SetFocus;
          Exit;
        end;
      end
      else if TEdit(Sender).Name = 'ywy' then
      begin
        With Data.Query1 do
        begin
          Close;
          SQL.Clear;
          SQL.Add('select * from t_employee where (ygdm = :a or ygmc = :a) and bmmc = :b');
          ParamByName('a').AsString := Trim(ywy.Text);
          ParamByName('b').AsString := '销售部';
          Open;
        end;
        if Data.Query1.RecordCount>0 then
          ywy.Text := Data.Query1.Fields[1].AsString
        else
        begin
          Application.MessageBox('该业务员不存在.','提示',64);
          ywy.Clear;
          ywy.SetFocus;
          Exit;
        end;
      end
      else if TEdit(Sender).Name = 'dhph' then
        ReadDataFromdhph;
    end;
    FindNext;
  end;
end;

procedure Tf_spxs.SetListPos(WinControl: TWinControl);
begin
  lb.Top := WinControl.Top;
  lb.Left := WinControl.Left+(WinControl.Width-lb.Width);
  lb.Visible := True;
  lb.SetFocus;
end;

procedure Tf_spxs.Grid1DblClick(Sender: TObject);
begin
  Case Grid1.Tag of
    1: begin
         bg.Cells[ckmc,Row1]:= Trim(Data.Query1.FieldByName('kcmc').AsString);
         bg.Cells[cklb,Row1]:= Trim(Data.Query1.FieldByName('kclb').AsString);
         if Row1 = 1 then
           bg.Cells[zk,Row1]:= '1.0';
         bg.SetFocus;
         bg.Col := bg.Col+1;
       end;
    2: begin
         bg.Cells[spdm,Row1]:= Trim(Data.Query1.FieldByName('spdm').AsString);
         bg.Cells[spmc,Row1]:= Trim(Data.Query1.FieldByName('spmc').AsString);
         bg.Cells[jbdw,Row1]:= Trim(Data.Query1.FieldByName('jbdw').AsString);
         bg.Cells[dj,Row1]:= Trim(Data.Query1.FieldByName('bzsj').AsString);
         if (Trim(ksb.Text)='应税内含')or(Trim(ksb.Text)='应税外加') then
           bg.Cells[sl,Row1]:= Trim(Data.Query1.FieldByName('sl').AsString)
         else
           bg.Cells[sl,Row1]:= '0.0';
         bg.SetFocus;
         bg.Col := bg.Col+1;
       end;
  end;
  Grid1.Visible := False;
end;

procedure Tf_spxs.Grid1Exit(Sender: TObject);
begin
  Grid1.Visible := False;
end;

procedure Tf_spxs.Grid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = vk_Return then
    Grid1.OnDblClick(Sender);
end;

procedure Tf_spxs.lbKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = vk_Return then
  begin
    case lb.Tag of
      1: begin
           kh.Text := lb.Items[lb.ItemIndex];
           kh.OnKeyDown(kh,Key,shift);
           kh.SetFocus;
         end;
      2: begin
           ywy.Text := lb.Items[lb.ItemIndex];
           ywy.SetFocus;
         end;
      3: begin
           dhph.Text := lb.Items[lb.ItemIndex];
           dhph.SetFocus;
         end;
    end;
    lb.Visible := False;
  end;
end;

procedure Tf_spxs.lbExit(Sender: TObject);
begin
  lb.Visible := False;
end;

procedure Tf_spxs.lbDblClick(Sender: TObject);
var
  Key: Word;
begin
  Key:= vk_ReTurn;
  lb.OnKeyDown(nil,Key,[ssLeft]);
end;

procedure Tf_spxs.bgKeyPress(Sender: TObject; var Key: Char);
var
  i: Boolean;
begin
  if Col1 = num then  //防止在数量单元格输入非法字符
  begin
    i := (Key<#8)or(Key>#8)and(Key<#48)or(Key>#57);
    if i then
      Key := #0;
  end
  else if Col1 = zk then
  begin
    i := (Key<#8)or(Key>#8)and(Key<#46)or(Key>#46)and(Key<#48)or(Key>#57);
    if i then
      Key := #0;
  end;
end;

procedure Tf_spxs.bgSelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
begin
  Row1 := ARow;
  Col1:= ACol;
  //在商品编号为空时,可以编辑库存信息
  //在商品名称为空,库存信息不为空时,可以编辑商品编号,在商品编号为空,库存信息不为空时,可以商品名称
  if Trim(dhph.Text)<>'' then
  begin
    bg.Options := bg.Options -[goEditing];
  end
  else if (Col1 = ckmc)and(Trim(bg.Cells[spdm,Row1])='')or(Col1 = spdm)and
    (Trim(bg.Cells[spmc,Row1])='')and(Trim(bg.Cells[ckmc,Row1])<>'')
      or(Col1=spmc)and(Trim(bg.Cells[spdm,Row1])='')and(Trim(bg.Cells[ckmc,Row1])<>'')or
      (Col1 = num)and(Trim(bg.Cells[spdm,Row1])<>'')or(Col1=zk)and(Trim(bg.Cells[spdm,Row1])<>'')then
    bg.Options := bg.Options +[goEditing]
  else
    bg.Options := bg.Options -[goEditing];
end;

procedure Tf_spxs.bgSetEditText(Sender: TObject; ACol, ARow: Integer;
  const Value: String);
var
  Column1: TColumn;
  cellRect: TRect; //得到当前单元格的区域,用于定位表格
  ColNum: Integer;
begin
  if (Trim(kh.Text)='')and(kc= False) then
  begin
    Application.MessageBox('请输入客户信息.','提示',64);
    kc := True;
    kh.SetFocus;
    Exit;
  end;
  if (Trim(ksb.Text)='')and(kc= False) then
  begin
    Application.MessageBox('请选择课税别','提示',64);
    kc := True;
    ksb.SetFocus;
    Exit;
  end;
  if (Trim(ywy.Text)='')and(kc = False) then
  begin
    Application.MessageBox('请输入业务员','提示',64);
    kc := True;
    ywy.SetFocus;
    Exit;
  end;
  if Trim(bg.Cells[ckmc,row1])<>'' then
  begin
    kh.Enabled := false;
    ksb.Enabled := false;
  end;
  if Trim(bg.Cells[jbdw,Row1])<>'' then //基本单位不为空即表示商品代码,商品名称不为空,
  begin
    if (Trim(bg.Cells[Num,Row1])<>'')and(Trim(bg.Cells[dj,Row1])<>'')and(Trim(bg.Cells[zk,Row1])<>'') then //数量,单价,折扣不为空
    begin
      With Data.Query1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('select * from t_spjcxx where spdm = :a');
        ParamByName('a').AsString := Trim(bg.Cells[spdm,Row1]);
        Open;
      end;
      if (Trim(ksb.Text)='应税内含')or(Trim(ksb.Text)='应税外加')then
        bg.Cells[se,Row1]:= Format('%8.4f',[StrToFloat(bg.Cells[dj,Row1])*StrToInt(bg.Cells[num,row1])*StrToFloat(bg.Cells[sl,Row1])*(1-zrb)])
      else
        bg.Cells[se,Row1]:= '0.0';
      if StrToFloat(bg.Cells[zk,Row1])>1 then
      begin
        Application.MessageBox('折扣不能大于一.','提示',64);
        bg.Cells[zk,Row1] := '1.0';
      end;
      bg.Cells[wzrje,Row1]:=Format('%8.4f',[StrToInt(bg.Cells[num,row1])*StrToFloat(bg.Cells[dj,row1])*StrToFloat(bg.Cells[zk,Row1])]);

⌨️ 快捷键说明

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