mrp_global.pas
来自「一个MRPII系统源代码版本」· PAS 代码 · 共 1,229 行 · 第 1/5 页
PAS
1,229 行
':SSCode,'+
':OrderLineStatus)';
Sql.Add(StrSqlText);
Parameters.ParamByName('ItemCode').Value:=R_AdoQry_Save2.fieldbyname('ItemCode').Value;
Parameters.ParamByName('DueDate').Value:=R_AdoQry_Save2.fieldbyname('DueDate').Value;
Parameters.ParamByName('ReleaseDate').Value:=R_AdoQry_Save2.fieldbyname('ReleaseDate').Value;
Parameters.ParamByName('OrderNo').Value:=R_AdoQry_Save2.fieldbyname('OrderNo').Value;
Parameters.ParamByName('OrderLineNo').Value:=R_AdoQry_Save2.fieldbyname('OrderLineNo').Value;
Parameters.ParamByName('OrderQty').Value:=R_DblSaveQty;
Parameters.ParamByName('Ordinal').Value:=2;
Parameters.ParamByName('PmCode').Value:=R_AdoQry_Save2.fieldbyname('PmCode').Value;
If R_AdoQry_Save2.fieldbyname('OrderQty').Value>0 Then
Parameters.ParamByName('SSCode').Value:=2
else
Parameters.ParamByName('SSCode').Value:=3;
Parameters.ParamByName('OrderLineStatus').Value:=R_AdoQry_Save2.fieldbyname('OrderLineStatus').Value;
Prepared;
ExeCSql;
end;
end;
procedure SaveOverDueMoPo(R_AdoQry_Save1:TAdoQuery;//将当前MOPO记录插入#TmPMrpResult
R_AdoQry_Save2:TAdoQuery;
R_DblSaveQty:Double);
var StrSqlText:String;
begin
With R_AdoQry_Save1 Do
begin
Close;
Sql.clear;
StrSqlText:='Insert '+StrSS+'(ItemCode,'+
'SSQty,'+
'SsSysInfoFlag,'+
'DueDate,'+
'SSDate,'+
'OrderNo,'+
'OrderLineNo,'+
'OrderLineStatus,'+
'DeptVendorCode,'+
'PmType,'+
'ReMainQty) '+
'Values(:ItemCode,'+
':SSQty,'+
':SsSysInfoFlag,'+
':DueDate,'+
':SSDate,'+
':OrderNo,'+
':OrderLineNo,'+
':OrderLineStatus,'+
':DeptVendorCode,'+
':PmType,'+
':ReMainQty)';
Sql.Add(StrSqlText);
Parameters.ParamByName('ItemCode').Value:=R_AdoQry_Save2.fieldbyname('ItemCode').Value;
Parameters.ParamByName('SSQty').Value:=R_DblSaveQty;
Parameters.ParamByName('SsSysInfoFlag').Value:=4;
Parameters.ParamByName('DueDate').Value:=R_AdoQry_Save2.fieldbyname('DueDate').Value;
Parameters.ParamByName('SSDate').Value:=R_AdoQry_Save2.fieldbyname('ReleaseDate').Value;
Parameters.ParamByName('OrderNo').Value:=R_AdoQry_Save2.fieldbyname('OrderNo').Value;
Parameters.ParamByName('OrderLineNo').Value:=R_AdoQry_Save2.fieldbyname('OrderLineNo').Value;
Parameters.ParamByName('OrderLineStatus').Value:=R_AdoQry_Save2.fieldbyname('OrderLineStatus').Value;
Parameters.ParamByName('DeptVendorCode').Value:=R_AdoQry_Save2.fieldbyname('DeptVendorCode').Value;
Parameters.ParamByName('PmType').Value:=R_AdoQry_Save2.fieldbyname('PmCode').Value;
Parameters.ParamByName('ReMainQty').Value:=R_DblSaveQty;
Prepared;
ExeCSql;
end;
end;
procedure SaveTemPmoPo(R_AdoQry_Save1:TAdoQuery;//将当前Query中的MOPO记录插入StrSS表中
R_AdoQry_Save2:TAdoQuery;R_StrSS:String);
var StrSqlText:String;
begin
With R_AdoQry_Save1 Do
begin
Close;
Sql.clear;
StrSqlText:='Insert '+R_StrSS+''+
'( ItemCode,'+
'SSDate,'+
'OrderNo,' +
'OrderLineNo,'+
'SSQty,'+
'PmType,'+
'SSSysInfoFlag,'+
'DeptVendorCode,'+
'OrderLineStatus,'+
'DueDate) '+
'Values( :ItemCode,'+
':SSDate,'+
':OrderNo,' +
':OrderLineNo,'+
':SSQty,'+
':PmType,'+
':SSSysInfoFlag,'+
':DeptVendorCode,'+
':OrderLineStatus,'+
':DueDate)';
Sql.Add(StrSqlText);
Parameters.ParamByName('ItemCode').Value:=R_AdoQry_Save2.fieldbyname('ItemCode').Value;
Parameters.ParamByName('SSDate').Value:=R_AdoQry_Save2.fieldbyname('ReleaseDate').Value;
Parameters.ParamByName('OrderNo').Value:=R_AdoQry_Save2.fieldbyname('OrderNo').Value;
Parameters.ParamByName('OrderLineNo').Value:=R_AdoQry_Save2.fieldbyname('OrderLineNo').Value;
Parameters.ParamByName('SSQty').Value:=R_AdoQry_Save2.fieldbyname('OrderQty').Value;
Parameters.ParamByName('PmType').Value:=R_AdoQry_Save2.fieldbyname('PmCode').Value;
If R_AdoQry_Save2.fieldbyname('OrderQty').Value>0 Then
Parameters.ParamByName('SSSysInfoFlag').Value:=2
else
Parameters.ParamByName('SSSysInfoFlag').Value:=3;
Parameters.ParamByName('DeptVendorCode').Value:=R_AdoQry_Save2.fieldbyname('DeptVendorCode').Value;
Parameters.ParamByName('OrderLineStatus').Value:=R_AdoQry_Save2.fieldbyname('OrderLineStatus').Value;
Parameters.ParamByName('DueDate').Value:=R_AdoQry_Save2.fieldbyname('DueDate').Value;
Prepared;
ExeCSql;
end;
end;
procedure SepcialAssignMOPO(R_AdoQry_Assign:TAdoQuery;R_AdoQry_Assign1:TAdoQuery); //分配MO\Po
var StrSqlText:String;
DblGrossQty:Double;
DblNetQty:Double;
DblSaveQty:Double;// 净需求量-在单量
begin
StrSqlText:='Select Sum(GrossQty) As GrossQty,'+
'Sum(OnHand)-('+StrMinQty+') As OnHand '+
'From #TmPMrpResult';
ExecuteSql(R_AdoQry_Assign,StrSqlText,0);//计算毛需求
DblGrossQty:=0;
DblNetQty:=0;
DblGrossQty:=R_AdoQry_Assign.fieldbyname('GrossQty').Value;
DblNetQty:=R_AdoQry_Assign.fieldbyname('OnHand').Value-(DblGrossQty);
StrSqlText:='Select * '+
'From #TmPmoPo With(Index(ItemCode)) '+
'Where ItemCode='''+StrItemCode+''' And '+
'ReleaseDate<='''+StrToDate+''' And OrderLINESTATUS<=6 And OrderQty>0 '+
'Order By ReleaseDate,OrderNo';
ExecuteSql(R_AdoQry_Assign,StrSqlText,0);//从#TmPmoPo表选出在当前约定交货日之前的记录
R_AdoQry_Assign.First;
IF DblNetQty<0 Then //有净需求
begin
While R_AdoQry_Assign.Eof=False Do //查订单未结量
begin
If Abs(DblNetQty)>=R_AdoQry_Assign.fieldbyname('OrderQty').Value Then
begin
DblNetQty:=DblNetQty+R_AdoQry_Assign.fieldbyname('OrderQty').Value;
DblSaveQty:=R_AdoQry_Assign.fieldbyname('OrderQty').Value;
R_AdoQry_Assign.Edit();
R_AdoQry_Assign.fieldbyname('OrderQty').Value:=0;
R_AdoQry_Assign.Post();
end
Else //MoPO量大于DblNetQty
begin
DblSaveQty:=ABS(DblNetQty);
DblNetQty:=0;
R_AdoQry_Assign.Edit();
R_AdoQry_Assign.fieldbyname('OrderQty').Value:=R_AdoQry_Assign.fieldbyname('OrderQty').Value-DblSaveQty;
R_AdoQry_Assign.Post();
end;
SaveCurrentMoPo(R_AdoQry_Assign1,//将当前MOPO记录插入#TmPMrpResult
R_AdoQry_Assign,DblSaveQty);
IF R_AdoQry_Assign.fieldbyname('ReleaseDate').ASString<StrToDate Then
IF R_AdoQry_Assign.fieldbyname('OrderLineStatus').Value=5 Then
SaveOverDueMOPO(R_AdoQry_Assign1,//将当前MOPO记录插入StrSS
R_AdoQry_Assign,DblSaveQty);
IF DblNetQty=0 Then
Break;
R_AdoQry_Assign.Next;
end;
end;
StrSqlText:='Delete From #TmPmoPo '+
'Where ItemCode='''+StrItemCode+''' And '+
'ReleaseDate<='''+StrToDate+''' And OrderLINESTATUS<=6 '+
'And OrderQty=0 And NOFinishQty<>0 ';
ExecuteSql(R_AdoQry_Assign,StrSqlText,1);//从#TmPmoPo表删除刚选出的记录
end;
procedure SepcialAssignMOPO1(R_AdoQry_Assign:TAdoQuery;R_AdoQry_Assign1:TAdoQuery); //分配替代件子项MO\Po
var StrSqlText:String;
DblGrossQty:Double;
DblNetQty:Double;
DblSaveQty:Double;// 净需求量-在单量
begin
StrSqlText:='Select Sum(GrossQty) As GrossQty,'+
'Sum(OnHand)-('+StrMinQty+') As OnHand '+
'From #TmPMrpResult';
ExecuteSql(R_AdoQry_Assign,StrSqlText,0);//计算毛需求
DblGrossQty:=0;
DblNetQty:=0;
DblGrossQty:=R_AdoQry_Assign.fieldbyname('GrossQty').Value;
DblNetQty:=R_AdoQry_Assign.fieldbyname('OnHand').Value-(DblGrossQty);
StrSqlText:='Select * '+
'From #TmPmoPo1 '+
'Where ReleaseDate<='''+StrToDate+''' And OrderLINESTATUS<=6 And OrderQty>0 '+
'Order By ReleaseDate,OrderNo';
ExecuteSql(R_AdoQry_Assign,StrSqlText,0);//从#TmPmoPo1表选出在当前约定交货日之前的记录
R_AdoQry_Assign.First;
IF DblNetQty<0 Then //有净需求
begin
While R_AdoQry_Assign.Eof=False Do //查订单未结量
begin
If Abs(DblNetQty)>=R_AdoQry_Assign.fieldbyname('OrderQty').Value Then
begin
DblNetQty:=DblNetQty+R_AdoQry_Assign.fieldbyname('OrderQty').Value;
DblSaveQty:=R_AdoQry_Assign.fieldbyname('OrderQty').Value;
R_AdoQry_Assign.Edit();
R_AdoQry_Assign.fieldbyname('OrderQty').Value:=0;
R_AdoQry_Assign.Post();
end
Else //MoPO量大于DblNetQty
begin
DblSaveQty:=ABS(DblNetQty);
DblNetQty:=0;
R_AdoQry_Assign.Edit();
R_AdoQry_Assign.fieldbyname('OrderQty').Value:=R_AdoQry_Assign.fieldbyname('OrderQty').Value-DblSaveQty;
R_AdoQry_Assign.Post();
end;
SaveCurrentMoPo(R_AdoQry_Assign1,//将当前MOPO记录插入#TmPMrpResult
R_AdoQry_Assign,DblSaveQty);
IF DblNetQty=0 Then
Break;
R_AdoQry_Assign.Next;
end;
end;
StrSqlText:='Delete From #TmPmoPo1 '+
'Where ReleaseDate<='''+StrToDate+''' And OrderLINESTATUS<=6 '+
'And OrderQty=0 And NOFinishQty<>0 ';
ExecuteSql(R_AdoQry_Assign,StrSqlText,1);//从#TmPmoPo1表删除刚选出的记录
end;
procedure AssignMOPO(R_AdoQry_Assign:TAdoQuery;R_AdoQry_Assign1:TAdoQuery); //分配MO\Po
var StrSqlText:String;
DblGrossQty:Double;
DblNetQty:Double;
DblSaveQty:Double;// 净需求量-在单量
begin
StrSqlText:='Select Sum(GrossQty) As GrossQty,'+
'Sum(OnHand)-('+StrMinQty+') As OnHand '+
'From #TmPMrpResult';
ExecuteSql(R_AdoQry_Assign,StrSqlText,0);//计算毛需求
DblGrossQty:=0;
DblNetQty:=0;
DblGrossQty:=R_AdoQry_Assign.fieldbyname('GrossQty').Value;
DblNetQty:=R_AdoQry_Assign.fieldbyname('OnHand').Value-(DblGrossQty);
S
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?