mrp_global.pas
来自「一个MRPII系统源代码版本」· PAS 代码 · 共 1,229 行 · 第 1/5 页
PAS
1,229 行
StrSQLText:='Select * '+
'From InformalMrpResult '+
'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+R_AdoQry.fieldbyname('OnHand').Value;
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;
end;
procedure DynamicRunMrp(R_AdoQry:TAdoQuery;
R_ItemCode:String;// --物料代码
R_StrToDate:String; // --当前日期
R_RunType:Integer );// --运行Mrp类型
var
StrSqlText:String;
DblOnHand:Double;
IntOrdinal:Integer;
begin
Case R_RunType Of
1..2: begin
If R_RunType=1 Then
StrSqlText:='Select * '+
'From MrpResult With(Index(ItemCode))'+
'Where ItemCode='''+R_ItemCode+''' '+
'Order By ReleaseDate,Ordinal '
Else
StrSqlText:='Select * '+
'From InformalMrpResult With(Index(ItemCode))'+
'Where ItemCode='''+R_ItemCode+''' '+
'Order By ReleaseDate,Ordinal ';
ExecuteSql(R_AdoQry,StrSqlText,0);
DblOnHand:=0;
While Not R_AdoQry.Eof Do
begin
IntOrdinal:=R_AdoQry.fieldbyname('Ordinal').Value;
Case IntOrdinal OF
0: DblOnHand:=R_AdoQry.fieldbyname('OnHand').Value;
1: DblOnHand:=DblOnHand+R_AdoQry.fieldbyname('OnHand').Value;
2: begin
IF (DblOnHand<0) And (R_AdoQry.fieldbyname('ReleaseDate').AsString>R_StrToDate) Then
begin
R_AdoQry.Edit;
R_AdoQry.fieldbyname('CanUseOnHand').Value:=1;
R_AdoQry.Post;
end;
DblOnHand:=DblOnHand+R_AdoQry.fieldbyname('OrderQty').Value;
end;
3: DblOnHand:=DblOnHand+R_AdoQry.fieldbyname('OnHand').Value;
4: DblOnHand:=DblOnHand-R_AdoQry.fieldbyname('GrossQty').Value;
end;
R_AdoQry.Next;
end;
end;
3: begin
StrSqlText:='Select * '+
'From MrpResult With(Index(ItemCode))'+
'Where ItemCode='''+R_ItemCode+''' '+
'Order By ReleaseDate,Ordinal ';
ExecuteSql(R_AdoQry,StrSqlText,0);
DblOnHand:=0;
While Not R_AdoQry.Eof Do
begin
IntOrdinal:=R_AdoQry.fieldbyname('Ordinal').Value;
Case IntOrdinal OF
0: DblOnHand:=R_AdoQry.fieldbyname('OnHand').Value;
1: DblOnHand:=DblOnHand+R_AdoQry.fieldbyname('OnHand').Value;
2: begin
IF (DblOnHand<0) And (R_AdoQry.fieldbyname('ReleaseDate').AsString>R_StrToDate) Then
begin
R_AdoQry.Edit;
R_AdoQry.fieldbyname('CanUseOnHand').Value:=1;
R_AdoQry.Post;
end;
DblOnHand:=DblOnHand+R_AdoQry.fieldbyname('OrderQty').Value;
end;
3: DblOnHand:=DblOnHand+R_AdoQry.fieldbyname('OnHand').Value;
4: DblOnHand:=DblOnHand-R_AdoQry.fieldbyname('GrossQty').Value;
end;
R_AdoQry.Next;
end;
StrSqlText:='Select * '+
'From InformalMrpResult With(Index(ItemCode))'+
'Where ItemCode='''+R_ItemCode+''' '+
'Order By ReleaseDate,Ordinal ';
ExecuteSql(R_AdoQry,StrSqlText,0);
DblOnHand:=0;
While Not R_AdoQry.Eof Do
begin
IntOrdinal:=R_AdoQry.fieldbyname('Ordinal').Value;
Case IntOrdinal OF
0: DblOnHand:=R_AdoQry.fieldbyname('OnHand').Value;
1: DblOnHand:=DblOnHand+R_AdoQry.fieldbyname('OnHand').Value;
2: begin
IF (DblOnHand<0) And (R_AdoQry.fieldbyname('ReleaseDate').AsString>R_StrToDate) Then
begin
R_AdoQry.Edit;
R_AdoQry.fieldbyname('CanUseOnHand').Value:=1;
R_AdoQry.Post;
end;
DblOnHand:=DblOnHand+R_AdoQry.fieldbyname('OrderQty').Value;
end;
3: DblOnHand:=DblOnHand+R_AdoQry.fieldbyname('OnHand').Value;
4: DblOnHand:=DblOnHand-R_AdoQry.fieldbyname('GrossQty').Value;
end;
R_AdoQry.Next;
end;
end;
end
end;
procedure ExecuteCmd(R_AdOCmd_Execute:TAdOCommand;R_StrSqlText:String);
begin
With R_AdOCmd_Execute Do
begin
CommandText:=R_StrSQLText;
Prepared;
Execute;
end;
end;
procedure DropTable(R_AdoQry:TAdoQuery;R_TableName:String);//删除表
var StrSQLText:String;
begin
Try
StrSQLText:='Drop Table '+R_TableName+'';
ExecuteSql(R_AdoQry,StrSqlText,1);
Except
end;
end;
procedure DelTmpTable(R_AdoQry:TAdoQuery);//删除整个RunMrp的临时表
begin
DropTable(R_AdoQry,'#TmPmps');
DropTable(R_AdoQry,'#TmPmoPo');
DropTable(R_AdoQry,'#TmPmoPoAlterNative');
DropTable(R_AdoQry,'#TmpItem');
DropTable(R_AdoQry,'#TmPMrpResult');
DropTable(R_AdoQry,'#TmPMrpResult1');
DropTable(R_AdoQry,'#TmPmdlMps');
DropTable(R_AdoQry,'#TmPmdlMps1');
DropTable(R_AdoQry,'#TmpCapacity');
DropTable(R_AdoQry,'#TMpsS');
end;
procedure RunMrpFirstStep(R_AdOCmd_FirstStep:TAdOCommand;
R_StrItemCode:String);//做运算Mrp的前期工作
var StrSqlText:String;
begin
StrSqlText:='Select ItemCode,ItemType,MinQty,PurchLDTime,RunLT+QcLT As MNLDTime,'+
'PrepareLT As PrepareLTTime,RunLT As RunLTTime,QcLT As QcLTTime,'+
'CurrentOnHandInv As OnHand,CurrentOnCheckInv As OnCheck,Convert(Float,0) As AssignedQty,'+
'CurrentOnHandInv As TmpOnHand,CurrentOnCheckInv As TmpOnCheck,Convert(Float,0) As TmPAssignedQty,'+
'PmCode,BatchStrat,BatchCtrl,PmBatch,CapacityHours,0 As LowLevelCode '+
'Into #TmpItem '+
'From Item With(Index(PK_Item)) '+
'Where ItemCode In ('+R_StrItemCode+') '+
'Create Index ItemCode On #TmpItem(ItemCode) '+
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?