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

📄 xsglxt.pas

📁 用delphi编写的销售管理系统
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit xsglxt;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Grids, ExtCtrls, jpeg, DBGrids, DB,mp;

type
  TForm24 = class(TForm41)
    Panel2: TPanel;
    StringGrid1: TStringGrid;
    Panel1: TPanel;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    BitBtn7: TBitBtn;
    BitBtn8: TBitBtn;
    Panel3: TPanel;
    Edit8: TEdit;
    ComboBox2: TComboBox;
    Image2: TImage;
    Label5: TLabel;
    Label15: TLabel;
    Label2: TLabel;
    Label14: TLabel;
    Label1: TLabel;
    Label4: TLabel;
    Label13: TLabel;
    ComboBox3: TComboBox;
    Edit4: TEdit;
    Shape3: TShape;
    Label3: TLabel;
    Shape1: TShape;
    Label16: TLabel;
    Label8: TLabel;
    Label7: TLabel;
    Label17: TLabel;
    Label12: TLabel;
    Label18: TLabel;
    Label6: TLabel;
    Label19: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label9: TLabel;
    Shape2: TShape;
    Label21: TLabel;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    ListBox1: TListBox;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
    procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    Function  JCxmlb : Boolean;//检查项目列表是否有误
    Function IsNull: Boolean;
    Function AfterIsNull: Boolean;
    Function CurrentIsCF: Boolean;
    procedure StringGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure BitBtn4Click(Sender: TObject);
    Function FirstIsNull: Boolean ;
    procedure Edit8Exit(Sender: TObject);
    procedure Clear;//窗体初始化
    Procedure ClearString;
    Function GroupSL(SPBH: String): Integer;
    Function Kinds: Integer;
    Function SumSL: Integer;
    Function SumPrice: Real;
    Procedure SelectSPxx;
    Procedure ClearStringEnd;
    Procedure ClearForDd;
    procedure BitBtn7Click(Sender: TObject);
    procedure BitBtn3MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure BitBtn3MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Edit8KeyPress(Sender: TObject; var Key: Char);
    procedure ComboBox3KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit8KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit4KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure ListBox1DblClick(Sender: TObject);
    procedure ListBox1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBGrid1DblClick(Sender: TObject);
    procedure DBGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
      const Value: String);
    procedure ComboBox3KeyPress(Sender: TObject; var Key: Char);
    procedure Edit2KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit2Exit(Sender: TObject);
    procedure ComboBox2KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form24: TForm24;
  jj: Real= 0.0;//记录商品进价,用来修改库存金额
  isdy: Boolean = False ;//判断是否按订单销售
  ddh: String ;//在按订单销售时,防止在保存过程中更改订单号
  x,y: Integer;
  Ss:Boolean = False ;//判断当焦点在StringGrid1上时是否按回车键
  s1: Boolean = False;//在StringGrid1的OnSetEditText事件中是否执行相关代码,其作用是防止连续出现对话框
  s2: Boolean = False; //在StringGrid1的OnSetEditText事件中是否执行相关代码,其作用是防止删除行时,统计的数量金额错误

implementation
   uses spxsgl,datamodal, khxx3;
{$R *.dfm}

procedure TForm24.FormCreate(Sender: TObject);
begin
  StringGrid1.Cells[0,0]:='        商品编号';
  StringGrid1.Cells[1,0]:='      商品名称';
  StringGrid1.Cells[2,0]:='      数量';
  StringGrid1.Cells[3,0]:='      金额';
  StringGrid1.Cells[4,0]:='    折扣';
  StringGrid1.Cells[5,0]:='        客户编号';
  StringGrid1.Cells[6,0]:='       客户全称';
  StringGrid1.Cells[7,0]:='       销售票号';
  StringGrid1.Cells[8,0]:='    销售日期';
  Label16.Caption := FormatDateTime('yyyy-mm-dd',Now());
end;

procedure TForm24.FormShow(Sender: TObject);
begin
  Label21.Caption:= czy;
  ListBox1.Items.Clear;
    with Data.ADOQuery1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('select distinct 客户全称 from 客户基础信息表');
      Open;
    end;
    while not Data.ADOQuery1.Eof do
    begin
      ListBox1.Items.Add(Data.ADOQuery1.FieldByName('客户全称').AsString);
      Data.ADOQuery1.Next;
    end;
    ComboBox3.Clear;
    with Data.ADOQuery1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('select * from 订货票号表 where 是否可用 = 0');
      Open;
    end;
    if Data.ADOQuery1.RecordCount>0 then
    while not Data.ADOQuery1.Eof do
    begin
      ComboBox3.Items.Add(Data.ADOQuery1.FieldByName('订单号').AsString);
      Data.ADOQuery1.Next;
    end;
  ComboBox2.ItemIndex := 0;
  BitBtn3.SetFocus;
end;

procedure TForm24.BitBtn3Click(Sender: TObject);
var
  s,m: String;
  i: integer;
begin
  Label16.Caption := FormatDateTime('yyyy-mm-dd',Now());
  s:= 'XH'+ FormatDateTime('yyyymmdd',Now());
  With Data.ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('select max(销售票号) as ss From 销售票号表 ');
    Open;
  end;
  If Data.ADOQuery1.FieldByName('ss').Value = null then
    s := s + '001'
  else
  begin
    m:= Trim(Data.ADOQuery1.FieldByName('ss').Value) ;
    i:= StrToInt(Trim(Copy(m,11,5))) ;
    if i<9 then
      s:= s + '00'+ InttoStr(i +1)
    else if i<99 then
      s:= s + '0'+ InttoStr(i +1)
    else
      s:= s +InttoStr(i +1);
  end;
  Label3.Caption := s;
  Edit4.SetFocus;
end;

procedure TForm24.StringGrid1KeyPress(Sender: TObject; var Key: Char);
var
  mm: Boolean;
begin
  if y = 2 then
  begin
    mm := (Key <#8)or(Key >#8)and(Key<#48)or(Key>#57);
    if mm then
      Key := #0;
  end; 
end;

procedure TForm24.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  y := ACol;
  x := ARow;
  if isdy = False then
  begin
    if (ACol = 1)and( Trim(StringGrid1.Cells[0,x])='')or(ACol = 2)and(Trim(StringGrid1.Cells[0,x])<>'') then
      StringGrid1.Options := StringGrid1.Options +[goEditing]
    else
      StringGrid1.Options := StringGrid1.Options -[goEditing];
  end
  else
    StringGrid1.Options := StringGrid1.Options -[goEditing];
end;

function TForm24.JCxmlb: Boolean;
var
  a,b: integer;
begin
  JCxmlb:= True;
  for a := 1 to StringGrid1.RowCount-1 do
    For b := 0 to StringGrid1.ColCount-1 do
    begin
      if StringGrid1.Cells[b,a]='' then
      begin
         Jcxmlb := False;
         break;
      end;
    end;
end;

procedure TForm24.StringGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  R,L: Integer;
  cp: String;// 记录当前行的价格
  cl: String;//记录当前行的数量
begin
  if Isdy = False then
  begin
    S1 := False;
    s2 := False;
    ss := False;
    cp := '';
    cl:= '';
    if key = VK_Delete then
    begin
      if StringGrid1.RowCount>2 then
      begin
        If Application.MessageBox('确实要删除该条记录吗?','提示',MB_YESNO )= ID_Yes then
        begin
         if IsNull = False then
         begin
           cl := StringGrid1.Cells[2,x];
           cp := StringGrid1.Cells[3,x];
           if CurrentIsCf = False then
             Label17.Caption := IntToStr(StrToInt(Label17.Caption)-1);
         end;
          ClearString;
          if x <> StringGrid1.RowCount-1 then
          begin
            For r := x+1 to StringGrid1.RowCount-1 do
              For l := 0 to StringGrid1.ColCount-1 do
                StringGrid1.Cells[l,r-1]:= StringGrid1.Cells[l,r];
          end;
          ClearStringEnd;
          StringGrid1.RowCount := StringGrid1.RowCount-1;
          s2 := True;
          if Trim(cl)<>'' then
            Label18.Caption := IntToStr(StrToInt(Label18.Caption)- StrToInt(cl));
          if Trim(cp)<>'' then
            Label19.Caption := FloatToStr(StrToFloat(Label19.Caption)-StrToFloat(cp));
        StringGrid1.SetFocus;
        StringGrid1.Col := 2;
        StringGrid1.Col := 1;
        Exit;
        end;
      end
      else if  StringGrid1.RowCount = 2 then
      begin
        If Application.MessageBox('确实要删除该条记录吗?','提示',MB_YESNO )= ID_Yes then
        begin
          ClearString;
          Label17.Caption := '0';
          Label18.Caption :='0';
          Label19.Caption := '0.0';
          StringGrid1.SetFocus;
          StringGrid1.Col := 2;
          StringGrid1.Col := 1;
        end;
      end;
    end;
    if (key = Vk_Next)and(DBGrid1.Visible = True)then
    begin
      DBGrid1.SetFocus;
      Exit;
    end;
    if (Key = VK_Down)and(IsNull = False)and(x = StringGrid1.RowCount-1) then
    begin
      StringGrid1.RowCount := StringGrid1.RowCount+1;
      StringGrid1.Cells[5,StringGrid1.RowCount-1]:= StringGrid1.Cells[5,StringGrid1.RowCount-2];
      StringGrid1.Cells[6,StringGrid1.RowCount-1]:= StringGrid1.Cells[6,StringGrid1.RowCount-2];
      StringGrid1.Cells[4,StringGrid1.RowCount-1]:= '1.0';
      StringGrid1.Cells[7,StringGrid1.RowCount-1]:= StringGrid1.Cells[7,StringGrid1.RowCount-2];
      StringGrid1.Cells[8,StringGrid1.RowCount-1]:= StringGrid1.Cells[8,StringGrid1.RowCount-2];
      StringGrid1.Col := 1;
      Exit;
    end;
    if key = vk_ReTurn then
      if Trim(StringGrid1.Cells[0,x])='' then
      begin
        Ss := True;
        DataSource1.DataSet := nil;
        DBGrid1.Visible := False;
        SelectSPXX;
        if Data.ADOQuery1.RecordCount>1 then
        begin
          DataSource1.DataSet := Data.ADOQuery1;
          DBGrid1.Visible := True;
          DBGrid1.SetFocus;
        end
        else if Data.ADOQuery1.RecordCount = 1  then
        begin
          StringGrid1.Cells[0,x]:= Data.ADOQuery1.FieldByName('商品编号').Value;
          StringGrid1.Cells[1,x]:= Data.ADOQuery1.FieldByName('商品名称').Value;
          StringGrid1.SetFocus;
          StringGrid1.Col := 2;
        end
        else
        begin
          Application.MessageBox('该商品不存在。','提示',64);
          ClearString;
          if StringGrid1.RowCount>2 then
            StringGrid1.RowCount := StringGrid1.RowCount-1;
        end;
      end;
      if (Key = VK_Shift)and(JCxmlb = True) then
        Edit2.SetFocus;
  end
  else
  begin
    if (Key = VK_Shift)and(JCxmlb = True) then
      Edit2.SetFocus;
  end;
end;


procedure TForm24.BitBtn4Click(Sender: TObject);
var
  i,Sum: Integer;
begin
  if Trim(Edit4.Text)<>'' then

⌨️ 快捷键说明

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