📄 ycbhs.~pas
字号:
unit ycbhs;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ToolWin, Buttons, ExtCtrls, Grids, DBGrids, DB,
ADODB, ComCtrls;
type
Tf_cbhs = class(TForm)
Label1: TLabel;
Label2: TLabel;
DBGrid1: TDBGrid;
Panel1: TPanel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
kgy: TEdit;
Label3: TLabel;
DataSource1: TDataSource;
lb: TListBox;
sj: TDateTimePicker;
procedure kgyKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure BitBtn1Click(Sender: TObject);
procedure lbKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure lbDblClick(Sender: TObject);
procedure lbExit(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
Procedure SelectTable;
Procedure selectycbhs;
Procedure Showycbhs;
Procedure SetListPos(WinControl: TWinControl);
{ Public declarations }
end;
var
f_cbhs: Tf_cbhs;
implementation
uses DataModal;
{$R *.dfm}
procedure Tf_cbhs.kgyKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = vk_Next then
begin
SelectTable;
SetListPos(kgy);
lb.Visible := True;
lb.SetFocus;
end
end;
procedure Tf_cbhs.SelectTable;
begin
with Data.Query2 do
begin
Close;
SQL.Clear;
SQL.Add('select ygmc from t_employee where bmmc = ''库存部''');
Open;
end;
lb.Clear;
while Not Data.Query2.Eof do
begin
lb.Items.Add(Data.Query2.Fields[0].Asstring);
Data.Query2.Next;
end;
if lb.Items.Count>0 then
lb.ItemIndex := 0;
end;
procedure Tf_cbhs.SetListPos(WinControl: TWinControl);
begin
lb.Top := WinControl.Top;
lb.Left := WinControl.Left+WinControl.Width;
lb.Visible := True;
lb.SetFocus;
end;
procedure Tf_cbhs.BitBtn1Click(Sender: TObject);
begin
if Trim(kgy.Text)='' then
begin
Application.MessageBox('请输入库管员.','提示',64);
Exit;
end
else
begin
with Data.Query2 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.Query2.RecordCount<1 then
begin
Application.MessageBox('该库管员不存在或没有权限.','提示',64);
Exit;
end;
end;
selectycbhs;
if Data.Query1.RecordCount>0 then
begin
Application.MessageBox('该月已经进行了成本核算.','提示',64);
Exit;
end;
Try
with Data.Query1 do
begin
Close;
SQL.Clear;
SQL.Add('select spdm,sum(je)/sum(sl) as cb from t_sprkjl group by spdm');
Open;
end;
if Data.Query1.Fields[0].Value<>Null then
while Not Data.Query1.Eof do
begin
with Data.Query2 do
begin
Close;
SQL.Clear;
SQL.Add('insert t_ycbhs values(:a,:b,:c,:d)');
ParamByName('a').AsString := Trim(Data.Query1.Fields[0].AsString);
ParamByName('b').AsFloat := Data.Query1.Fields[1].AsFloat;
ParamByName('c').AsString := Trim(kgy.Text);
ParamByName('d').AsDate := sj.Date;
ExecSQL;
end;
Data.Query1.Next;
end;
Showycbhs;
if Data.Query1.RecordCount>0 then
DataSource1.DataSet := Data.Query1;
Application.MessageBox('操作成功.','提示',64);
Except
Application.MessageBox('操作失败.','提示',64);
end;
end;
procedure Tf_cbhs.lbKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = vk_Return then
begin
kgy.Text := lb.Items[lb.ItemIndex];
kgy.SetFocus;
end;
end;
procedure Tf_cbhs.lbDblClick(Sender: TObject);
var
Key: Word;
begin
Key := vk_Return ;
lb.OnKeyDown(sender,key,[ssleft]);
end;
procedure Tf_cbhs.lbExit(Sender: TObject);
begin
lb.Visible := False;
end;
procedure Tf_cbhs.selectycbhs;
var
year,month,Day: Word;
Days: Integer;//记录当前月的天数
begin
DecodeDate(sj.DateTime,year,month,day);
Days := 30;
with Data.Query1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from t_ycbhs where sj>= :a and sj<=:b');
ParamByName('a').AsFloat := Trunc(sj.Date)-Day+1-2; //取当前月初的整数值,减2是为了与SQL Server中的数值对应
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;
ParamByName('b').AsFloat :=Trunc(sj.Date)-Day+Days+0.998-2;//取当前月末的整数值,减2是为了与SQL Server中的数值对应
Open;
end;
end;
procedure Tf_cbhs.Showycbhs;
var
year,month,Day: Word;
Days: Integer;//记录当前月的天数
begin
Days := 30;
DecodeDate(sj.DateTime,year,month,day);
with Data.Query1 do
begin
Close;
SQL.Clear;
SQL.Add('select a.*,b.spmc from t_ycbhs a inner join t_spjcxx b on a.spdm = b.spdm and (sj>= :a and sj<=:b)');
ParamByName('a').AsFloat := Trunc(sj.Date)-Day+1-2; //取当前月初的整数值,减2是为了与SQL Server中的数值对应
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;
ParamByName('b').AsFloat :=Trunc(sj.Date)-Day+Days+0.998-2;//取当前月末的整数值,减2是为了与SQL Server中的数值对应
Open;
end;
end;
procedure Tf_cbhs.FormShow(Sender: TObject);
begin
sj.DateTime := Now;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -