📄 material_ck.pas
字号:
unit Material_CK;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBCtrls, StdCtrls, Buttons, Spin, ComCtrls, Mask, Grids,
DBGrids, ExtCtrls, DB, ADODB;
type
TForm_Material_CK = class(TForm)
DS_material: TDataSource;
ADOQ_CK_mate: TADOQuery;
DS_CK_mate_Q: TDataSource;
ADOQ_CK_mateckid: TAutoIncField;
ADOQ_CK_matemat_id: TStringField;
ADOQ_CK_matenum: TFloatField;
ADOQ_CK_mateckdate: TDateTimeField;
ADOQ_CK_matetmp_id: TIntegerField;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
Panel1: TPanel;
Panel4: TPanel;
DBGrid3: TDBGrid;
Panel5: TPanel;
Label5: TLabel;
Label14: TLabel;
Label7: TLabel;
Label9: TLabel;
Label10: TLabel;
Label12: TLabel;
Bevel1: TBevel;
Label18: TLabel;
Edit_id: TEdit;
Edit_name: TEdit;
OKBtn: TBitBtn;
CancelBtn: TBitBtn;
ComboBox1: TComboBox;
Edit1: TEdit;
ComboBox3: TComboBox;
Edit2: TEdit;
ComboBox2: TComboBox;
GroupBox4: TGroupBox;
Label13: TLabel;
Label16: TLabel;
Sdate: TDateTimePicker;
Edate: TDateTimePicker;
Panel3: TPanel;
Label22: TLabel;
Label23: TLabel;
Edit_empid: TEdit;
Edit_empname: TEdit;
Button1: TButton;
ADOQ_CK_mateempid: TIntegerField;
ADOQemp: TADOQuery;
DS_emp_Q: TDataSource;
ADOQ_CK_mateempname: TStringField;
ADOQ_CK_mateunit: TStringField;
ADOQ_tmp: TADOQuery;
ADOQ_CK_matemat_name: TStringField;
ADOQ_CK_mateopername: TStringField;
Lookup_matype: TComboBox;
DBLookup_operid: TComboBox;
ADOQ_material: TADOQuery;
ADOQ_materialmat_id: TStringField;
ADOQ_materialmat_name: TStringField;
ADOQ_materialflag: TBooleanField;
ADOQ_materialprice: TBCDField;
ADOQ_materialcolor: TStringField;
ADOQ_materialunit: TStringField;
ADOQ_materialmatype_name: TStringField;
GroupBox2: TGroupBox;
DBGrid1: TDBGrid;
Panel6: TPanel;
Label3: TLabel;
Label25: TLabel;
Label19: TLabel;
Label8: TLabel;
Label4: TLabel;
DBLookupComboBox1: TComboBox;
Edit3: TEdit;
Bit_Ser2: TBitBtn;
DBE_matid: TDBEdit;
DBEdit8: TDBEdit;
DBEdit1: TDBEdit;
Label1: TLabel;
Label20: TLabel;
Label21: TLabel;
SpinEdit_num: TSpinEdit;
DBText1: TDBText;
BitBtn_CK: TBitBtn;
GroupBox3: TGroupBox;
DBGrid2: TDBGrid;
Panel7: TPanel;
Label24: TLabel;
Label17: TLabel;
Label6: TLabel;
Label2: TLabel;
Edit4: TEdit;
DBEdit5: TDBEdit;
DBEdit3: TDBEdit;
DBEdit2: TDBEdit;
SerBtn: TBitBtn;
Panel2: TPanel;
BitBtn1: TBitBtn;
LocateBtn: TBitBtn;
ExtBtn: TBitBtn;
BtnExport: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BitBtn_CKClick(Sender: TObject);
procedure LocateBtnClick(Sender: TObject);
procedure CancelBtnClick(Sender: TObject);
procedure OKBtnClick(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure SerBtnClick(Sender: TObject);
procedure Edit4KeyPress(Sender: TObject; var Key: Char);
procedure Bit_Ser2Click(Sender: TObject);
procedure Edit3KeyPress(Sender: TObject; var Key: Char);
procedure PageControl1Change(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure DBLookupComboBox1Change(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure BtnExportClick(Sender: TObject);
private
{ Private declarations }
procedure refreshdb;
public
{ Public declarations }
end;
var
Form_Material_CK: TForm_Material_CK;
implementation
uses data, sharevar, sharefun, employee, Main;
{$R *.dfm}
procedure TForm_Material_CK.refreshdb;
begin
with ADOQ_material do
begin
close;
sql.Strings[2]:='';
open;
end;
//显示员工信息表
with ADOQemp do
begin
close;sql.clear;
sql.add('select employee.*,duty.dutyname,department.depname from employee,duty,department');
sql.Add(' where duty.dutyid=employee.dutyid and employee.depid=department.depid and state=1');
open;
end;
with ADOQ_CK_mate do
begin
try
close;
sql.Strings[2]:='';
sql.Strings[3]:='order by e.matype_name, a.mat_id,a.ckdate,a.num desc';
execsql;
open;
except
MsgErr(handle,'刷新数据库失败(Material_CK_Q)!');
end;
end;
end;
procedure TForm_Material_CK.FormCreate(Sender: TObject);
begin
with ADOQ_material do begin close; open; end;
//显示员工信息表
with ADOQemp do
begin
close;sql.clear;
sql.add('select employee.*,duty.dutyname,department.depname from employee,duty,department');
sql.Add(' where duty.dutyid=employee.dutyid and employee.depid=department.depid and state=1');
open;
end;
end;
procedure TForm_Material_CK.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
if ADOQ_material.Active then ADOQ_material.close;
if ADOQ_CK_mate.Active then ADOQ_CK_mate.close;
action:=cafree;
end;
procedure TForm_Material_CK.BitBtn_CKClick(Sender: TObject);
var
emp_name, mat_id, mat_name, tmp_unit, qst_str, tmp_event, info: string;
ck_num, kc_num, unitprice: real;
emp_id, tmp_id: integer; //edit_kc_ret_1
ckmat_flag:boolean;
begin
if not get_oper_tmpid(curAdmin.user_id , tmp_id) then
begin
MsgOk(handle,'仓库发料失败,请重试!');
exit;
end;
mat_id:=trim(DBE_matid.Text);
if mat_id='' then
begin
messagebox(handle,'请选择待发出的物料!','警告',mb_ok or MB_ICONINFORMATION);
DBLookupComboBox1.SetFocus;
exit;
end;
mat_name:=trim(DBEdit1.Text);
tmp_unit:=ADOQ_material.FieldValues['unit'];
if trim(SpinEdit_num.Text)='' then
begin
messagebox(handle,'请输入物料出库的数量!','警告',mb_ok or MB_ICONINFORMATION);
SpinEdit_num.SetFocus;
exit;
end;
ck_num:=strtofloat(trim(SpinEdit_num.Text));
if ck_num<=0 then
begin
messagebox(handle,'请输入正确的发料数量!','警告',mb_ok or MB_ICONINFORMATION);
SpinEdit_num.SetFocus;
exit;
end;
if trim(DBEdit5.Text)='' then
begin
MsgOk(handle,'请选择待领料的人员信息!');
DBGrid2.SetFocus;
exit;
end;
emp_id:=strtoint(trim(DBEdit5.Text));
emp_name:=trim(DBEdit2.Text);
//判断物料库存数量是否够发料
if not findRec('kc_material','mat_id',mat_id,info) then
begin
msgok(handle, '该物料无库存,请选择其它的物料!');
exit;
end;
with ADOQ_tmp do
begin
close; sql.Clear;
sql.Add('select num from kc_material where mat_id=:mat_id');
parameters.ParamValues['mat_id']:=mat_id;
open;
kc_num:=fieldvalues['num'];
if kc_num<ck_num then
begin
msgok(handle, '该物料库存数不够发料,只剩下 '+floattostr(kc_num)+' '+tmp_unit);
exit;
end;
close;
end;
qst_str:='确定编号为 ['+inttostr(emp_id)+'] 的人员['+emp_name+']需领物料 ['+mat_name+'] '+floattostr(ck_num)+tmp_unit+'吗?';
//是否显示工人需支付的个人工资金额
if ADOQ_material.FieldValues['flag'] then
begin
unitprice:=ADOQ_material.FieldValues['price'];
info:=' 物料单价为: ¥'+format('%.2f',[unitprice])+#13+#13+' 共需支付: ¥'+format('%.2f',[ck_num*unitprice]);
if MsgQst(handle,qst_str+#13+#13+info)=IDNO then EXIT;
end
else
if MsgQst(handle,qst_str)=IDNO then EXIT;
///////////////////////////////////////////
//数据提交开始
ckmat_flag:=true;
datamod.ADOCon.BeginTrans;
//1.出库表新增一条出库记录
with ADOQ_tmp do
begin
close;sql.clear;
sql.add('INSERT INTO ck_material(empid, mat_id, num, tmp_id)');
sql.add(' VALUES (:empid,:mat_id,:num,:tmp_id)');
parameters.ParamValues['empid']:=emp_id;
parameters.ParamValues['mat_id']:=mat_id;
parameters.ParamValues['num']:=ck_num;
parameters.ParamValues['tmp_id']:=tmp_id;
try
execsql;
except
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
MsgErr(handle,'物料出库处理失败--1!');
ckmat_flag:=false; exit;
end;
end;
//2.更新库存表的库存量
with ADOQ_tmp do
begin
close;sql.clear;
sql.Add('update kc_material set num=:num where (mat_id=:mat_id)');
parameters.ParamValues['num']:=kc_num-ck_num;
parameters.ParamValues['mat_id']:=mat_id;
try
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -