mrp_global.pas
来自「一个MRPII系统源代码版本」· PAS 代码 · 共 1,229 行 · 第 1/5 页
PAS
1,229 行
unit Mrp_Global;
Interface
Uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, Db, AdODB, ComCtrls, jpeg, ExtCtrls, Grids, DBGridEh, StdCtrls,
Buttons, Mask, DBGrids,Sys_Global;
procedure OperationMOPO(R_AdoQry:TAdoQuery;
R_ItemCode:String;// --物料代码
R_TaskType:String;// --业务类型:Mps、Mo、Po、
R_OperationType:Integer;// --操作类型:1 新增;2 修改;3 删除;4 生产订单批准处的修改;5 采购订单批准处的修改
R_OrderNO:String;// --订单号
R_OrderLineNo:Integer;// --订单行号
R_OrderLineStatus:Integer;// --行状态
R_MpsId:Integer;// --主计划
R_OrderQty:Double;// --下单量
R_OrderNoFinishQty:Double;// --未结量
R_DueDate:String;// --开工日期
R_ReleaseDate:String;// --完工日期
R_PmCode:Integer ;// --制购码
R_DeptVendorCode:String );// --供应商、受单部门代码
procedure AdvanceOrder(R_AdoQry:TAdoQuery;
R_ItemCode:String);// --物料代码
procedure DynamicRunMrp(R_AdoQry:TAdoQuery;
R_ItemCode:String;// --物料代码
R_StrToDate:String; // --当前日期
R_RunType:Integer );// --运行Mrp类型
procedure ExecuteCmd(R_AdOCmd_Execute:TAdOCommand;R_StrSqlText:String);
procedure RunMrpFirstStep(R_AdOCmd_FirstStep:TAdOCommand;
R_StrItemCode:String);//做运算Mrp的前期工作
procedure SaveCurrentMoPo(R_AdoQry_Save1:TAdoQuery;//将当前MOPO记录插入#TmPMrpResult
R_AdoQry_Save2:TAdoQuery;
R_DblSaveQty:Double);
procedure SaveOverDueMoPo(R_AdoQry_Save1:TAdoQuery;//将当前MOPO记录插入#TmPMrpResult
R_AdoQry_Save2:TAdoQuery;
R_DblSaveQty:Double);
procedure SaveTemPmoPo(R_AdoQry_Save1:TAdoQuery;//将当前Query中的MOPO记录插入StrSS表中
R_AdoQry_Save2:TAdoQuery;R_StrSS:String);
procedure SepcialAssignMOPO(R_AdoQry_Assign:TAdoQuery;R_AdoQry_Assign1:TAdoQuery); //分配MO\Po
procedure SepcialAssignMOPO1(R_AdoQry_Assign:TAdoQuery;R_AdoQry_Assign1:TAdoQuery); //分配替代件子项MO\Po
procedure AssignMOPO(R_AdoQry_Assign:TAdoQuery;R_AdoQry_Assign1:TAdoQuery); //分配MO\Po
procedure AssignMOPO1(R_AdoQry_Assign:TAdoQuery;R_AdoQry_Assign1:TAdoQuery); //分配替代件子项MO\Po
procedure CalculateCapacity(R_AdoQry_Calculate:TAdoQuery;
R_AdoQry_Calculate1:TAdoQuery;
R_StrItemCode:String;
R_StrCapacityResult:String);//计算Crp结果
procedure CalculateMrpResult(R_AdoQry_Calculate: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结果
procedure SaveLeaveMoPo(R_StrSS:String;R_AdoQry:TAdOCommand);//把多余的订单建议取消或关闭
Function TemporArilyRunMrp(R_DBConnect:TAdOConnection;R_StrItemCode:String;R_IntRunMrpType:Integer):Integer; //返回1表示成功,返回0表示建立#MrpResult失败,
var IntMaxLLC:Integer;//最大LLC值
IntCurrentLLC:Integer; //当前LLC值
StrLastMoPoDate:String;//最后订单日期与之相反算订单未结量就是最前日期
StrBatchStrat:String; //批量政策
StrBatchQty:String; //批量
StrMinQty:String; //安全库存
StrItemCode:String; //货品编码
StrFirstItemCode:String; //货品编码
StrReleaseDate:String; //约定交货日
StrDueDate:String; //约定开工日
StrSubReleaseDate:String;//子项约定交货日
StrGrossQty:String; //毛需求量
StrmdlMrpResult:String; //存放Mrp中间结果表名
StrSs:String; //存放系统建议结果临时表名
StrendSS:String; //存放系统建议结果表名
StrPmCode:String;//制购码
IntItemType:Integer; //物料类型
IntGroupOrdinal:Integer; //组序号
StrToDate:String;//今天日期
StrMrpTable:String; //Mrp结果表
implementation
procedure OperationMOPO(R_AdoQry:TAdoQuery;
R_ItemCode:String;// --物料代码
R_TaskType:String;// --业务类型:Mps、Mo、Po、
R_OperationType:Integer;// --操作类型:1 新增;2 修改;3 删除;4 生产订单批准处的修改;5 采购订单批准处的修改
R_OrderNO:String;// --订单号
R_OrderLineNo:Integer;// --订单行号
R_OrderLineStatus:Integer;// --行状态
R_MpsId:Integer;// --主计划
R_OrderQty:Double;// --下单量
R_OrderNoFinishQty:Double;// --未结量
R_DueDate:String;// --开工日期
R_ReleaseDate:String;// --完工日期
R_PmCode:Integer ;// --制购码
R_DeptVendorCode:String );// --供应商、受单部门代码
var StrSqlText:String;
StrPegging:String;
DblOrderQty:Double;
DblOrderNoFinishQty:Double;
StrItemCode:String;
IntPurchLDTime:Integer;
IntQcLTTime:Integer;
IntRunLTTime:Integer;
StrPmCode:String;
IntMpsQty:Integer;
StrReleaseDate:String;
StrToDate:String;
begin
StrSqlText:='Select GetDate() As ToDate ';
ExecuteSql(R_AdoQry,StrSqlText,0);//选出当前日期
StrToDate:=Trim(R_AdoQry.fieldbyname('ToDate').AsString);
StrToDate:=Trim(Copy(StrTodate,1,Pos(' ',StrToDate)));
R_TaskType:=Uppercase(R_TaskType);
If R_OrderLineStatus=5 Then
StrPegging:='待定订单';
If R_OrderLineStatus=6 Then
StrPegging:='下达订单';
If (UpperCase(R_TaskType)='MO') Or (UpperCase(R_TaskType)='PO') Then
begin
StrSqlText:='If Not Exists(Select * '+
'From DynamicOperation '+
'Where OrderNo+Convert(varchAr,OrderLineNO)='''+R_OrderNo+IntToStr(R_OrderLineNo)+''') '+
'Insert DynamicOperation '+
'(ItemCode,TaskType,OperationType, '+
' OperationDateTime,OrderNO, '+
' OrderLineNo,OrderLineStatus,MpsId,'+
' OrderQty,OrderNoFinishQty,DueDate,ReleaseDate,PmCode,DeptVendorCode)'+
'Values('''+R_ItemCode+''','''+R_TaskType+''','+IntToStr(R_OperationType)+', '+
' GetDate(),'''+R_OrderNO+''', '+
' '+IntToStr(R_OrderLineNo)+','+IntToStr(R_OrderLineStatus)+','+IntToStr(R_MpsId)+','+
' '+FloatToStr(R_OrderQty)+','+FloatToStr(R_OrderNoFinishQty)+','''+R_DueDate+''','''+R_ReleaseDate+''','+IntToStr(R_PmCode)+','''+R_DeptVendorCode+''') ';
ExecuteSql(R_AdoQry,StrSqlText,1);
end;
If UpperCase(R_TaskType)='Mps' Then
begin
StrSqlText:='If Not Exists(Select * '+
'From DynamicOperation '+
'Where MpsID='+IntToStr(R_MpsID)+') '+
'Insert DynamicOperation '+
'(ItemCode,TaskType,OperationType, '+
' OperationDateTime,OrderNO, '+
' OrderLineNo,OrderLineStatus,MpsId,'+
' OrderQty,OrderNoFinishQty,DueDate,ReleaseDate,PmCode,DeptVendorCode)'+
'Values('''+R_ItemCode+''','''+R_TaskType+''','+IntToStr(R_OperationType)+', '+
' GetDate(),'''+R_OrderNO+''', '+
' '+IntToStr(R_OrderLineNo)+','+IntToStr(R_OrderLineStatus)+','+IntToStr(R_MpsId)+','+
' '+FloatToStr(R_OrderQty)+','+FloatToStr(R_OrderNoFinishQty)+','''+R_DueDate+''','''+R_ReleaseDate+''','+IntToStr(R_PmCode)+','''+R_DeptVendorCode+''') ';
ExecuteSql(R_AdoQry,StrSqlText,1);
end;
If (UpperCase(R_TaskType)='MO') Or (UpperCase(R_TaskType)='PO') Then
begin
StrSqlText:='';
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,ItemCode,OrderNO,OrderLineNo,OrderLineStatus,'+
' OnHand,OrderQty,RealOrderQty,'+
' DueDate,ReleaseDate,RealDueDate,RealReleaseDate,PmCode,CanPegging,Pegging,DeptVendorCode,Ordinal) '+
'Values(@@GroupOrdinal,'''+R_ItemCode+''','''+R_OrderNO+''','+IntToStr(R_OrderLineNo)+','+IntToStr(R_OrderLineStatus)+','+
' '+FloatToStr(R_OrderNoFinishQty)+','+FloatToStr(R_OrderNoFinishQty)+','+FloatToStr(R_OrderQty)+','+
' '''+R_DueDate+''','''+R_ReleaseDate+''','''+R_DueDate+''','''+R_ReleaseDate+''','+IntToStr(R_PmCode)+','+
'0,'''+StrPegging+''','''+R_DeptVendorCode+''',2) '+
'Select @@GroupOrdinal=GroupOrdinal '+
'From InformalMrpResult With(Index(ItemCode)) '+
'Where ItemCode='''+R_ItemCode+''' '+
'Insert InformalMrpResult '+
'(GroupOrdinal,ItemCode,OrderNO,OrderLineNo,OrderLineStatus,'+
' OnHand,OrderQty,RealOrderQty,'+
' DueDate,ReleaseDate,RealDueDate,RealReleaseDate,PmCode,CanPegging,Pegging,DeptVendorCode,Ordinal)'+
'Values(@@GroupOrdinal,'''+R_ItemCode+''','''+R_OrderNO+''','+IntToStr(R_OrderLineNo)+','+IntToStr(R_OrderLineStatus)+','+
' '+FloatToStr(R_OrderNoFinishQty)+','+FloatToStr(R_OrderNoFinishQty)+','+FloatToStr(R_OrderQty)+','+
' '''+R_DueDate+''','''+R_ReleaseDate+''','''+R_DueDate+''','''+R_ReleaseDate+''','+IntToStr(R_PmCode)+','+
'0,'''+StrPegging+''','''+R_DeptVendorCode+''',2)';
end;
2: begin //修改
StrSqlText:='UpDate MrpResult '+
'Set OrderLineStatus='+IntToStr(R_OrderLineStatus)+','+
' OrderQty='+FloatToStr(R_OrderNoFinishQty)+',RealOrderQty='+FloatToStr(R_OrderQty)+','+
' DueDate='''+R_DueDate+''',ReleaseDate='''+R_ReleaseDate+''',RealDueDate='''+R_DueDate+''', '+
' RealReleaseDate='''+R_ReleaseDate+''',DeptVendorCode='''+R_DeptVendorCode+''',Pegging='''+StrPegging+''' '+
'Where ItemCode='''+R_ItemCode+''' And OrderNo+Convert(varchAr,OrderLineNO)='''+R_OrderNo+IntToStr(R_OrderLineNo)+''' '+
'UpDate InformalMrpResult '+
'Set OrderLineStatus='+IntToStr(R_OrderLineStatus)+','+
' OrderQty='+FloatToStr(R_OrderNoFinishQty)+',RealOrderQty='+FloatToStr(R_OrderQty)+','+
' DueDate='''+R_DueDate+''',ReleaseDate='''+R_ReleaseDate+''',RealDueDate='''+R_DueDate+''',RealReleaseDate='''+R_ReleaseDate+''',DeptVendorCode='''+R_DeptVendorCode+''',Pegging='''+StrPegging+''' '+
'Where ItemCode='''+R_ItemCode+''' And OrderNo+Convert(varchAr,OrderLineNO)='''+R_OrderNo+IntToStr(R_OrderLineNo)+''' '+
'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;
3: begin //删除
StrSqlText:='Delete MrpResult '+
'Where ItemCode='''+R_ItemCode+''' And OrderNo+Convert(varchAr,OrderLineNO)='''+R_OrderNo+IntToStr(R_OrderLineNo)+''' '+
'Delete InformalMrpResult '+
'Where ItemCode='''+R_ItemCode+''' And OrderNo+Convert(varchAr,OrderLineNO)='''+R_OrderNo+IntToStr(R_OrderLineNo)+''' ';
end;
4: begin //生产订单批准处修改
StrSqlText:='Select ItemCode,MOQty As OrderQty,Case When MoNoFinishQty>0 Then MoNoFinishQty '+
' Else 0 '+
'end As OrderNOFinishQty '+
'From MoLine With(Index(PK_MoLine)) '+
'Where MONo+Convert(varchAr,MoLineNO)='''+R_OrderNo+IntToStr(R_OrderLineNo)+''' ';
ExecuteSql(R_AdoQry,StrSqlText,0);
StrItemCode:=R_AdoQry.fieldbyname('ItemCode').AsString;
DblOrderQty:=R_AdoQry.fieldbyname('OrderQty').ASFloat;
DblOrderNoFiniShQty:=R_AdoQry.fieldbyname('OrderNoFinishQty').AsFloat;
StrSqlText:='UpDate MrpResult '+
'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)+''' '+
'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;
5: begin //采购订单批准处修改
StrSqlText:='Select ItemCode,POQty As OrderQty,Case When PoNOFinishQty-POInQty>0 Then PoNOFinishQty-POInQty '+
' Else 0 '+
'end As OrderNOFinishQty '+
'From POLine With(Index(PK_PoLINE)) '+
'Where PONo+Convert(varchAr,POLineNO)='''+R_OrderNo+IntToStr(R_OrderLineNo)+''' ';
ExecuteSql(R_AdoQry,StrSqlText,0);
StrItemCode:=R_AdoQry.fieldbyname('ItemCode').AsString;
DblOrderQty:=R_AdoQry.fieldbyname('OrderQty').ASFloat;
DblOrderNoFiniShQty:=R_AdoQry.fieldbyname('OrderNoFinishQty').AsFloat;
StrSqlText:='UpDate MrpResult '+
'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)+''' '+
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?