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

📄 craftinput.pas

📁 delphi框架可以学习, 写的很好的
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  lf_kc  := 0; //筘长      经幅 + 0.04
  lf_wxys:= 0; //纬向余缩  (水洗幅宽 - 成品幅宽)/成品幅宽

  //这里的顺序一定不能错,要先让主表生成流水号
  try
    if dm.qryCraft.State   in [dsEdit, dsInsert] then dm.qryCraft.Post;
    if dm.qryCraftXB.State in [dsEdit, dsInsert] then dm.qryCraftXB.Post;

    //0、取出主表中的关键字段
    ls_cpSer:= dm.qryCraft.FieldByName('GYSER').AsString;
    lf_Zsl  := dm.qryCraft.FieldByName('ZSL').AsFloat;

    //1、先计算总经量\总纬密\经幅\纬长
    ls_Err := GetFieldVal('CRAFTXB','SUM(TF)','JWLX=''经纱'' AND GYSER='+ ls_Cpser, ls_tmp);
    if ls_Err <> '' then Raise Exception.Create(ls_Err)
                    else lf_Zjl := StrToFloat(ls_tmp);   //总经量
    ls_Err := GetFieldVal('CRAFTXB','SUM(TF)','JWLX=''纬纱'' AND GYSER='+ ls_Cpser, ls_tmp);
    if ls_Err <> '' then Raise Exception.Create(ls_Err)
                    else lf_Zwm := StrToFloat(ls_tmp);   //总纬密

    //2、生成产品规格以及报外规格
    with dm.qryCraft do
    begin
      lf_Jf  := Round45(lf_Zjl / FieldByName('KH').AsFloat / FieldByName('RK').AsFloat * 2 * 2.54 /100,1); //经幅
      lf_wc  := Round45(lf_Jf + FieldByName('WS').AsFloat,1);                                              //纬长
      lf_kc  := lf_jf + 0.04;
      ls_jshz:= GetJWSHZ('经纱');
      ls_wshz:= GetJWSHZ('纬纱');
      lf_wxys:= Round45((FieldByName('SXFK').AsFloat - FieldByName('CPFK').AsFloat) / FieldByName('CPFK').AsFloat, 3);

      if lf_kc > 1.9 then
        ShowMess('提示','筘长超过限制值(1.9),请检查数据!', MB_ICONERROR);

      Edit;
      FieldByName('ZJL').AsFloat := lf_Zjl;
      FieldByName('ZWM').AsFloat := lf_Zwm;
      FieldByName('WC').AsFloat  := lf_wc;
      FieldByName('JF').AsFloat  := lf_jf;
      FieldByName('KC').AsFloat  := lf_kc;
      FieldByName('WXYS').AsFloat:= lf_Wxys;
      
      FieldByName('CPGG').AsString := ls_jshz + ' * ' + ls_wshz;
      //FieldByName('BWGG').AsString := '('+FieldByName('BWZS').AsString+')' + ' * ' + ls_wshz;
      Post;
    end;
  except
    on E: Exception do
    begin
      ShowMess('系统错误','保存并计算各项参数时出错,具体为:'+ E.Message, MB_ICONERROR);
      _State := EV_FAIL;
    end;
  end;
end;

procedure TfrmCraftInput.doUnCheck(Sender: TObject; var _EventNote, _State: String);
var ls_Cpmc: String;
begin
    //先保存之前的输入
  try
    with dm.qryCraft do
    begin
      if not IsEmpty then
      if State in [dsEdit, dsInsert] then Post;
      ls_Cpmc  := FieldByName('CPMC').AsString;

      _EventNote := '撤审成品'+ls_Cpmc+'工艺资料';
      _State := EV_OK;

      Edit;
      FieldByName('SHBZ').AsInteger := ShBZ_NOT;
      FieldByName('CSR').AsString   := CurrentUser.EmpName;
      FieldByName('CSRQ').AsDateTime:= Now;
      Post;
    end;
  except
    On E: Exception do
    begin
      ShowMess('系统错误','撤审成品'+ls_Cpmc+'工艺资料失败,具体为:'+E.Message, MB_ICONERROR);
      _State := EV_FAIL;
    end;
  end;
end;

procedure TfrmCraftInput.doAfterScroll(DataSet: TDataSet);
var ls_cpSer, ls_Cpmc, ls_SQL, ls_Err: String;
begin
  //滚动
  if DataSet.IsEmpty then Exit;
  ls_cpmc := dm.qryCraft.FieldByName('CPMC').AsString;
  ls_cpser:= DataSet.FieldByName('GYSER').AsString;
  if ls_Cpser = '' then Exit;

  //打开子表
  ls_SQL := 'SELECT * FROM CRAFTXB WHERE GYSER=' + ls_Cpser+ ' ORDER BY JWLX';
  ls_Err := OpenDataSet(dm.qryCraftXB, ls_SQL);
  if ls_Err <> '' then
    ShowMess('系统错误','打开成品['+ ls_Cpmc +']的详细报价资料失败,具体为:'+ls_Err, MB_ICONERROR);

  SetButtonState(UseDataSet);
end;

procedure TfrmCraftInput.doForLog1(Sender: TObject; var _EventNote, _State: String);
begin
end;

procedure TfrmCraftInput.doAfterPost(DataSet: TDataSet);
begin
  //企业规则
  with DataSet do
  try
    AfterPost := nil;
    Edit;
    FieldByName('SRRQ').AsDateTime := Now;
    FieldByName('CZY').AsString    := CurrentUser.EmpName;
    Post;
  finally
    AfterPost := doAfterPost;
  end;
end;

procedure TfrmCraftInput.dbgridListDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumnEh;
  State: TGridDrawState);
begin
   with dbgridList.DataSource.DataSet do
     if FieldByName('SHBZ').AsInteger = SHBZ_NOT then
       dbgridList.Canvas.Brush.Color := $0084D7AB;

   dbgridList.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

procedure TfrmCraftInput.RzPageControl1Change(Sender: TObject);
begin
  if RzPageControl1.ActivePageIndex = 1 then
    RzDBEdit34.SetFocus;
end;

procedure TfrmCraftInput.edtYldmChange(Sender: TObject);
begin
  if edtYldm.Text = '' then
  begin
    plYldm.Visible := False;
  end else
  with dmc.qryYldm do
  begin
    plYldm.Visible := True;
    plYldm.Top := 50;
    plYldm.Left:= edtYldm.Left;
    plYldm.BringToFront;

    Filter := 'CODE LIKE ''%' + edtYldm.Text +'%''';
    Filtered := True;
  end;
end;

procedure TfrmCraftInput.edtYldmKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = VK_DOWN) or (Key = VK_RETURN) then
  if plYldm.Visible then
    DBGridEh1.SetFocus
  else
    edtZS.SetFocus;
end;

procedure TfrmCraftInput.DBGridEh1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_ESCAPE then
  begin
    plYldm.Visible := False;
    edtYldm.SetFocus;
  end;

  if Key= VK_RETURN then
  begin
    edtYldm.Text := dmc.qryYldm.FieldByName('CODE').AsString;
    plYldm.Visible := False;
    edtZS.SetFocus;
  end;
end;

procedure TfrmCraftInput.btnAddClick(Sender: TObject);
var ls_SQL, ls_Err, ls_GySer: String;
begin
  //添加细表
  if not UseDataSet.Active then Exit;
  if UseDataSet.IsEmpty then Exit;

  if UseDataSet.State in [dsEdit, dsInsert] then UseDataSet.Post;
  ls_GySer := UseDataSet.FieldByName('GYSER').AsString;
  if ls_GySer = '' then Exit;

  try
    with dm.qryCraftXB do
    begin
      if not Active then
      begin
        ls_SQL := 'SELECT * FROM CRAFTXB WHERE 0=1';
        ls_Err := OpenDataSet(dm.qryCraftXB, ls_SQL);
        if ls_Err <> '' then
        begin
          ShowMess('系统错误','生成工艺细表空数据集失败,具体为:'+ls_Err, MB_ICONERROR);
          Exit;
        end;
      end;

      Append;
      FieldByName('GYSER').AsString  := ls_GySer;
      FieldByName('JWLX').AsString   := GetKeyValue(cboxJwlx.Text);
      FieldByName('CODE').AsString   := edtYldm.Text;
      FieldByName('ZS').AsString     := edtZS.Text;
      FieldByName('TF').AsString     := edtTF.Text;
      FieldByName('PH').AsString     := edtPH.Text;
      FieldByName('YL_FG').AsString  := edtFG.Text;
      FieldByName('SH').AsString     := edtSH.Text;
      FieldByName('BZ').AsString     := edtBZ.Text;
      FieldByName('SRRQ').AsDateTime := Now;
      FieldByName('CZY').AsString    := CurrentUser.EmpName;

      //添加原料资料
      if dmc.qryYldm.Locate('CODE', edtYldm.Text, []) then
      begin
        FieldByName('YL_ZS').AsString  := dmc.qryYldm.FieldByName('ZS').AsString;
        FieldByName('YL_GYS').AsString := dmc.qryYldm.FieldByName('FACTORY').AsString;
        FieldByName('YL_LX').AsString  := dmc.qryYldm.FieldByName('LX').AsString;
        FieldByName('YL_GG').AsString  := dmc.qryYldm.FieldByName('GG').AsString;
        FieldByName('YLMC').AsString   := FieldByName('YL_ZS').AsString + '支'+
                                          FieldByName('YL_GYS').AsString +
                                          FieldByName('YL_LX').AsString +
                                          edtFG.Text +
                                          FieldByName('YL_GG').AsString;
      end;
      Post;
    end;

    cboxJwlx.SetFocus;
    actSaveExecute(btnSave);

    edtYldm.Text := '';
    edtZS.Text   := '';
    edtTF.Text   := '';
    edtPH.Text   := '';
    edtSH.Text   := '';
    edtBZ.Text   := '';
    edtFG.Text   := '';
  except
    On E: Exception do
      ShowMess('系统错误','添加工艺细表失败,具体为:'+E.Message, MB_ICONERROR);
  end;
end;

procedure TfrmCraftInput.btnDelClick(Sender: TObject);
begin
  if not dm.qryCraftXB.Active then Exit;
  if dm.qryCraftXB.IsEmpty then Exit;
  if not ShowMess('提示','确实要删除下面选中的工艺细项吗?', MB_OKCANCEL) then Exit;

  with dm.qryCraftXB do
  begin
    Delete;
  end;
end;

procedure TfrmCraftInput.RzDBEdit9Enter(Sender: TObject);
begin
  cboxJwlx.SetFocus;
end;

function TfrmCraftInput.GetJWSHZ(_Style: String): String;
var ls_tmp: String;
begin
  //取经纱
  with dm.qryCraftXB do
  try
    Result := '';
    if not Active then Exit;
    if IsEmpty    then Exit;

    ls_tmp := '(';
    Filter   := 'JWLX ='''+ _Style +'''';
    Filtered := True;
    while Not Eof do
    begin
      ls_tmp := ls_tmp + FieldByName('YL_ZS').AsString + '+';
      Next;
    end;

    Result := Copy(ls_tmp,1,Length(ls_tmp)-1) + ')';
  finally
    Filter   := '';
    Filtered := False;
  end;
end;

procedure TfrmCraftInput.DBGridEh3DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumnEh;
  State: TGridDrawState);
begin
  with DBGridEh3.DataSource.DataSet do
  begin
    if FieldByName('JWLX').AsString = '经纱' then DBGridEh3.Canvas.Brush.Color := $00A9E2C5;
    if FieldByName('JWLX').AsString = '纬纱' then DBGridEh3.Canvas.Brush.Color := $0080C1DB;
  end;

  DBGridEh3.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

procedure TfrmCraftInput.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  //关闭已经打开的数据集
  dmc.OpenCpys(False);
  dmc.OpenCpzz(False);
  dmc.OpenHcllx(False);

  dmc.qryYldm.Filter := '';
  dmc.qryYldm.Filtered := False;

  inherited;
end;

procedure TfrmCraftInput.cboxJwlxChange(Sender: TObject);
begin
  if Pos('经纱', cboxJwlx.Text) > 0 then Label46.Caption := '头    份';
  if Pos('纬纱', cboxJwlx.Text) > 0 then Label46.Caption := '纬    密';
end;

procedure TfrmCraftInput.btnModifClick(Sender: TObject);
begin
  //修改工艺细项
  if not dm.qryCraftXB.Active then Exit;
  if dm.qryCraftXB.IsEmpty then Exit;

  //先把数据读取过来
  with dm.qryCraftXB do
  begin
    if FieldByName('JWLX').AsString = '经纱' then cboxJwlx.itemIndex := 0
                                             else cboxJwlx.itemIndex := 1;

    edtYldm.Text := FieldByName('CODE').AsString;
    edtZS.Text   := FieldByName('ZS').AsString;
    edtTF.Text   := FieldByName('TF').AsString;
    edtPH.Text   := FieldByName('PH').AsString;
    edtFG.Text   := FieldByName('YL_FG').AsString;
    edtSH.Text   := FieldByName('SH').AsString;
    edtBZ.Text   := FieldByName('BZ').AsString;
  end;
  plYldm.Visible := False;
  cboxJwlx.SetFocus;

  //再删除数据
  cboxJwlxChange(nil);
  btnDelClick(nil);
end;

procedure TfrmCraftInput.doBeforePrint(Sender: TObject);
var ls_js, ls_jstf, ls_ws: String;
begin
  //打印之前处理
  with dm.qryCraftXB do
  begin
    if not Active then Exit;
    if IsEmpty then Exit;

    first;
    while not Eof do
    begin
      if FieldByName('JWLX').AsString = '经纱' then
      begin
        ls_js   := ls_js + FieldByName('YLMC').AsString + ' + ';
        ls_jstf := ls_jstf + FieldByName('TF').AsString + '/';
      end;

      if FieldByName('JWLX').AsString = '纬纱' then
        ls_ws   := ls_ws + FieldByName('YLMC').AsString + ' : ';

      Next;
    end;

    _PrintValue1 := copy(ls_ws, 1, Length(ls_js)-3) +' = '+ dm.qryCraft.FieldByName('WB').AsString;
    _PrintValue2 := copy(ls_js, 1, Length(ls_js)-3);
    _PrintValue3 := copy(ls_jstf,1, Length(ls_jstf)-1);
  end;
end;

procedure TfrmCraftInput.btnOKClick(Sender: TObject);
var lf_zjl, lf_NewZjl: Double;
begin
  if not dm.qryCraft.Active then Exit;
  if dm.qryCraft.IsEmpty then Exit;
  if not dm.qryCraftXB.Active then Exit;
  if dm.qryCraftXB.IsEmpty then Exit;

  lf_Zjl   := dm.qryCraft.FieldByName('ZJL').AsFloat;
  lf_NewZjl:= dm.qryCraft.FieldByName('SJZJL').AsFloat;

  //处理销售幅宽
  with dm.qryCraft do
  begin
    Edit;
    FieldByName('XSFK').AsFloat := Round45(FieldByName('CPFK').AsFloat / lf_Zjl * lf_NewZjl, 1);
    FieldByName('FK1').AsFloat  := FieldByName('XSFK').AsFloat - 1;
    FieldByName('FK2').AsFloat  := FieldByName('XSFK').AsFloat + 1;

    Post;
  end;

  //处理新头份
  with dm.qryCraftXB do
  try
    DisableControls;
    First;

    while Not Eof do
    if FieldByName('JWLX').AsString = '经纱' then
    begin
      Edit;
      FieldByName('New_TF').AsFloat := Round45(FieldByName('TF').AsFloat / lf_Zjl * lf_NewZjl, 1);
      Post;
      Next;
    end;
  finally
    EnableControls;
  end;
end;

end.

⌨️ 快捷键说明

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