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