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 + -
显示快捷键?