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

📄 unitstockin.pas

📁 仓储系统
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  //
  with ADOQuery_sql do
  begin
    close;
    sql.Clear;         // and (mate_class between ''101'' and ''606'' )
    sql.Add('select * from mate_basic where (mate_code='''+trim(edtWlbm.text)+''') and (mate_class between ''101'' and ''606'' )');
    Open;
  end;
  if ADOQuery_sql.recordcount>0 then
  begin
    edtWlmc.text:=trim(ADOQuery_sql.fieldByName('Mate_Name').asstring);
    edtType.text:=trim(ADOQuery_sql.fieldByName('Mate_Type').asstring);
    edtPrice.text:=trim(ADOQuery_sql.fieldByName('Mate_Price').asstring);
    edtStockNum.text:=trim(ADOQuery_sql.fieldByName('Stoc_Amount').asstring);
    edtStockZJ.text:=trim(ADOQuery_sql.fieldByName('Mate_TotalPrice').asstring);
  end else
  begin
    application.messagebox('        基础物料中不存在该物料编码,      '#13#10'或该物料不是外购件,请重新输入!','提示',mb_ok+mb_iconwarning);
    edtWlbm.text:='';
    edtWlbm.setfocus;
    exit;
  end;    
end;

procedure TfrmStockIn.FormCreate(Sender: TObject);
var
  i:integer;
begin
  with ADOQuery_sql do
  begin
    //添加部门代码
    close;
    sql.Clear;
    sql.add('select * from Department order by Dept_id');
    open;
    setlength(listDept,recordcount);
    cbbDept.Items.clear;
    for i:=0 to recordcount - 1 do
    begin
      listDept[i]:=fieldbyname('Dept_id').asstring;
      cbbDept.items.Add(listDept[i]+' '+fieldbyname('Dept_name').asstring);
      next;
    end;
    //添加供应商代码
    close;
    sql.Clear;
    sql.add('select * from GysArchives order by Gys_code');
    open;
    setlength(listGys,recordcount);
    cbbGys.Items.clear;
    for i:=0 to recordcount - 1 do
    begin
      listGys[i]:=fieldbyname('Gys_code').asstring;
      cbbGys.items.Add(listGys[i]+' '+fieldbyname('Gys_name').asstring);
      next;
    end;
    //添加库房代码
    close;
    sql.Clear;
    sql.add('select * from StoreRoom order by Storeroom_zip');
    open;
    setlength(listKf,recordcount);
    cbbKf.Items.clear;
    for i:=0 to recordcount - 1 do
    begin
      listKf[i]:=fieldbyname('Storeroom_zip').asstring;
      cbbKf.items.Add(listKf[i]+' '+fieldbyname('Storeroom_name').asstring);
      //cbbKf.items.Add(listKfmc[i]);
      next;
    end;
    //添加库位代码-----库房失去焦点时,再加入库位数据
    {close;
    sql.Clear;
    sql.add('select * from Storeposition order by Storeroom_zip,Storeplace_zip');
    open;
    setlength(listKw,recordcount);
    cbbKw.Items.clear;
    for i:=0 to recordcount - 1 do
    begin
      listKw[i]:=fieldbyname('Storeplace_zip').asstring;
      cbbKw.items.Add(listKw[i]+' '+fieldbyname('Storeplace_name').asstring);
      next;
    end;   }
  end;
  //dtpRk.Date:=now;
end;

procedure TfrmStockIn.dsCgRkDataChange(Sender: TObject; Field: TField);
var
  str:string;
  str_1:string;
  i:integer;
begin
//----------Gys -----------Dept_id
  edtRkdh.text:=dm.qry_CgRk.fieldbyname('In_Bill').asstring;
  edtHtbh.text:=dm.qry_CgRk.fieldbyname('Pr_No').asstring;
  edtJhbh.text:=dm.qry_CgRk.fieldbyname('Plan_id').asstring;

  edtwlbm.text:=dm.qry_CgRk.fieldbyname('Mate_Code').asstring;
  edtWlmc.text:=dm.qry_CgRk.fieldbyname('Mate_Name').asstring;
  edtType.text:=dm.qry_CgRk.fieldbyname('Mate_Type').asstring;

  if dm.qry_CgRk.fieldbyname('In_Date').IsNull then
     dtpRk.DateTime:=now
  else
     dtpRk.date:=dm.qry_CgRk.fieldbyname('In_Date').asdatetime;

  edtStockNum.text:=dm.qry_CgRk.fieldbyname('Stoc_Amount').asstring;
  edtStockZJ.text:=dm.qry_CgRk.fieldbyname('Mate_TotalPrice').asstring;

  edtNum.text:=dm.qry_CgRk.fieldbyname('In_Amount').asstring;
  edtPrice.text:=dm.qry_CgRk.fieldbyname('In_Price').asstring;
  edtTotalPrice.text:=dm.qry_CgRk.fieldbyname('In_Zj').asstring;

  edtJsr.text:=dm.qry_CgRk.fieldbyname('In_man').asstring;
  edtJyr.text:=dm.qry_CgRk.fieldbyname('Exam_man').asstring;
  edtZdr.text:=dm.qry_CgRk.fieldbyname('Oper_id').asstring;
  edtBz.text:=dm.qry_CgRk.fieldbyname('Rk_memo').asstring;
  //---------部门-----------------------
  cbbDept.itemindex:=-1;
  str:=DM.qry_CgRk.FieldByName('Dept_id').asstring;
  if high(listDept)>=0 then
  begin
    for i:=0 to high(listDept) do
    begin
      if listDept[i]=str then
      begin
        cbbDept.itemindex:=i;
        break;
      end;
    end;
  end;
  //---------供应商-----------------------
  cbbGys.itemindex:=-1;
  str:=DM.qry_CgRk.FieldByName('gys').asstring;
  if high(listGys)>=0 then
  begin
    for i:=0 to high(listgys) do
    begin
      if listgys[i]=str then
      begin
        cbbGys.itemindex:=i;
        break;
      end;
    end;
  end;
  //---------库房-----------------------
  cbbKf.itemindex:=-1;
  str:=DM.qry_CgRk.FieldByName('KfNo').asstring;
  if high(listKf)>=0 then
  begin
    for i:=0 to high(listKf) do
    begin
      if listKf[i]=str then
      begin
        cbbKf.itemindex:=i;
        break;
      end;
    end;
  end;
  cbbKf.OnExit(sender);
  //---------库位-----------------------
  //这个地方还要修改,就是库房失去焦点时,库位的值不能正常显示
  cbbKw.itemindex:=-1;
  str:=DM.qry_CgRk.FieldByName('KwNo').asstring;
  if high(listKw)>=0 then
  begin
    for i:=0 to high(listKw) do
    begin
      if listKw[i]=str then
      begin
        cbbKw.itemindex:=i;
        break;
      end;
    end;
  end;
  //
  if dm.qry_CgRk.fieldbyname('In_Type').asstring='CGR' then
  begin
    lblLb.caption:='采购入库';
    //lblLb.caption:=dm.qry_CgRk.fieldbyname('InOut_ClassName').asstring;
  end;

  //库存数量、库存总价--这里的代码影响基础物料打开后的数据显示
end;

procedure TfrmStockIn.cbbKwEnter(Sender: TObject);
var
  i:integer;
  str:string;
begin
  {
  if cbbkf.ItemIndex=-1 then
  begin
    cbbkw.clear;
    exit;
  end;
  //
  with ADOQuery_sql do
  begin
   str:='select Storeplace_zip,Storeplace_name from storeposition where ltrim(rtrim(Storeroom_zip))='''+
         listkf[cbbkf.ItemIndex]+''''+' order by Storeplace_zip';
      close;
      SQL.clear;
      sql.add(str);
      open;
      setlength(listkw,recordcount);
      setlength(listkwmc,recordcount);
      cbbkw.Items.clear;
      //填充库位的下拉组合框
      for i:=0 to recordcount - 1 do
      begin
        listkw[i]:=fieldbyname('Storeplace_zip').asstring;
        listkwmc[i]:=fieldbyname('Storeplace_name').asstring;
        cbbkw.items.Add(listkw[i]+' '+fieldbyname('Storeplace_name').asstring);
        next;
      end;//end for
  end;//end with
  }
end;

procedure TfrmStockIn.cbbKfExit(Sender: TObject);
var
  s_kf:string;
  i:integer;
begin
  if cbbkf.text='' then begin
    cbbKw.items.Clear;
    cbbKw.Text:='';
    exit;
  end;
  if btnCancel.Focused then
  begin
    btnCancel.onclick(sender);
    exit;
  end;
  if btnClose.focused   then
  begin
     btnClose.OnClick(Sender);
     exit;
  end;
  //
  with ADOQuery_sql do
  begin
    close;
    sql.clear;
    sql.add('select * from Storeposition where Storeroom_zip='+quotedstr(copy(cbbkf.text,1,2)));
    sql.add('order by StorePlace_zip');
    open;
    setlength(listKw,recordcount);
    cbbKw.Items.clear;
    for i:=0 to recordcount - 1 do
    begin
      listKw[i]:=fieldbyname('Storeplace_zip').asstring;
      cbbKw.items.Add(listKw[i]+' '+fieldbyname('Storeplace_name').asstring);
      next;
    end;
  end;
end;

procedure TfrmStockIn.edtRkdhExit(Sender: TObject);
begin
  if dm.qry_CgRk.Locate('In_Bill',edtRkdh.text ,[loCaseInsensitive]) then
  begin
    application.MessageBox('注意:'+#13+'        入库单号重复,请重新输入!','警告',mb_ok+mb_iconwarning);
    edtRkdh.text:='';
    clear(frmStockIn);
    edtRkdh.SetFocus;
    exit;
  end;
end;

procedure TfrmStockIn.btnGzClick(Sender: TObject);
var
  seltotal,i:integer;
  myprocess:Tfrmprocess;
  //strdjh:string;
begin
  //根据入库单号、入库标志可直接判断出该单据是否已经过帐
  with dm.qry_CgRkGz do
  begin
    close;
    sql.Clear;
    sql.Add('select * from mate_CgRk where (in_bill='''+trim(edtRkdh.text)+''')  and (in_post=''Y'') ');
    open;
  end;
  if dm.qry_CgRkGz.recordcount>0 then
  begin
    application.MessageBox('该单据已经过帐!','警告',mb_ok+mb_iconwarning);
    exit;
  end else     //下面是没有过帐
  begin
     //用1个存储过程进行过帐,更新对应的入库单号的数量、核算价格、和入库单的过帐标志
     if not btnadd.Enabled then
     begin
      application.MessageBox('注意:'+#13#10+'  请先保存或取消当前未完成的工作!','警告',mb_ok+mb_iconwarning);
      exit;
     end;
     seltotal:=DBGrid1.SelectedRows.Count;

     if seltotal=0 then
     begin
       application.MessageBox('注意:'+#13#10+'  请先选择要过帐的单据记录!','提示',mb_ok+mb_iconinformation);
       exit;
     end else//选项不为空
     begin
       //显示进度条
       myprocess:=Tfrmprocess.create(application);
       try
         myprocess.show;
         myprocess.setposition(0);
         //获得选中的记录
         for i:=0 to seltotal - 1 do
         begin
           DM.qry_CgRk.Bookmark:=DBGrid1.SelectedRows.Items[i];
           //-------------------过帐--------------------------
           with dm.sp_CgRkGz do
           begin
             dm.sp_CgRkGz.ProcedureName:='Cg_Rkgz;1';
             Parameters.Refresh;
             Parameters.ParamByName('@Rkdh').value:=edtRkdh.Text;
             ExecProc;
           end;
           myprocess.closeprocess;
           DBGrid1.SelectedRows.Clear;
           DM.qry_CgRk.close;
           DM.qry_CgRk.open;
           application.MessageBox('所选入库单已全部过帐成功!!','提示',mb_ok+mb_iconinformation);
         end ;//end for
       finally
         myprocess.Free;
       end;      //end try
     end;
  end;
  dm.qry_CgRk.Close;
  dm.qry_CgRk.Open;
end;

procedure TfrmStockIn.edtPriceExit(Sender: TObject);
begin
  edtTotalPrice.text:=FloatToStr(StrToFloat(edtNum.text)*StrToFloat(edtPrice.text));
  edtTotalPrice.enabled:=false;
  edtTotalPrice.color:=clInfoBk;
end;

procedure TfrmStockIn.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  //下面的代码是过帐代码为N,即没有过帐的记录显示绿色
  if trim(dm.qry_CgRk.FieldByName('In_Post').AsString)='N' then
  begin
    DBGrid1.Canvas.Font.Color:=clGreen;
    DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
  end;
  //总价<0的记录,是为冲红而设置的,显示为红色
  if trim(dm.qry_CgRk.FieldByName('In_Zj').AsString)<'0' then
  begin
    DBGrid1.Canvas.Font.Color:=clRed;
    DBGrid1.Canvas.Brush.Color:=clInfoBk;
    DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
  end;
  //以突出显示当前选中的行
  if ((state=[gdSelected]) or (State=[gdSelected,gdFocused])) then
  begin
    DBGrid1.Canvas.Brush.Color:=clSkyBlue;
    DBGrid1.Canvas.Pen.Mode:=pmmask;
    DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
  end;

{  case datacol mod 2=0 of
     true: DBGrid1.Canvas.Brush.Color:=clBlue;

     false:DBGrid1.Canvas.Brush.Color:=clAqua;
  end;
  DBGrid1.Canvas.pen.Mode:=pmMask;
  DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);       }
end;

procedure TfrmStockIn.FormShow(Sender: TObject);
var
  str:string;
begin
  str:=' select a.Xh,a.In_Bill,a.Pr_No,a.Plan_id,                            '+
       '          a.Mate_Code,b.Mate_Name,b.Mate_Type,                       '+
       '          a.Gys,a.Dept_id,a.In_Date,                                 '+
       '          a.KfNo,a.KwNo,a.In_Type,                                   '+
       '          c.PlanNum,c.Out_Sum,c.In_Sum,                              '+
       '          b.Stoc_Amount,b.Mate_TotalPrice,                           '+
       '          a.In_Amount,a.In_Price,a.In_Zj,a.In_Post,                  '+
       '          a.In_man,a.Exam_man,a.Oper_id,a.Rk_memo                    '+
       '      from Mate_CgRk a                                               '+
       '      left outer join Mate_Basic b on a.Mate_Code=b.Mate_Code        '+
       '      left outer join PlanNum c on a.Plan_id=c.PlanNo order by a.Xh  ';
  with dm.qry_CgRk do
  begin
    close;
    sql.Clear;
    sql.Add(str);
    open;
  end;
end;

//我想将入库数量、单价字段的内容显示颜色
procedure TfrmStockIn.DBGrid1DrawDataCell(Sender: TObject;
  const Rect: TRect; Field: TField; State: TGridDrawState);
begin
  if dm.qry_CgRk.FieldByName('In_Amount').AsFloat > 10 then
    DBGrid1.Canvas.Font.Color := clRed;
   DBGrid1.DefaultDrawDataCell(Rect, Field, State);
end;

procedure TfrmStockIn.edtNumExit(Sender: TObject);
begin
  if btncancel.Focused then
  begin
    btncancel.OnClick(sender);
    exit;
  end;
  if btnclose.Focused then
  begin
    btnclose.OnClick(sender);
    exit;
  end;
  //
  if edtNum.text='0' then
  begin
    application.messagebox('本系统不允许零入库!','提示',mb_ok+mb_iconwarning);
    edtNum.setfocus;
    exit;
  end;
  //
end;

end.


⌨️ 快捷键说明

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