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

📄 sfc_mnrequest_b1.pas

📁 一个MRPII系统源代码版本
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    end
    else}
      pnl_Hint.Visible :=False;
//  end;
  //控制保存后届面不变SHOWFLAG是基类的参数
  if (showflag=True) and (status<>'Add') then
     exit;
  checkbox1.Checked :=False;
  checkbox2.Checked :=False;
  BillTypeCode:=Param2;
  lbl_Mono.Caption:=AdoQry_Head.fieldbyname('mono').asstring;
  lbl_MoLineno.Caption:=AdoQry_Head.fieldbyname('MoLineno').asstring;
  lbl_Item.Caption:=AdoQry_Head.fieldbyname('ItemCode').asstring+' '+Frm_Sfc_MnRequest1.AdoQry_Head.fieldbyname('ItemName').asstring;
  lbl_Dept.Caption:=Frm_Sfc_MnRequest1.tmp_DeptCode;
  lbl_qty.Caption:=AdoQry_Head.fieldbyname('moqty').asstring;
  lbl_Noqty.Caption:=AdoQry_Head.fieldbyname('MoNoFinishqty').asstring;
  medt_Date.text:=LoginDate;
  oldWhPosition:='#@%^';
  oldwhCode:='#@%^';
  oldEmployee:='#@%^';
  MoLinestatus:=AdoQry_Head.fieldbyname('MoLinestatus').asinteger;
  IOType:=0;
   //DBGRID只允许请领数量,批次号,备注可以更改
  if status='ReadOnly' then
  begin
    cmbbx_WhCode.Enabled:=True;
    cmbbx_WhPositionCode.Enabled:=True ;
    cmbbx_WhEmployee.Enabled :=True;
    medt_Date.Enabled:=True;
    dbgrideh.ReadOnly :=True;
    dbgrideh.Columns[7].ReadOnly:=True;
    dbgrideh.Columns[8].ReadOnly:=True;
    dbgrideh.Columns[9].ReadOnly:=True;
    Act_auto.Enabled :=False;
    act_New.Enabled:=False;
    checkbox1.enabled:=True;
    checkbox2.enabled:=True;
    checkbox3.enabled:=True;
  end
  else
  begin
    Act_auto.Enabled :=True;
    dbgrideh.ReadOnly :=False;
    dbgrideh.Columns[0].ReadOnly:=True;
    dbgrideh.Columns[1].ReadOnly:=True;
    dbgrideh.Columns[2].ReadOnly:=True;
    dbgrideh.Columns[3].ReadOnly:=True;
    dbgrideh.Columns[4].ReadOnly:=True;
    dbgrideh.Columns[5].ReadOnly:=True;
    dbgrideh.Columns[6].ReadOnly:=True;
    dbgrideh.Columns[7].ReadOnly:=False;
    dbgrideh.Columns[8].ReadOnly:=False;
    dbgrideh.Columns[9].ReadOnly:=False;
//    dbgrideh.Columns[10].ReadOnly:=False;

{    dbgrideh1.ReadOnly :=False;
    dbgrideh1.Columns[0].ReadOnly:=True;
    dbgrideh1.Columns[1].ReadOnly:=True;
    dbgrideh1.Columns[2].ReadOnly:=True;
    dbgrideh1.Columns[3].ReadOnly:=True;
    dbgrideh1.Columns[4].ReadOnly:=True;
    dbgrideh1.Columns[5].ReadOnly:=True;
    dbgrideh1.Columns[6].ReadOnly:=True;
    dbgrideh1.Columns[7].ReadOnly:=False;
    dbgrideh1.Columns[8].ReadOnly:=False;
    dbgrideh1.Columns[9].ReadOnly:=False;
}
//    dbgrideh1.Columns[10].ReadOnly:=False;
  end;
//  initUsablewhcmbx(AdoQry_tmp,userCode,cmbbx_WhCode,False);
  AdoQry_Tmp.Close;
  AdoQry_Tmp.SQL.Text:= ' select WhAccessCtrl.WHCode,WHName   '
                     +'   from WHAccessCtrl   '
                     +'   join Warehouse on WhAccessCtrl.WhCode=Warehouse.WhCode '
                     +'   where WhAccessCtrl.EmployeeCode='+QuotedSTr(userCode)
                     +'   and  ( ( WhAccessCtrl.WhCode In (select Distinct WhCode  from CurrentInv      '
                     +'   where ItemCode in (select distinct ItemCode from MnItemList '
                     +'   where  MoNo='''+Trim(AdoQry_Head.fieldbyname('MoNo').AsString)+''''
                     +'   And MoLineNo='''+AdoQry_Head.fieldbyname('MoLineNo').AsString+''') )'
                     +'          ) '
                     +'         or ( WhAccessCtrl.WhCode In (select Distinct WhCode  from Item      '
                     +'   where ItemCode in (select distinct ItemCode from MnItemList '
                     +'   where  MoNo='''+Trim(AdoQry_Head.fieldbyname('MoNo').AsString)+''''
                     +'   And MoLineNo='''+AdoQry_Head.fieldbyname('MoLineNo').AsString+''') )'
                     +'          )  )'; 
                     
  AdoQry_Tmp.Open;
  CmbBx_WhCode.clear;
  While Not AdoQry_Tmp.Eof Do
  begin
    CmbBx_WhCode.Items.Add(AdoQry_Tmp.fieldbyname('WhCode').AsString+' '+AdoQry_Tmp.fieldbyname('WhName').AsString);
    AdoQry_Tmp.Next;
  end;
  CmbBx_WhCode.ItemIndex:=0;
  tmp_Status:='Change';
  cmbbx_WhCodeexit(cmbbx_WhCode);
  InitShiftCmBx(AdoQry_tmp,cmbbx_Shift,True);
  InitCmBxText(cmbbx_Shift,Frm_Sfc_MnRequest1.tmp_MoRequestshift);
end;

procedure TFrm_Sfc_MnRequest_B1.SetStatus(CurrentStatus:String;var AnswerStatus,
  EnableControls:String);
begin//指明当前状态,定义Enable=True的控件
  inherited;
 if CurrentStatus='Add' then
 begin
   EnableControls:='';
 end
 else
   EnableControls:='';
end;

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

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

procedure TFrm_Sfc_MnRequest_B1.checkcoCurrentqty;
begin
  //如果是结构虚项,则不允录入数据
  if AdoQry_Body.fieldbyname('alterNative').asinteger>0 then
  begin
    if (AdoQry_Body.fieldbyname('moRequestqty').asstring)<>'' then
    begin
      DispInfo('不允许录入数据!',1);
      dbgrideh.SetFocus ;
      abort;
    end;
  end
{  else  if (copy(AdoQry_Body.fieldbyname('tmpItemCode').asstring,1,1)='-') then
  begin
      //如果是替代虚项,则在下面一个DBGRID中录入数据
    if AdoQry_SwAp.state in [dsBrowse] then
    begin
      DispInfo('请在下面的数据窗格中维护替代件的请领数据!',1);
      dbgrideh.SetFocus ;
      abort;
    end;
  end
}  else
  begin
    if AdoQry_Body.fieldbyname('moRequestqty').asstring='' then
    begin
      DispInfo('当前数量不能为空!',1);
      dbgrideh.SetFocus ;
      abort;
    end;
    //如果物料是限额领料控制
    with AdoQry_tmp do
    begin
      Close;
      sql.clear;
      sql.Add('select limitout from Item where ItemCode='''+AdoQry_Body.fieldbyname('tmpItemCode').asstring+'''');
      open;
      if fieldbyname('limitout').asinteger=1 then
      begin
        if AdoQry_Body.fieldbyname('moRequestqty').asfloat>
            (AdoQry_Body.fieldbyname('moCtrlqty').asinteger-
             AdoQry_Body.fieldbyname('MoRealqty').asfloat)
        then
        begin
          DispInfo('请领数量不能超过实际未领数量!',1);
          dbgrideh.SetFocus ;
          abort;
        end;
      end
      else
      begin
      end;
    end;

   // 如果请领数量<0,在“冲销的数量不能大于累计领料数量”前,检查累计领料数量是否大于限额领料数量,是则提示“请先使用“超订单领料”进行冲销!”
    if  (AdoQry_Body.fieldbyname('moRequestqty').asfloat<0) then
    begin
      if AdoQry_Body.fieldbyname('moCtrlqty').asinteger<AdoQry_Body.fieldbyname('MoRealqty').asfloat then
      begin
        DispInfo('请先使用“超订单领料”进行冲销!',1);
        dbgrideh.SetFocus ;
        abort;
      end;
    end;

    if  (AdoQry_Body.fieldbyname('moRequestqty').asfloat<0) and
         (((-1)*AdoQry_Body.fieldbyname('moRequestqty').asfloat)>AdoQry_Body.fieldbyname('MoRealqty').asfloat)
     then
    begin
      DispInfo('冲销的数量不能大于累计领料数量!',1);
      dbgrideh.SetFocus ;
      abort;
    end;

    if AdoQry_Body.fieldbyname('moRequestqty').asfloat>AdoQry_Body.fieldbyname('onhandInv').asfloat then
    begin
      DispInfo('当前可用库存是:'+AdoQry_Body.fieldbyname('onhandInv').asstring,1);
      dbgrideh.SetFocus ;
      abort;
    end;
  end;
end;

procedure TFrm_Sfc_MnRequest_B1.DBGridEhKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
var
  tmp_WhCode,tmp_WhPositionCode:string;
begin
 // inherited;
  if key=vk_return then
    keybd_event(vk_tab,vk_tab,0,0);
    if (AdoQry_Body.State in [dsEdit, dsInsert]) and (key=vk_F9) then
    begin
      tmp_WhCode:=getCode(cmbbx_WhCode.text);
      tmp_WhPositionCode:=getCode(cmbbx_WhPositionCode.text);
      AdoQry_Body.fieldbyname('Batchno').asstring:=BatchHint(AdoQry_tmp.Connection,AdoQry_Body.fieldbyname('ItemCode').asstring,'',tmp_WhCode,tmp_WhPositionCode);
    end;
end;

procedure TFrm_Sfc_MnRequest_B1.AdoQry_BodyBeforePost(DataSet: TDataSet);
var
  tmp_WhCode,tmp_WhPositionCode:string;
begin
  inherited;
  if AdoQry_Body.fieldbyname('moRequestqty').asstring='' then
     AdoQry_Body.fieldbyname('moRequestqty').asstring:='0';
   //进行同向检验及数量库存检验
  if (AdoQry_Body.fieldbyname('moRequestqty').asfloat<>0)  then
  begin
    checkbodyIOType;
    checkcoCurrentqty;
  end;

  if (AdoQry_SwAp.State in [dsBrowse]) and (AdoQry_Body.fieldbyname('alterNative').asinteger=1) then
  begin
    AdoQry_Body.fieldbyname('moRequestqty').asfloat:=oldbodymoRequestqty;
  end;

  if (AdoQry_Body.fieldbyname('alterNative').asinteger<>1) and
     (AdoQry_Body.fieldbyname('alterNative').asinteger<>2) 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;

    if (BatchCtrl(AdoQry_tmp,AdoQry_Body.fieldbyname('ItemCode').asstring)) and
        ((AdoQry_Body.fieldbyname('moRequestqty').asstring<>'0') and
        (AdoQry_Body.fieldbyname('moRequestqty').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
          tmp_WhCode:=getCode(cmbbx_WhCode.text);
          tmp_WhPositionCode:=getCode(cmbbx_WhPositionCode.text);
          //批次库存控制
          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
    else
    begin
      AdoQry_Body.fieldbyname('Batchno').asstring:='';
    end;
  end;
end;

procedure TFrm_Sfc_MnRequest_B1.DBGridEhColExit(Sender: TObject);
var
  tmp_WhCode,tmp_WhPositionCode:string;
begin
  inherited;
  if (AdoQry_Body.State in [dsEdit, dsInsert])
  and (dbgrideh.SelectedField.fieldName='moRequestqty')
  then
  begin
    checkbodyIOType;
    checkcoCurrentqty;
  end;

  if (AdoQry_Body.State in [dsEdit, dsInsert])
  and (dbgrideh.SelectedField.fieldName='Batchno')
  then
  begin
    if AdoQry_Body.fieldbyname('alterNative').asinteger=1 then
    begin
      DispInfo('替代虚项不能录入批次号!',1);
      AdoQry_Body.fieldbyname('Batchno').asstring:='';
      dbgrideh.SetFocus;
      abort;
    end;
    if AdoQry_Body.fieldbyname('alterNative').asinteger=2 then
    begin
      DispInfo('结构虚项不能录入批次号!',1);
      AdoQry_Body.fieldbyname('Batchno').asstring:='';
      dbgrideh.SetFocus;
      abort;
    end;

    if (not BatchCtrl(AdoQry_tmp,AdoQry_Body.fieldbyname('ItemCode').asstring)) then
    begin
      if  (dbgrideh.SelectedField.Value<>'') then
      begin
        DispInfo('该物料不受批次控制,不能录入批次号',1);
        dbgrideh.setfocus;
        abort;
      end
    end;

    if (BatchCtrl(AdoQry_tmp,AdoQry_Body.fieldbyname('ItemCode').asstring)) and
       ((AdoQry_Body.fieldbyname('moRequestqty').asstring<>'0') and
        (AdoQry_Body.fieldbyname('moRequestqty').asstring<>''))  then
    begin
      if  (dbgrideh.SelectedField.Value='') or
          (dbgrideh.SelectedField.Value=Null) then
      begin
        DispInfo('请录入批次号',1);
        dbgrideh.setfocus;
        abort;
      end

⌨️ 快捷键说明

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