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

📄 inv_mnoutaudit_b.pas

📁 一个MRPII系统源代码版本
💻 PAS
📖 第 1 页 / 共 4 页
字号:
    DispInfo('实际数量与请领数量的正负方向必须一致!',1);
    AdoQry_Body.EnableControls;
    abort;
  end;
end;

procedure TFrm_Inv_MnOutAudit_B.checkIOType;
begin
  if IoType<>0 then
  if AdoQry_Body.fieldbyname('InvBillqty').asfloat*IoType<0 then
  begin
    DispInfo('同一请领,不能出现正负数量混合的情况!',1);
    AdoQry_Body.EnableControls;
    abort;
  end;
end;

procedure TFrm_Inv_MnOutAudit_B.DBGridEhColExit(Sender: TObject);
var
  tmp_WhCode,tmp_WhPositionCode:string;
begin
  inherited;
  tmp_WhCode:=getCode(lbl_WhCode.text);
  tmp_WhPositionCode:=getCode(lbl_WhPosition.text);
  if (AdoQry_Body.State in [dsedit]) and
     (dbgrideh.SelectedField.fieldName='moRequestqty') then
  begin
   //  checkIOType;
     checkcoCurrentqty;
  end;

  //如果是批次控制,则修改后不能空,且要检验批次号,如果不是批次控制,不能进行修改,只能为空
  //用OLDBatchNO来控制原批次号,OLDBatchNO为空,表示原批次号为空,不能修改,OLDBatchNO不为空
  //则原批次号可以修改,但不能改为空。
  if (AdoQry_Body.State in [dsedit]) and
     (dbgrideh.SelectedField.fieldName='Batchno') then
  begin
    if oldBatchno<>'' then
    begin
      if AdoQry_Body.fieldbyname('Batchno').asstring<>'' then
      begin
        if not BatchNoCheck(AdoQry_tmp,AdoQry_Body.fieldbyname('Batchno').asstring,AdoQry_Body.fieldbyname('ItemCode').asstring,'',medt_Date.text) then
        begin
          dbgrideh.SetFocus;
          abort;
        end
        else
        begin
          if  not BatchInvCheck(AdoQry_tmp,AdoQry_Body.fieldbyname('Batchno').asstring,'C',tmp_WhCode,tmp_WhPositionCode,AdoQry_Body.fieldbyname('InvBillqty').asfloat) then
          begin
            dbgrideh.setfocus;
            abort;
          end;
        end;
      end
      else
      begin
        DispInfo('该批次号不能为空',1);
        AdoQry_Body.fieldbyname('Batchno').asstring:=oldBatchno;
        dbgrideh.SetFocus;
        abort;
      end;
    end
    else
    begin
          //如果实领数量为零,就不能录入批次号
      if (AdoQry_Body.fieldbyname('InvBillqty').asstring='0') and
         (AdoQry_Body.fieldbyname('Batchno').asstring<>'') then
      begin
        AdoQry_Body.fieldbyname('Batchno').asstring:='';
      end;

      //如果实领数量不为零
      if (AdoQry_Body.fieldbyname('InvBillqty').asstring<>'0') then
      begin
        //且如果不受批次控制且批次号不为空,则令其空,且提示
        if (not BatchCtrl(AdoQry_tmp,AdoQry_Body.fieldbyname('ItemCode').asstring)) then
        begin
          if (AdoQry_Body.fieldbyname('Batchno').asstring<>'') then
          begin
            DispInfo('该物料不受批次控制,不能录入批次号',1);
            AdoQry_Body.fieldbyname('Batchno').asstring:='';
            dbgrideh.setfocus;
            abort;
          end
        end;
      end;

      //如果受批次控制,则做批次号是否存在检验,如果存在,则检验批次库存是否够
      if (AdoQry_Body.fieldbyname('InvBillqty').asstring<>'0') then
      begin
        if (BatchCtrl(AdoQry_tmp,AdoQry_Body.fieldbyname('ItemCode').asstring)) then
        begin
          if (AdoQry_Body.fieldbyname('Batchno').asstring='') then
          begin
            DispInfo('请录入批次号',1);
            dbgrideh.setfocus;
            abort;
          end
          else
          begin
            if not BatchNoCheck(AdoQry_tmp,
                                AdoQry_Body.fieldbyname('Batchno').asstring,
                                AdoQry_Body.fieldbyname('ItemCode').asstring,
                                '',
                                medt_Date.text) then
            begin
              dbgrideh.setfocus;
              abort;
            end
            else
            begin
              if not BatchInvCheck(AdoQry_tmp,
                                   AdoQry_Body.fieldbyname('Batchno').asstring,
                                   'C',
                                   tmp_WhCode,
                                   tmp_WhPositionCode,
                                   AdoQry_Body.fieldbyname('moRequestqty').asfloat) then
              begin
                dbgrideh.setfocus;
                abort;
              end;
            end;
          end;
        end;
      end;
    end;
  end;
end;

procedure TFrm_Inv_MnOutAudit_B.Act_autoExecute(Sender: TObject);
var
  M,tmp_OverPlan:integer;
  tmp_BomScrAp_Percent,tmp_SwApMoRealqty,tmp_Bomqty,tmp_SwApmoCtrlqty,tmp_reMain,
  InvBillqty,onhandInv,InvBillSfcqty,moCtrlqty,MoRealqty:real;
  Batchno:string;
  outqty:double;
  //实领数量,当前库存,请领数量,限额数量,累计实领数量
begin
  inherited;

  tmp_OverPlan:=AdoQry_Head.fieldbyname('OverPlan').asinteger;

  //下面几行代码:如果有替代件,先把替代件清零
  if (AdoQuery1.RecordCount>0) and (tmp_OverPlan<>1) then
  begin
    with AdoQry_Body do
    begin
      disablecontrols;
      First;
      for M:=0 to recordCount-1 do
      begin
        if (fieldbyname('alterNative').asinteger=1) and
           (fieldbyname('InvBillqty').asfloat<>0) then
        begin
          edit;
          fieldbyname('InvBillqty').asfloat:=0;
          post;
        end;
        next;
      end;
      enablecontrols;
    end;
  end;
  //获取最佳数量代码,不包括
  with AdoQry_Body do
  begin
    disablecontrols;
    First;
    for M:=0 to recordCount-1 do
    begin
      InvBillqty:=fieldbyname('InvBillqty').asfloat;
      InvBillSfcqty:=fieldbyname('InvBillSfcqty').asfloat;
      onhandInv:=fieldbyname('onhandInv').asfloat;
      moCtrlqty:=fieldbyname('moCtrlqty').asfloat;
      MoRealqty:=fieldbyname('MoRealqty').asfloat;
      tmp_Bomqty:=fieldbyname('Bomqty').asfloat;
      tmp_BomScrAp_Percent:=fieldbyname('BomScrAp_Percent').asfloat;
      if  (InvBillSfcqty=0) and  ((onhandInv=0) or (onhandInv=null)) then
      begin
      end
      else
      begin
      //如果是超计划,则实领数量=MIN(请领数量,库存数量)
      if tmp_OverPlan=1 then
      begin
        if InvBillSfcqty>onhandInv then
        begin
          //如果是批处理控制,则根据处入来的数量OUTQTY与批处理库存中最佳数量比效,
          //取最佳批次号
          if BatchCtrl(AdoQry_tmp,fieldbyname('ItemCode').asstring) then
          begin
            outqty:=fieldbyname('moCtrlqty').asfloat-
                      fieldbyname('MoRealqty').asfloat;
            Batchno:=GiveBatchNo(AdoQry_tmp,
                        getCode(lbl_WhCode.text),
                        getCode(lbl_WhPosition.text),
                        AdoQry_Body.fieldbyname('ItemCode').asstring,
                        medt_Date.text,
                        outqty,
                        AdoQry_Body.fieldbyname('Batchno').asstring
                        );
            if Batchno='' then
            begin
             // edit;
             // fieldbyname('moRequestqty').asfloat:=0;
            end
            else
            begin
              edit;
              fieldbyname('InvBillqty').asfloat:=outqty;
              fieldbyname('Batchno').asstring:=Batchno;
            end;
          end
          else
          begin
            edit;
            fieldbyname('InvBillqty').asfloat:=fieldbyname('onhandInv').asfloat;
          end;
        end
        else
        begin
          if BatchCtrl(AdoQry_tmp,fieldbyname('ItemCode').asstring) then
          begin
          //如果是批处理控制,则根据处入来的数量OUTQTY与批处理库存中最佳数量比效,
          //取最佳批次号
            outqty:=fieldbyname('InvBillSfcqty').asfloat;
            Batchno:=GiveBatchNo(AdoQry_tmp,
                        getCode(lbl_WhCode.text),
                        getCode(lbl_WhPosition.text),
                        AdoQry_Body.fieldbyname('ItemCode').asstring,
                        medt_Date.text,
                        outqty,
                        AdoQry_Body.fieldbyname('Batchno').asstring
                        );
            if Batchno='' then
            begin
             // edit;
             // fieldbyname('moRequestqty').asfloat:=0;
            end
            else
            begin
              edit;
              fieldbyname('InvBillqty').asfloat:=outqty;
              fieldbyname('Batchno').asstring:=Batchno;
            end;
          end
          else
          begin
            edit;
            fieldbyname('InvBillqty').asfloat:=fieldbyname('InvBillSfcqty').asfloat;
          end;
        end;
      end
      else
      begin

        //判断是否是替换实项,因替换实项的MoRealQTY,MOCtrlQTY 是从MNItemList表中的虚项中来
        if fieldbyname('alterNative').asstring<>'1' then
        begin
           //不是超领,实领数量=MIN(请领数量,库存数量,限额数量-累计实领数量)
          if InvBillSfcqty<onhandInv then
          begin
            if InvBillSfcqty<(moCtrlqty-MoRealqty) then
            begin
              if BatchCtrl(AdoQry_tmp,fieldbyname('ItemCode').asstring) then
              begin
                //如果是批处理控制,则根据处入来的数量OUTQTY与批处理库存中最佳数量比效,
                //取最佳批次号
                outqty:=InvBillSfcqty;
                Batchno:=GiveBatchNo(AdoQry_tmp,
                        getCode(lbl_WhCode.text),
                        getCode(lbl_WhPosition.text),
                        AdoQry_Body.fieldbyname('ItemCode').asstring,
                        medt_Date.text,
                        outqty,
                        AdoQry_Body.fieldbyname('Batchno').asstring);
                if Batchno='' then
                begin
                // edit;
                // fieldbyname('moRequestqty').asfloat:=0;
                end
                else
                begin
                  edit;
                  fieldbyname('InvBillqty').asfloat:=outqty;
                  fieldbyname('Batchno').asstring:=Batchno;
                end;
              end
              else
              begin
                edit;
                fieldbyname('InvBillqty').asfloat:=InvBillSfcqty;
              end;
            end
            else
            begin
              if (moCtrlqty-MoRealqty)>0 then
              begin
                if BatchCtrl(AdoQry_tmp,fieldbyname('ItemCode').asstring) then
                begin
                  //如果是批处理控制,则根据处入来的数量OUTQTY与批处理库存中最佳数量比效,
                  //取最佳批次号
                  outqty:=(moCtrlqty-MoRealqty);
                  Batchno:=GiveBatchNo(AdoQry_tmp,
                          getCode(lbl_WhCode.text),
                          getCode(lbl_WhPosition.text),
                          AdoQry_Body.fieldbyname('ItemCode').asstring,
                          medt_Date.text,
                          outqty,
                          AdoQry_Body.fieldbyname('Batchno').asstring);
                  if Batchno='' then
                  begin
                  // edit;
                  // fieldbyname('moRequestqty').asfloat:=0;
                  end
                  else
                  begin
                    edit;
                    fieldbyname('InvBillqty').asfloat:=outqty;
                    fieldbyname('Batchno').asstring:=Batchno;
                  end;
                end
                else
                begin
                  edit;
                  fieldbyname('InvBillqty').asfloat:=(moCtrlqty-MoRealqty);
                end;
              end;
            end;
          end
          else
          begin
            if onhandInv<(moCtrlqty-MoRealqty) then

⌨️ 快捷键说明

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