📄 mrp_enter_newrunmrp.pas
字号:
' '+IntToStr(IntGroupOrdinal)+')';
ExecuteSql(R_AdoQry_Calculate1,StrSqlText,1);
DblSSQty:=0;
R_AdoQry_Calculate.BookMArk:=BMKBookMArk;
end;
IntOrdinal:=R_AdoQry_Calculate.fieldbyname('Ordinal').Value;
Case IntOrdinal OF
0: begin
DblOnHand:=R_AdoQry_Calculate.fieldbyname('OnHand').Value;
R_AdoQry_Calculate.Next;
Continue;
end;
1: begin
DblOnHand:=DblOnHand+R_AdoQry_Calculate.fieldbyname('OnHand').Value;
R_AdoQry_Calculate.Next;
Continue;
end;
2: begin
IF (DblOnHand<0) And (R_AdoQry_Calculate.fieldbyname('ReleaseDate').AsString>StrToDate) Then //(DblCanUseOnHand=0) And
begin
IntHaveAdvanceRecord:=1;
R_AdoQry_Calculate.Edit;
R_AdoQry_Calculate.fieldbyname('CanUseOnHand').Value:=1;
R_AdoQry_Calculate.Post;
end;
DblOnHand:=DblOnHand+R_AdoQry_Calculate.fieldbyname('OrderQty').Value;
end;
3: Break;
4: DblOnHand:=DblOnHand-R_AdoQry_Calculate.fieldbyname('GrossQty').Value;
end;
If (DblOnHand<0) And (DblCanUseOnHand>0) And
(R_AdoQry_Calculate.fieldbyname('ReleaseDate').AsString>=StrToDate) Then
begin
If ABS(DblOnHand)>DblCanUseOnHand Then
begin
DblSSQty:=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;
StrReleaseDate:=R_AdoQry_Calculate.fieldbyname('ReleaseDate').AsString;
StrDueDate:=R_AdoQry_Calculate.fieldbyname('DueDate').AsString;
Case R_AdoQry_Calculate.fieldbyname('PmCode').Value Of
1..2:
StrDueDate:=GetCalendar(DBConnect,StrReleaseDate,IntRunLTTime);
Else
StrDueDate:=GetCalendar(DBConnect,StrReleaseDate,IntRunLTTime);
end;
If StrToDate>StrDueDate Then
StrDueDate1:=StrToDate
Else
StrDueDate1:=StrDueDate;
If StrToDate>StrReleaseDate Then
StrReleaseDate1:=StrToDate
Else
StrReleaseDate1:=StrReleaseDate;
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;
DblSSQty:=0;
end;
R_AdoQry_Calculate.Next;
end;
If DblOnHand<0 Then
begin
If StrToDate>StrDueDate Then
StrDueDate1:=StrToDate
Else
StrDueDate1:=StrDueDate;
If StrToDate>StrReleaseDate Then
StrReleaseDate1:=StrToDate
Else
StrReleaseDate1:=StrReleaseDate;
DblSSQty:=ABS(DblOnHand);
If (R_StrBatchStrat='0') Or (R_StrBatchQty='0') Then //算出建议量
DblSSQty:=ABS(DblOnHand)
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;
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);
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;
If IntHaveAdvanceRecord=1 Then//有要提前的订单
begin
StrSQLText:='Select * '+
'From #TmPMrpResult '+
'Order By ReleaseDate,Ordinal';
ExecuteSql(R_AdoQry_Calculate,StrSqlText,0);
DblOnHand:=0;
While Not R_AdoQry_Calculate.Eof Do
begin
IntOrdinal:=R_AdoQry_Calculate.fieldbyname('Ordinal').Value;
Case IntOrdinal OF
0..1: DblOnHand:=DblOnHand+R_AdoQry_Calculate.fieldbyname('OnHand').Value;
2: begin
IF (DblOnHand<0) And (StrReleaseDate1<StrToDate ) And
(R_AdoQry_Calculate.fieldbyname('RealReleaseDate').AsString>STrToDate) Then
begin
BMKBookMArk:=R_AdoQry_Calculate.BookMArk;
While Not R_AdoQry_Calculate.Eof Do
begin
IntOrdinal:=R_AdoQry_Calculate.fieldbyname('Ordinal').Value;
If (IntOrdinal=2) And (R_AdoQry_Calculate.fieldbyname('ReleaseDate').AsString=R_AdoQry_Calculate.fieldbyname('RealReleaseDate').AsString) Then
begin
R_AdoQry_Calculate.Edit;
R_AdoQry_Calculate.fieldbyname('RealReleaseDate').Value:=StrToDateTime(StrToDate);
R_AdoQry_Calculate.Post;
DblOnHand:=DblOnHand+R_AdoQry_Calculate.fieldbyname('OnHand').Value;
If DblOnHand>=0 Then
Break;
end;
R_AdoQry_Calculate.Next;
end;
R_AdoQry_Calculate.BookMArk:=BMKBookMArk;
end;
If R_AdoQry_Calculate.fieldbyname('ReleaseDate').AsString=R_AdoQry_Calculate.fieldbyname('RealReleaseDate').AsString Then
DblOnHand:=DblOnHand+R_AdoQry_Calculate.fieldbyname('OnHand').Value;
end;
3: DblOnHand:=DblOnHand+R_AdoQry_Calculate.fieldbyname('OnHand').Value;
4: begin
IF (DblOnHand<0) And (StrReleaseDate1<StrToDate ) And
(R_AdoQry_Calculate.fieldbyname('RealReleaseDate').AsString>STrToDate) Then
begin
BMKBookMArk:=R_AdoQry_C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -