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

📄 outbom_log.pas

📁 服装厂管理系统源程序压缩包, 请耐心阅读提供的文件包含的内容
💻 PAS
📖 第 1 页 / 共 3 页
字号:
  if adoquery2.FieldValues['flag'] then
  begin
    msgerr(handle,'['+emp_name+']  的  ['+ADOQuery2.FieldValues['seq_name']+']  工序已验收,不能再发放辅料!');
    abort; exit;
  end
  else
  if MsgQst(handle,'确定  ['+emp_name+']  的  ['+ADOQuery2.FieldValues['seq_name']+']  工序按照辅料表发料吗?')=idno then exit;

/////////////////////////////////////////////////////////////
////*************开始发放辅料*************////
/////////////////////////////////////////////////////////////

  //得到当前用户的ID
  if not get_oper_tmpid(curAdmin.user_id , tmp_id) then
  begin
    MsgOk(handle,'仓库发料失败,请重试!');
    exit;
  end;


  //初始化物料是否入库成功标志
  WLCK_flag:=true;
  //数据提交开始
  datamod.ADOCon.BeginTrans;

 //利用循环发放对应工序的所有辅料
  ADOQmat.First;  //循环开始
  total_money:=0; //初始化发料表支付金额的数量
  while not ADOQmat.eof do
  begin
    mat_id:=ADOQmat.FieldValues['mat_id'];
    mat_name:=GetFieldvalue('material','mat_id',mat_id,'mat_name','');
    tmp_unit:=GetFieldvalue('material','mat_id',mat_id,'unit','');
    //得到该物料是否支付工人工资
    bool_flag:=Getbooleanvalue('material','mat_id',mat_id,'flag');
    if not findRec('kc_material','mat_id',mat_id,info) then
    begin
      msgok(handle, '物料 ['+mat_name+'] 无库存,辅料发放失败!');
      WLCK_flag:=false; break; exit;
    end;

    //判断物料库存数量是否够发料
    ck_num:=ADOQmat.FieldValues['num'];
    kc_num:=Getmoneyvalue('kc_material','mat_id',mat_id,'num');
    if kc_num<ck_num then
    begin
      msgok(handle, '物料 ['+mat_name+'] 库存数量不够(仅存'+floattostr(kc_num)+' '+tmp_unit+'),辅料发放失败!');
      WLCK_flag:=false; break; exit;
    end;

    //1.出库表新增一条出库记录
    with ADOQ_tmp do
    begin
      close;sql.clear;
      sql.add('INSERT INTO ck_material(empid, mat_id, num, tmp_id)');
      sql.add(' VALUES (:empid,:mat_id,:num,:tmp_id)');
      parameters.ParamValues['empid']:=emp_id;
      parameters.ParamValues['mat_id']:=mat_id;
      parameters.ParamValues['num']:=ck_num;
      parameters.ParamValues['tmp_id']:=tmp_id;
      try
        execsql;
      except
        if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
        MsgErr(handle,'辅料发放处理失败--(ck_material)!');
        WLCK_flag:=false; break; exit;
      end;
    end;//1.End

    //2.更新库存表的库存量
    with ADOQ_tmp do
    begin
      close;sql.clear;
      sql.Add('update kc_material set num=:num where (mat_id=:mat_id)');
      parameters.ParamValues['num']:=kc_num-ck_num;
      parameters.ParamValues['mat_id']:=mat_id;
      try
        execsql;
      except
        if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
        MsgErr(handle,'辅料发放处理失败--(kc_material)!');
        WLCK_flag:=false; break; exit;
      end;
    end;//2.End

    //如果该物料为需支付个人工资的则新记录3.4.
    if bool_flag then
    begin
      price:=Getmoneyvalue('material','mat_id',mat_id,'price');
      tmp_event:=emp_name+'领料['+mat_name+']'+floattostr(ck_num)+'('+tmp_unit+')';
      //3.工人支出表中新增一条记录
      with ADOQ_tmp do
      begin
        close;sql.clear;
        sql.add('INSERT INTO brrow(empid, event, money, tmp_id)');
        sql.add(' VALUES (:empid,:event,:money,:tmp_id)');
        parameters.ParamValues['empid']:=emp_id;
        parameters.ParamValues['event']:=tmp_event;
        info:='';
        info:=format('%.2f',[ck_num*price]);
        total_money:=strtofloat(info)+total_money;
        parameters.ParamValues['money']:=strtofloat(info);
        parameters.ParamValues['tmp_id']:=tmp_id;
        try
          execsql;
        except
          if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
          MsgErr(handle,'辅料发放处理失败--(brrow)!');
          WLCK_flag:=false; break; exit;
        end;
      end;//3.End

      //4.企业收入流水账中新增一条记录
      with ADOQ_tmp do
      begin
        close;sql.clear;
        sql.add('INSERT INTO earning(event, money, tmp_id)');
        sql.add(' VALUES (:event,:money,:tmp_id)');
        parameters.ParamValues['event']:=tmp_event;
        parameters.ParamValues['money']:=ck_num*price;
        parameters.ParamValues['tmp_id']:=tmp_id;
        try
          execsql;
        except
          if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
          MsgErr(handle,'辅料发放处理失败--(earning)!');
          WLCK_flag:=false; break; exit;
        end;
      end;//4.End         
    end;   //该物料为需支付个人工资的则新记录3.4.结束
    ADOQmat.next;
  end;//循环结束

  //提交数据库
  if not WLCK_flag then if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
  if datamod.ADOCon.InTransaction then
  begin
    try
      datamod.ADOCon.CommitTrans;
    except
      MsgErr(handle,'辅料发放处理失败--(All)!');
      if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
      exit;
    end;
    if WLCK_flag then
    begin
      adoquery2.Edit;
      adoquery2.FieldValues['flflag']:=true;
      adoquery2.FieldValues['fl_flag']:=true;
      adoquery2.post;
    end;
    if total_money<>0 then MsgOK(handle,'该员工按照辅料表领取辅料共需支付个人工资:¥'+format('%.2f',[total_money]));
  end;
/////////////////////////////////////////////////////////////
////*************发放辅料结束*************////
/////////////////////////////////////////////////////////////
end;

  {
  //开始发放辅料
  begin
    //得到当前用户的ID
    if not get_oper_tmpid(curAdmin.user_id , tmp_id) then
    begin
      MsgOk(handle,'仓库发料失败,请重试!');
      exit;
    end;

    emp_ID:=ADOQuery2.FieldValues['empid'];
    emp_name:=GetFieldvalue('employee','empid',inttostr(emp_id),'empname','');
//    adoq_Seq:=TAdoquery.create(nil);
    ADOQmat.First;

    //发放对应工序的所有辅料
    while not ADOQmat.eof do
    begin
      mat_id:=ADOQmat.FieldValues['mat_id'];
      mat_name:=GetFieldvalue('material','mat_id',mat_id,'mat_name','');
      tmp_unit:=GetFieldvalue('material','mat_id',mat_id,'unit','');
      bool_flag:=GetFieldvalue('material','mat_id',mat_id,'flag','');
      if not findRec('kc_material','mat_id',mat_id,info) then
      begin

        msgok(handle, '物料 ['+mat_name+'] 无库存,发料失败!');
        exit;
      end;

        //判断物料库存数量是否够发料
      ck_num:=ADOQmat.FieldValues['num'];
      with adot_kcmate do
      begin
        adot_kcmate:=Tadotable.Create(nil);
        Connection:=datamod.ADOCon;
        TableName:='kc_material';
        Close; open;
        locate('mat_id',mat_id,[loCaseInsensitive]);
        kc_num:=fieldvalues['num'];
        if kc_num<ck_num then
        begin
          msgok(handle, '物料 ['+mat_name+'] 库存数量不够(仅存'+floattostr(kc_num)+' '+tmp_unit+'),发料失败!');
          adot_kcmate.Close;
          adot_kcmate.Free;
          exit;
        end;
        adot_kcmate.Close;
        adot_kcmate.Free;
      end;

      //CALL DATABASE Pro_CK_Material STORE PROCEDURE
      //@empid int, @mat_id varchar(10),@num float,@tmp_id int,@event varchar(30)

      with ADOSP_CK_ABSBOM do
      begin
        if bool_flag='1' then tmp_event:=emp_name+'领料['+mat_name+']'+floattostr(ck_num)+'('+tmp_unit+')'
        else tmp_event:='';
        parameters.paramvalues['@empid']:=emp_id;
        parameters.paramvalues['@mat_id']:=mat_id;
        parameters.paramvalues['@num']:=ck_num;
        parameters.paramvalues['@tmp_id']:=tmp_id;
        parameters.paramvalues['@event']:=tmp_event;
        try
          execproc;
        except
          showmessage('存储过程执行失败(Pro_CK_Material),请重新操作!');
          exit;
        end;
        edit_kc_ret_1:=parameters.paramvalues['@RETURN_VALUE'];
        if edit_kc_ret_1=0 then
        begin
          msgok(handle,'对应工序发放辅料失败,请重试!');
          exit;
        end;
      end;
      ADOQmat.next;
    end;
    if if edit_kc_ret_1=1 then
    begin
      adoquery2.Edit;
      adoquery2.FieldValues['flflag']:=true;
      adoquery2.post;
    end;
//    adoq_Seq.Close; adoq_Seq.Free;
  end;  }


procedure TForm_Outbom_log.DBGridEnter(Sender: TObject);
begin
   RefeshMe:=true;
end;

procedure TForm_Outbom_log.SerBtnClick(Sender: TObject);
begin
  edit4.Text:=trim(edit4.Text);
  if edit4.Text='' then begin edit4.SetFocus;exit;end;
  if not adoqemp.Locate('empid',edit4.Text,[]) then
  begin
      MsgErr(handle,'不存在编码为['+edit4.Text+']的人员!');
      edit4.SetFocus;
  end;
end;

procedure TForm_Outbom_log.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
  if key=chr(13) then serbtn.Click;
end;

procedure TForm_Outbom_log.ExportBtnClick(Sender: TObject);
begin
  Form_main.WriteIntoExcel(DBGrid,datetostr(date),'工序发料信息报表');
end;

procedure TForm_Outbom_log.ComboBox1KeyPress(Sender: TObject;
  var Key: Char);
begin
  if key<>chr(13) then exit;
  Add_outbom;
end;

//查找对应条件的裁信息
procedure TForm_Outbom_log.BtnlocateClick(Sender: TObject);
var
  ccno, zhno:integer;
  size_name:string;
begin
  if not ADOQuery1.Active then exit;
  if trim(edt_ccNo.Text)='' then
  begin
    Msgok(handle,'请输入裁床号!');
    edt_ccno.SetFocus; exit;
  end;
  try
    ccno:=strtoint(trim(edt_ccNo.Text));
  except
    MsgERR(handle,'请输入正确的裁床号!');
    edt_ccno.SetFocus; exit;
  end;
  
  if trim(edt_zhno.Text)<>'' then
  begin
    try
      zhno:=strtoint(trim(edt_zhNo.Text));
    except
      MsgERR(handle,'请输入正确的扎号!');
      edt_zhno.SetFocus; exit;
    end;
    if trim(ComboBox_size.Text)='' then
    begin
      if not ADOQuery1.Locate('bed_id;zh_id', VarArrayOf([ccno,zhno]), [])
      then msgok(handle,'没找到对应条件的裁床信息!');
      abort; exit;
    end;
  end;

  if trim(ComboBox_size.Text)<>'' then
  begin
    size_name:=trim(ComboBox_size.Text);
    if not ADOQuery1.Locate('bed_id;zh_id;size_name', VarArrayOf([ccno,zhno,size_name]), [])
    then msgok(handle,'没找到对应条件的裁床信息!');
    abort; exit;
  end;
  if not ADOQuery1.Locate('bed_id', ccno, []) then msgok(handle,'没找到对应条件的裁床信息!');
end;

procedure TForm_Outbom_log.edt_zhNOKeyPress(Sender: TObject;
  var Key: Char);
begin
  if not (key in ['0'..'9',#13, #8]) then abort;
end;

end.

⌨️ 快捷键说明

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