📄 cgjh.pas
字号:
unit cgjh;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, ImgList, ComCtrls, StdCtrls, ToolWin, Grids,
Buttons, DBGrids, DB,Printers, RpDefine, RpBase, RpSystem;
type
Tf_cgjh = class(TForm)
Panel2: TPanel;
Label2: TLabel;
bg: TStringGrid;
Label1: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
cgph: TEdit;
cs: TEdit;
sj: TDateTimePicker;
ksb: TComboBox;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
jhxj: TEdit;
jhse: TEdit;
zj: TEdit;
jhzr: TEdit;
cgy: TEdit;
lb: TListBox;
fktj: TEdit;
DataSource1: TDataSource;
Grid1: TDBGrid;
Timer: TDateTimePicker;
Label11: TLabel;
Label12: TLabel;
Shape1: TShape;
tc: TBitBtn;
Rprinter: TRvSystem;
tj: TSpeedButton;
bc: TSpeedButton;
qx: TSpeedButton;
dy: TSpeedButton;
procedure FormShow(Sender: TObject);
procedure csKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure lbKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure lbDblClick(Sender: TObject);
procedure bgSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure bgSetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: String);
procedure bgKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Grid1DblClick(Sender: TObject);
procedure Grid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure bgKeyPress(Sender: TObject; var Key: Char);
procedure TimerKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure TimerClick(Sender: TObject);
procedure TimerExit(Sender: TObject);
procedure csChange(Sender: TObject);
procedure cgyExit(Sender: TObject);
procedure jhzrKeyPress(Sender: TObject; var Key: Char);
procedure jhzrChange(Sender: TObject);
procedure jhseChange(Sender: TObject);
procedure Grid1Exit(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure qxClick(Sender: TObject);
procedure lbExit(Sender: TObject);
procedure cgphEnter(Sender: TObject);
procedure tcClick(Sender: TObject);
procedure RprinterPrint(Sender: TObject);
procedure dyClick(Sender: TObject);
procedure tjClick(Sender: TObject);
procedure bcClick(Sender: TObject);
procedure bgDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect;
State: TGridDrawState);
procedure bgClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Function EndIsNull: Boolean; // 判断网格最后一行是否有空项
Procedure ClearCurrentRow;
Procedure ClearEndRow;
Procedure FindNext;
Function GridIsNull: Boolean;//判断表格是否为空
Function FirstRowIsNull: Boolean;//判断表格首行数据(除保质期为)是否为空
Function EditIsNull: Boolean;//判断窗体中编辑框是否为空
Function IsNull: Boolean;//判断表格除保质期字段是否为空
Function GroupPrice: real;//统计金额
Function GroupTax: real;//统计税额
Function GroupSum(spbh: String): Real;//统计商品数量,在保存时判断商品数量是否超过库存上限
Procedure SelectTable(TableName: String);overload;
Procedure SelectTable(TableName,FieldName: String;FieldValue: Variant);Overload;//参数FieldName为查询条件
Procedure SetListPos(WinControl: TWinControl);
Function CurrentIsNull: Boolean;
end;
var
f_cgjh: Tf_cgjh;
Row1: Integer = 1;//记录当前被选中的单元格的横坐标
Col1: Integer = 0;//记录当前被选中的单元格的纵坐标
kc: Boolean= False;//在设置库存信息时,如果库存信息不存在会清空库存信息,使用该变量防止
//清空库存信息时再次触发列表的OnSetEditText事件
fz: Boolean = False;//用于在表格中复制行
zrb: Real = 0.0;//记录折让比
TempField: String ='';
Sumzdkd: real=0.0;// 字段总宽度
Rowzdkd: Real=0.0;//每行字段总宽度
zbj: real=0.0; //正文左边距
AZdmc: Array[0..13]of String=('仓库名称','仓库类别','商品代码','商品名称','基本单位','采购单位','数量','折扣','单价','税率','税额','无折让金额','交易金额','保质期');
AZdkd : Array[0..13]of Real=(1,1,1,1,1,1,1,1,1,1,1,1,1,1); //数组中的元素对应表格中相应字段的宽度
zds : integer = 14;//表格字段数
Cols: integer = 7;//每行列数
implementation
uses DataModal;
{$R *.dfm}
const
ckmc = 0;
cklb = 1;
spdm = 2;
spmc = 3;
jbdw= 4;
cgdw =5;
num = 6;
zk = 7;
dj = 8;
sl = 9;
se = 10;
wzrje = 11;
je = 12;
bzq = 13;
procedure Tf_cgjh.FormShow(Sender: TObject);
begin
ksb.ItemIndex := 0;
sj.Date := Now;
timer.Date := Now;
end;
procedure Tf_cgjh.FindNext;
begin
if FindNextControl(ActiveControl,True,False,False)is TEdit then
TEdit(FindNextControl(ActiveControl,True,False,False)).SetFocus
else if FindNextControl(ActiveControl,True,False,False)is TComboBox then
TComboBox(FindNextControl(ActiveControl,True,False,False)).SetFocus
else if FindNextControl(ActiveControl,True,False,False)is TDateTimePicker then
TDateTimePicker(FindNextControl(ActiveControl,True,False,False)).SetFocus
else if FindNextControl(ActiveControl,True,False,False)is TStringGrid then
begin
TStringGrid(FindNextControl(ActiveControl,True,False,False)).SetFocus;
bg.Col := 0;
bg.Cells[zk,1]:= '1.0';
end;
end;
procedure Tf_cgjh.csKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = vk_Next)and(Sender is TEdit) then
begin
if TEdit(Sender).Name = 'cs' then
begin
SelectTable('t_cszl');
lb.Tag := 1;
SetListPos(cs);
lb.SetFocus;
lb.ItemIndex := 0;
end
else if TEdit(Sender).Name = 'cgy' then
begin
SelectTable('t_employee','bmmc','采购部');
lb.Tag := 2;
SetListPos(cgy);
lb.SetFocus;
lb.ItemIndex := 0;
end;
end
else if Key = vk_Return then
begin
if Sender is TEdit then
begin
if TEdit(Sender).Name = 'cs' then
begin
With Data.Query1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from t_cszl where csdm = :a or csmc = :a');
ParamByName('a').AsString := Trim(cs.Text);
Open;
end;
if Data.Query1.RecordCount>0 then
begin
cs.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);
cs.Clear;
cs.SetFocus;
Exit;
end;
end
else if TEdit(Sender).Name = 'cgy' 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(cgy.Text);
ParamByName('b').AsString := '采购部';
Open;
end;
if Data.Query1.RecordCount>0 then
cgy.Text := Data.Query1.Fields[1].AsString
else
begin
Application.MessageBox('该采购员不存在.','提示',64);
cgy.Clear;
cgy.SetFocus;
Exit;
end;
end;
end;
FindNext;
end;
end;
procedure Tf_cgjh.SelectTable(TableName: String);
begin
With Data.Query1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from '+ TableName);
Open;
end;
lb.Clear;
if Data.Query1.RecordCount>0 then
while Not Data.Query1.Eof do
begin
lb.Items.Add(Data.Query1.Fields[1].AsString);
Data.Query1.Next;
end;
end;
procedure Tf_cgjh.SetListPos(WinControl: TWinControl);
begin
lb.Top := WinControl.Top;
lb.Left := WinControl.Left+(WinControl.Width-lb.Width);
lb.Visible := True;
lb.SetFocus;
end;
procedure Tf_cgjh.lbKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = vk_Return then
begin
case lb.Tag of
1: begin
cs.Text := lb.Items[lb.ItemIndex];
cs.OnKeyDown(cs,Key,shift);
cs.SetFocus;
end;
2: begin
cgy.Text := lb.Items[lb.ItemIndex];
cgy.SetFocus;
end;
end;
lb.Visible := False;
end;
end;
procedure Tf_cgjh.lbDblClick(Sender: TObject);
var
Key: Word;
begin
inherited;
Key:= vk_ReTurn;
lb.OnKeyDown(nil,Key,[ssLeft]);
end;
procedure Tf_cgjh.bgSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
begin
Row1 := ARow;
Col1:= ACol;
//在商品编号为空时,可以编辑库存信息
//在商品名称为空,库存信息不为空时,可以编辑商品编号,在商品编号为空,库存信息不为空时,可以编辑商品名称
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_cgjh.bgSetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: String);
var
Column1: TColumn;
cellRect: TRect; //得到当前单元格的区域,用于定位表格
ColNum: Integer;
hsgx: Integer;//记录商品采购单位与基本单位的换算关系
tax: real;//记录税额
begin
if (Trim(cs.Text)='')and(kc= False) then
begin
Application.MessageBox('请输入厂商信息.','提示',64);
kc := True;
cs.SetFocus;
Exit;
end;
if (Trim(ksb.Text)='')and(kc= False) then
begin
Application.MessageBox('请选择课税别','提示',64);
kc := True;
ksb.SetFocus;
Exit;
end;
if (Trim(cgy.Text)='')and(kc = False) then
begin
Application.MessageBox('请输入采购员','提示',64);
kc := True;
cgy.SetFocus;
Exit;
end;
if Trim(bg.Cells[ckmc,row1])<>'' then
begin
cs.Enabled := false;
ksb.Enabled := false;
end;
if Trim(bg.Cells[cgdw,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;
hsgx := Data.Query1.FieldByName('hsgx').AsInteger;
tax := Data.Query1.FieldByName('se').AsFloat;
if (Trim(ksb.Text)='应税内含')or(Trim(ksb.Text)='应税外加')then
bg.Cells[se,Row1]:= Format('%8.4f',[StrToInt(bg.Cells[num,row1])*hsgx*tax*(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])*hsgx*StrToFloat(bg.Cells[zk,Row1])]);
bg.Cells[je,Row1]:= Format('%8.4f',[StrToInt(bg.Cells[num,row1])*StrToFloat(bg.Cells[dj,row1])*hsgx*StrToFloat(bg.Cells[zk,Row1])*(1-zrb)]);
end
else
begin
kc := True;
bg.Cells[je,Row1]:='';
bg.Cells[wzrje,Row1]:='' ;
if (Trim(bg.Cells[Num,Row1])='')or(Trim(bg.Cells[dj,Row1])='') then
bg.Cells[se,Row1]:= '';
end;
jhxj.Text := Format('%8.4f',[GroupPrice]);
jhse.Text := Format('%8.4f',[GroupTax]);
end
else if (Col1 = ckmc)and(kc= False) then
begin
With Data.Query1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from t_kcjcxx where kcdm like :a or kcmc like :a');
ParamByName('a').AsString := Trim(bg.Cells[ckmc,Row1])+ '%';
Open;
end;
if Data.Query1.RecordCount>0 then
begin
Grid1.Columns.Clear;
Column1 := Grid1.Columns.Add;
Column1.FieldName := 'kcdm';
Column1.Title.Caption := '库存代码';
Column1.Title.Alignment := taCenter;
Column1.Title.Font.Color := clRed;
Column1 := Grid1.Columns.Add;
Column1.FieldName := 'kcmc';
Column1.Title.Alignment := taCenter;
Column1.Title.Font.Color := clRed;
Column1.Title.Caption := '库存名称';
Column1 := Grid1.Columns.Add;
Column1.FieldName := 'kclb';
Column1.Title.Alignment := taCenter;
Column1.Title.Font.Color := clRed;
Column1.Title.Caption := '库存类别';
DataSource1.DataSet := Data.Query1;
if Grid1.Visible = False then
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -