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

📄 bycl.~pas

📁 这是用Delphi编写的中小企业管理系统
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
        CellRect.Left := CellRect.Left+bg.Left;
        CellRect.Right := CellRect.Right+ bg.Left;
        CellRect.Top := bg.Top+ CellRect.Top;
        Grid1.Left := CellRect.Right+1;
        Grid1.Top := CellRect.Top;
        Grid1.Visible := True;
      end;
    end
    else
    begin
      Application.MessageBox('该商品不存在.','提示',64);
      kc := True;
      bg.Cells[spmc,Row1]:='';
      bg.Cells[spdm,Row1]:='';
      bg.Cells[cbj,Row1]:='';
    end;
    Grid1.Tag := 2;
  end
  { DONE : 按商品名称查找商品信息 }
  else if (Col1 = spmc)and(kc= false)and(Trim(bg.Cells[spdm,Row1])='') then
  begin
    With Data.Query1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('select distinct aa.* from t_spjcxx aa inner join t_sprkjl bb on aa.spdm = bb.spdm and (aa.spdm Like :a or aa.spmc like :a)and aa.spzl = :b');
      ParamByName('a').AsString := Trim(bg.Cells[spmc,Row1])+ '%';
      ParamByName('b').AsString := Trim(bg.Cells[kclb,Row1]);
      Open;
    end;
    if Data.Query1.RecordCount>0 then
    begin
      Grid1.Columns.Clear;
      //在数据表格中需要显示2个字段
      For ColNum := 0 to 1 do
      begin
        Column1 := Grid1.Columns.Add;
        Column1.Title.Alignment := taCenter;
        Column1.Title.Font.Color := clRed;
        Case ColNum of
          0: begin
               Column1.FieldName := 'spdm';
               Column1.Title.Caption := '商品代码';
             end;
          1: begin
               Column1.FieldName := 'spmc';
               Column1.Title.Caption := '商品名称';
             end;
        end;
      end;
      DataSource2.DataSet := Data.Query1;
      if Grid1.Visible = False then
      begin
        CellRect := bg.CellRect(Col1,Row1);
        CellRect.Left := CellRect.Left+bg.Left;
        CellRect.Right := CellRect.Right+ bg.Left;
        CellRect.Top := bg.Top+ CellRect.Top;
        Grid1.Left := CellRect.Right+1;
        Grid1.Top := CellRect.Top;
        Grid1.Visible := True;
      end;
    end
    else
    begin
      Application.MessageBox('该商品不存在.','提示',64);
      kc := True;
      bg.Cells[spmc,Row1]:='';
      bg.Cells[spdm,Row1]:='';
      bg.Cells[cbj,Row1]:='';
    end;
    Grid1.Tag := 2;
  end;
end;

procedure Tf_spbycl.Grid1DblClick(Sender: TObject);
begin
 Case Grid1.Tag of
    1: begin
         bg.Cells[kcmc,Row1]:= Trim(Data.Query1.FieldByName('kcmc').AsString);
         bg.Cells[kclb,Row1]:= Trim(Data.Query1.FieldByName('kclb').AsString);
         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[cbj,Row1]:= Format('%8.4f',[CalculateCB(bg.Cells[spdm,Row1])]);
         bg.SetFocus;
         bg.Col := bg.Col+1;
       end;
  end;
  Grid1.Visible := False;
end;

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

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

procedure Tf_spbycl.bgKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  Rect1: TRect;
  col,row: integer;
begin
  kc:= False;
  if (Key = vk_shift)and(Grid1.Visible = True) then //显示网格
  begin
    Grid1.SetFocus;
    Exit;
  end;
  if Key = vk_Delete then //删除当前记录
  begin
    if Application.MessageBox('确实要删除当前记录吗?','提示',mb_YesNo)=ID_Yes then
    begin
      ClearCurrentRow;
      if bg.RowCount>2 then
      begin
        if Row1<>bg.RowCount-1 then
        begin
          For row := Row1+1to (bg.RowCount-1) do
            For col:=0 to bg.ColCount-1 do
              bg.Cells[col,row-1]:= bg.Cells[col,row];
        end;
        ClearEndRow;
        bg.RowCount := bg.RowCount-1;
      end;
      spzl.Caption:= IntToStr(GroupKinds);
      spsl.Caption := IntToStr(GroupSum);
      spje.Caption := Format('%8.4f',[GroupMoney]);
      bg.SetFocus;
      bg.Col := kcmc;
    end;
  end;
  if (Key= vk_insert)and(CurrentIsNull = False)and(Row1 = bg.RowCount-1) then  //添加新行
  begin
    bg.RowCount := bg.RowCount+1;
    bg.Row:= Bg.Row+1;
    bg.Col:=kcmc;
    exit;
  end;
  if Key = vk_Return then    //查询定位计算数据
  begin
    if Grid1.Visible = True then
      Grid1.Visible := False;
    if (Col1 = bzq)and(Trim(bg.Cells[spdm,Row1])<>'') then
    begin
      bzqlb.Clear;
      with Data.Query2 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('select bzq from t_sprkjl where spdm = :a and kcmc = :b');
        ParamByName('a').AsString := Trim(bg.Cells[spdm,Row1]);
        ParamByName('b').AsString := Trim(bg.Cells[kcmc,Row1]);
        Open;
      end;
      while Not Data.Query2.Eof do
      begin
        bzqlb.Items.Add(DateTimeToStr(Data.Query2.FieldByName('bzq').AsDateTime));
        Data.Query2.Next;
      end;
      Rect1 := bg.CellRect(bzq,Row1);
      bzqlb.Left := Rect1.Left+bg.Left;
      bzqlb.width :=Rect1.Right-Rect1.Left+bg.Left;
      bzqlb.Top := bg.Top+ Rect1.Top;
      bzqlb.Visible := True;
      bzqlb.SetFocus;
      bzqlb.ItemIndex := 0;
      Exit;
    end;
    if (Col1 = bzq)and(Trim(bg.Cells[spdm,Row1])<>'') then
    begin
      bzqlb.Clear;
      with Data.Query2 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('select bzq from t_sprkjl where spdm = :a and kcmc = :b');
        ParamByName('a').AsString := Trim(bg.Cells[spdm,Row1]);
        ParamByName('b').AsString := Trim(bg.Cells[kcmc,Row1]);
        Open;
      end;
      while Not Data.Query2.Eof do
      begin
        bzqlb.Items.Add(DateTimeToStr(Data.Query2.FieldByName('bzq').AsDateTime));
        Data.Query2.Next;
      end;
      Rect1 := bg.CellRect(bzq,Row1);
      Rect1.Left := Rect1.Left+bg.Left;
      Rect1.Right :=Rect1.Right+bg.Left;
      Rect1.Top := bg.Top+ Rect1.Top;
      bzqlb.Left := Rect1.Left;
      bzqlb.Top := Rect1.Top+1;
      bzqlb.Visible := True;
      bzqlb.SetFocus;
      bzqlb.ItemIndex := 0;
      Exit;
    end;
    if Trim(bg.Cells[kcmc,Row1])='' then
      Exit;
    if (Col1 = Kcmc)and(Trim(bg.Cells[Kcmc,Row1])<>'') then //不在列表中选择,直接输入库存信息时,判断库存信息是否存在
    begin
      With Data.Query1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('select * from t_kcjcxx where kcdm = :a or kcmc = :a');
        ParamByName('a').AsString := Trim(bg.Cells[Kcmc,Row1]);
        Open;
      end;
      if Data.Query1.RecordCount>0 then
      begin
        bg.Cells[kcmc,Row1]:= Trim(Data.Query1.Fields[1].AsString);
        bg.Cells[kclb,Row1]:= Trim(Data.Query1.Fields[2].AsString);
        bg.SetFocus;
        bg.Col := bg.Col+1;
      end
      else
      begin
        kc := True;
        bg.Cells[kcmc,Row1]:='';
        bg.Cells[kclb,Row1]:='';
      end;
    end          
    else if (Col1 = spdm)and(Trim(bg.Cells[spdm,Row1])<>'')and(Trim(bg.Cells[kcmc,Row1])<>'') then
    begin
      With Data.Query1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('select * from t_spjcxx where spdm in(select distinct spdm from t_sprkjl where spdm =:a and kcmc = :b)');
        ParamByName('a').AsString := Trim(bg.Cells[spdm,Row1]);
        ParamByName('b').AsString := Trim(bg.Cells[kcmc,Row1]);
        Open;
      end;
      if Data.Query1.RecordCount>0 then
      begin
        bg.Cells[spdm,Row1]:= Trim(Data.Query1.Fields[0].AsString);
        bg.Cells[spmc,Row1]:= Trim(Data.Query1.Fields[1].AsString);
        bg.Cells[cbj,Row1]:=Format('%8.4f',[CalculateCB(Trim(Data.Query1.FieldByName('spdm').AsString))]);
        bg.SetFocus;
        bg.Col := bg.Col+1;
      end
      else
      begin
        kc := True;
        bg.Cells[spdm,Row1]:='';
        bg.Cells[spmc,Row1]:='';
        bg.Cells[cbj,Row1]:='';
      end;
    end
    else if (Col1 = spmc)and(Trim(bg.Cells[spmc,Row1])<>'')and(Trim(bg.Cells[spdm,Row1])='')and(Trim(bg.Cells[Kcmc,Row1])<>'') then
    begin
      With Data.Query1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('select * from t_spjcxx where spmc = :a and spdm in(select distinct spdm from t_sprkjl where kcmc = :b)');
        ParamByName('a').AsString := Trim(bg.Cells[spmc,Row1]);
        ParamByName('b').AsString := Trim(bg.Cells[kcmc,Row1]);
        Open;
      end;
      if Data.Query1.RecordCount>0 then
      begin
        bg.Cells[spdm,Row1]:= Trim(Data.Query1.Fields[0].AsString);
        bg.Cells[spmc,Row1]:= Trim(Data.Query1.Fields[1].AsString);
        bg.Cells[cbj,Row1]:= Format('%8.4f',[CalculateCB(Trim(Data.Query1.FieldByName('spdm').AsString))]);
        bg.SetFocus;
        bg.Col := bg.Col+1;
      end
      else
      begin
        kc := True;
        bg.Cells[spdm,Row1]:='';
        bg.Cells[spmc,Row1]:='';
        bg.Cells[cbj,Row1]:='';
      end;
    end
    else
    begin
      bg.SetFocus;
      if bg.Col<bg.ColCount-1 then
        bg.Col := bg.Col+1;
    end;
  end;
end;

procedure Tf_spbycl.bzqlbDblClick(Sender: TObject);
begin
  bg.Cells[bzq,Row1]:= bzqlb.Items[bzqlb.itemIndex];
  bzqlb.Visible := False;
  bg.SetFocus;
end;

procedure Tf_spbycl.bzqlbKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = Vk_Return then
    bzqlb.OnDblClick(Sender);
end;

procedure Tf_spbycl.bzqlbExit(Sender: TObject);
begin
  bzqlb.Visible := False;
  bg.SetFocus;
  bg.Col := je;
  bg.Col := bzq;
end;

procedure Tf_spbycl.qxClick(Sender: TObject);
var
  i,m: Integer;
begin
  kgy.Clear;
  byph.Caption := '';
  spzl.Caption := '0';
  spsl.Caption := '0';
  spje.Caption := '0.0000';
  lb.Visible := False;
  bzqlb.Visible := False;
  Grid1.Visible := False;
  Row1 := 1;
  Col1 := 0;
  for i:=1 to bg.RowCount-1 do
    For m :=0 to bg.ColCount-1 do
      bg.Cells[m,i]:='';
  bg.RowCount := 2;
end;

procedure Tf_spbycl.bcClick(Sender: TObject);
var
  i: integer;
begin
  if Trim(byph.Caption)='' then
  begin
    Application.MessageBox('请添加报溢票号.','提示',64);
    Exit;
  end;
  if Trim(kgy.Text)='' then
  begin
    Application.MessageBox('请输入库管员.','提示',64);
    Exit;
  end
  else
  begin
    with Data.Query1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('select * from t_employee where ygmc = :a and bmmc = ''库存部''');
      ParamByName('a').AsString := Trim(kgy.Text);
      Open;
    end;
    if Data.Query1.RecordCount<1 then
    begin
      Application.MessageBox('该库管员不存在或没有权限.','提示',64);
      Exit;
    end;
  end;
  if GridIsNull = False then
  begin
    Try
      Data.Database.StartTransaction;
      with Data.Query1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('insert t_bycl values (:a,:b,:c,:d,:e,:f)');
        ParamByName('a').AsString := Trim(byph.Caption);
        ParamByName('b').AsString := Trim(kgy.Text);
        ParamByName('c').AsInteger := StrToInt(spzl.Caption);
        ParamByName('d').AsInteger := StrToInt(spsl.Caption);
        ParamByName('e').AsFloat := StrToFloat(spje.Caption);
        ParamByName('f').AsDate := StrToDateTime(sj.Caption);
        ExecSQL;
      end;
      For i := 1 to bg.RowCount-1 do
      begin
        with Data.Query1 do
        begin
          Close;
          SQL.Clear;
          SQL.Add('insert t_bymx Values(:a,:b,:c,:d,:e,:f,:g)');
          ParamByName('a').AsString := Trim(byph.Caption);
          ParamByName('b').AsString := Trim(bg.Cells[kcmc,i]);
          ParamByName('c').AsString := Trim(bg.Cells[spdm,i]);
          ParamByName('d').AsInteger := StrToInt(bg.Cells[sl,i]);
          ParamByName('e').AsFloat := StrToFloat(bg.Cells[cbj,i]);
          ParamByName('f').AsFloat := StrToFloat(bg.Cells[je,i]);
          ParamByName('g').AsDate := StrToDateTime(bg.Cells[bzq,i]);
          ExecSQL;
        end;
        with Data.Query1 do
        begin
          Close;
          SQL.Clear;
          SQL.Add('update t_sprkjl set sl = sl + :a,je = je+ :aa where kcmc =:b and spdm =:c and (bzq>=:d and bzq<:e)');
          ParamByName('a').AsInteger := StrToInt(bg.Cells[sl,i]);
          ParamByName('aa').AsFloat := StrToFloat(bg.Cells[je,i]);
          ParamByName('b').AsString := Trim(bg.Cells[kcmc,i]);
          ParamByName('c').AsString := Trim(bg.Cells[spdm,i]);
          ParamByName('d').AsDate := Trunc(StrToDateTime(bg.Cells[bzq,i]));
          ParamByName('e').AsDate := Trunc(StrToDateTime(bg.Cells[bzq,i]))+1;
          ExecSQL;
        end;
        with Data.Query1 do
        begin
          Close;
          SQL.Clear;
          SQL.Add('update t_kc set kcsl = kcsl + :a where spdm = :c and kcmc = :b');
          ParamByName('a').AsInteger :=  StrToInt(bg.Cells[sl,i]);
          ParamByName('b').AsString := Trim(bg.Cells[kcmc,i]);
          ParamByName('c').AsString := Trim(bg.Cells[spdm,i]);
          ExecSQL;
        end;
      end;
    Data.Database.Commit;
    Application.MessageBox('操作成功.','提示',64);
    qx.OnClick(Sender);
    Except
      Data.Database.Rollback;
      Application.MessageBox('系统出错.','提示',64);
    End;
  end
  else
    Application.MessageBox('表格不能为空.','提示',64);
end;

procedure Tf_spbycl.kgyEnter(Sender: TObject);
begin
  Grid1.Visible := False;
end;

procedure Tf_spbycl.lbEnter(Sender: TObject);
begin
  Grid1.Visible := False;
end;

procedure Tf_spbycl.bgDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  CellRect: TRect;
  zdmc: String;
  zdwidth,zdheight,i: integer;
begin
  if Arow = 0 then
  begin
   zdheight:= 12;
   For i := 0 to bg.ColCount-1 do
    begin
      CellRect := bg.CellRect(i,0);
      Case i of
        kcmc: zdmc := '仓库名称';
        kclb: zdmc := '仓库类别';
        spdm: zdmc := '商品代码';
        spmc: zdmc := '商品名称';
        cbj: zdmc := '成本价';
        sl: zdmc := '数量';
        je: zdmc := '金额';
        bzq: zdmc := '保质期';
      end;
      zdwidth := length(Trim(zdmc));
      bg.Canvas.Font.Color := clRed;
      bg.Canvas.Brush.Color := bg.FixedColor;
      if CellRect.Right <>0 then
      begin
        bg.Canvas.FillRect(CellRect);
        bg.Canvas.TextOut(CellRect.Left+Trunc((bg.ColWidths[i]-zdwidth*6)/2),CellRect.Top+Trunc((bg.RowHeights[0] -zdheight)/2),zdmc );
      end;
    end;
  end;
end;

procedure Tf_spbycl.bgClick(Sender: TObject);
begin
  bg.Repaint;
end;

end.

⌨️ 快捷键说明

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