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

📄 mrp_enter_newrunmrp.pas

📁 一个MRPII系统源代码版本
💻 PAS
📖 第 1 页 / 共 5 页
字号:
        end;
        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;

        If StrToDate>StrDueDate Then
           StrDueDate1:=StrToDate
        Else
           StrDueDate1:=StrDueDate;
        If StrToDate>StrReleaseDate Then
           StrReleaseDate1:=StrToDate
        Else
           StrReleaseDate1:=StrReleaseDate;
        If StrReleaseDate>=StrToDate Then
        begin
          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;
        end;

      end;
    R_AdoQry_Calculate.Next;
  end;

  If DblOnHand<0 Then
  begin
    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);
    DblOnHand:=0;
  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;

  StrSqlText:='Insert '+R_StrMrpResult+' '+
      '(ItemCode,DueDate,ReleaseDate, '+
        'OrderNo,GrossQty,OrderQty,RealOrderQty,OnHand,'+
        'CanUseOnHand,NetQty,Ordinal,'+
        'PmCode,OrderLineStatus,OrderLineNo,'+
        'Pegging,PeggingNo,OnCheck,AssignedQty,RealDueDate,'+
        'RealReleaseDate,GroupOrdinal,ReMainQty,DeptVendorCode) '+
      'Select ItemCode,DueDate,ReleaseDate, '+
                'OrderNo,GrossQty,OrderQty,RealOrderQty,OnHand,'+
                'CanUseOnHand,NetQty,Ordinal,'+
                'PmCode,OrderLineStatus,OrderLineNo,'+
                'Pegging,PeggingNo,OnCheck,AssignedQty,RealDueDate,'+
                'RealReleaseDate,GroupOrdinal,ReMainQty,DeptVendorCode '+
              'From #TmPMrpResult '+
              'Order By ReleaseDate,Ordinal';
  ExecuteSql(R_AdoQry_Calculate,StrSqlText,1);
end;}



procedure TFrm_Mrp_Enter_NewRunMrp.CalculateMrpResult(
            R_AdoQry_Calculate:TAdoQuery;
            R_AdoQry_Calculate1: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结果
var StrSqlText:String;
    DblOnHand:Double;
    DblSSQty:Double;
    IntOrdinal:Integer;
    BMKBookMArk:String;
    StrDueDate1:String;
    StrReleaseDate1:String;
    DblCanUseONHand:Double;
    DblGrossQty:Double;
    IntHaveAdvanceRecord:Integer;
begin
  DblSSQty:=0;
  IntHaveAdvanceRecord:=0;
  StrPegging:='系统建议下达';
  StrSqlText:='Select Sum(ONHand) As OnHand '+
                      'From #TmPMrpResult '+
                      'Where Ordinal=0 Or Ordinal=1 Or Ordinal=2' ;
  ExecuteSql(R_AdoQry_Calculate,StrSqlText,0);
  DblCanUseONHand:=R_AdoQry_Calculate.fieldbyname('OnHand').AsFloat;

  StrSqlText:='Select Sum(GrossQty) As GrossQty '+
                      'From #TmPMrpResult '+
                      'Where Ordinal=4 ' ;
  ExecuteSql(R_AdoQry_Calculate,StrSqlText,0);
  DblGrossQty:=R_AdoQry_Calculate.fieldbyname('GrossQty').AsFloat;
  If DblCanUseOnHand<DblGrossQty Then
     DblCanUseOnHand:=DblGrossQty-DblCanUseOnHand
  Else
     DblCanUseOnHand:=0; //算出建议下单量

  StrSQLText:='Select * '+
                     'From #TmPMrpResult '+
                     'Order By ReleaseDate,Ordinal';
  ExecuteSql(R_AdoQry_Calculate,StrSqlText,0);
  DblOnHand:=0;
  While Not R_AdoQry_Calculate.Eof  Do
  begin
    IF (R_AdoQry_Calculate.fieldbyname('ReleaseDate').AsString>StrToDate)
       And (DblOnHand<0) And (DblCanUseOnHand>0) Then             //对需求日期小于当前日期的物料建议下达
    begin
      If ABS(DblOnHand)>DblCanUseOnHand Then
        begin
          DblSSQty:=Abs(DblOnHand)-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;

      DblOnHand:=DblOnHand+DblSSQty;
      BMKBookMArk:=R_AdoQry_Calculate.BookMArk;
      StrSqlText:='Insert #TmPMrpResult'+
                        '(ItemCode,'+
                        ' DueDate,'+
                        ' ReleaseDate,'+
                        ' RealDueDate,'+
                        ' RealReleaseDate,'+
                        ' OnHand,'+
                        ' ReMainQty,'+
                        ' Ordinal,'+
                        ' PmCode,'+
                        ' Pegging,'+
                        ' GroupOrdinal)'+
                     'Values'+
                        '('''+StrItemCode+''','+
                        ' '''+StrToDate+''','+
                        ' '''+StrToDate+''','+
                        ' '''+StrToDate+''','+
                        ' '''+StrToDate+''','+
                        ' '+FloatToStr(DblSSQty)+','+
                        ' '+FloatToStr(DblSSQty)+','+
                        ' 3,'+
                        ' '+StrPmCode+','+
                        ' '''+StrPegging+''','+

⌨️ 快捷键说明

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