mrp_enter_newautomo3.pas

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

PAS
835
字号
    begin
      DispInfo('第'+inttostr(AdoQry_CopyBody.recno)+'行数据约定交货量大于系统建议余量,请修改!',1);
      abort;
    end;
//    showmessage(floattostr(AdoQry_CopyBody.fieldbyname('moqty').asfloat));
//    showmessage(floattostr(AdoQry_CopyBody.fieldbyname('ssqty').asfloat));
    AdoQry_CopyBody.Next;
  end; //校验数据
  SetDisableControls;
  DbGrideh1.Enabled:=False;
  CreatePanel(2,DbGrideh1);
  Application.ProcessMessages;
  DbConnect.beginTrans;
  AdoQry_CopyBody.DisableControls;
  Try
    AdoQry_CopyBody.First;
    i:=0;
    While Not AdoQry_CopyBody.Eof Do
    begin
      i:=i+1;
      if AdoQry_CopyBody.fieldbyname('byProduct').asinteger=1 then
        begin
         AdoQry_CopyBody.Next;
         continue;
        end;
      AdoQry_CopyBody.Next;
    end;
//    MoNO:='M'+Trim(Copy(FormatDateTime('yyyy.mm.dd',Now),3,2))+Trim(Copy(FormatDateTime('yyyy.mm.dd',Now),6,2));
//    Edt_MoNo.Text:=GetNo(DbConnect,MoNo,'Mo');
    if  CheckAllTypeOrderNoSet(DbConnect,6) then
     Edt_MoNo.Text := GetAllTypeOrderNo(DbConnect,6);
    if edt_Mono.Text='' then abort;
    Application.ProcessMessages;
    AdoQry_Tmp.Close;
    SqlText:='Insert Mo '
            +' (MoNo,DeptCode,MoDate,referenceno,MoReMArk,SaleType,StandardFlag)'
            +'  Values('
            +''''+Trim(Edt_MoNo.Text)+''''+','
            +''''+Trim(Edt_DeptCode.Text)+''''+','
            +''''+Trim(MEdt_MoDate.Text)+''''+','
            +quotedstr(Trim(edt_rno.text))+','
            +''''+Trim(Edt_MoReMArk.Text)+''''+','
            +''''+Trim(Edt_SysParamCode.Text)+''''+','
            +''''+IntToStr(Cmbx_StandardFlag.ItemIndex)+''')';
    AdoQry_Tmp.Close;
    AdoQry_Tmp.SQL.Text:=SqlText;
    AdoQry_Tmp.ExecSQL;   // Insert Mo Table
    savemohistory(dbconnect,Trim(edt_Mono.text),userCode,0);
    AdoQry_CopyBody.First;
    While Not AdoQry_CopyBody.Eof Do
    begin
       SqlText:='Insert MoLine '
              +' (MoNo,MoLineNo,byProduct,ParentMoLineno,Backflush,ItemCode,remArk,MoLineDate,MOStArtWorkDate,SsQty,MOQty,MoNoFinishQty,MoLineStatus)'
              +'Values('
              +''''+Trim(Edt_MoNo.Text)+''','
              +''''+IntToStr(AdoQry_CopyBody.fieldbyname('MoLineNo').AsInteger)+''','
              +inttostr(AdoQry_CopyBody.fieldbyname('byProduct').asinteger)+','
              +inttostr(AdoQry_CopyBody.fieldbyname('ParentMoLineno').asinteger)+','
              +inttostr(AdoQry_CopyBody.fieldbyname('Backflush').asinteger)+','
              +''''+AdoQry_CopyBody.fieldbyname('ItemCode').AsString+''','
              +quotedstr(AdoQry_CopyBody.fieldbyname('remArk').asstring)+','
              +''''+DatetimeToStr(AdoQry_CopyBody.fieldbyname('MoLineDate').AsDateTime)+''','
              +''''+DatetimeToStr(AdoQry_CopyBody.fieldbyname('MOStArtWorkDate').AsDateTime)+''',';
      If AdoQry_CopyBody.fieldbyname('MoQty').AsFloat<=AdoQry_CopyBody.fieldbyname('SsQty').AsFloat Then
         SqlText:=SqlText+''''+FloatToStr(AdoQry_CopyBody.fieldbyname('MoQty').AsFloat)+''','
      Else
         SqlText:=SqlText+''''+FloatToStr(AdoQry_CopyBody.fieldbyname('SsQty').AsFloat)+''',';
      SqlText:=SqlText+''''+FloatToStr(AdoQry_CopyBody.fieldbyname('MOQty').AsFloat)+''','
              +''''+FloatToStr(AdoQry_CopyBody.fieldbyname('MoNoFinishQty').AsFloat)+''','
              +'5)';
      AdoQry_Tmp.Close;
      AdoQry_Tmp.SQL.Text:=SqlText;
      AdoQry_Tmp.ExecSQL;
      saveMoLineHistory(dbconnect,Trim(edt_Mono.text),AdoQry_CopyBody.fieldbyname('MoLineno').asinteger,userCode,0);
      operationmopo(AdoQry_tmp,
                    AdoQry_CopyBody.fieldbyname('ItemCode').asstring,
                    'mo',
                    1,
                    Trim(edt_Mono.text),
                    AdoQry_CopyBody.fieldbyname('MoLineno').asinteger,
                    5,
                    0,
                    AdoQry_CopyBody.fieldbyname('moqty').asfloat,
                    AdoQry_CopyBody.fieldbyname('MoNoFinishqty').asfloat,
                    AdoQry_CopyBody.fieldbyname('mostArtworkdate').asstring,
                    AdoQry_CopyBody.fieldbyname('MoLinedate').asstring,
                    getPmCode(dbconnect,AdoQry_CopyBody.fieldbyname('ItemCode').asstring),
                    Trim(edt_DeptCode.text));
      If Cmbx_StandardFlag.ItemIndex=1 then
        If Not (NewAutoBuildOrder(DbConnect,Trim(Edt_MoNo.Text),
           IntToStr(AdoQry_CopyBody.fieldbyname('MoLineNo').AsInteger),Trim(AdoQry_CopyBody.fieldbyname('ItemCode').AsString),AdoQry_CopyBody.fieldbyname('MoQty').AsFloat)) Then //自动产生领料单
        Abort;
      AdoQry_CopyBody.Next;
      Application.ProcessMessages;
    end;
    //开始保存数据到MrpResult中
    //*****************************
    AdoQry_Tmp.Close;
    AdoQry_Tmp.SQL.Text:=' Select ItemCode,Sum(TMpssReMainQty) As SSQty From  #tMpssInfoResult Group By ItemCode';
    AdoQry_Tmp.Open;
    While Not AdoQry_Tmp.Eof Do
    begin
      Qty:=AdoQry_Tmp.fieldbyname('SSQTy').AsFloat;
      AdoQry_Temp.Close;
      AdoQry_Temp.SQL.Text:=' Select ItemCode,Sum(ReMainQty) As ReMainQty From MrpResult '
                           +' Where Ordinal=3 And ReleaseDate>='''+FormatDateTime('YYYY.MM.DD',D3)+''''
                           +' And ReleaseDate<='''+FormatDateTime('YYYY.MM.DD',D4)+''''
                           +' And ItemCode='''+Trim(AdoQry_Tmp.fieldbyname('ItemCode').AsString)+''''
                           +' Group By ItemCode ';
      AdoQry_Temp.Open;
      If AdoQry_Temp.fieldbyname('ReMainQty').AsFloat=Qty Then
      begin
        AdoQry_Temp.Close;
        AdoQry_Temp.SQL.Text:=' Update MrpResult Set ReMainQty=0 '
                             +' Where Ordinal=3 And ReleaseDate>='''+FormatDateTime('YYYY.MM.DD',D3)+''''
                             +' And ReleaseDate<='''+FormatDateTime('YYYY.MM.DD',D4)+''''
                             +' And ItemCode='''+Trim(AdoQry_Tmp.fieldbyname('ItemCode').AsString)+'''';
        AdoQry_Temp.ExecSQL;
      end  //等于时,用户未修改
      Else If AdoQry_Temp.fieldbyname('ReMainQty').AsFloat>Qty Then
      begin
        AdoQry_Temp.Close;
        AdoQry_Temp.SQL.Text:=' Select  MrpResultID,ReMainQty From MrpResult '
                             +' Where Ordinal=3 And ReleaseDate>='''+FormatDateTime('YYYY.MM.DD',D3)+''''
                             +' And ReleaseDate<='''+FormatDateTime('YYYY.MM.DD',D4)+''''
                             +' And ItemCode='''+Trim(AdoQry_Tmp.fieldbyname('ItemCode').AsString)+'''';
        AdoQry_Temp.Open;
        While (Not AdoQry_Temp.Eof) And (Qty>0) Do
        begin
          If AdoQry_Temp.fieldbyname('ReMainQty').AsFloat=Qty Then
          begin
            AdoQry_Update.Close;
            AdoQry_Update.SQL.Text:=' Update MrpResult Set ReMainQty=0 '
                                   +' Where MrpResultID='+IntTOStr(AdoQry_Temp.fieldbyname('MrpResultID').AsInteger);
            AdoQry_Update.ExecSQL;
            Qty:=0;
            Break;
          end
          Else If AdoQry_Temp.fieldbyname('ReMainQty').AsFloat>Qty Then
          begin
            AdoQry_Update.Close;
            AdoQry_Update.SQL.Text:=' Update MrpResult Set ReMainQty=ReMainQty-('+FloatTOStr(Qty)+')'
                                   +' Where MrpResultID='+IntTOStr(AdoQry_Temp.fieldbyname('MrpResultID').AsInteger);
            AdoQry_Update.ExecSQL;
            Qty:=0;
            Break;
          end
          Else
          begin
            AdoQry_Update.Close;
            AdoQry_Update.SQL.Text:=' Update MrpResult Set ReMainQty=0'
                                   +' Where MrpResultID='+IntTOStr(AdoQry_Temp.fieldbyname('MrpResultID').AsInteger);
            AdoQry_Update.ExecSQL;
            Qty:=Qty-AdoQry_Temp.fieldbyname('ReMainQty').AsFloat;
          end;
          AdoQry_Temp.Next;
        end;
      end  //用户减少了建议量
      Else
      begin  //用户增加了建议量
        AdoQry_Update.Close;
        AdoQry_Update.SQL.Text:=' Update MrpResult Set ReMainQty=0 '
                               +' Where Ordinal=3 And ReleaseDate>='''+FormatDateTime('YYYY.MM.DD',D3)+''''
                               +' And ReleaseDate<='''+FormatDateTime('YYYY.MM.DD',D4)+''''
                               +' And ItemCode='''+Trim(AdoQry_Tmp.fieldbyname('ItemCode').AsString)+'''';
        AdoQry_Update.ExecSQL;
        Qty:=Qty-AdoQry_Temp.fieldbyname('ReMainQty').AsFloat;
        AdoQry_Temp.Close;
        AdoQry_Temp.SQL.Text:=' Select MrpResultID,ReMainQty From MrpResult '
                            +' Where Ordinal=3 '
                            +' And ItemCode='''+Trim(AdoQry_Tmp.fieldbyname('ItemCode').AsString)+''''
//                            +' And ((ReleaseDate>='''+FormatDateTime('yyyy.mm.dd',D1)+''''
//                            +' And ReleaseDate<'''+FormatDateTime('yyyy.mm.dd',D3)+''')'
                            +' And (ReleaseDate>'''+FormatDateTime('yyyy.mm.dd',D4)+''''
                            +' And ReleaseDate<='''+FormatDateTime('yyyy.mm.dd',D2)+''')' ;
        AdoQry_Temp.Open;
        While (Not AdoQry_Temp.Eof) And (Qty>0) Do
        begin
          If AdoQry_Temp.fieldbyname('ReMainQty').AsFloat=Qty Then
          begin
            AdoQry_Update.Close;
            AdoQry_Update.SQL.Text:=' Update MrpResult Set ReMainQty=0 '
                                   +' Where MrpResultID='+IntTOStr(AdoQry_Temp.fieldbyname('MrpResultID').AsInteger);
            AdoQry_Update.ExecSQL;
            Qty:=0;
            Break;
          end
          Else If AdoQry_Temp.fieldbyname('ReMainQty').AsFloat>Qty Then
          begin
            AdoQry_Update.Close;
            AdoQry_Update.SQL.Text:=' Update MrpResult Set ReMainQty=ReMainQty-('+FloatTOStr(Qty)+')'
                                   +' Where MrpResultID='+IntTOStr(AdoQry_Temp.fieldbyname('MrpResultID').AsInteger);
            AdoQry_Update.ExecSQL;
            Qty:=0;
            Break;
          end
          Else
          begin
            AdoQry_Update.Close;
            AdoQry_Update.SQL.Text:=' Update MrpResult Set ReMainQty=0'
                                   +' Where MrpResultID='+IntTOStr(AdoQry_Temp.fieldbyname('MrpResultID').AsInteger);
            AdoQry_Update.ExecSQL;
            Qty:=Qty-AdoQry_Temp.fieldbyname('ReMainQty').AsFloat;
          end;
          AdoQry_Temp.Next;
        end; //分配余量
      end;
      AdoQry_Tmp.Next;
    end;
    //*****************************
    //开始更新暂存量
    AdoQry_Tmp.Close;
    AdoQry_Tmp.SQL.Text:=' Select * From #tMpssInfoResult Order By ItemCode ';
    AdoQry_Tmp.Open;
    While Not AdoQry_Tmp.Eof Do
    begin
      AdoQry_Temp.Close;
      AdoQry_Temp.SQL.Text:=' Update SSMoLine Set MoQty=Case When MoQty>'+FloatToStr(AdoQry_Tmp.fieldbyname('TMpssReMainQty').AsFloat)
                           +' Then MoQty-'+FloatToStr(AdoQry_Tmp.fieldbyname('TMpssReMainQty').AsFloat)
                           +' Else 0 end '
                           +' Where ItemCode='''+Trim(AdoQry_Tmp.fieldbyname('ItemCode').AsString)+''''
                           +' And ReleaseDate='''+FormatDateTime('yyyy.mm.dd',AdoQry_Tmp.fieldbyname('SSDate').Asdatetime)+'''';
      AdoQry_Temp.ExecSQL;
      AdoQry_Tmp.Next;
    end;
    AdoQry_tmp.Close;
    AdoQry_Tmp.SQL.Text:=' Delete SSMoLine Where MoQty<=0 ';
    AdoQry_Tmp.ExecSQL;
    AdoQry_CopyBody.EnableControls;
    DbConnect.CommitTrans;
    Act_Save.Enabled:=False;
    SetEnableControls;
    if ShowAnimate<>nil then ShowAnimate.Free;
    if ShowPanel<>nil then ShowPanel.Free;
    DbGrideh1.Enabled:=True;
    Application.ProcessMessages;
    DispInfo('数据保存完毕!',3);
  Except
   on e:exception do
    begin
      SetEnableControls;
      DbGrideh1.Enabled:=True;
      AdoQry_CopyBody.EnableControls;
      Frm_Public_Show.Visible:=False;
      Frm_Public_Show.Release;
      Application.ProcessMessages;
      If DbConnect.InTransaction Then
        DbConnect.RollBackTrans;
      recOrderror(self,AdoQry_tmp,e.message);
      Edt_MoNo.Text:='';
      DispInfo('保存数据失败,请重试!',1);
      Abort;
    end;
  end;
  Pnl_Head.Enabled:=False;
  Frm_Mrp_Enter_OblongSsMo.Saved:=True;
end;

procedure TFrm_Mrp_Enter_NewAutoMo3.FormActivate(Sender: TObject);
begin
  inherited;
  MEdt_MoDate.Text:=FormatDateTime('yyyy.mm.dd',Date);
  if  CheckAllTypeOrderNoSet(DbConnect,6) then
  Edt_MoNo.Enabled := False
  else begin
    Edt_MoNo.Enabled := True;
    Edt_MoNo.SetFocus;
  end;
end;

procedure TFrm_Mrp_Enter_NewAutoMo3.FormCreate(Sender: TObject);
begin
  inherited;
  ExtendCaption:=False;
  Frm_Entry_Detail:=TFrm_Mrp_Enter_AutoMo_D.Create(Self);
  SetFocus_Control:=mEdt_Modate;
  Cmbx_StandardFlag.clear;
  Cmbx_StandardFlag.Items.Add('0 否');
  Cmbx_StandardFlag.Items.Add('1 是');

⌨️ 快捷键说明

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