mrp_global.pas
来自「一个MRPII系统源代码版本」· PAS 代码 · 共 1,229 行 · 第 1/5 页
PAS
1,229 行
'UpDate InformalMrpResult '+
'Set OrderQty='+FloatToStr(DblOrderNoFinishQty)+',RealOrderQty='+FloatToStr(DblOrderQty)+','+
'DueDate='''+R_DueDate+''',ReleaseDate='''+R_ReleaseDate+''',RealDueDate='''+R_DueDate+''',RealReleaseDate='''+R_ReleaseDate+''' '+
'Where OrderNo+Convert(varchAr,OrderLineNO)='''+R_OrderNo+IntToStr(R_OrderLineNo)+''' ';
ExecuteSql(R_AdoQry,StrSqlText,1);
StrSqlText:='UpDate MrpResult '+
'Set ONHand=OrderQty '+
'Where OrderNo+Convert(varchAr,OrderLineNO)='''+R_OrderNo+IntToStr(R_OrderLineNo)+''' And OnHand>OrderQty '+
'UpDate InformalMrpResult '+
'Set ONHand=OrderQty '+
'Where OrderNo+Convert(varchAr,OrderLineNO)='''+R_OrderNo+IntToStr(R_OrderLineNo)+''' And OnHand>OrderQty ';
end;
end;
ExecuteSql(R_AdoQry,StrSqlText,1);
DynamicRunMrp(R_AdoQry,R_ItemCode,
StrToDate,3 );
end;
If UpperCase(R_TaskType)='Mps' Then
begin
If (R_OperationType=1) Or (R_OperationType=2) Then
begin
StrSqlText:='Select ItemCode,PurchLDTime,RunLT+QcLT As MNLDTime, '+
'PrepareLT As PrepareLTTime,RunLT As RunLTTime, '+
'QcLT As QcLTTime,PmCode '+
'From Item '+
'Where ItemCode='''+R_ItemCode+'''';
ExecuteSql(R_AdoQry,StrSqlText,0);
IntPurchLDTime:=R_AdoQry.fieldbyname('PurchLDTime').AsInteger;
IntQcLTTime:=R_AdoQry.fieldbyname('QcLTTime').AsInteger;
IntRunLTTime:=R_AdoQry.fieldbyname('RunLTTime').AsInteger;
StrPmCode:=R_AdoQry.fieldbyname('PmCode').AsString;
StrSqlText:='Select * From Mps '+
'Where MpsID='+IntToStr(R_MpsID)+'';
ExecuteSql(R_AdoQry,StrSqlText,0);
IntMpsQty:=R_AdoQry.fieldbyname('MpsQty').AsInteger-R_AdoQry.fieldbyname('MpsFinishQty').AsInteger;;
IF IntMpsqty<0 Then
IntMpsqty:=0;
StrReleaseDate:=R_AdoQry.fieldbyname('MpsDate').AsString;
If (StrPmCode='1') Or (StrPmCode='2') Then
StrDueDate:=SlCalendar(R_AdoQry.Connection,StrReleaseDate,IntPurchLDTime)
Else
begin
StrReleaseDate:=SlCalendar(R_AdoQry.Connection,StrReleaseDate,IntQcLTTime);
StrDueDate:=SlCalendar(R_AdoQry.Connection,StrReleaseDate,IntRunLTTime);
end;
end;
Case R_OperationType Of
1: begin //新增
StrSqlText:='DeclAre @@GroupOrdinal Integer '+
'Select @@GroupOrdinal=GroupOrdinal '+
'From MrpResult With(Index(ItemCode)) '+
'Where ItemCode='''+R_ItemCode+''' '+
'Insert MrpResult '+
'(GroupOrdinal,Ordinal,ItemCode,GrossQty,'+
' DueDate,ReleaseDate,RealDueDate,RealReleaseDate,PmCode,Pegging,PeggingNo) '+
'Values(@@GroupOrdinal,4,'''+R_ItemCode+''','+FloatToStr(IntMpsQty)+','+
' '''+StrDueDate+''','''+StrReleaseDate+''','''+StrDueDate+''','''+StrReleaseDate+''','+
''+StrPmCode+',''主计划需求'','+IntToStr(R_MpsID)+') '+
'Select @@GroupOrdinal=GroupOrdinal '+
'From InformalMrpResult With(Index(ItemCode)) '+
'Where ItemCode='''+R_ItemCode+''' '+
'Insert InformalMrpResult '+
'(GroupOrdinal,Ordinal,ItemCode,GrossQty,'+
' DueDate,ReleaseDate,RealDueDate,RealReleaseDate,PmCode,Pegging,PeggingNo) '+
'Values(@@GroupOrdinal,4,'''+R_ItemCode+''','+FloatToStr(IntMpsQty)+','+
' '''+StrDueDate+''','''+StrReleaseDate+''','''+StrDueDate+''','''+StrReleaseDate+''','+
''+StrPmCode+',''主计划需求'','+IntToStr(R_MpsID)+')';
end;
2: begin //修改
StrSqlText:='UpDate MrpResult '+
'Set GrossQty='+FloatToStr(IntMpsQty)+','+
'DueDate='''+StrDueDate+''',ReleaseDate='''+StrReleaseDate+''','+
'RealDueDate='''+StrDueDate+''',RealReleaseDate='''+StrReleaseDate+''' '+
'Where PeggingNo='''+IntToStr(R_MpsID)+''' '+
'UpDate InformalMrpResult '+
'Set GrossQty='+FloatToStr(IntMpsQty)+','+
'DueDate='''+StrDueDate+''',ReleaseDate='''+StrReleaseDate+''','+
'RealDueDate='''+StrDueDate+''',RealReleaseDate='''+StrReleaseDate+''' '+
'Where PeggingNo='''+IntToStr(R_MpsID)+'''';
end;
3: begin //删除
StrSqlText:='Delete From MrpResult '+
'Where PeggingNo='''+IntToStr(R_MpsID)+''' '+
'Delete From InformalMrpResult '+
'Where PeggingNo='''+IntToStr(R_MpsID)+'''';
end;
end;
ExecuteSql(R_AdoQry,StrSqlText,1);
DynamicRunMrp(R_AdoQry,R_ItemCode,
StrToDate,3 );
end;
AdvanceOrder(R_AdoQry,R_ItemCode);
end;
procedure AdvanceOrder(R_AdoQry:TAdoQuery;
R_ItemCode:String);// --物料代码
var StrSqlText:String;
DblOnHand:Double;
IntOrdinal:Integer;
StrReleaseDate1:String;
StrToDate:String;
BMKBookMArk:String;
begin
StrSqlText:='Exec Pro_Public_GetToDate ';
ExecuteSql(R_AdoQry,StrSqlText,0);
StrToDate:=R_AdoQry.fieldbyname('Result').Value;
StrSQLText:='Select * '+
'From MrpResult '+
'Where ItemCode='''+R_ItemCode+''' And Ordinal=2 '+
'Order By ReleaseDate,Ordinal ';
ExecuteSql(R_AdoQry,StrSqlText,0);
While Not R_AdoQry.Eof Do
begin
IF R_AdoQry.fieldbyname('CanUseOnHand').Value=1 Then
begin
R_AdoQry.Edit;
R_AdoQry.fieldbyname('CanUseOnHand').Value:=0;
R_AdoQry.fieldbyname('RealReleaseDate').Value:=R_AdoQry.fieldbyname('ReleaseDate').Value;
R_AdoQry.Post;
end;
R_AdoQry.Next;
end;
StrSQLText:='Select CurrentOnHandInv+CurrentOnCheckInv As OnHandInv '+
'From Item '+
'Where ItemCode='''+R_ItemCode+''' ';
ExecuteSql(R_AdoQry,StrSqlText,0);
DblOnHand:=0;
DblOnHand:=R_AdoQry.fieldbyname('OnHandInv').Value;
StrSQLText:='Select * '+
'From MrpResult '+
'Where ItemCode='''+R_ItemCode+''' '+
'Order By ReleaseDate,Ordinal ';
ExecuteSql(R_AdoQry,StrSqlText,0);
While Not R_AdoQry.Eof Do
begin
IntOrdinal:=R_AdoQry.fieldbyname('Ordinal').Value;
Case IntOrdinal OF
// 0..1: DblOnHand:=DblOnHand;
2: begin
IF (DblOnHand<0) And (StrReleaseDate1<StrToDate ) And
(R_AdoQry.fieldbyname('RealReleaseDate').AsString>STrToDate) Then
begin
BMKBookMArk:=R_AdoQry.BookMArk;
While Not R_AdoQry.Eof Do
begin
IntOrdinal:=R_AdoQry.fieldbyname('Ordinal').Value;
If (IntOrdinal=2) And (R_AdoQry.fieldbyname('ReleaseDate').AsString=R_AdoQry.fieldbyname('RealReleaseDate').AsString) Then
begin
R_AdoQry.Edit;
R_AdoQry.fieldbyname('RealReleaseDate').Value:=StrToDateTime(StrToDate);
R_AdoQry.fieldbyname('CanUseOnHand').Value:=1;
R_AdoQry.Post;
DblOnHand:=DblOnHand+R_AdoQry.fieldbyname('OnHand').Value;
If DblOnHand>=0 Then
Break;
end;
R_AdoQry.Next;
end;
R_AdoQry.BookMArk:=BMKBookMArk;
end;
If R_AdoQry.fieldbyname('ReleaseDate').AsString=R_AdoQry.fieldbyname('RealReleaseDate').AsString Then
DblOnHand:=DblOnHand+R_AdoQry.fieldbyname('OnHand').Value;
end;
3: DblOnHand:=DblOnHand+R_AdoQry.fieldbyname('ReMainQty').Value;
4: begin
IF (DblOnHand<0) And (StrReleaseDate1<StrToDate ) And
(R_AdoQry.fieldbyname('RealReleaseDate').AsString>STrToDate) Then
begin
BMKBookMArk:=R_AdoQry.BookMArk;
While Not R_AdoQry.Eof Do
begin
IntOrdinal:=R_AdoQry.fieldbyname('Ordinal').Value;
If (IntOrdinal=2) And (R_AdoQry.fieldbyname('ReleaseDate').AsString=R_AdoQry.fieldbyname('RealReleaseDate').AsString) Then
begin
R_AdoQry.Edit;
R_AdoQry.fieldbyname('RealReleaseDate').Value:=StrToDateTime(StrToDate);
R_AdoQry.fieldbyname('CanUseOnHand').Value:=1;
R_AdoQry.Post;
DblOnHand:=DblOnHand+R_AdoQry.fieldbyname('OnHand').Value;
If DblOnHand>=0 Then
Break;
end;
R_AdoQry.Next;
end;
R_AdoQry.BookMArk:=BMKBookMArk;
end;
DblOnHand:=DblOnHand-R_AdoQry.fieldbyname('GrossQty').Value;
StrReleaseDate1:=R_AdoQry.fieldbyname('ReleaseDate').AsString;
end;
end;
If (DBlOnHand<0) And (StrReleaseDate1>=StrToDate) Then
begin
BMKBookMArk:=R_AdoQry.BookMArk;
While Not R_AdoQry.Eof Do
begin
IntOrdinal:=R_AdoQry.fieldbyname('Ordinal').Value;
If (IntOrdinal=2) And (R_AdoQry.fieldbyname('ReleaseDate').AsString=R_AdoQry.fieldbyname('RealReleaseDate').AsString) Then
begin
R_AdoQry.Edit;
R_AdoQry.fieldbyname('RealReleaseDate').Value:=StrToDateTime(StrReleaseDate1);
R_AdoQry.fieldbyname('CanUseOnHand').Value:=1;
R_AdoQry.Post;
DblOnHand:=DblOnHand+R_AdoQry.fieldbyname('OnHand').Value;
If DblOnHand>=0 Then
Break;
end;
R_AdoQry.Next;
end;
R_AdoQry.BookMArk:=BMKBookMArk;
end;
R_AdoQry.Next;
end;
StrSQLText:='Select * '+
'From InformalMrpResult '+
'Where ItemCode='''+R_ItemCode+''' And Ordinal=2 '+
'Order By ReleaseDate,Ordinal';
ExecuteSql(R_AdoQry,StrSqlText,0);
While Not R_AdoQry.Eof Do
begin
IF R_AdoQry.fieldbyname('CanUseOnHand').Value=1 Then
begin
R_AdoQry.Edit;
R_AdoQry.fieldbyname('CanUseOnHand').Value:=0;
R_AdoQry.fieldbyname('RealReleaseDate').Value:=R_AdoQry.fieldbyname('ReleaseDate').Value;
R_AdoQry.Post;
end;
R_AdoQry.Next;
end;
StrSQLText:='Select CurrentOnHandInv+CurrentOnCheckInv As OnHandInv '+
'From Item '+
'Where ItemCode='''+R_ItemCode+''' ';
ExecuteSql(R_AdoQry,StrSqlText,0);
DblOnHand:=0;
DblOnHand:=R_AdoQry.fieldbyname('OnHandInv').Value;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?