📄 inv_mnoutaudit_b.pas
字号:
DispInfo('实际数量与请领数量的正负方向必须一致!',1);
AdoQry_Body.EnableControls;
abort;
end;
end;
procedure TFrm_Inv_MnOutAudit_B.checkIOType;
begin
if IoType<>0 then
if AdoQry_Body.fieldbyname('InvBillqty').asfloat*IoType<0 then
begin
DispInfo('同一请领,不能出现正负数量混合的情况!',1);
AdoQry_Body.EnableControls;
abort;
end;
end;
procedure TFrm_Inv_MnOutAudit_B.DBGridEhColExit(Sender: TObject);
var
tmp_WhCode,tmp_WhPositionCode:string;
begin
inherited;
tmp_WhCode:=getCode(lbl_WhCode.text);
tmp_WhPositionCode:=getCode(lbl_WhPosition.text);
if (AdoQry_Body.State in [dsedit]) and
(dbgrideh.SelectedField.fieldName='moRequestqty') then
begin
// checkIOType;
checkcoCurrentqty;
end;
//如果是批次控制,则修改后不能空,且要检验批次号,如果不是批次控制,不能进行修改,只能为空
//用OLDBatchNO来控制原批次号,OLDBatchNO为空,表示原批次号为空,不能修改,OLDBatchNO不为空
//则原批次号可以修改,但不能改为空。
if (AdoQry_Body.State in [dsedit]) and
(dbgrideh.SelectedField.fieldName='Batchno') then
begin
if oldBatchno<>'' then
begin
if AdoQry_Body.fieldbyname('Batchno').asstring<>'' then
begin
if not BatchNoCheck(AdoQry_tmp,AdoQry_Body.fieldbyname('Batchno').asstring,AdoQry_Body.fieldbyname('ItemCode').asstring,'',medt_Date.text) then
begin
dbgrideh.SetFocus;
abort;
end
else
begin
if not BatchInvCheck(AdoQry_tmp,AdoQry_Body.fieldbyname('Batchno').asstring,'C',tmp_WhCode,tmp_WhPositionCode,AdoQry_Body.fieldbyname('InvBillqty').asfloat) then
begin
dbgrideh.setfocus;
abort;
end;
end;
end
else
begin
DispInfo('该批次号不能为空',1);
AdoQry_Body.fieldbyname('Batchno').asstring:=oldBatchno;
dbgrideh.SetFocus;
abort;
end;
end
else
begin
//如果实领数量为零,就不能录入批次号
if (AdoQry_Body.fieldbyname('InvBillqty').asstring='0') and
(AdoQry_Body.fieldbyname('Batchno').asstring<>'') then
begin
AdoQry_Body.fieldbyname('Batchno').asstring:='';
end;
//如果实领数量不为零
if (AdoQry_Body.fieldbyname('InvBillqty').asstring<>'0') then
begin
//且如果不受批次控制且批次号不为空,则令其空,且提示
if (not BatchCtrl(AdoQry_tmp,AdoQry_Body.fieldbyname('ItemCode').asstring)) then
begin
if (AdoQry_Body.fieldbyname('Batchno').asstring<>'') then
begin
DispInfo('该物料不受批次控制,不能录入批次号',1);
AdoQry_Body.fieldbyname('Batchno').asstring:='';
dbgrideh.setfocus;
abort;
end
end;
end;
//如果受批次控制,则做批次号是否存在检验,如果存在,则检验批次库存是否够
if (AdoQry_Body.fieldbyname('InvBillqty').asstring<>'0') then
begin
if (BatchCtrl(AdoQry_tmp,AdoQry_Body.fieldbyname('ItemCode').asstring)) then
begin
if (AdoQry_Body.fieldbyname('Batchno').asstring='') then
begin
DispInfo('请录入批次号',1);
dbgrideh.setfocus;
abort;
end
else
begin
if not BatchNoCheck(AdoQry_tmp,
AdoQry_Body.fieldbyname('Batchno').asstring,
AdoQry_Body.fieldbyname('ItemCode').asstring,
'',
medt_Date.text) then
begin
dbgrideh.setfocus;
abort;
end
else
begin
if not BatchInvCheck(AdoQry_tmp,
AdoQry_Body.fieldbyname('Batchno').asstring,
'C',
tmp_WhCode,
tmp_WhPositionCode,
AdoQry_Body.fieldbyname('moRequestqty').asfloat) then
begin
dbgrideh.setfocus;
abort;
end;
end;
end;
end;
end;
end;
end;
end;
procedure TFrm_Inv_MnOutAudit_B.Act_autoExecute(Sender: TObject);
var
M,tmp_OverPlan:integer;
tmp_BomScrAp_Percent,tmp_SwApMoRealqty,tmp_Bomqty,tmp_SwApmoCtrlqty,tmp_reMain,
InvBillqty,onhandInv,InvBillSfcqty,moCtrlqty,MoRealqty:real;
Batchno:string;
outqty:double;
//实领数量,当前库存,请领数量,限额数量,累计实领数量
begin
inherited;
tmp_OverPlan:=AdoQry_Head.fieldbyname('OverPlan').asinteger;
//下面几行代码:如果有替代件,先把替代件清零
if (AdoQuery1.RecordCount>0) and (tmp_OverPlan<>1) then
begin
with AdoQry_Body do
begin
disablecontrols;
First;
for M:=0 to recordCount-1 do
begin
if (fieldbyname('alterNative').asinteger=1) and
(fieldbyname('InvBillqty').asfloat<>0) then
begin
edit;
fieldbyname('InvBillqty').asfloat:=0;
post;
end;
next;
end;
enablecontrols;
end;
end;
//获取最佳数量代码,不包括
with AdoQry_Body do
begin
disablecontrols;
First;
for M:=0 to recordCount-1 do
begin
InvBillqty:=fieldbyname('InvBillqty').asfloat;
InvBillSfcqty:=fieldbyname('InvBillSfcqty').asfloat;
onhandInv:=fieldbyname('onhandInv').asfloat;
moCtrlqty:=fieldbyname('moCtrlqty').asfloat;
MoRealqty:=fieldbyname('MoRealqty').asfloat;
tmp_Bomqty:=fieldbyname('Bomqty').asfloat;
tmp_BomScrAp_Percent:=fieldbyname('BomScrAp_Percent').asfloat;
if (InvBillSfcqty=0) and ((onhandInv=0) or (onhandInv=null)) then
begin
end
else
begin
//如果是超计划,则实领数量=MIN(请领数量,库存数量)
if tmp_OverPlan=1 then
begin
if InvBillSfcqty>onhandInv then
begin
//如果是批处理控制,则根据处入来的数量OUTQTY与批处理库存中最佳数量比效,
//取最佳批次号
if BatchCtrl(AdoQry_tmp,fieldbyname('ItemCode').asstring) then
begin
outqty:=fieldbyname('moCtrlqty').asfloat-
fieldbyname('MoRealqty').asfloat;
Batchno:=GiveBatchNo(AdoQry_tmp,
getCode(lbl_WhCode.text),
getCode(lbl_WhPosition.text),
AdoQry_Body.fieldbyname('ItemCode').asstring,
medt_Date.text,
outqty,
AdoQry_Body.fieldbyname('Batchno').asstring
);
if Batchno='' then
begin
// edit;
// fieldbyname('moRequestqty').asfloat:=0;
end
else
begin
edit;
fieldbyname('InvBillqty').asfloat:=outqty;
fieldbyname('Batchno').asstring:=Batchno;
end;
end
else
begin
edit;
fieldbyname('InvBillqty').asfloat:=fieldbyname('onhandInv').asfloat;
end;
end
else
begin
if BatchCtrl(AdoQry_tmp,fieldbyname('ItemCode').asstring) then
begin
//如果是批处理控制,则根据处入来的数量OUTQTY与批处理库存中最佳数量比效,
//取最佳批次号
outqty:=fieldbyname('InvBillSfcqty').asfloat;
Batchno:=GiveBatchNo(AdoQry_tmp,
getCode(lbl_WhCode.text),
getCode(lbl_WhPosition.text),
AdoQry_Body.fieldbyname('ItemCode').asstring,
medt_Date.text,
outqty,
AdoQry_Body.fieldbyname('Batchno').asstring
);
if Batchno='' then
begin
// edit;
// fieldbyname('moRequestqty').asfloat:=0;
end
else
begin
edit;
fieldbyname('InvBillqty').asfloat:=outqty;
fieldbyname('Batchno').asstring:=Batchno;
end;
end
else
begin
edit;
fieldbyname('InvBillqty').asfloat:=fieldbyname('InvBillSfcqty').asfloat;
end;
end;
end
else
begin
//判断是否是替换实项,因替换实项的MoRealQTY,MOCtrlQTY 是从MNItemList表中的虚项中来
if fieldbyname('alterNative').asstring<>'1' then
begin
//不是超领,实领数量=MIN(请领数量,库存数量,限额数量-累计实领数量)
if InvBillSfcqty<onhandInv then
begin
if InvBillSfcqty<(moCtrlqty-MoRealqty) then
begin
if BatchCtrl(AdoQry_tmp,fieldbyname('ItemCode').asstring) then
begin
//如果是批处理控制,则根据处入来的数量OUTQTY与批处理库存中最佳数量比效,
//取最佳批次号
outqty:=InvBillSfcqty;
Batchno:=GiveBatchNo(AdoQry_tmp,
getCode(lbl_WhCode.text),
getCode(lbl_WhPosition.text),
AdoQry_Body.fieldbyname('ItemCode').asstring,
medt_Date.text,
outqty,
AdoQry_Body.fieldbyname('Batchno').asstring);
if Batchno='' then
begin
// edit;
// fieldbyname('moRequestqty').asfloat:=0;
end
else
begin
edit;
fieldbyname('InvBillqty').asfloat:=outqty;
fieldbyname('Batchno').asstring:=Batchno;
end;
end
else
begin
edit;
fieldbyname('InvBillqty').asfloat:=InvBillSfcqty;
end;
end
else
begin
if (moCtrlqty-MoRealqty)>0 then
begin
if BatchCtrl(AdoQry_tmp,fieldbyname('ItemCode').asstring) then
begin
//如果是批处理控制,则根据处入来的数量OUTQTY与批处理库存中最佳数量比效,
//取最佳批次号
outqty:=(moCtrlqty-MoRealqty);
Batchno:=GiveBatchNo(AdoQry_tmp,
getCode(lbl_WhCode.text),
getCode(lbl_WhPosition.text),
AdoQry_Body.fieldbyname('ItemCode').asstring,
medt_Date.text,
outqty,
AdoQry_Body.fieldbyname('Batchno').asstring);
if Batchno='' then
begin
// edit;
// fieldbyname('moRequestqty').asfloat:=0;
end
else
begin
edit;
fieldbyname('InvBillqty').asfloat:=outqty;
fieldbyname('Batchno').asstring:=Batchno;
end;
end
else
begin
edit;
fieldbyname('InvBillqty').asfloat:=(moCtrlqty-MoRealqty);
end;
end;
end;
end
else
begin
if onhandInv<(moCtrlqty-MoRealqty) then
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -