📄 mrp_enter_newrunmrp.pas
字号:
end;
If (R_StrBatchStrat='0') Or (R_StrBatchQty='0') Then
DblSSQty:=Abs(DblOnHand)
Else
begin
DblSSQty:=Abs(DblOnHand);
If DblSSQty-StrToFloat(R_StrBatchQty)*Floor(DblSSQty/StrToFloat(R_StrBatchQty))=0 Then
DblSSQty:=DblSSQty
Else
DblSSQty:=StrToFloat(R_StrBatchQty)*( (DblSSQty-(DblSSQty-StrToFloat(R_StrBatchQty)*Floor(DblSSQty/StrToFloat(R_StrBatchQty))) )/StrToFloat(R_StrBatchQty)+1);
end;
If StrToDate>StrDueDate Then
StrDueDate1:=StrToDate
Else
StrDueDate1:=StrDueDate;
If StrToDate>StrReleaseDate Then
StrReleaseDate1:=StrToDate
Else
StrReleaseDate1:=StrReleaseDate;
If StrReleaseDate>=StrToDate Then
begin
DblOnHand:=DblOnHand+DblSSQty;
BMKBookMArk:=R_AdoQry_Calculate.BookMArk;
StrSqlText:='Select * From #TmPMrpResult '+
'Where Ordinal=3 And ReleaseDate='''+StrReleaseDate1+''' ';
ExecuteSql(R_AdoQry_Calculate1,StrSqlText,0);
If R_AdoQry_Calculate1.RecordCount<>0 Then
StrSqlText:='Update #TmPMrpResult '+
'Set Onhand=OnHand+'+FloatToStr(DblSSQty)+','+
'ReMainQty=ReMainQty+'+FloatToStr(DblSSQty)+' '+
'Where Ordinal=3 And ReleaseDate='''+StrReleaseDate1+''' '
Else
StrSqlText:='Insert #TmPMrpResult'+
'(ItemCode,'+
' DueDate,'+
' ReleaseDate,'+
' RealDueDate,'+
' RealReleaseDate,'+
' OnHand,'+
' ReMainQty,'+
' Ordinal,'+
' PmCode,'+
' Pegging,'+
' GroupOrdinal)'+
'Values'+
'('''+StrItemCode+''','+
' '''+StrDueDate1+''','+
' '''+StrReleaseDate1+''','+
' '''+StrDueDate+''','+
' '''+StrReleaseDate+''','+
' '+FloatToStr(DblSSQty)+','+
' '+FloatToStr(DblSSQty)+','+
' 3,'+
' '+StrPmCode+','+
' '''+StrPegging+''','+
' '+IntToStr(IntGroupOrdinal)+')';
ExecuteSql(R_AdoQry_Calculate1,StrSqlText,1);
R_AdoQry_Calculate.BookMArk:=BMKBookMArk;
end;
end;
R_AdoQry_Calculate.Next;
end;
If DblOnHand<0 Then
begin
StrSqlText:='Select * From #TmPMrpResult '+
'Where Ordinal=3 And ReleaseDate='''+StrReleaseDate1+''' ';
ExecuteSql(R_AdoQry_Calculate1,StrSqlText,0);
If R_AdoQry_Calculate1.RecordCount<>0 Then
StrSqlText:='Update #TmPMrpResult '+
'Set Onhand=OnHand+'+FloatToStr(DblSSQty)+','+
'ReMainQty=ReMainQty+'+FloatToStr(DblSSQty)+' '+
'Where Ordinal=3 And ReleaseDate='''+StrReleaseDate1+''' '
Else
StrSqlText:='Insert #TmPMrpResult'+
'(ItemCode,'+
' DueDate,'+
' ReleaseDate,'+
' RealDueDate,'+
' RealReleaseDate,'+
' OnHand,'+
' ReMainQty,'+
' Ordinal,'+
' PmCode,'+
' Pegging,'+
' GroupOrdinal)'+
'Values'+
'('''+StrItemCode+''','+
' '''+StrDueDate1+''','+
' '''+StrReleaseDate1+''','+
' '''+StrDueDate+''','+
' '''+StrReleaseDate+''','+
' '+FloatToStr(DblSSQty)+','+
' '+FloatToStr(DblSSQty)+','+
' 3,'+
' '+StrPmCode+','+
' '''+StrPegging+''','+
' '+IntToStr(IntGroupOrdinal)+')';
ExecuteSql(R_AdoQry_Calculate1,StrSqlText,1);
DblOnHand:=0;
end;
If DblOnHand>0 Then
begin
StrSQLText:='Select * '+
'From #TmPMrpResult '+
'Where Ordinal<>4 '+
'Order By ReleaseDate,Ordinal';
ExecuteSql(R_AdoQry_Calculate,StrSqlText,0);
R_AdoQry_Calculate.Last;
While (Not R_AdoQry_Calculate.Bof) And (DblOnHand>0) Do
begin
If R_AdoQry_Calculate.fieldbyname('Ordinal').Value=1 Then
Break
Else
begin
R_AdoQry_Calculate.Edit;
Case R_AdoQry_Calculate.fieldbyname('Ordinal').Value Of
2:begin
If DblONHand>=R_AdoQry_Calculate.fieldbyname('OnHand').Value Then
begin
DblONHand:=DblONHand-R_AdoQry_Calculate.fieldbyname('OnHand').Value;
R_AdoQry_Calculate.fieldbyname('OnHand').Value:=0;
end
Else
begin
R_AdoQry_Calculate.fieldbyname('OnHand').Value:=
R_AdoQry_Calculate.fieldbyname('OnHand').Value-DblOnHand;
DblONHand:=0;
end;
end;
3:begin
If DblONHand>=R_AdoQry_Calculate.fieldbyname('OnHand').Value Then
begin
DblONHand:=DblONHand-R_AdoQry_Calculate.fieldbyname('OnHand').Value;
R_AdoQry_Calculate.fieldbyname('OnHand').Value:=0;
R_AdoQry_Calculate.Delete();
R_AdoQry_Calculate.prior;
Continue;
end
Else
begin
DblONHand:=R_AdoQry_Calculate.fieldbyname('OnHand').Value-DblOnHand;;
If (R_StrBatchStrat='0') Or (R_StrBatchQty='0') Then
DblSSQty:=Abs(DblOnHand)
Else
begin
DblSSQty:=Abs(DblOnHand);
If DblSSQty-StrToFloat(R_StrBatchQty)*Floor(DblSSQty/StrToFloat(R_StrBatchQty))=0 Then
DblSSQty:=DblSSQty
Else
DblSSQty:=StrToFloat(R_StrBatchQty)*( (DblSSQty-(DblSSQty-StrToFloat(R_StrBatchQty)*Floor(DblSSQty/StrToFloat(R_StrBatchQty))) )/StrToFloat(R_StrBatchQty)+1);
end;
R_AdoQry_Calculate.fieldbyname('OnHand').Value:=DblSSQty;
DblONHand:=0;
end;
end;
end;
R_AdoQry_Calculate.Post;
end;
R_AdoQry_Calculate.prior;
end;
end;
StrSqlText:='Insert '+R_StrMrpResult+' '+
'(ItemCode,DueDate,ReleaseDate, '+
'OrderNo,GrossQty,OrderQty,RealOrderQty,OnHand,'+
'CanUseOnHand,NetQty,Ordinal,'+
'PmCode,OrderLineStatus,OrderLineNo,'+
'Pegging,PeggingNo,OnCheck,AssignedQty,RealDueDate,'+
'RealReleaseDate,GroupOrdinal,ReMainQty,DeptVendorCode) '+
'Select ItemCode,DueDate,ReleaseDate, '+
'OrderNo,GrossQty,OrderQty,RealOrderQty,OnHand,'+
'CanUseOnHand,NetQty,Ordinal,'+
'PmCode,OrderLineStatus,OrderLineNo,'+
'Pegging,PeggingNo,OnCheck,AssignedQty,RealDueDate,'+
'RealReleaseDate,GroupOrdinal,ReMainQty,DeptVendorCode '+
'From #TmPMrpResult '+
'Order By ReleaseDate,Ordinal';
ExecuteSql(R_AdoQry_Calculate,StrSqlText,1);
end;}
procedure TFrm_Mrp_Enter_NewRunMrp.CalculateMrpResult(
R_AdoQry_Calculate:TAdoQuery;
R_AdoQry_Calculate1:TAdoQuery;
R_StrItemCode:String;R_StrReleaseDate:String;
R_StrMinQty:String;R_StrBatchStrat:String;
R_StrBatchQty:String;R_StrSubReleaseDate:String;
R_StrMrpResult:String;R_StrDueDate:String);//计算Mrp结果
var StrSqlText:String;
DblOnHand:Double;
DblSSQty:Double;
IntOrdinal:Integer;
BMKBookMArk:String;
StrDueDate1:String;
StrReleaseDate1:String;
DblCanUseONHand:Double;
DblGrossQty:Double;
IntHaveAdvanceRecord:Integer;
begin
DblSSQty:=0;
IntHaveAdvanceRecord:=0;
StrPegging:='系统建议下达';
StrSqlText:='Select Sum(ONHand) As OnHand '+
'From #TmPMrpResult '+
'Where Ordinal=0 Or Ordinal=1 Or Ordinal=2' ;
ExecuteSql(R_AdoQry_Calculate,StrSqlText,0);
DblCanUseONHand:=R_AdoQry_Calculate.fieldbyname('OnHand').AsFloat;
StrSqlText:='Select Sum(GrossQty) As GrossQty '+
'From #TmPMrpResult '+
'Where Ordinal=4 ' ;
ExecuteSql(R_AdoQry_Calculate,StrSqlText,0);
DblGrossQty:=R_AdoQry_Calculate.fieldbyname('GrossQty').AsFloat;
If DblCanUseOnHand<DblGrossQty Then
DblCanUseOnHand:=DblGrossQty-DblCanUseOnHand
Else
DblCanUseOnHand:=0; //算出建议下单量
StrSQLText:='Select * '+
'From #TmPMrpResult '+
'Order By ReleaseDate,Ordinal';
ExecuteSql(R_AdoQry_Calculate,StrSqlText,0);
DblOnHand:=0;
While Not R_AdoQry_Calculate.Eof Do
begin
IF (R_AdoQry_Calculate.fieldbyname('ReleaseDate').AsString>StrToDate)
And (DblOnHand<0) And (DblCanUseOnHand>0) Then //对需求日期小于当前日期的物料建议下达
begin
If ABS(DblOnHand)>DblCanUseOnHand Then
begin
DblSSQty:=Abs(DblOnHand)-DblCanUseOnHand;
DblCanUseOnHand:=0;
end
Else begin
DblSSQty:=Abs(DblOnHand);
DblCanUseOnHand:=DblCanUseOnHand-Abs(DblOnHand);
end;
If (R_StrBatchStrat='0') Or (R_StrBatchQty='0') Then //算出建议量
DblSSQty:=DblSSQty
Else begin
If DblSSQty-StrToFloat(R_StrBatchQty)*Floor(DblSSQty/StrToFloat(R_StrBatchQty))=0 Then
DblSSQty:=DblSSQty
Else
DblSSQty:=StrToFloat(R_StrBatchQty)*( (DblSSQty-(DblSSQty-StrToFloat(R_StrBatchQty)*Floor(DblSSQty/StrToFloat(R_StrBatchQty))) )/StrToFloat(R_StrBatchQty)+1);
end;
DblOnHand:=DblOnHand+DblSSQty;
BMKBookMArk:=R_AdoQry_Calculate.BookMArk;
StrSqlText:='Insert #TmPMrpResult'+
'(ItemCode,'+
' DueDate,'+
' ReleaseDate,'+
' RealDueDate,'+
' RealReleaseDate,'+
' OnHand,'+
' ReMainQty,'+
' Ordinal,'+
' PmCode,'+
' Pegging,'+
' GroupOrdinal)'+
'Values'+
'('''+StrItemCode+''','+
' '''+StrToDate+''','+
' '''+StrToDate+''','+
' '''+StrToDate+''','+
' '''+StrToDate+''','+
' '+FloatToStr(DblSSQty)+','+
' '+FloatToStr(DblSSQty)+','+
' 3,'+
' '+StrPmCode+','+
' '''+StrPegging+''','+
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -