📄 inv_mninaudit.pas
字号:
begin
DispInfo('入库总数超过了约定交货数,请使用"超订单入库"',1);
AdoQry_Body.Cancel;
Abort;
end;
end
else
begin
a1:=AdoQry_Body.fieldbyname('MOQty').asfloat;
a2:=AdoQry_Body.fieldbyname('MoRealInQty').asfloat+
AdoQry_Body.fieldbyname('InvBillQty').asfloat;
if a1<a2 then
begin
DispInfo('拉式领料的生产订单行'+chr(13)+chr(10)
+' 累计入库量'+chr(13)+chr(10)
+'不允许超过约定交货量!',1);
abort;
end;
end;
a1:=AdoQry_Body.fieldbyname('InvBillQty').asfloat*AdoQry_Body.fieldbyname('InvBillSfcQty').asfloat;
If a1<0 then
begin
DispInfo('实入数量与拟入数量必须方向相同!',1);
AdoQry_Body.Cancel;
Abort;
end;
a1:=AdoQry_Body.fieldbyname('InvBillQty').asfloat;
a2:=AdoQry_Body.fieldbyname('MoRealInQty').asfloat+AdoQry_Body.fieldbyname('InvBillQty').asfloat;
If (a1<0)and (a2<0) then
begin
DispInfo('冲消的数量不能大于累计入库数量!',1);
AdoQry_Body.Cancel;
Abort;
end;
end;
procedure TFrm_Inv_MnInAudit.SetFormParam(FrmParam1, FrmParam2, FrmParam3,
FrmParam4, FrmParam5, FrmParam6: String);
begin
inherited;
FInvBillId:=FrmParam1;
FDeptCode:=FrmParam3;
FShiftType:=FrmParam4;
end;
procedure TFrm_Inv_MnInAudit.Act_CheckExecute(Sender: TObject);
var
M,I:integer;
InvFieldCur,InvFieldItem : string;
OldSort :String;
NeedChangePrice:Boolean;
FatherCode:string;
RealInQty:double;
begin
inherited;
NeedChangePrice:=NeedChangeAveragePrice(AdoQry_Tmp,copy(Edt_Date.text,1,7));
InvFieldCur:=GetInvField(AdoQry_Tmp2,FWhCode,FPosition,',CurrentInv');
InvFieldItem:=GetInvField(AdoQry_Tmp2,FWhCode,FPosition,'Item');
Edt_DateExit(Edt_Date);
if AdoQry_Body.state<>dsBrowse then //如果当前用户改变了Grid中的值,还没有Post,主动Post
AdoQry_Body.post;
//全面检查库存
AdoQry_Body.First;
for M:=0 to AdoQry_Body.recordCount-1 do
begin
if ISStockItem( AdoQry_Body.fieldbyname('ItemCode').asstring) then //是否库存件;
if not InvQtyCheck(NeedChangePrice,
AdoQry_Body,AdoQry_Tmp,
getCode(Lbl_WhCodeName.Caption),
getCode(Lbl_Position.Caption),
AdoQry_Body.fieldbyname('ItemCode').asstring,
'InvBillQty',AdoQry_Body.fieldbyname('InvBillQty').AsFloat,True)then
begin
Abort;
end;
AdoQry_Body.next;
end;
AdoQry_Body.DisableControls ;
AdoQry_tmp.Connection.beginTrans;
try
DBGridEh.Enabled :=False;
try
//记录本仓库数据发生改变
ChangeInvStatus(AdoQry_tmp,FWHCode,copy(edt_Date.text,1,7));
AdoQry_tmp.Close;
AdoQry_tmp.sql.clear;
//更新InvOutBill
AdoQry_tmp.sql.text:='Update InvInBill '+
' Set InvBilldate='''+edt_Date.text+''','+
' InvBillMonth='''+copy(Trim(edt_Date.text),1,7)+''','+
' EmployeeCode='''+userCode+''','+
' Wh_EmployeeCode='''+userCode+''','+
' InvBillWhChCk=1'+','+
' InvBillremArk='''+Edt_MeMo.text+''''+
' Where InvBillId='+FInvBillId;
AdoQry_tmp.execsql;
with AdoQry_Body do
begin
First;
for M:=0 to AdoQry_Body.recordCount-1 do
begin
if fieldbyname('InvBillQty').asfloat<>0 then
begin
if ISStockItem(fieldbyname('ItemCode').AsString) then //是库存件
begin
AdoQry_tmp.Close;
AdoQry_tmp.sql.clear;
AdoQry_tmp.sql.text:=
'Update InvInBillline '+
' Set InvBillqty='+
fieldbyname('InvBillQty').AsString+
' ,BillLineReMArk='''+fieldbyname('BillLineReMArk').asstring+''' '+
'Where InvBillId='+FInvBillId+
' and InvBillLineNo='+fieldbyname('InvBillLineNo').AsString;
AdoQry_tmp.execsql;
// 更改当前库存
AdoQry_tmp.Close;
AdoQry_tmp.sql.clear;
AdoQry_Tmp.SQL.Text:=
'Select Count(*) as RecCount from CurrentInv '+
' Where WhCode='''+FWHCode+''''+
' and WhPositionCode='''+FPosition+''''+
' and ItemCode='''+fieldbyname('ItemCode').AsString+'''';
AdoQry_Tmp.Open;
If AdoQry_Tmp.fieldbyname('RecCount').AsInteger<=0 then
begin
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.clear;
AdoQry_Tmp.Sql.Add
('Insert Into CurrentInv'+
'(WHCode,ItemCode,OnHandInv,OnCheckInv,WhPositionCode,'+
'FreezeInv,WasterInv,OnShipInv)'+
'Values('''+FWHCode+''','''+fieldbyname('ItemCode').AsString+''','+
'0,0,'''+FPosition+''',0,0,0)');
AdoQry_Tmp.ExecSQL;
end;{
AdoQry_Tmp.Close;
AdoQry_Tmp.Sql.clear;
AdoQry_tmp.sql.text:=
'update CurrentInv '+
' Set '+
InvFieldcur+
'='+Invfieldcur+
'+('+fieldbyname('InvBillQty').asstring+')'+
' where whCode='''+FWHCode+''' and '+
' WhPositionCode='''+FPosition+''' and '+
' ItemCode='''+fieldbyname('ItemCode').asstring+'''';
AdoQry_tmp.execsql;
//更改Item表的库存数量
AdoQry_tmp.Close;
AdoQry_tmp.sql.clear;
AdoQry_tmp.sql.text:=
' update Item set '+
InvFieldItem+
'='+
InvFieldItem+
'+('+fieldbyname('InvBillqty').asstring+')'+
' where ItemCode='''+fieldbyname('ItemCode').asstring+'''';
AdoQry_tmp.execsql;}
if UpdateInv(AdoQry_Tmp,
getCode(Lbl_WhCodeName.Caption),
getCode(Lbl_Position.Caption),
AdoQry_Body.fieldbyname('ItemCode').asstring,
'('+AdoQry_Body.fieldbyname('InvBillQty').asstring+')',
NeedChangePrice,True)<>'' then
abort;
end
else //是库存件
begin
if ISMudiFather(AdoQry_Body.fieldbyname('ItemCode').asstring) then // 是多父项
begin
DispInfo('物料:'+AdoQry_Body.fieldbyname('ItemCode').asstring+'有多个父项不能入库!',3);
abort;
end;
FatherCode:='';
FatherCode:=FindFatherCode(AdoQry_Body.fieldbyname('ItemCode').asstring); //找父项物料代码;
if FatherCode='' then
begin
DispInfo('物料:'+AdoQry_Body.fieldbyname('ItemCode').asstring+'父项为空不能入库!',3);
abort;
end;
if not ISPirsSale(FatherCode) then //是否特销件;
begin
DispInfo('物料:'+AdoQry_Body.fieldbyname('ItemCode').asstring+'的父项不是特销件不能入库!',3);
abort;
end;
RealInQty:=0.00;
RealInQty:=GetRealInQty(AdoQry_Body.fieldbyname('ItemCode').asstring,
AdoQry_Body.fieldbyname('InvBillQty').AsString); //得到真实的入库数量;
AdoQry_tmp.Close;
AdoQry_tmp.sql.clear;
AdoQry_tmp.sql.text:=
'Update InvInBillline '+
' Set InvBillqty='+floattostr(RealInQty)+
' ,ItemCode='''+FatherCode+''''+
' ,BillLineReMArk='+'''库存数是从'+AdoQry_Body.fieldbyname('ItemCode').asstring
+' 转换来的'''+' '+AdoQry_Body.fieldbyname('BillLineReMArk').asstring+
' Where InvBillId='+FInvBillId+
' and InvBillLineNo='+fieldbyname('InvBillLineNo').AsString;
// showmessage(AdoQry_tmp.sql.text);
AdoQry_tmp.execsql;
// 更改当前库存
AdoQry_tmp.Close;
AdoQry_tmp.sql.clear;
AdoQry_Tmp.SQL.Text:=
'Select Count(*) as RecCount from CurrentInv '+
' Where WhCode='''+FWHCode+''''+
' and WhPositionCode='''+FPosition+''''+
' and ItemCode='''+FatherCode+'''';
AdoQry_Tmp.Open;
If AdoQry_Tmp.fieldbyname('RecCount').AsInteger<=0 then
begin
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.clear;
AdoQry_Tmp.Sql.Add
('Insert Into CurrentInv'+
'(WHCode,ItemCode,OnHandInv,OnCheckInv,WhPositionCode,'+
'FreezeInv,WasterInv,OnShipInv)'+
'Values('''+FWHCode+''','''+FatherCode+''','+
'0,0,'''+FPosition+''',0,0,0)');
AdoQry_Tmp.ExecSQL;
end;{
AdoQry_Tmp.Close;
AdoQry_Tmp.Sql.clear;
AdoQry_tmp.sql.text:=
'update CurrentInv '+
' Set '+
InvFieldcur+
'='+Invfieldcur+
'+('+fieldbyname('InvBillQty').asstring+')'+
' where whCode='''+FWHCode+''' and '+
' WhPositionCode='''+FPosition+''' and '+
' ItemCode='''+fieldbyname('ItemCode').asstring+'''';
AdoQry_tmp.execsql;
//更改Item表的库存数量
AdoQry_tmp.Close;
AdoQry_tmp.sql.clear;
AdoQry_tmp.sql.text:=
' update Item set '+
InvFieldItem+
'='+
InvFieldItem+
'+('+fieldbyname('InvBillqty').asstring+')'+
' where ItemCode='''+fieldbyname('ItemCode').asstring+'''';
AdoQry_tmp.execsql;}
if UpdateInv(AdoQry_Tmp,
getCode(Lbl_WhCodeName.Caption),
getCode(Lbl_Position.Caption),
FatherCode,
'('+floattostr(RealInQty)+')',
NeedChangePrice,True)<>'' then
abort;
end;
//更改MNItemList的记录
AdoQry_tmp.Close;
AdoQry_tmp.sql.clear;
AdoQry_tmp.sql.text:=
'update MoLine '+
' set MoRealInQty=MoRealInqty+'+fieldbyname('InvBillQty').asstring+
' ,MoNoFinishQty=MoNoFinishQty-('+fieldbyname('InvBillQty').Asstring+') '+
' where mono='''+FMoNo+''' and '+
' MoLineno='+fieldbyname('MoLineNo').asstring+' and '+
' ItemCode='''+fieldbyname('ItemCode').asstring+'''';
AdoQry_tmp.execsql;
//生产采购订单过程调用,参数说明:P1:AdoQuery控件名称,P2: 业务类型:POCheck:待检入库;POIN:采购入库;MoIn:生产入库
//P3:订单号 MONO或PONO,P4:订单行号 MoLineNo或POLineNo
MOPOOperation(AdoQry_tmp,'MoIn',fieldbyname('mono').asstring,fieldbyname('MoLineno').asinteger);
{ --------------------------------------------------------------
单据保存时,会判断MoLine的MoRealInQty是否超过MOQty,
如果是,则关闭该订单行,即MoLineStatus=7
现在改成 从MrpParam表中读取参数,如果用户定义为自动
关闭,则执行以上的操作,否则什么都不做
select MrpParamValueN from MrpParam where MrpParamCode='autoCloseMo',
如果=1表示自动关闭,=0表示手工关闭
---------------------------------------------------------------}
AdoQry_tmp.Close;
AdoQry_tmp.sql.clear;
AdoQry_tmp.SQL.text:=
' select MrpParamValueN from MrpParam where MrpParamCode=''autoCloseMo''';
AdoQry_tmp.open;
if AdoQry_tmp.fieldbyname('MrpParamValueN').Asinteger=1 then
begin
AdoQry_tmp.Close;
AdoQry_tmp.sql.clear;
AdoQry_tmp.SQL.text:=
'update MoLine set MoLineStatus=7 where MONo='''+FMoNo+''''+
'and MoLineNo='+fieldbyname('MoLineNo').asstring+
'and ItemCode='''+fieldbyname('ItemCode').asstring+''''+
'and MoNoFinishQty<=0';
AdoQry_tmp.execsql;
end;
end;
if AdoQry_Body.fieldbyname('BackFlush').asinteger=1 then
begin
If Not MoInBackFlush(AdoQry_Body.Connection,
AdoQry_Body.fieldbyname('mono').asstring,
UserCode,Edt_Date.Text,LbL_MoFinishShift.Caption,
AdoQry_Body.fieldbyname('MoLineno').asInteger,
AdoQry_Body.fieldbyname('InvBillQty').asfloat) then
abort;
end;
if AdoQry_Body.fieldbyname('InvBillQty').asfloat<>0 then //021218 by zks
begin
if ISCancelMps then //是否核销主计划;
CancelMps(FInvBillId,AdoQry_Body.fieldbyname('InvBillLineNo').asstring,
AdoQry_Body.fieldbyname('ItemCode').asstring,
AdoQry_Body.fieldbyname('InvBillQty').asfloat); //核销主计划;
end;
if not ISStockItem(AdoQry_Body.fieldbyname('ItemCode').AsString) then //不是库存件
begin
AdoQry_Body.edit ;
AdoQry_Body.fieldbyname('ItemCode').asstring:=FatherCode;
AdoQry_Body.fieldbyname('InvBillQty').asstring:= floattostr(RealInQty);
AdoQry_Body.fieldbyname('BillLineReMArk').asstring:='库存数是从'+AdoQry_Body.fieldbyname('ItemCode').asstring
+'转换来的'+','+AdoQry_Body.fieldbyname('BillLineReMArk').asstring;
AdoQry_Body.post;
end;
next;
end;
end;
//删除记录中本单据中输入为零的记录
AdoQry_tmp.Close;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -