📄 craftinput.pas
字号:
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 + -