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

📄 unit_mater_outcard.pas

📁 此代码为企业原料管理代码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
//****************************************//
//修改对应入库记录的 剩余库存 为最新库存量 //领料标识 为 true
  with Qry_Exe do
  begin
    close;
    sql.Clear;
    sql.Add('Update 原材料台帐 set 剩余库存 = (剩余库存*1000 - :v_Outwt)/1000 ,领料标识 = :v_IFFirstOut ');
    sql.Add('where 出入标识= :v_IfOut and 材料名称= :v_mater and 领料单号= :v_OutCardNum and 单价 = :v_per ');
    parambyname('v_IFFirstOut').asboolean:=true;
    parambyname('v_Outwt').asfloat:=strtofloat(DBEdit_OutWt.text)*1000;
    parambyname('v_IfOut').asboolean:=false;
    parambyname('v_mater').asstring:=DBedit_Mater.text;
    parambyname('v_OutCardNum').asstring:=Form_Mater_OutFromInCard.Qry_OutFromInCard.fieldbyname('领料单号').asstring;
    parambyname('v_Per').asfloat:=Form_Mater_OutFromInCard.Qry_OutFromInCard.fieldbyname('单价').asfloat;
    execsql;
  end; //with
 //领料日期前的库存
   with Qry_Exe do
  begin
    close;
    sql.Clear;
    sql.Add('select sum(入库数量),sum(出库数量) from 原材料台帐  ');
    sql.Add('where 日期 <= :v_date  and 材料名称= :v_mater and 领料单号= :v_OutCardNum  and 单价 = :v_per ');
    parambyname('v_date').asdatetime:=strtodate(DBEdit_Date.text);
    parambyname('v_mater').asstring:=Form_Mater_OutFromInCard.Qry_OutFromInCard.fieldbyname('材料名称').asstring;
    parambyname('v_OutCardNum').asstring:=Form_Mater_OutFromInCard.Qry_OutFromInCard.fieldbyname('领料单号').asstring;
    parambyname('v_Per').asfloat:=Form_Mater_OutFromInCard.Qry_OutFromInCard.fieldbyname('单价').asfloat;
   // parambyname('v_IfOut').asboolean:=true;
    open;
    f_SelfStock:=fields[0].asfloat-fields[1].asfloat;
  end; //with

  with Qry_exe do
  begin
    close;
    sql.Clear;
    sql.Add('update 原材料台帐 set 库存 = :v_SelfStock ');
    sql.Add('where  标识号 = :v_id');
    parambyname('v_SelfStock').asfloat:=strtofloat(formatfloat('0.000',f_SelfStock));
    parambyname('v_id').asinteger:=strtoint(DBEdit_ID.text);
    execsql;
  end; //with
 //  showmessage(Form_Mater_OutFromInCard.Qry_OutFromInCard.fieldbyname('领料单号').asstring);
//修改其后的库存
 with Qry_exe do
  begin
    close;
    sql.Clear;
    sql.Add('update 原材料台帐 set 库存 =(库存*1000 - :v_Rewt)/1000 , 最后领料标识 = :v ');
    sql.Add('where 日期>:riqi and 出入标识= :v_IfOut and 材料名称 = :v_mater and  领料单号 = :v_outCardNum  and 单价 = :v_per');//  and 出入标识 = :v_IfOut ');
     parambyname('v_Rewt').asfloat:=strtofloat(DBEdit_OutWt.text)*1000;
    parambyname('v_mater').asstring:=DBEdit_Mater.text;//Form_Mater_OutFromInCard.Qry_OutFromInCard.fieldbyname('材料名称').asstring;
    parambyname('v_OutCardNum').asstring:=Form_Mater_OutFromInCard.Qry_OutFromInCard.fieldbyname('领料单号').asstring;
    parambyname('v_Per').asfloat:=Form_Mater_OutFromInCard.Qry_OutFromInCard.fieldbyname('单价').asfloat;
    parambyname('v_IfOut').asboolean:=true;
    parambyname('v').asboolean:=false;
    parambyname('riqi').asdatetime:=strtodate(DBEdit_Date.text);
    execsql;
    end;

//填写最后领料标识(True)  找到库存最小的
  with Qry_exe do
  begin
    close;
    sql.Clear;
    sql.Add('update 原材料台帐 set 最后领料标识 = :v_LastOutCardFlag');
    sql.Add('where 材料名称 = :v_mater and  领料单号 = :v_outCardNum  and 单价 = :v_per  ');
    parambyname('v_LastOutCardFlag').asboolean:=false;
    parambyname('v_mater').asstring:=Form_Mater_OutFromInCard.Qry_OutFromInCard.fieldbyname('材料名称').asstring;
    parambyname('v_OutCardNum').asstring:=Form_Mater_OutFromInCard.Qry_OutFromInCard.fieldbyname('领料单号').asstring;
    parambyname('v_Per').asfloat:=Form_Mater_OutFromInCard.Qry_OutFromInCard.fieldbyname('单价').asfloat;
    execsql;

    close;
    sql.Clear;
    sql.Add('select * from 原材料台帐 ');
    sql.Add('where 材料名称 = :v_mater and  领料单号 = :v_outCardNum  and 单价 = :v_per  ');
    sql.Add('order by 库存  ');
    parambyname('v_mater').asstring:=Form_Mater_OutFromInCard.Qry_OutFromInCard.fieldbyname('材料名称').asstring;
    parambyname('v_OutCardNum').asstring:=Form_Mater_OutFromInCard.Qry_OutFromInCard.fieldbyname('领料单号').asstring;
    parambyname('v_Per').asfloat:=Form_Mater_OutFromInCard.Qry_OutFromInCard.fieldbyname('单价').asfloat;
    open;
    n_id:=fieldbyname('标识号').asinteger;

    close;
    sql.Clear;
    sql.Add('update 原材料台帐 set 最后领料标识 = :v_LastOutCardFlag ');
    sql.Add('where  标识号 = :v_id');
    parambyname('v_LastOutCardFlag').asboolean:=true;
    parambyname('v_id').asinteger:=n_id;
    execsql;
  end; //with

//低于库存报警
  with qry_exe do
  begin
    close;
    sql.Clear;
    sql.Add('select * from 原材料字典   ');
    sql.Add('where 材料名称 = :v_mater   ');
    sql.Add('and 材料名称 = :v_mater   ');
    parambyname('v_mater').asstring:=DBEdit_Mater.text;
    open;
    f_warnLim:=fieldbyname('库存下限').asfloat;
  end;//with

  with qry_exe do
  begin
    close;
    sql.Clear;
    sql.Add('select sum(库存) from 原材料台帐   ');
    sql.Add('where 最后领料标识 = :v_lastOutCardFlag   ');
    sql.Add('and 材料名称 = :v_mater   ');
    parambyname('v_lastOutCardFlag').asboolean:=true;
    parambyname('v_mater').asstring:=DBEdit_Mater.text;
    open;
    if fields[0].asfloat <= f_warnLim then
    begin
      showmessage(DBEdit_Mater.text+'的库存量低于库存下限!'+#13+#13+'请尽快采购!');
    end;
  end;// with

//刷新主界面表格
  with  Form_Mater_Main.Qry_Main do
  begin
    close;
    sql.Clear;
    sql.Add('select * from 原材料台帐 where 材料名称 = :v_mater ');
    sql.Add('and 领料单号 = :v_OutCardNum  and 单价 = :v_per');
    sql.Add('order by 库存 Desc ');
    parambyname('v_mater').asstring:=DBEdit_mater.text;
    parambyname('v_OutCardNum').asstring:=DBEdit_OutCardNum.text;
    parambyname('v_per').asfloat:=strtofloat(DBEdit_Per.Text);
    open;
  end;//with

//为下一次填写做准备
  Form_Mater_OutFromInCard.If_First:=true;
  Tab_OutCard.append;
  DBEdit_Date.text:=s_curdate;
  Edit_Index.text:='';
  perform(WM_NEXTDLGCTL,0,0);


end;

procedure TForm_Mater_OutCard.DBEdit_OutWtEnter(Sender: TObject);
begin
  TEdit(Sender).color:=claqua;

//检查条件
  if DBEdit_Mater.text ='' then
  begin
    showmessage('请填写材料名称!'+#13+#13+'请按照顺序填写各栏目!');
    exit;
  end; //if

//读适当的入库或出库记录  并显示
  if  Form_Mater_OutFromInCard.If_First then
  begin
    with Form_Mater_OutFromInCard.Qry_OutFromInCard do
    begin
      close;
      sql.clear;
      sql.add('select * from 原材料台帐 where 材料名称 = :v_mater ');
      sql.add('and 库存 > 0 and 最后领料标识 = :v_lastOutCardFlag ');
      parambyname('v_mater').asstring:=DBEdit_Mater.text;
      parambyname('v_lastOutCardFlag').asboolean:=true;
      open;
    end;//with
  end; //if

  Form_Mater_OutFromInCard.show;
end;

procedure TForm_Mater_OutCard.DBEdit_DateEnter(Sender: TObject);
begin
  TEdit(Sender).color:=claqua;
  DBEdit_Date.Text:=s_curdate;
end;

procedure TForm_Mater_OutCard.FormCreate(Sender: TObject);
begin
  s_curdate:=datetostr(date);
end;

procedure TForm_Mater_OutCard.BitBtn_ExitClick(Sender: TObject);
begin
  close;
end;

procedure TForm_Mater_OutCard.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Tab_OutCard.Cancel;
  perform(WM_NEXTDLGCTL,0,0);
  
end;

procedure TForm_Mater_OutCard.DBEdit_DateExit(Sender: TObject);
begin
  TEdit(Sender).color:=clwindow;
  //修正日期
  s_curdate:=DBEdit_Date.text;

end;

procedure TForm_Mater_OutCard.DBEdit_OutWtExit(Sender: TObject);
begin
  TEdit(Sender).color:=clwindow;
  Form_Mater_OutFromInCard.close;
end;

procedure TForm_Mater_OutCard.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   try
   if ((Key>57) and (Key<48)) or ((Key<96) and (Key>110)) then
  //exit;
 // if Key=190 then
  exit;
  except
  end;
 end;


procedure TForm_Mater_OutCard.DBEdit_DepEnter(Sender: TObject);
begin
 frmCommQueryID.top:=200;
  frmCommQueryID.left:=220;
  //Table3.Close;
  TDBEdit(Sender).color:=claqua;
        frmCommQueryID.PageControl1.ActivePageIndex:=3;
        frmCommQueryID.ActiveControl:=frmCommQueryID.DBGrid1;
        if frmCommQueryID.showmodal = mrok then
        begin
          DBEdit_Dep.setfocus;
          DBEdit_Dep.text:=frmCommQueryID.query2.fieldbyname('workshopname').asstring;

        end; //if
end;

end.

⌨️ 快捷键说明

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