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

📄 unit_mater_main.pas

📁 此代码为企业原料管理代码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit Unit_Mater_Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ImgList, ComCtrls, ToolWin, Menus, Grids, DBGrids, Db, DBTables, StdCtrls,
  Buttons, ExtCtrls;

type
  TForm_Mater_Main = class(TForm)
    Qry_Main: TQuery;
    DS_Main: TDataSource;
    MainMenu1: TMainMenu;
    CoolBar1: TCoolBar;
    ToolBar1: TToolBar;
    ToolButton_InCard: TToolButton;
    ToolButton_OutCard: TToolButton;
    ImageList_MenuIO: TImageList;
    ToolButton_ModCard: TToolButton;
    N1: TMenuItem;
    N_InCard: TMenuItem;
    N_OutCard: TMenuItem;
    Panel1: TPanel;
    Edit_index: TEdit;
    BitBtn_Show: TBitBtn;
    Edit_mater: TEdit;
    Panel2: TPanel;
    Panel3: TPanel;
    StatusBar1: TStatusBar;
    Timer1: TTimer;
    N4: TMenuItem;
    N_ModCard: TMenuItem;
    N_DelCard: TMenuItem;
    N7: TMenuItem;
    N_QryIO: TMenuItem;
    N9: TMenuItem;
    N14: TMenuItem;
    N_Exit: TMenuItem;
    ToolButton_Exit: TToolButton;
    ToolButton1: TToolButton;
    Qry_Exe: TQuery;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ComboBox_Indate: TComboBox;
    Panel5: TPanel;
    N_StockView: TMenuItem;
    N3: TMenuItem;
    DBGrid1: TDBGrid;
    N6: TMenuItem;
    N8: TMenuItem;
    N16: TMenuItem;
    N_Sum: TMenuItem;
    ToolButton5: TToolButton;
    ToolButton7: TToolButton;
    ToolButton4: TToolButton;
    ToolButton6: TToolButton;
    ToolButton8: TToolButton;
    ComboBox_Per: TComboBox;
    Panel4: TPanel;
    N12: TMenuItem;
    N13: TMenuItem;
    ToolButton9: TToolButton;
    N15: TMenuItem;
    N_Auto: TMenuItem;
    ToolButton10: TToolButton;
    N20: TMenuItem;
    N2: TMenuItem;
    Qry_gailastflag: TQuery;
    Qry_lastture: TQuery;
    procedure FormCreate(Sender: TObject);
    procedure BitBtn_ShowClick(Sender: TObject);
    procedure N_InCardClick(Sender: TObject);
    procedure N_OutCardClick(Sender: TObject);
    procedure N_ExitClick(Sender: TObject);
    procedure N_DelCardClick(Sender: TObject);
    procedure N_ModCardClick(Sender: TObject);
    procedure Edit_materChange(Sender: TObject);
    procedure N_QryIOClick(Sender: TObject);
    procedure N_StockViewClick(Sender: TObject);
    procedure N_DicMaterClick(Sender: TObject);
    procedure N_SumClick(Sender: TObject);
    procedure N16Click(Sender: TObject);
    procedure N8Click(Sender: TObject);
    procedure Qry_MainAfterScroll(DataSet: TDataSet);
    procedure N13Click(Sender: TObject);
    procedure ComboBox_IndateChange(Sender: TObject);
    procedure N19Click(Sender: TObject);
    procedure N_InitClick(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure Edit_indexEnter(Sender: TObject);
    procedure Edit_indexExit(Sender: TObject);
    procedure Edit_indexChange(Sender: TObject);
    procedure N_AutoClick(Sender: TObject);
    procedure N18Click(Sender: TObject);
    procedure N21Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form_Mater_Main: TForm_Mater_Main;
  d_LimDate:Tdate;

implementation

uses Unit_Mater_InCard, Unit_Mater_OutCard, Unit_Mater_Qry,
  Unit_Mater_InMod, Unit_Mater_OutMod, Unit_Mater_StockView, Unit_Mater_Dic,
  Unit_Mater_SumCfg, Unit_Mater_PrtIO, Unit_Mater_AboutBox,IniFiles,
  Unit_Mater_SumCancel, Unit_Mater_SysPass, Unit_Tip, Unit_Rubb_AutoCard,
  Unit_Rubb_QryProcCard, Unit_mater_SumBrowse, Unit_Rubb_Main,
  Unit_Mater_jiezhangmima, UnitDM, Unit_Mater_tishi;

{$R *.DFM}

procedure TForm_Mater_Main.FormCreate(Sender: TObject);
var
  JLSumSys:TIniFile;
begin
//初始化数值
  DBGrid1.Align:=alClient;
  StatusBar1.Panels[0].Text:='今天 '+formatdatetime('yyyy"年"m"月"d"日" dddd',date);
  d_LimDate:=strtodate('00-10-28');

//读出Ini文件 结账日期
    JLSumSys:=TIniFile.Create('Jl2000.ini');
    d_LimDate:=JLSumSys.ReadDate('SumDate','date' , 00-1-1);
    JLSumSys.free;

end;

procedure TForm_Mater_Main.BitBtn_ShowClick(Sender: TObject);
var
  s_OutCardNum,s_Indate:string;
begin
//检查填写材料名称栏
  if Edit_mater.text = '' then
  begin
    showmessage('请填写材料名称栏!');
    exit;
  end; //if

//检查下拉列表框
  if ComboBox_Indate.text = '' then
  begin
    showmessage('该原材料没有库存!');
    exit;
  end;

  s_InDate:=ComboBox_Indate.text;
  s_OutCardNum:='123456';  //6位
  s_OutCardNum[1]:=s_InDate[1];
  s_OutCardNum[2]:=s_InDate[2];
  s_OutCardNum[3]:=s_InDate[4];
  s_OutCardNum[4]:=s_InDate[5];
  s_OutCardNum[5]:=s_InDate[7];
  s_OutCardNum[6]:=s_InDate[8];

//调出记录
  with 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:=edit_mater.text;
    parambyname('v_OutCardNum').asstring:=s_OutCardNum;
    parambyname('v_per').asfloat:=strtofloat(ComboBox_Per.text);
    open;
    if recordcount = 0 then
    close;

  end; //with

  perform(WM_NEXTDLGCTL,0,0);

end;

procedure TForm_Mater_Main.N_InCardClick(Sender: TObject);
begin
  Form_Mater_InCard.Tab_InCard.open;
  Form_Mater_InCard.Tab_InCard.append;
  Form_Mater_InCard.showmodal;
end;

procedure TForm_Mater_Main.N_OutCardClick(Sender: TObject);
begin
  Form_Mater_OutCard.Tab_OutCard.open;
  Form_Mater_OutCard.Tab_OutCard.append;

  with Form_Mater_OutCard do
  begin
    if (s_curdate = '') then
      DBEdit_Date.text := datetostr(date)
    else
      DBEdit_Date.text := s_curdate;
  end; //with

  Form_Mater_OutCard.showmodal;

end;

procedure TForm_Mater_Main.N_ExitClick(Sender: TObject);
begin
Qry_Main.Active:=False;
Qry_Exe.Active:=False;
close;
end;

procedure TForm_Mater_Main.N_DelCardClick(Sender: TObject);
var
  n_id:integer;
  s_mater, s_OutCardNum :string;
  f_per:real;
begin
  if not Qry_Main.Active then
  begin
    showmessage('请先调出某个原材料的台帐');
    exit;
  end; //if
  //判断日期是否小于等于结账日期
  if Qry_Main.fieldbyname('日期').asdatetime <=dm.zdyGetmaterCheckDate then //d_LimDate then
  begin
    showmessage('不允许删除结账日期之前的记录!'+#13+#13+'上次结帐日期是:'+datetostr(dm.zdyGetmaterCheckDate));
    perform(WM_NEXTDLGCTL,0,0);
    exit;
  end;


//删除警告!
  if messagedlg('会删除该 '+Qry_Main.fieldbyname('材料名称').asstring+' 的记录 要继续吗?',mtWarning,[mbYes,mbNo],0) = mrNo then
    exit;

// 判断删除是否合理
  if not Qry_main.fieldbyname('出入标识').asboolean then  //是入库
  begin
    with Qry_exe do
    begin
      close;
      sql.Clear;
      sql.Add('select * from 原材料台帐 where 材料名称 = :v_mater ');
      sql.Add('and 领料单号 = :v_OutCardNum and 单价= :v_Per');
      parambyname('v_mater').asstring:=Qry_Main.fieldbyname('材料名称').asstring;
      parambyname('v_OutCardNum').asstring:=Qry_Main.fieldbyname('领料单号').asstring;
      parambyname('v_Per').asfloat:=Qry_Main.fieldbyname('单价').asfloat;

      open;
      if recordcount > 1 then
      begin
        showmessage('此条入库记录已经对应多条出库记录.'+#13+#13+'不能删除!');
        exit;
      end; //if
    end; //with
  end; // if

//为刷新表格记录数据
  s_mater:=Qry_Main.fieldbyname('材料名称').asstring;
  s_OutCardNum:=Qry_Main.fieldbyname('领料单号').asstring;
  f_per:=Qry_Main.fieldbyname('单价').asfloat;


//修改该记录日期以后的相关记录库存
  with Qry_exe do
  begin
    close;
    sql.Clear;
    sql.Add('update 原材料台帐 set 库存 = (库存*1000 + :v_Rewt)/1000 ');
    sql.Add('where 库存 < :v_stock and 材料名称 = :v_mater and 领料单号 = :v_outCardNum and 单价 = :v_Per ');
    parambyname('v_stock').asfloat:=Qry_Main.fieldbyname('库存').asfloat;
    parambyname('v_mater').asstring:=Qry_Main.fieldbyname('材料名称').asstring;
    parambyname('v_OutCardNum').asstring:=Qry_Main.fieldbyname('领料单号').asstring;
    parambyname('v_Rewt').asfloat:=Qry_Main.fieldbyname('出库数量').asfloat*1000;
    parambyname('v_Per').asfloat:=Qry_Main.fieldbyname('单价').asfloat;
    execsql;
  end; //with

//修改相关入库记录  剩余库存
  with Qry_exe do
  begin
    close;
    sql.Clear;
    sql.Add('update 原材料台帐 set 剩余库存 = (剩余库存*1000 + :v_Rewt)/1000 ');
    sql.Add('where 出入标识 = :v_IfOut and 材料名称 = :v_mater and 领料单号 = :v_outCardNum and 单价 = :v_Per');
    parambyname('v_Rewt').asfloat:=Qry_Main.fieldbyname('出库数量').asfloat*1000;
    parambyname('v_IfOut').asboolean:=false;
    parambyname('v_mater').asstring:=Qry_Main.fieldbyname('材料名称').asstring;
    parambyname('v_OutCardNum').asstring:=Qry_Main.fieldbyname('领料单号').asstring;
    parambyname('v_Per').asfloat:=Qry_Main.fieldbyname('单价').asfloat;
    execsql;
  end; //with

//删除该记录
  with Qry_exe do
  begin
    close;
    sql.Clear;
    sql.Add('delete from 原材料台帐 where 标识号 = :v_id ');
    parambyname('v_id').asinteger:=Qry_Main.fieldbyname('标识号').asinteger;
    execsql;
  end; //with



//修改最后领料标识的位置 先全部False 在最后一个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_Main.Qry_Main.fieldbyname('材料名称').asstring;
    parambyname('v_OutCardNum').asstring:=Form_Mater_Main.Qry_Main.fieldbyname('领料单号').asstring;
    parambyname('v_Per').asfloat:=Form_Mater_Main.Qry_Main.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_Main.Qry_Main.fieldbyname('材料名称').asstring;
    parambyname('v_OutCardNum').asstring:=Form_Mater_Main.Qry_Main.fieldbyname('领料单号').asstring;
    parambyname('v_Per').asfloat:=Form_Mater_Main.Qry_Main.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  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:=s_mater;
    parambyname('v_OutCardNum').asstring:= s_OutCardNum;
    parambyname('v_per').asfloat:=f_per;
    open;
  end;//with

end;


procedure TForm_Mater_Main.N_ModCardClick(Sender: TObject);
var
  n_id:integer;
begin
  if not Qry_Main.Active then
  begin
    showmessage('请先调出某个原材料的台帐');
    exit;
  end; //if

  //判断日期是否小于等于结账日期

⌨️ 快捷键说明

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