📄 outbom_log.pas
字号:
if adoquery2.FieldValues['flag'] then
begin
msgerr(handle,'['+emp_name+'] 的 ['+ADOQuery2.FieldValues['seq_name']+'] 工序已验收,不能再发放辅料!');
abort; exit;
end
else
if MsgQst(handle,'确定 ['+emp_name+'] 的 ['+ADOQuery2.FieldValues['seq_name']+'] 工序按照辅料表发料吗?')=idno then exit;
/////////////////////////////////////////////////////////////
////*************开始发放辅料*************////
/////////////////////////////////////////////////////////////
//得到当前用户的ID
if not get_oper_tmpid(curAdmin.user_id , tmp_id) then
begin
MsgOk(handle,'仓库发料失败,请重试!');
exit;
end;
//初始化物料是否入库成功标志
WLCK_flag:=true;
//数据提交开始
datamod.ADOCon.BeginTrans;
//利用循环发放对应工序的所有辅料
ADOQmat.First; //循环开始
total_money:=0; //初始化发料表支付金额的数量
while not ADOQmat.eof do
begin
mat_id:=ADOQmat.FieldValues['mat_id'];
mat_name:=GetFieldvalue('material','mat_id',mat_id,'mat_name','');
tmp_unit:=GetFieldvalue('material','mat_id',mat_id,'unit','');
//得到该物料是否支付工人工资
bool_flag:=Getbooleanvalue('material','mat_id',mat_id,'flag');
if not findRec('kc_material','mat_id',mat_id,info) then
begin
msgok(handle, '物料 ['+mat_name+'] 无库存,辅料发放失败!');
WLCK_flag:=false; break; exit;
end;
//判断物料库存数量是否够发料
ck_num:=ADOQmat.FieldValues['num'];
kc_num:=Getmoneyvalue('kc_material','mat_id',mat_id,'num');
if kc_num<ck_num then
begin
msgok(handle, '物料 ['+mat_name+'] 库存数量不够(仅存'+floattostr(kc_num)+' '+tmp_unit+'),辅料发放失败!');
WLCK_flag:=false; break; exit;
end;
//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,'辅料发放处理失败--(ck_material)!');
WLCK_flag:=false; break; exit;
end;
end;//1.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
execsql;
except
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
MsgErr(handle,'辅料发放处理失败--(kc_material)!');
WLCK_flag:=false; break; exit;
end;
end;//2.End
//如果该物料为需支付个人工资的则新记录3.4.
if bool_flag then
begin
price:=Getmoneyvalue('material','mat_id',mat_id,'price');
tmp_event:=emp_name+'领料['+mat_name+']'+floattostr(ck_num)+'('+tmp_unit+')';
//3.工人支出表中新增一条记录
with ADOQ_tmp do
begin
close;sql.clear;
sql.add('INSERT INTO brrow(empid, event, money, tmp_id)');
sql.add(' VALUES (:empid,:event,:money,:tmp_id)');
parameters.ParamValues['empid']:=emp_id;
parameters.ParamValues['event']:=tmp_event;
info:='';
info:=format('%.2f',[ck_num*price]);
total_money:=strtofloat(info)+total_money;
parameters.ParamValues['money']:=strtofloat(info);
parameters.ParamValues['tmp_id']:=tmp_id;
try
execsql;
except
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
MsgErr(handle,'辅料发放处理失败--(brrow)!');
WLCK_flag:=false; break; exit;
end;
end;//3.End
//4.企业收入流水账中新增一条记录
with ADOQ_tmp do
begin
close;sql.clear;
sql.add('INSERT INTO earning(event, money, tmp_id)');
sql.add(' VALUES (:event,:money,:tmp_id)');
parameters.ParamValues['event']:=tmp_event;
parameters.ParamValues['money']:=ck_num*price;
parameters.ParamValues['tmp_id']:=tmp_id;
try
execsql;
except
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
MsgErr(handle,'辅料发放处理失败--(earning)!');
WLCK_flag:=false; break; exit;
end;
end;//4.End
end; //该物料为需支付个人工资的则新记录3.4.结束
ADOQmat.next;
end;//循环结束
//提交数据库
if not WLCK_flag then if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
if datamod.ADOCon.InTransaction then
begin
try
datamod.ADOCon.CommitTrans;
except
MsgErr(handle,'辅料发放处理失败--(All)!');
if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
exit;
end;
if WLCK_flag then
begin
adoquery2.Edit;
adoquery2.FieldValues['flflag']:=true;
adoquery2.FieldValues['fl_flag']:=true;
adoquery2.post;
end;
if total_money<>0 then MsgOK(handle,'该员工按照辅料表领取辅料共需支付个人工资:¥'+format('%.2f',[total_money]));
end;
/////////////////////////////////////////////////////////////
////*************发放辅料结束*************////
/////////////////////////////////////////////////////////////
end;
{
//开始发放辅料
begin
//得到当前用户的ID
if not get_oper_tmpid(curAdmin.user_id , tmp_id) then
begin
MsgOk(handle,'仓库发料失败,请重试!');
exit;
end;
emp_ID:=ADOQuery2.FieldValues['empid'];
emp_name:=GetFieldvalue('employee','empid',inttostr(emp_id),'empname','');
// adoq_Seq:=TAdoquery.create(nil);
ADOQmat.First;
//发放对应工序的所有辅料
while not ADOQmat.eof do
begin
mat_id:=ADOQmat.FieldValues['mat_id'];
mat_name:=GetFieldvalue('material','mat_id',mat_id,'mat_name','');
tmp_unit:=GetFieldvalue('material','mat_id',mat_id,'unit','');
bool_flag:=GetFieldvalue('material','mat_id',mat_id,'flag','');
if not findRec('kc_material','mat_id',mat_id,info) then
begin
msgok(handle, '物料 ['+mat_name+'] 无库存,发料失败!');
exit;
end;
//判断物料库存数量是否够发料
ck_num:=ADOQmat.FieldValues['num'];
with adot_kcmate do
begin
adot_kcmate:=Tadotable.Create(nil);
Connection:=datamod.ADOCon;
TableName:='kc_material';
Close; open;
locate('mat_id',mat_id,[loCaseInsensitive]);
kc_num:=fieldvalues['num'];
if kc_num<ck_num then
begin
msgok(handle, '物料 ['+mat_name+'] 库存数量不够(仅存'+floattostr(kc_num)+' '+tmp_unit+'),发料失败!');
adot_kcmate.Close;
adot_kcmate.Free;
exit;
end;
adot_kcmate.Close;
adot_kcmate.Free;
end;
//CALL DATABASE Pro_CK_Material STORE PROCEDURE
//@empid int, @mat_id varchar(10),@num float,@tmp_id int,@event varchar(30)
with ADOSP_CK_ABSBOM do
begin
if bool_flag='1' then tmp_event:=emp_name+'领料['+mat_name+']'+floattostr(ck_num)+'('+tmp_unit+')'
else tmp_event:='';
parameters.paramvalues['@empid']:=emp_id;
parameters.paramvalues['@mat_id']:=mat_id;
parameters.paramvalues['@num']:=ck_num;
parameters.paramvalues['@tmp_id']:=tmp_id;
parameters.paramvalues['@event']:=tmp_event;
try
execproc;
except
showmessage('存储过程执行失败(Pro_CK_Material),请重新操作!');
exit;
end;
edit_kc_ret_1:=parameters.paramvalues['@RETURN_VALUE'];
if edit_kc_ret_1=0 then
begin
msgok(handle,'对应工序发放辅料失败,请重试!');
exit;
end;
end;
ADOQmat.next;
end;
if if edit_kc_ret_1=1 then
begin
adoquery2.Edit;
adoquery2.FieldValues['flflag']:=true;
adoquery2.post;
end;
// adoq_Seq.Close; adoq_Seq.Free;
end; }
procedure TForm_Outbom_log.DBGridEnter(Sender: TObject);
begin
RefeshMe:=true;
end;
procedure TForm_Outbom_log.SerBtnClick(Sender: TObject);
begin
edit4.Text:=trim(edit4.Text);
if edit4.Text='' then begin edit4.SetFocus;exit;end;
if not adoqemp.Locate('empid',edit4.Text,[]) then
begin
MsgErr(handle,'不存在编码为['+edit4.Text+']的人员!');
edit4.SetFocus;
end;
end;
procedure TForm_Outbom_log.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
if key=chr(13) then serbtn.Click;
end;
procedure TForm_Outbom_log.ExportBtnClick(Sender: TObject);
begin
Form_main.WriteIntoExcel(DBGrid,datetostr(date),'工序发料信息报表');
end;
procedure TForm_Outbom_log.ComboBox1KeyPress(Sender: TObject;
var Key: Char);
begin
if key<>chr(13) then exit;
Add_outbom;
end;
//查找对应条件的裁信息
procedure TForm_Outbom_log.BtnlocateClick(Sender: TObject);
var
ccno, zhno:integer;
size_name:string;
begin
if not ADOQuery1.Active then exit;
if trim(edt_ccNo.Text)='' then
begin
Msgok(handle,'请输入裁床号!');
edt_ccno.SetFocus; exit;
end;
try
ccno:=strtoint(trim(edt_ccNo.Text));
except
MsgERR(handle,'请输入正确的裁床号!');
edt_ccno.SetFocus; exit;
end;
if trim(edt_zhno.Text)<>'' then
begin
try
zhno:=strtoint(trim(edt_zhNo.Text));
except
MsgERR(handle,'请输入正确的扎号!');
edt_zhno.SetFocus; exit;
end;
if trim(ComboBox_size.Text)='' then
begin
if not ADOQuery1.Locate('bed_id;zh_id', VarArrayOf([ccno,zhno]), [])
then msgok(handle,'没找到对应条件的裁床信息!');
abort; exit;
end;
end;
if trim(ComboBox_size.Text)<>'' then
begin
size_name:=trim(ComboBox_size.Text);
if not ADOQuery1.Locate('bed_id;zh_id;size_name', VarArrayOf([ccno,zhno,size_name]), [])
then msgok(handle,'没找到对应条件的裁床信息!');
abort; exit;
end;
if not ADOQuery1.Locate('bed_id', ccno, []) then msgok(handle,'没找到对应条件的裁床信息!');
end;
procedure TForm_Outbom_log.edt_zhNOKeyPress(Sender: TObject;
var Key: Char);
begin
if not (key in ['0'..'9',#13, #8]) then abort;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -