⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mrp_enter_newrunmrp.pas

📁 一个MRPII系统源代码版本
💻 PAS
📖 第 1 页 / 共 5 页
字号:
                        ' '+IntToStr(IntGroupOrdinal)+')';
      ExecuteSql(R_AdoQry_Calculate1,StrSqlText,1);
      DblSSQty:=0;
      R_AdoQry_Calculate.BookMArk:=BMKBookMArk;
    end;

    IntOrdinal:=R_AdoQry_Calculate.fieldbyname('Ordinal').Value;
    Case IntOrdinal OF
      0: begin
           DblOnHand:=R_AdoQry_Calculate.fieldbyname('OnHand').Value;
           R_AdoQry_Calculate.Next;
           Continue;
         end;
      1: begin
            DblOnHand:=DblOnHand+R_AdoQry_Calculate.fieldbyname('OnHand').Value;
            R_AdoQry_Calculate.Next;
            Continue;
         end;
      2: begin
           IF (DblOnHand<0) And (R_AdoQry_Calculate.fieldbyname('ReleaseDate').AsString>StrToDate) Then //(DblCanUseOnHand=0) And
           begin
             IntHaveAdvanceRecord:=1;
             R_AdoQry_Calculate.Edit;
             R_AdoQry_Calculate.fieldbyname('CanUseOnHand').Value:=1;
             R_AdoQry_Calculate.Post;
           end;
           DblOnHand:=DblOnHand+R_AdoQry_Calculate.fieldbyname('OrderQty').Value;
         end;
      3: Break;
      4: DblOnHand:=DblOnHand-R_AdoQry_Calculate.fieldbyname('GrossQty').Value;
    end;

    If (DblOnHand<0) And (DblCanUseOnHand>0) And
       (R_AdoQry_Calculate.fieldbyname('ReleaseDate').AsString>=StrToDate) Then
      begin
        If ABS(DblOnHand)>DblCanUseOnHand Then
          begin
            DblSSQty:=DblCanUseOnHand;
            DblCanUseOnHand:=0;
          end
        Else  begin
          DblSSQty:=Abs(DblOnHand);
          DblCanUseOnHand:=DblCanUseOnHand-Abs(DblOnHand);
        end;

        If (R_StrBatchStrat='0') Or (R_StrBatchQty='0')  Then  //算出建议量
           DblSSQty:=DblSSQty
        Else begin
          If DblSSQty-StrToFloat(R_StrBatchQty)*Floor(DblSSQty/StrToFloat(R_StrBatchQty))=0 Then
             DblSSQty:=DblSSQty
          Else
             DblSSQty:=StrToFloat(R_StrBatchQty)*( (DblSSQty-(DblSSQty-StrToFloat(R_StrBatchQty)*Floor(DblSSQty/StrToFloat(R_StrBatchQty))) )/StrToFloat(R_StrBatchQty)+1);
        end;

        StrReleaseDate:=R_AdoQry_Calculate.fieldbyname('ReleaseDate').AsString;
        StrDueDate:=R_AdoQry_Calculate.fieldbyname('DueDate').AsString;
        Case R_AdoQry_Calculate.fieldbyname('PmCode').Value Of
        1..2:
            StrDueDate:=GetCalendar(DBConnect,StrReleaseDate,IntRunLTTime);
        Else
            StrDueDate:=GetCalendar(DBConnect,StrReleaseDate,IntRunLTTime);
        end;

        If StrToDate>StrDueDate Then
           StrDueDate1:=StrToDate
        Else
           StrDueDate1:=StrDueDate;
        If StrToDate>StrReleaseDate Then
           StrReleaseDate1:=StrToDate
        Else
           StrReleaseDate1:=StrReleaseDate;
        DblOnHand:=DblOnHand+DblSSQty;
        BMKBookMArk:=R_AdoQry_Calculate.BookMArk;
        StrSqlText:='Select * From #TmPMrpResult '+
                            'Where Ordinal=3 And ReleaseDate='''+StrReleaseDate1+''' ';
        ExecuteSql(R_AdoQry_Calculate1,StrSqlText,0);
        If R_AdoQry_Calculate1.RecordCount<>0 Then
          StrSqlText:='Update #TmPMrpResult '+
                         'Set Onhand=OnHand+'+FloatToStr(DblSSQty)+','+
                              'ReMainQty=ReMainQty+'+FloatToStr(DblSSQty)+' '+
                         'Where Ordinal=3 And ReleaseDate='''+StrReleaseDate1+''' '
        Else
          StrSqlText:='Insert #TmPMrpResult'+
                            '(ItemCode,'+
                            ' DueDate,'+
                            ' ReleaseDate,'+
                            ' RealDueDate,'+
                            ' RealReleaseDate,'+
                            ' OnHand,'+
                            ' ReMainQty,'+
                            ' Ordinal,'+
                            ' PmCode,'+
                            ' Pegging,'+
                            ' GroupOrdinal)'+
                         'Values'+
                            '('''+StrItemCode+''','+
                            ' '''+StrDueDate1+''','+
                            ' '''+StrReleaseDate1+''','+
                            ' '''+StrDueDate+''','+
                            ' '''+StrReleaseDate+''','+
                            ' '+FloatToStr(DblSSQty)+','+
                            ' '+FloatToStr(DblSSQty)+','+
                            ' 3,'+
                            ' '+StrPmCode+','+
                            ' '''+StrPegging+''','+
                            ' '+IntToStr(IntGroupOrdinal)+')';
        ExecuteSql(R_AdoQry_Calculate1,StrSqlText,1);
        R_AdoQry_Calculate.BookMArk:=BMKBookMArk;
        DblSSQty:=0;
      end;
    R_AdoQry_Calculate.Next;
  end;

  If DblOnHand<0 Then
  begin
      If StrToDate>StrDueDate Then
         StrDueDate1:=StrToDate
      Else
         StrDueDate1:=StrDueDate;
      If StrToDate>StrReleaseDate Then
         StrReleaseDate1:=StrToDate
      Else
         StrReleaseDate1:=StrReleaseDate;

      DblSSQty:=ABS(DblOnHand);
      If (R_StrBatchStrat='0') Or (R_StrBatchQty='0')  Then  //算出建议量
       DblSSQty:=ABS(DblOnHand)
      Else
      begin
        If DblSSQty-StrToFloat(R_StrBatchQty)*Floor(DblSSQty/StrToFloat(R_StrBatchQty))=0 Then
           DblSSQty:=DblSSQty
        Else
           DblSSQty:=StrToFloat(R_StrBatchQty)*( (DblSSQty-(DblSSQty-StrToFloat(R_StrBatchQty)*Floor(DblSSQty/StrToFloat(R_StrBatchQty))) )/StrToFloat(R_StrBatchQty)+1);
      end;
    StrSqlText:='Select * From #TmPMrpResult '+
                        'Where Ordinal=3 And ReleaseDate='''+StrReleaseDate1+''' ';
    ExecuteSql(R_AdoQry_Calculate1,StrSqlText,0);
    If R_AdoQry_Calculate1.RecordCount<>0 Then
      StrSqlText:='Update #TmPMrpResult '+
                     'Set Onhand=OnHand+'+FloatToStr(DblSSQty)+','+
                          'ReMainQty=ReMainQty+'+FloatToStr(DblSSQty)+' '+
                     'Where Ordinal=3 And ReleaseDate='''+StrReleaseDate1+''' '
    Else
      StrSqlText:='Insert #TmPMrpResult'+
                        '(ItemCode,'+
                        ' DueDate,'+
                        ' ReleaseDate,'+
                        ' RealDueDate,'+
                        ' RealReleaseDate,'+
                        ' OnHand,'+
                        ' ReMainQty,'+
                        ' Ordinal,'+
                        ' PmCode,'+
                        ' Pegging,'+
                        ' GroupOrdinal)'+
                     'Values'+
                        '('''+StrItemCode+''','+
                        ' '''+StrDueDate1+''','+
                        ' '''+StrReleaseDate1+''','+
                        ' '''+StrDueDate+''','+
                        ' '''+StrReleaseDate+''','+
                        ' '+FloatToStr(DblSSQty)+','+
                        ' '+FloatToStr(DblSSQty)+','+
                        ' 3,'+
                        ' '+StrPmCode+','+
                        ' '''+StrPegging+''','+
                        ' '+IntToStr(IntGroupOrdinal)+')';
    ExecuteSql(R_AdoQry_Calculate1,StrSqlText,1);

  end;


  If DblOnHand>0 Then
  begin
    StrSQLText:='Select * '+
                       'From #TmPMrpResult '+
                       'Where Ordinal<>4 '+
                       'Order By ReleaseDate,Ordinal';
    ExecuteSql(R_AdoQry_Calculate,StrSqlText,0);
    R_AdoQry_Calculate.Last;
    While (Not R_AdoQry_Calculate.Bof) And (DblOnHand>0)  Do
    begin
      If R_AdoQry_Calculate.fieldbyname('Ordinal').Value=1 Then
          Break
      Else
        begin
          R_AdoQry_Calculate.Edit;
          Case R_AdoQry_Calculate.fieldbyname('Ordinal').Value Of
             2:begin
                  If DblONHand>=R_AdoQry_Calculate.fieldbyname('OnHand').Value Then
                     begin
                       DblONHand:=DblONHand-R_AdoQry_Calculate.fieldbyname('OnHand').Value;
                       R_AdoQry_Calculate.fieldbyname('OnHand').Value:=0;
                     end
                  Else
                     begin
                      R_AdoQry_Calculate.fieldbyname('OnHand').Value:=
                      R_AdoQry_Calculate.fieldbyname('OnHand').Value-DblOnHand;
                      DblONHand:=0;
                     end;
               end;
             3:begin
               If DblONHand>=R_AdoQry_Calculate.fieldbyname('OnHand').Value Then
                 begin
                   DblONHand:=DblONHand-R_AdoQry_Calculate.fieldbyname('OnHand').Value;
                   R_AdoQry_Calculate.fieldbyname('OnHand').Value:=0;
                   R_AdoQry_Calculate.Delete();
                   R_AdoQry_Calculate.prior;
                   Continue;
                 end
               Else
                 begin
                  DblONHand:=R_AdoQry_Calculate.fieldbyname('OnHand').Value-DblOnHand;;
                  If (R_StrBatchStrat='0') Or (R_StrBatchQty='0')  Then
                     DblSSQty:=Abs(DblOnHand)
                  Else
                    begin
                      DblSSQty:=Abs(DblOnHand);
                      If DblSSQty-StrToFloat(R_StrBatchQty)*Floor(DblSSQty/StrToFloat(R_StrBatchQty))=0 Then
                         DblSSQty:=DblSSQty
                      Else
                         DblSSQty:=StrToFloat(R_StrBatchQty)*( (DblSSQty-(DblSSQty-StrToFloat(R_StrBatchQty)*Floor(DblSSQty/StrToFloat(R_StrBatchQty))) )/StrToFloat(R_StrBatchQty)+1);
                    end;
                  R_AdoQry_Calculate.fieldbyname('OnHand').Value:=DblSSQty;
                  DblONHand:=0;
                  end;
               end;
             end;
          R_AdoQry_Calculate.Post;
        end;
      R_AdoQry_Calculate.prior;
    end;
  end;

  If IntHaveAdvanceRecord=1  Then//有要提前的订单
  begin
    StrSQLText:='Select * '+
                       'From #TmPMrpResult '+
                       'Order By ReleaseDate,Ordinal';
    ExecuteSql(R_AdoQry_Calculate,StrSqlText,0);
    DblOnHand:=0;
    While Not R_AdoQry_Calculate.Eof  Do
    begin
      IntOrdinal:=R_AdoQry_Calculate.fieldbyname('Ordinal').Value;

      Case IntOrdinal OF
        0..1: DblOnHand:=DblOnHand+R_AdoQry_Calculate.fieldbyname('OnHand').Value;
        2: begin
             IF (DblOnHand<0) And (StrReleaseDate1<StrToDate ) And
                (R_AdoQry_Calculate.fieldbyname('RealReleaseDate').AsString>STrToDate) Then
             begin
                BMKBookMArk:=R_AdoQry_Calculate.BookMArk;
                While Not R_AdoQry_Calculate.Eof  Do
                begin
                  IntOrdinal:=R_AdoQry_Calculate.fieldbyname('Ordinal').Value;
                  If (IntOrdinal=2) And (R_AdoQry_Calculate.fieldbyname('ReleaseDate').AsString=R_AdoQry_Calculate.fieldbyname('RealReleaseDate').AsString) Then
                  begin
                    R_AdoQry_Calculate.Edit;
                    R_AdoQry_Calculate.fieldbyname('RealReleaseDate').Value:=StrToDateTime(StrToDate);
                    R_AdoQry_Calculate.Post;
                    DblOnHand:=DblOnHand+R_AdoQry_Calculate.fieldbyname('OnHand').Value;
                    If DblOnHand>=0 Then
                      Break;
                  end;
                  R_AdoQry_Calculate.Next;
                end;
                R_AdoQry_Calculate.BookMArk:=BMKBookMArk;
             end;

             If R_AdoQry_Calculate.fieldbyname('ReleaseDate').AsString=R_AdoQry_Calculate.fieldbyname('RealReleaseDate').AsString Then
               DblOnHand:=DblOnHand+R_AdoQry_Calculate.fieldbyname('OnHand').Value;
           end;
        3: DblOnHand:=DblOnHand+R_AdoQry_Calculate.fieldbyname('OnHand').Value;
        4: begin
             IF (DblOnHand<0) And (StrReleaseDate1<StrToDate ) And
                (R_AdoQry_Calculate.fieldbyname('RealReleaseDate').AsString>STrToDate) Then
             begin
                BMKBookMArk:=R_AdoQry_C

⌨️ 快捷键说明

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