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

📄 unit_rubb_autocard.pas

📁 此代码为企业原料管理代码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
          sql.Add('select * from 人员登陆表 where 密码 = :p ');
          parambyname('p').asstring:=edit_p.text;
          open;
        end; //with
        fields[16].asstring:=Q1.fieldbyname('姓名').asstring;  //领料人
        sStaff:=Q1.fieldbyname('姓名').asstring;  //领料人
        fields[17].asfloat:=strtofloat(formatfloat('0.000',temWT));   //出库数量
        fields[21].asinteger:=vkuhao;   //kuhao
//      fields[19].asboolean:=false;  //领料标识
         post;
//要改
        //领料日期前的库存
   with Query2 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:=DateTimePicker1.date;
    parambyname('v_mater').asstring:=temName;
    parambyname('v_OutCardNum').asstring:=temDrawCard;
    parambyname('v_Per').asfloat:=strtofloat(formatfloat('0.00',temPer)); //单价
    //parambyname('v_IfOut').asboolean:=true;
    open;
    t_SelfStock:=fields[0].asfloat-fields[1].asfloat;
  end; //with

  with Query2 do
  begin
    close;
    sql.Clear;
    sql.Add('update 原材料台帐 set 库存 = :v_SelfStock ');
    sql.Add('where  标识号 = :v_id');
    parambyname('v_SelfStock').asfloat:=strtofloat(formatfloat('0.000',t_SelfStock));
    parambyname('v_id').asinteger:=TabIO.fields[0].asinteger;
    execsql;

  end; //with
 //  showmessage(Form_Mater_OutFromInCard.Qry_OutFromInCard.fieldbyname('领料单号').asstring);
//修改其后的库存
 with Query2 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(formatfloat('0.000',temWT*1000));//strtofloat(DBEdit_OutWt.text)*1000;
    parambyname('v_mater').asstring:=temName;
    parambyname('v_OutCardNum').asstring:=temDrawCard;
    parambyname('v_Per').asfloat:=strtofloat(formatfloat('0.00',temPer)); //单价
    parambyname('v_IfOut').asboolean:=true;
    parambyname('v').asboolean:=false;
    parambyname('riqi').asdatetime:=DateTimePicker1.date;
    execsql;
    end;

//填写最后领料标识(True)  找到库存最小的
  with Query2 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:=temName;
    parambyname('v_OutCardNum').asstring:=temDrawCard;
    parambyname('v_Per').asfloat:=strtofloat(formatfloat('0.00',temPer));//单价
    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:=temName;//材料名称
    parambyname('v_OutCardNum').asstring:=temDrawCard;//领料单号
    parambyname('v_Per').asfloat:=strtofloat(formatfloat('0.00',temPer));//单价
    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;

   // fields[20].asfloat:=strtofloat(formatfloat('0.000',(temStock - temWT)));//temStock - temWT;  //库存

//        showmessage(floattostr(temStock)+'    '+floattostr(temWT));

    //  post;
      end; //with
      end;
//第一次填写用料单
      with TabMater do
        begin
        open;
        append;
        fields[1].asinteger:=Form_Rubb_QryProcCard.Qry_QryProcCard.fieldbyname('标识号').asinteger;       //主表标识号
        fields[2].asstring:=Form_Rubb_QryProcCard.Qry_QryProcCard.fieldbyname('配方编号').asstring;        //配方编号
        fields[3].asstring:='HX'+temDrawCard;       //货源号
        fields[4].asstring:=temName;       //材料名称
        fields[5].asstring:=temDrawCard;       //领料单号
        fields[6].asfloat:=strtofloat(formatfloat('0.000',temWT));//temWT;       //领料数量
        fields[7].asfloat:=temPer;       //单价
        fields[8].asfloat:=strtofloat(formatfloat('0.00',temWT * temPer));//temWT * temPer; 金额
        fieldbyname('riqi').asdatetime:=DateTimePicker1.date;
        post;
      end; //with

      break;  //跳出

    //还要填写用料单
    end
    else
    begin //如果某条记录的库存小于领料重量
      temWT:=temWT - Qry_exe.fieldbyname('剩余库存').asfloat;//差值取另一条记录

    //第一步
    with Q1 do
    begin //修改另一条入库记录
      close;
      sql.Clear;
      sql.Add('update 原材料台帐 set 剩余库存 = :s , 领料标识 = :bT where 标识号 = :id   ');
      parambyname('s').asfloat:= 0;
      parambyname('id').asinteger:=iID;
      parambyname('bT').asboolean:=true;
      execsql;
    end; //with

    //第二步
    with Q1 do
    begin //找出该材料最后一条记录号
      close;
      sql.Clear;
      sql.Add('select * from 原材料台帐  ');
      sql.Add('where 材料名称 = :sName and 领料单号 = :card  and 最后领料标识 = :bT ');
      parambyname('sName').asstring:=temName;
      parambyname('card').asstring:=temDrawCard;
      parambyname('bT').asboolean:=true;
      open;
      iID:=fieldbyname('标识号').asinteger;
    end; //with

    with Q1 do
    begin
      close;
      sql.Clear;
      sql.Add('update 原材料台帐 set 最后领料标识 = :bF  ');
      sql.Add('where 标识号  = :id ');
      parambyname('id').asinteger:=iID;
      parambyname('bF').asboolean:=false;
      execsql;
    end; //with

    //第三步
   //自动填写 标识号 开始写同材料的另一条出库记录
    with Q1 do
    begin
      close;
      sql.Clear;
      sql.Add('select max(标识号) from 原材料台帐 ');
      open;
    end; //with

    with TabIO  do
    begin
      open;
      append;
      fields[0].asinteger:=Q1.fields[0].asinteger + 1;
      fields[1].asdatetime:=DateTimePicker1.date;
      fields[2].asboolean:=true;
      fields[3].asstring:=temName;
      fields[4].asstring:='';
//      fields[5].asstring:='生产厂家';
//      fields[6].asstring:='进货地点';
//      fields[7].asfloat:=100; //入库数量
      fields[8].asfloat:=temPer; //单价
//      fields[9].asstring:='采购员';
//      fields[10].asstring:='检验员';
//      fields[11].asfloat:=20.5;  //剩余库存
      fields[12].asboolean:=true; //最后领料标识
      fields[13].asstring:=temDrawCard; //领料单号
      if not bDrawFlag then
      fields[14].asstring:='HX'+temDrawCard;  //出库货源号
      fields[15].asstring:=Edit_dep.text;  //使用部门
      with Q1 do
      begin
        close;
        sql.Clear;
        sql.Add('select * from 人员登陆表 where 密码 = :p ');
        parambyname('p').asstring:=edit_p.text;
        open;
      end; //with
      fields[16].asstring:=Q1.fieldbyname('姓名').asstring;  //领料人
      fields[17].asfloat:=strtofloat(formatfloat('0.000',temStock));//temStock;   //出库数量
//      showmessage(floattostr(temWT));
       fields[21].asinteger:= vkuhao;//写库号
//      fields[19].asboolean:=false;  //领料标识
      fields[20].asfloat:=0;  //库存

      post;
    end; //with  此条记录的库存为零

//第二种情况之 填写用料单
    with TabMater  do
    begin
      open;
      append;
      fieldbyname('riqi').asdatetime:=DateTimePicker1.date;
      fields[1].asinteger:=Form_Rubb_QryProcCard.Qry_QryProcCard.fieldbyname('标识号').asinteger;       //主表标识号
      fields[2].asstring:=Form_Rubb_QryProcCard.Qry_QryProcCard.fieldbyname('配方编号').asstring;        //配方编号
      fields[3].asstring:='HX'+temDrawCard;       //货源号
      fields[4].asstring:=temName;       //材料名称
      fields[5].asstring:=temDrawCard;       //领料单号
      fields[6].asfloat:=strtofloat(formatfloat('0.000',temStock));//temStock;       //领料数量
      fields[7].asfloat:=temPer;       //单价
      fields[8].asfloat:=strtofloat(formatfloat('0.00',temWT * temPer));//temWT * temPer;       //金额
      post;
    end; //with

    end; // if 1
      Qry_exe.next;
    end;//while
    end; //if

    Qry_TakeCard.next;
  end; //while

  messagedlg('领料完成!'+#13+#13+'请按 "返回" 键! ', mtinformation, [mbok],0);

//自动刷新工艺卡
  Form_Rubb_QryProcCard.zdyQueryScroll;

//填写工艺卡 所缺的栏目
  fWeight:=0;
  fPrice:=0;

  Form_Rubb_Main.Qry_MaterCard.first;

//showmessage(inttostr(Form_Rubb_Main.Qry_MaterCard.recordcount));

  while not Form_Rubb_Main.Qry_MaterCard.eof do
  begin
    fWeight:=fWeight + Form_Rubb_Main.Qry_MaterCard.fieldbyname('用料数量').asfloat;
    fPrice:=fPrice + Form_Rubb_Main.Qry_MaterCard.fieldbyname('金额').asfloat;
    Form_Rubb_Main.Qry_MaterCard.next;
  end; //while

//showmessage(floattostr(fPrice)+'   '+floattostr(fWeight));
  fPrice:=strtofloat(formatfloat('0.00',fPrice/fWeight));

  with Q1 do
  begin
    close;
    sql.Clear;
    sql.Add('update 炼胶工艺卡 set 配料用料量 = :Weight, 单价 = :Price, 车数 = :Che, ');
    sql.Add('配料日期 = :RubbDate, 生产批号 = :Bat, 配料人 = :Staff, 制成品名称 = :RubbName ');
    sql.Add('where 标识号 = :id ');
    parambyname('Weight').asfloat :=fWeight;
    parambyname('Price').asfloat :=fPrice;
    parambyname('RubbDate').asdatetime :=strtodate(datetostr(DateTimePicker1.date));
    parambyname('RubbName').asstring:=edit_Rubb.text;
    parambyname('Che').asfloat:=strtofloat(eChe.text);
    with query1 do
    begin
      close;
      sql.clear;
      sql.add('select * from 炼胶工艺卡 where 混炼日期 = :RubbDate ');
      parambyname('RubbDate').asdatetime:=strtodate(Form_Rubb_Main.DBEdit10.TEXT);
      open;
      sProcBat:='sx'+formatdatetime('yymmdd',DateTimePicker1.date);

      if recordcount = 0 then
        sProcBat:='sx'+formatdatetime('yymmdd',DateTimePicker1.date)+'01'
      else if (recordcount >0) and (recordcount <10) then
        sProcBat:='sx'+formatdatetime('yymmdd',strtodate(Form_Rubb_Main.DBEdit10.TEXT))+'0'+inttostr(recordcount)
      else
        sProcBat:='sx'+formatdatetime('yymmdd',strtodate(Form_Rubb_Main.DBEdit10.TEXT))+inttostr(recordcount);
        
    end; //with
//  showmessage('生产批号' +'    '+sProcBat);
    parambyname('Bat').asstring :=sProcBat;
    parambyname('id').asinteger :=Form_Rubb_QryProcCard.Qry_QryProcCard.fieldbyname('标识号').asinteger;
    parambyname('Staff').asstring :=sStaff;
    execsql;
  end;//with

  Form_Rubb_Main.dbePrice.text:=floattostr(fPrice);
  Form_Rubb_Main.dbeMaterWt.text:=floattostr(fWeight);


// 刷新工艺卡
  with Form_Rubb_QryProcCard.Qry_QryProcCard do
  begin
    bmRubbQry:=getbookmark;
    close;
    open;
    gotobookmark(bmRubbQry);
  end; //with

end;

procedure TForm_Rubb_AutoCard.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Qry_TakeCard.Active:=false;

end;

procedure TForm_Rubb_AutoCard.FormCreate(Sender: TObject);
begin
  DateTimePicker1.date:=date;
end;

procedure TForm_Rubb_AutoCard.FormShow(Sender: TObject);
begin
  eChe.text:='';
  Edit_Per.text:='';
  eTotal.text:='';
end;

procedure TForm_Rubb_AutoCard.BitBtn2Click(Sender: TObject);
begin
  Form_Rubb_piliang.QRSumW.caption := eTotal.text;
  Form_Rubb_piliang.Qrdata.caption := datetostr(date);
  Form_Rubb_piliang.QuickRep1.Preview;
end;

 procedure TForm_Rubb_AutoCard.FormKeyPress(Sender: TObject; var Key: Char);
     begin
      if key = #13 then
        begin
         key:=#0;
         perform(WM_NEXTDLGCTL,0,0);
        end;
      end;
      
procedure TForm_Rubb_AutoCard.Edit_PerEnter(Sender: TObject);
begin
TEdit(Sender).color:=claqua;//(Sender as TEdit).color := claqua;
end;

procedure TForm_Rubb_AutoCard.Edit_PerExit(Sender: TObject);
begin
TEdit(Sender).color:=clwindow;//(Sender as TEdit).color := clwindow;
end;

procedure TForm_Rubb_AutoCard.Button1Click(Sender: TObject);
begin
Qry_TakeCard.Active:=False;
Query1.Active:=False;
TabIO.Active:=False;
TabMater.Active:=False;
Q1.Active:=False;
Qry_exe.Active:=False;
Close;
end;

procedure TForm_Rubb_AutoCard.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_Rubb_AutoCard.Edit_depEnter(Sender: TObject);
begin
  TEdit(Sender).color:=claqua;//(Sender as TEdit).color := claqua;
 frmCommQueryID.top:=200;
  frmCommQueryID.left:=220;
  //Table3.Close;

    frmCommQueryID.PageControl1.ActivePageIndex:=3;
    frmCommQueryID.ActiveControl:=frmCommQueryID.DBGrid1;
    if frmCommQueryID.showmodal = mrok then
    begin
   // Edit_Dep.setfocus;
    Edit_Dep.text:=frmCommQueryID.query2.fieldbyname('workshopname').asstring;
    end; //if
end;

end.

⌨️ 快捷键说明

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