mrp_global.pas

来自「一个MRPII系统源代码版本」· PAS 代码 · 共 1,229 行 · 第 1/5 页

PAS
1,229
字号
                        '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;
    end;
    ExecuteSql(R_AdoQry,StrSqlText,1);
    DynamicRunMrp(R_AdoQry,R_ItemCode,
                  StrToDate,3 );
  end;

  If UpperCase(R_TaskType)='Mps' Then
  begin
    If (R_OperationType=1) Or (R_OperationType=2) Then
    begin
      StrSqlText:='Select ItemCode,PurchLDTime,RunLT+QcLT As MNLDTime, '+
                          'PrepareLT As PrepareLTTime,RunLT As RunLTTime, '+
                          'QcLT As QcLTTime,PmCode '+
                       'From Item '+
                       'Where ItemCode='''+R_ItemCode+'''';
      ExecuteSql(R_AdoQry,StrSqlText,0);
      IntPurchLDTime:=R_AdoQry.fieldbyname('PurchLDTime').AsInteger;
      IntQcLTTime:=R_AdoQry.fieldbyname('QcLTTime').AsInteger;
      IntRunLTTime:=R_AdoQry.fieldbyname('RunLTTime').AsInteger;
      StrPmCode:=R_AdoQry.fieldbyname('PmCode').AsString;
      StrSqlText:='Select * From Mps '+
                       'Where MpsID='+IntToStr(R_MpsID)+'';
      ExecuteSql(R_AdoQry,StrSqlText,0);
      IntMpsQty:=R_AdoQry.fieldbyname('MpsQty').AsInteger-R_AdoQry.fieldbyname('MpsFinishQty').AsInteger;;
      IF IntMpsqty<0 Then
        IntMpsqty:=0;
      StrReleaseDate:=R_AdoQry.fieldbyname('MpsDate').AsString;
      If (StrPmCode='1') Or (StrPmCode='2') Then
         StrDueDate:=SlCalendar(R_AdoQry.Connection,StrReleaseDate,IntPurchLDTime)
      Else
        begin
          StrReleaseDate:=SlCalendar(R_AdoQry.Connection,StrReleaseDate,IntQcLTTime);
          StrDueDate:=SlCalendar(R_AdoQry.Connection,StrReleaseDate,IntRunLTTime);
        end;
    end;
    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,Ordinal,ItemCode,GrossQty,'+
                           ' DueDate,ReleaseDate,RealDueDate,RealReleaseDate,PmCode,Pegging,PeggingNo) '+
                       'Values(@@GroupOrdinal,4,'''+R_ItemCode+''','+FloatToStr(IntMpsQty)+','+
                           ' '''+StrDueDate+''','''+StrReleaseDate+''','''+StrDueDate+''','''+StrReleaseDate+''','+
                           ''+StrPmCode+',''主计划需求'','+IntToStr(R_MpsID)+') '+
                       'Select @@GroupOrdinal=GroupOrdinal '+
                               'From InformalMrpResult With(Index(ItemCode)) '+
                               'Where ItemCode='''+R_ItemCode+''' '+
                       'Insert InformalMrpResult '+
                           '(GroupOrdinal,Ordinal,ItemCode,GrossQty,'+
                           ' DueDate,ReleaseDate,RealDueDate,RealReleaseDate,PmCode,Pegging,PeggingNo) '+
                       'Values(@@GroupOrdinal,4,'''+R_ItemCode+''','+FloatToStr(IntMpsQty)+','+
                           ' '''+StrDueDate+''','''+StrReleaseDate+''','''+StrDueDate+''','''+StrReleaseDate+''','+
                           ''+StrPmCode+',''主计划需求'','+IntToStr(R_MpsID)+')';

         end;
      2: begin            //修改
           StrSqlText:='UpDate MrpResult '+
                           'Set GrossQty='+FloatToStr(IntMpsQty)+','+
                             'DueDate='''+StrDueDate+''',ReleaseDate='''+StrReleaseDate+''','+
                             'RealDueDate='''+StrDueDate+''',RealReleaseDate='''+StrReleaseDate+''' '+
                          'Where PeggingNo='''+IntToStr(R_MpsID)+''' '+
                       'UpDate InformalMrpResult '+
                           'Set GrossQty='+FloatToStr(IntMpsQty)+','+
                              'DueDate='''+StrDueDate+''',ReleaseDate='''+StrReleaseDate+''','+
                              'RealDueDate='''+StrDueDate+''',RealReleaseDate='''+StrReleaseDate+''' '+
                          'Where PeggingNo='''+IntToStr(R_MpsID)+'''';
         end;
      3: begin            //删除
           StrSqlText:='Delete From MrpResult '+
                              'Where PeggingNo='''+IntToStr(R_MpsID)+''' '+
                       'Delete From InformalMrpResult '+
                              'Where PeggingNo='''+IntToStr(R_MpsID)+'''';
         end;
    end;
    ExecuteSql(R_AdoQry,StrSqlText,1);
    DynamicRunMrp(R_AdoQry,R_ItemCode,
                  StrToDate,3 );

  end;
  AdvanceOrder(R_AdoQry,R_ItemCode);
end;

procedure AdvanceOrder(R_AdoQry:TAdoQuery;
                       R_ItemCode:String);//          --物料代码
var StrSqlText:String;
    DblOnHand:Double;
    IntOrdinal:Integer;
    StrReleaseDate1:String;
    StrToDate:String;
    BMKBookMArk:String;
begin
  StrSqlText:='Exec Pro_Public_GetToDate ';
  ExecuteSql(R_AdoQry,StrSqlText,0);
  StrToDate:=R_AdoQry.fieldbyname('Result').Value;
  StrSQLText:='Select * '+
                     'From MrpResult '+
                     'Where ItemCode='''+R_ItemCode+''' And Ordinal=2 '+
                     'Order By ReleaseDate,Ordinal ';
  ExecuteSql(R_AdoQry,StrSqlText,0);
  While Not R_AdoQry.Eof  Do
  begin
    IF R_AdoQry.fieldbyname('CanUseOnHand').Value=1 Then
    begin
      R_AdoQry.Edit;
      R_AdoQry.fieldbyname('CanUseOnHand').Value:=0;
      R_AdoQry.fieldbyname('RealReleaseDate').Value:=R_AdoQry.fieldbyname('ReleaseDate').Value;
      R_AdoQry.Post;
    end;
    R_AdoQry.Next;
  end;

  StrSQLText:='Select CurrentOnHandInv+CurrentOnCheckInv As OnHandInv '+
                     'From Item '+
                     'Where ItemCode='''+R_ItemCode+''' ';
  ExecuteSql(R_AdoQry,StrSqlText,0);
  DblOnHand:=0;
  DblOnHand:=R_AdoQry.fieldbyname('OnHandInv').Value;

  StrSQLText:='Select * '+
                     'From MrpResult '+
                     '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;
      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;


  StrSQLText:='Select * '+
                     'From InformalMrpResult '+
                     'Where ItemCode='''+R_ItemCode+''' And Ordinal=2 '+
                     'Order By ReleaseDate,Ordinal';
  ExecuteSql(R_AdoQry,StrSqlText,0);
  While Not R_AdoQry.Eof  Do
  begin
    IF R_AdoQry.fieldbyname('CanUseOnHand').Value=1 Then
    begin
      R_AdoQry.Edit;
      R_AdoQry.fieldbyname('CanUseOnHand').Value:=0;
      R_AdoQry.fieldbyname('RealReleaseDate').Value:=R_AdoQry.fieldbyname('ReleaseDate').Value;
      R_AdoQry.Post;
    end;
    R_AdoQry.Next;
  end;

  StrSQLText:='Select CurrentOnHandInv+CurrentOnCheckInv As OnHandInv '+
                     'From Item '+
                     'Where ItemCode='''+R_ItemCode+''' ';
  ExecuteSql(R_AdoQry,StrSqlText,0);
  DblOnHand:=0;
  DblOnHand:=R_AdoQry.fieldbyname('OnHandInv').Value;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?