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

📄 inv_saleproductaudit_b.pas

📁 一个MRPII系统源代码版本
💻 PAS
📖 第 1 页 / 共 2 页
字号:
      if Tempstr<>'' then
      begin
        DispStr:=Tempstr;
        Abort;
      end;
      {if AdoQry_Body.fieldbyname('BatchNo').AsString<>'' then
      begin
        if not BatchInvCheck(AdoQry_Tmp,AdoQry_Body.fieldbyname('BatchNo').AsString,
          'C',AdoQry_Head.fieldbyname('WHCode').AsString,
          AdoQry_Head.fieldbyname('WhPositionCode').AsString,
          AdoQry_Body.fieldbyname('InvBillQty').AsFloat)then
          Abort;
        ChangeBatchInv(AdoQry_Tmp,AdoQry_Body.fieldbyname('BatchNo').AsString,
          'C',MEdt_InvBillDate.Text,AdoQry_Head.fieldbyname('WHCode').AsString,
          AdoQry_Head.fieldbyname('WhPositionCode').AsString,
          AdoQry_Body.fieldbyname('InvBillQty').AsFloat);
      end;}

      if AdoQry_Head.fieldbyname('MpsSale').AsString='1' then
      begin
        //自动冲销主计划结合点的处理
        AdoQry_Tmp.Close;
        AdoQry_Tmp.SQL.Text:='Select MrpParamValueN From MrpParam'
          +' Where MrpParamCode=''autoBalanceMps''';
        AdoQry_Tmp.Open;
        if AdoQry_Tmp.fieldbyname('MrpParamValueN').AsString='1' then
        begin
          //重点修改
          Float_Temp1:=AdoQry_Body.fieldbyname('InvBillQty').AsFloat;
          if Float_Temp1>=0 then
          begin
          //由上往下加已经完成数量
            AdoQuery.Close;
            AdoQuery.Connection:=DBConnect;
            AdoQuery.SQL.Text:='Select MpsId,MpsDate,MpsFinishQty,MpsQty-MpsFinishQty As AQty From Mps'
              +' Where MpsStatus=3'
              +' And ItemCode='''+AdoQry_Body.fieldbyname('ItemCode').AsString+''''
              +' Order By MpsDate';
            AdoQuery.Open;
            if AdoQuery.RecordCount=0 then
            begin
              DispStr:=' 主生产计划中找不到相应记录';
              Abort;
            end;
            AdoQuery.First;
            while not AdoQuery.Eof do
            begin
              if AdoQuery.fieldbyname('AQty').AsFloat<=Float_Temp1 then
              begin
                AdoQry_Tmp.Close;
                AdoQry_Tmp.SQL.Text:='Update Mps Set'
                  +' MpsFinishQty=MpsQty'
                  +' Where MpsId='+AdoQuery.fieldbyname('MpsId').AsString+'';
                AdoQry_Tmp.ExecSQL;
                OperationMps(AdoQry_Tmp,AdoQry_Body.fieldbyname('ItemCode').AsString
                  ,'Mps',2,AdoQuery.fieldbyname('MpsId').AsInteger);

                Float_Temp1:=Float_Temp1-AdoQuery.fieldbyname('AQty').AsFloat;
              end
              else
              begin
                AdoQry_Tmp.Close;
                AdoQry_Tmp.SQL.Text:='Update Mps Set'
                  +' MpsFinishQty=MpsFinishQty+'+FloatToStr(Float_Temp1)
                  +' Where MpsId='+AdoQuery.fieldbyname('MpsId').AsString+'';
                AdoQry_Tmp.ExecSQL;
                OperationMps(AdoQry_Tmp,AdoQry_Body.fieldbyname('ItemCode').AsString
                  ,'Mps',2,AdoQuery.fieldbyname('MpsId').AsInteger);
                
                Float_Temp1:=0;
                Break;
              end;
              AdoQuery.Next;
            end;
            if Float_Temp1<>0 then
            begin
              //如果已完成数量已经加满,则直接把剩下的加在最后一项上
              AdoQry_Tmp.Close;
              AdoQry_Tmp.SQL.Text:='Update Mps Set'
                +' MpsFinishQty=MpsFinishQty+'+FloatToStr(Float_Temp1)
                +' Where MpsId='+AdoQuery.fieldbyname('MpsId').AsString+'';
              AdoQry_Tmp.ExecSQL;
              OperationMps(AdoQry_Tmp,AdoQry_Body.fieldbyname('ItemCode').AsString
                ,'Mps',2,AdoQuery.fieldbyname('MpsId').AsInteger);
            end;
          end
          else// if Float_Temp1<0 then
          begin//由下往上把已经完成数量减去
            AdoQuery.Close;
            AdoQuery.Connection:=DBConnect;
            AdoQuery.SQL.Text:='Select MpsId,MpsDate,MpsFinishQty,MpsQty-MpsFinishQty As AQty From Mps'
              +' Where MpsStatus=3'
              +' And ItemCode='''+AdoQry_Body.fieldbyname('ItemCode').AsString+''''
              +' Order By MpsDate';
            AdoQuery.Open;
            if AdoQuery.RecordCount=0 then
            begin
              DispStr:=' 主生产计划中找不到相应记录';
              Abort;
            end;
            AdoQuery.Last;
            while not AdoQuery.Bof do
            begin
              if AdoQuery.fieldbyname('MpsFinishQty').AsFloat<=-Float_Temp1 then
              begin
                AdoQry_Tmp.Close;
                AdoQry_Tmp.SQL.Text:='Update Mps Set'
                  +' MpsFinishQty=0'
                  +' Where MpsId='+AdoQuery.fieldbyname('MpsId').AsString+'';
                AdoQry_Tmp.ExecSQL;
                OperationMps(AdoQry_Tmp,AdoQry_Body.fieldbyname('ItemCode').AsString
                  ,'Mps',2,AdoQuery.fieldbyname('MpsId').AsInteger);
                Float_Temp1:=Float_Temp1+AdoQuery.fieldbyname('MpsFinishQty').AsFloat;
              end
              else
              begin
                AdoQry_Tmp.Close;
                AdoQry_Tmp.SQL.Text:='Update Mps Set'
                  +' MpsFinishQty=MpsFinishQty+'+FloatToStr(Float_Temp1)
                  +' Where MpsId='+AdoQuery.fieldbyname('MpsId').AsString+'';
                AdoQry_Tmp.ExecSQL;
                OperationMps(AdoQry_Tmp,AdoQry_Body.fieldbyname('ItemCode').AsString
                  ,'Mps',2,AdoQuery.fieldbyname('MpsId').AsInteger);
                Float_Temp1:=0;
                Break;
              end;
              AdoQuery.Prior;
            end;
            if Float_Temp1<>0 then
            begin//如果已经完成数量都减完了,剩下数量在最后一项减去
              AdoQry_Tmp.Close;
              AdoQry_Tmp.SQL.Text:='Update Mps Set'
                +' MpsFinishQty=MpsFinishQty+'+FloatToStr(Float_Temp1)
                +' Where MpsId='+AdoQuery.fieldbyname('MpsId').AsString+'';
              AdoQry_Tmp.ExecSQL;
              OperationMps(AdoQry_Tmp,AdoQry_Body.fieldbyname('ItemCode').AsString
                  ,'Mps',2,AdoQuery.fieldbyname('MpsId').AsInteger);
            end;
          end;
        end
        else
        begin
        //不自动冲销主计划结合点的处理
          AdoQry_Tmp.Close;
          AdoQry_Tmp.SQL.Text:='Update Mps Set'
            +' MpsFinishQty=MpsFinishQty+'+
              AdoQry_Body.fieldbyname('InvBillQty').AsString+','
            +' MpsOutQty=MpsOutQty-('+
              AdoQry_Body.fieldbyname('InvBillSfcQty').AsString+') '
            +' Where MpsId='+AdoQry_Body.fieldbyname('MpsId').AsString+'';
          AdoQry_Tmp.ExecSQL;
          OperationMps(AdoQry_Tmp,AdoQry_Body.fieldbyname('ItemCode').AsString
            ,'Mps',2,AdoQry_Body.fieldbyname('MpsId').AsInteger);
        end;
        AdoQry_Tmp.Close;
        AdoQry_Tmp.SQL.Text:='Select MrpParamValueN From MrpParam'
          +' Where MrpParamCode=''autoCloseMps''';
        AdoQry_Tmp.Open;
        if AdoQry_Tmp.fieldbyname('MrpParamValueN').AsString='1' then
        begin
          AdoQry_Tmp.Close;
          AdoQry_Tmp.SQL.Text:='Update Mps Set'
            +' MpsStatus=4'
            +' Where MpsFinishQty>=MpsQty';
          AdoQry_Tmp.ExecSQL;
        end;
      end;
      AdoQry_Body.Next;
    end;
    DBConnect.CommitTrans;
  except
    DBConnect.RollBackTrans;
    DispInfo(DispStr,3);
    Abort;
  end;
  AdoQry_Head.Edit;
  AdoQry_Head.fieldbyname('InvBillWHChck').AsInteger:=1;
  AdoQry_Head.fieldbyname('InvBillDate').AsString:=MEdt_InvBillDate.Text;
  AdoQry_Head.Post;
  Act_Check.Enabled:=False;
  Act_auto.Enabled:=False;
  MEdt_InvBillDate.Enabled:=False;
end;

procedure TFrm_Inv_SaleProductAudit_B.Act_PreviewExecute(Sender: TObject);
begin
 //inherited;
  BillPrint(AdoQry_Tmp.Connection,GetCode(Lbl_Warehouse.Caption),Lbl_InvBillNo.Caption,Param1,ModuleCode,True,False,True,'');
end;

procedure TFrm_Inv_SaleProductAudit_B.Act_PrintExecute(Sender: TObject);
begin
 //inherited;
  BillPrint(AdoQry_Tmp.Connection,GetCode(Lbl_Warehouse.Caption),Lbl_InvBillNo.Caption,Param1,ModuleCode,False,False,True,'');
end;
procedure TFrm_Inv_SaleProductAudit_B.FormCreate(Sender: TObject);
begin
  inherited;
  TlBtn_CancelCheck.Action:=Act_auto;
  DBGridEh.Options:=DBGridEh.Options+[dgEditing]-[dgRowselect];
end;

procedure TFrm_Inv_SaleProductAudit_B.Act_autoExecute(Sender: TObject);
begin
  inherited;
  AdoQry_Body.First;
  while not AdoQry_Body.Eof do
  begin
    if (AdoQry_Body.fieldbyname('CurrentInvQty').AsString<>'')
      and (AdoQry_Body.fieldbyname('InvBillSfcQty').AsString<>'') then
    begin
      AdoQry_Body.Edit;
      if(AdoQry_Body.fieldbyname('CurrentInvQty').AsFloat>
        AdoQry_Body.fieldbyname('InvBillSfcQty').AsFloat)
        or(AdoQry_Body.fieldbyname('CurrentInvQty').AsFloat<0)then
        AdoQry_Body.fieldbyname('InvBillQty').AsFloat:=
          AdoQry_Body.fieldbyname('InvBillSfcQty').AsFloat
      else
        AdoQry_Body.fieldbyname('InvBillQty').AsFloat:=
          AdoQry_Body.fieldbyname('CurrentInvQty').AsFloat;
      AdoQry_Body.Post;
    end;
    AdoQry_Body.Next;
  end;
end;

procedure TFrm_Inv_SaleProductAudit_B.AdoQry_BodyInvBillQtyChange(
  Sender: TField);
begin
  inherited;
  if((AdoQry_BodyInvBillQty.AsFloat<0)
    and(AdoQry_BodyInvBillQty.AsFloat<AdoQry_Body.fieldbyname('InvBillSfcQty').AsFloat))
    or((AdoQry_BodyInvBillQty.AsFloat>0)
    and((AdoQry_BodyInvBillQty.AsFloat>AdoQry_Body.fieldbyname('InvBillSfcQty').AsFloat)
    or(AdoQry_BodyInvBillQty.AsFloat>AdoQry_Body.fieldbyname('CurrentInvQty').AsFloat))) then
  begin
    DispInfo(' 数量输入错误,超出正常范围 ',3);
    Abort;
  end;
end;

procedure TFrm_Inv_SaleProductAudit_B.AdoQry_BodyBeforeInsert(
  DataSet: TDataSet);
begin
  inherited;
  Abort;
end;

procedure TFrm_Inv_SaleProductAudit_B.DateCheck(Sender: TObject);
begin
  inherited;
  if WHClsPeriodCheck(AdoQry_Tmp,AdoQry_Head.fieldbyname('WHCode').AsString,
    Copy(TEdit(Sender).Text,1,7))=False then
  begin
    TWinControl(Sender).SetFocus;
    Abort;
  end;
end;

end.

⌨️ 快捷键说明

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