📄 sy_sjndfpjh_fp.pas
字号:
{*******************************************************}
{ }
{ 上级封片年度分配计划补录 }
{ }
{ 中软金马公司版权所有。2002.12前 }
{ }
{ 编制:中软金马项目开发组 }
{ }
{ }
{*******************************************************}
(*
本模块在省级零枚票管理模块 计划管理部分的上级封片年度分配计划补录菜单调用。
*)
{数据说明:
大类下拉表中是TG_YZPPLDMB表中所有不以1、8、9开头的大类。
邮资分类(界面左边DBGrid)显示当前选中大类下的所有小类。
根据年度SpinEdit刷新分配计划(界面右边DBGrid);
邮资分类信息和分配计划在游标移动的时候彼此影响,定位。
分配计划(界面右边DBGrid)读取数据来源:TYS_JJNFPJH_FP a, TG_YZPPLDMB;写数据:TYS_JJNFPJH_FP。
增加:将当前年度、当前大类下中没有做分配计划的小类分配计划append到分配计划中。
删除:将分配计划中当前选中的一条记录删掉。
保存:将分配数量为0的记录删掉,提交。
2002.06 jillshao
}
unit SY_SJNDFPJH_FP;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
FORMBASE, ExtCtrls, ModiPanel, StdCtrls, Mask, DBCtrls, Grids, DBGrids,
CurrEdit, RXDBCtrl, ToolEdit, ComCtrls, Buttons, DBTables, Db,
RxQuery, RXCtrls, Spin, EHGrids, DBGridEh, Menus, DBGridEhExport;
type
//邮资类代码
PYZLDM = ^YZLDM;
YZLDM = record
DL, MC: string;
end;
type
Tfrm_SJNDFPJH_FP = class(TFFormBase)
ModiPanel1: TModiPanel;
Panel1: TPanel;
Pnl_edit: TPanel;
DS_FXJH: TDataSource;
DS_FPJH: TDataSource;
Qry_FPJH: TQuery;
Panel4: TPanel;
XttxTitle: TRxLabel;
DWMC: TLabel;
Qry_FXJH: TQuery;
USQL_FPJH: TUpdateSQL;
Label8: TLabel;
ND: TSpinEdit;
Splitter1: TSplitter;
Label3: TLabel;
CB_dl: TComboBox;
Qry_FPJHND: TStringField;
Qry_FPJHYZLDM: TStringField;
Qry_FPJHDWDM: TStringField;
Qry_FPJHJHFPZTS: TFloatField;
Qry_FPJHZT: TStringField;
Qry_FPJHZBR: TStringField;
Qry_FPJHPZR: TStringField;
Qry_FPJHZDRQ: TDateTimeField;
Qry_FPJHBZ: TStringField;
Qry_FPJHMC: TStringField;
DBG_FPJH: TDBGridEh;
DBG_FXJH: TDBGridEh;
StaticText1: TStaticText;
StaticText2: TStaticText;
dbge_csh: TDBGridEhExport;
PM_Exp: TPopupMenu;
MI_Exc: TMenuItem;
N2: TMenuItem;
MI_txt: TMenuItem;
N1: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
procedure ModiPanel1BtnClick(Index: TBtnVisible);
procedure FormCreate(Sender: TObject);
procedure NDChange(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Qry_FXJHAfterScroll(DataSet: TDataSet);
procedure DBG_FXJHEnter(Sender: TObject);
procedure Qry_FPJHAfterScroll(DataSet: TDataSet);
procedure FormShow(Sender: TObject);
procedure CB_dlChange(Sender: TObject);
procedure Qry_FPJHJHFPZTSSetText(Sender: TField; const Text: string);
procedure MI_ExcClick(Sender: TObject);
procedure MI_txtClick(Sender: TObject);
procedure Qry_FPJHBeforeInsert(DataSet: TDataSet);
procedure N3Click(Sender: TObject);
procedure PM_ExpPopup(Sender: TObject);
procedure DBG_FPJHEnter(Sender: TObject);
private
{ Private declarations }
FDtState: TDataState;
procedure Save;
procedure SetState(Value: TdataState);
function CheckExit(): boolean;
procedure DoADDFPJH;
public
{ Public declarations }
end;
function Show_SJNDFPJH_FP: Boolean;
var
frm_SJNDFPJH_FP: Tfrm_SJNDFPJH_FP;
implementation
uses datas, Pub;
{$R *.DFM}
function Show_SJNDFPJH_FP: Boolean;
begin
Application.CreateForm(Tfrm_SJNDFPJH_FP, frm_SJNDFPJH_FP);
with frm_SJNDFPJH_FP do
try
if CheckRight(frm_SJNDFPJH_FP, [Modipanel1]) then
result := ShowModal = MB_OK;
finally
Free;
end;
end;
procedure Tfrm_SJNDFPJH_FP.SetState(Value: TdataState);
var
i: integer;
v_col: TColor;
procedure SetControls(Value: Boolean); //浏览状态
begin
ND.Enabled := Value;
CB_dl.Enabled := Value;
DBG_FXJH.Enabled := Value;
DBG_FPJH.ReadOnly := Value;
end;
begin
FDtState := Value;
ModiPanel1.ChangeMode(FDtState = dtBrowse);
SetControls(FDtState = dtBrowse);
if Value = dtBrowse then
v_col := ClBtnFace
else
v_col := ClWindow;
DBG_FPJH.Columns[1].Color := v_col;
DBG_FPJH.Columns[2].Color := v_col;
DBG_FPJH.Columns[3].Color := v_col;
DBG_FPJH.Columns[4].Color := v_col;
end;
procedure Tfrm_SJNDFPJH_FP.Save;
const
CS_UPD = 'update TYS_JJNFPJH_FP set JHFPZTS = ''%s'', ZBR = ''%s'', ZDRQ = to_date(''%s'',''YYYY-MM-DD''), BZ = ''%s''' +
' where ND = ''%s'' and YZLDM = ''%s''';
CS_INS = 'insert into TYS_JJNFPJH_FP(ND, YZLDM, DWDM, JHFPZTS, ZT, ZBR, ZDRQ, BZ) values' +
'(''%s'', ''%s'', ''%s'', ''%s'', ''0'', ''%s'', to_date(''%s'',''YYYY-MM-DD''), ''%s'')';
CS_DEL = 'delete from TYS_JJNFPJH_FP where ND = ''%s'' and YZLDM = ''%s''';
procedure DoApplyUpd;
var
v_sql: string;
begin
Qry_FPJH.First;
while not Qry_FPJH.Eof do
with Qry_FPJH do
begin
if FieldByName('JHFPZTS').AsInteger = 0 then
begin
v_sql := format(CS_DEL, [ND.Text, FieldByName('YZLDM').AsString]);
AssignSQLstr(data.qrytmp, v_sql);
data.qrytmp.ExecSQL;
end
else
begin
v_sql := format(CS_UPD, [FieldByName('JHFPZTS').AsString, FieldByName('ZBR').AsString,
formatdatetime('yyyy-mm-dd', FieldByName('ZDRQ').AsDateTime),
FieldByName('BZ').AsString, ND.Text,
FieldByName('YZLDM').AsString]);
AssignSQLstr(data.qrytmp, v_sql);
data.qrytmp.ExecSQL;
if data.qrytmp.RowsAffected = 0 then
begin
v_sql := format(CS_INS, [ND.Text, FieldByName('YZLDM').AsString,
FieldByName('DWDM').AsString, FieldByName('JHFPZTS').AsString,
FieldByName('ZBR').AsString, formatdatetime('yyyy-mm-dd', FieldByName('ZDRQ').AsDateTime),
FieldByName('BZ').AsString]);
AssignSQLstr(data.qrytmp, v_sql);
data.qrytmp.ExecSQL;
end;
end;
Qry_FPJH.Next;
end;
end;
begin
Qry_FPJH.First;
while not Qry_FPJH.Eof do //将分配数量为0的记录删除,并判断制表人和制表日期是否为空
begin
if Qry_FPJH.FieldByName('JHFPZTS').AsInteger > 0 then
begin
if Qry_FPJH.FieldByName('ZBR').AsString = '' then
begin
CHQMsgBox('制表人不能为空!');
DBG_FPJH.SetFocus;
DBG_FPJH.SelectedIndex := 2;
exit;
end;
if Qry_FPJH.FieldByName('ZDRQ').AsString = '' then
begin
CHQMsgBox('制表日期不能为空!');
DBG_FPJH.SetFocus;
DBG_FPJH.SelectedIndex := 3;
exit;
end;
end;
Qry_FPJH.Next;
end;
data.DM.StartTransaction;
try
DoApplyUpd;
Qry_FPJH.Cancel;
data.DM.Commit;
NDChange(nil);
except
data.DM.Rollback;
exit;
end;
Qry_FPJH.CancelUpdates;
SetState(dtBrowse);
end;
procedure Tfrm_SJNDFPJH_FP.DoADDFPJH; //将
var
v_b_add: boolean;
begin
if Qry_FXJH.IsEmpty then
begin
CHQMsgBox('没有小类信息!');
exit;
end;
Qry_FPJH.AfterScroll := nil;
Qry_FXJH.First;
Qry_FPJH.First;
Qry_FPJH.BeforeInsert := nil;
while not Qry_FXJH.Eof do
begin
Qry_FPJH.Locate('YZLDM', Qry_FXJH.FieldByName('YZLDM').AsString, []);
if Qry_FPJH.FieldByName('YZLDM').AsString <> Qry_FXJH.FieldByName('YZLDM').AsString then
begin
v_b_add := true;
Qry_FPJH.Append;
Qry_FPJH.FieldByName('YZLDM').AsString := Qry_FXJH.FieldByName('YZLDM').AsString;
Qry_FPJH.FieldByName('ND').AsString := ND.Text;
Qry_FPJH.FieldByName('DWDM').AsString := VG_UnitID;
Qry_FPJH.FieldByName('MC').AsString := Qry_FXJH.FieldByName('MC').AsString;
Qry_FPJH.FieldByName('ZT').AsString := '0';
end;
Qry_FXJH.Next;
end;
Qry_FPJH.BeforeInsert := Qry_FPJHBeforeInsert;
Qry_FPJH.AfterScroll := Qry_FPJHAfterScroll;
if v_b_add then
SetState(dtInsert);
end;
procedure Tfrm_SJNDFPJH_FP.ModiPanel1BtnClick(Index: TBtnVisible);
var
i: integer;
begin
case index of
bnAdd:
DoADDFPJH;
bnDelete:
begin
if Qry_FPJH.IsEmpty then
begin
CHQMsgBox('没有可删除的数据!');
exit;
end;
if CHQMsgBox('确定要删除记录吗?', 2) = IDYES then
begin
Qry_FPJH.Edit;
Qry_FPJH.Delete;
Qry_FPJH.ApplyUpdates;
Qry_FPJH.CommitUpdates;
end;
end;
bnEdit:
begin
if Qry_FPJH.IsEmpty then
begin
CHQMsgBox('没有可修改的数据!');
exit;
end;
SetState(dtEdit);
Qry_FPJH.Edit;
end;
bnSave:
Save;
bnCancel:
if CHQMsgBox('取消编辑, 确定吗?', 2) = IDYES then
try
Qry_FPJH.Cancel;
Qry_FPJH.CancelUpdates;
finally
SetState(dtBrowse);
end;
bnClose:
Close;
end;
end;
procedure Tfrm_SJNDFPJH_FP.FormCreate(Sender: TObject);
begin
inherited;
DWMC.Caption := '使用单位:' + VG_UnitName;
DBG_FXJHEnter(DBG_FXJH);
SetState(dtBrowse);
end;
procedure Tfrm_SJNDFPJH_FP.NDChange(Sender: TObject);
begin
Qry_FPJH.AfterScroll := nil;
Qry_FXJH.AfterScroll := nil;
Qry_FXJH.Close;
Qry_FXJH.ParamByName('DL').AsString := CB_dl.Text;
Qry_FXJH.Open;
Qry_FPJH.Close;
Qry_FPJH.ParamByName('ND').AsString := ND.Text;
Qry_FPJH.ParamByName('DLDM').AsString := PYZLDM(CB_DL.Items.Objects[CB_DL.ItemIndex])^.DL;
Qry_FPJH.Open;
Qry_FPJH.AfterScroll := Qry_FPJHAfterScroll;
Qry_FXJH.AfterScroll := Qry_FXJHAfterScroll;
end;
procedure Tfrm_SJNDFPJH_FP.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
inherited;
CanCLose := CheckExit;
end;
function Tfrm_SJNDFPJH_FP.CheckExit(): boolean;
begin
result := true;
if FDtState in [dtInsert, dtEdit] then
case CHQMsgBox('数据已经被更改,是否保存所做修改?', 3) of
IDYes:
ModiPanel1BtnClick(bnSave);
IDNo:
ModiPanel1BtnClick(bnCancel);
IDCancel:
result := false;
end
end;
procedure Tfrm_SJNDFPJH_FP.Qry_FXJHAfterScroll(DataSet: TDataSet);
begin
if DBG_FXJH.TitleFont.Color = clNavy then
Qry_FPJH.Locate('YZLDM', Qry_FXJH.FieldByName('YZLDM').AsString, []);
end;
procedure Tfrm_SJNDFPJH_FP.Qry_FPJHAfterScroll(DataSet: TDataSet);
begin
if Qry_FPJH.IsEmpty then
exit;
if DBG_FPJH.TitleFont.Color = clNavy then
Qry_FXJH.Locate('YZLDM', Qry_FPJH.FieldByName('YZLDM').AsString, []);
end;
procedure Tfrm_SJNDFPJH_FP.DBG_FXJHEnter(Sender: TObject);
begin
if Sender = DBG_FXJH then
begin
DBG_FXJH.TitleFont.Color := clNavy;
DBG_FPJH.TitleFont.Color := clWindowText;
end
else
begin
DBG_FXJH.TitleFont.Color := clWindowText;
DBG_FPJH.TitleFont.Color := clNavy;
end;
end;
procedure Tfrm_SJNDFPJH_FP.FormShow(Sender: TObject);
var
AYZLDM: PYZLDM;
begin
CB_dl.OnChange := nil;
AssignSQLstr(data.qrytmp, 'select distinct substr(YZLDM,1,1),DL from TG_YZPPLDMB where substr(YZLDM,1,1) not in (1,8,9)');
data.qrytmp.Open;
while not data.qrytmp.eof do
begin
New(AYZLDM);
AYZLDM.DL := data.qrytmp.Fields[0].asstring;
AYZLDM.MC := data.qrytmp.Fields[1].asstring;
CB_dl.Items.AddObject(data.qrytmp.Fields[1].AsString, TObject(AYZLDM));
data.qrytmp.Next;
end;
CB_dl.ItemIndex := 0;
CB_dl.OnChange := CB_dlChange;
ND.Value := VG_Year;
end;
procedure Tfrm_SJNDFPJH_FP.CB_dlChange(Sender: TObject);
begin
NDChange(nil);
end;
procedure Tfrm_SJNDFPJH_FP.Qry_FPJHJHFPZTSSetText(Sender: TField;
const Text: string);
var
TextValue: Integer;
begin
try
TextValue := StrToInt(Text);
if TextValue < 0 then
begin
CHQMsgBox('非法数值!');
abort;
end;
Sender.AsInteger := TextValue;
except
if not (TextValue < 0) then
chqmsgbox('非法数值');
abort;
end;
end;
procedure Tfrm_SJNDFPJH_FP.MI_ExcClick(Sender: TObject);
begin
if DBG_FPJH.DataSource.DataSet.IsEmpty then
exit;
dbge_csh.Export_To_Excel(DBG_FPJH);
end;
procedure Tfrm_SJNDFPJH_FP.MI_txtClick(Sender: TObject);
begin
if DBG_FPJH.DataSource.DataSet.IsEmpty then
exit;
dbge_csh.Export_To_Txt(DBG_FPJH);
end;
procedure Tfrm_SJNDFPJH_FP.Qry_FPJHBeforeInsert(DataSet: TDataSet);
begin
Abort;
end;
procedure Tfrm_SJNDFPJH_FP.N3Click(Sender: TObject);
var
v_zbr, v_yzldm: string;
v_zbrq: TDateTime;
begin
case DBG_FPJH.SelectedIndex of
2:
v_zbr := Qry_FPJH.FieldByName('ZBR').AsString;
3:
v_zbrq := Qry_FPJH.FieldByName('ZDRQ').AsDateTime;
end;
v_yzldm := Qry_FPJH.FieldByName('yzldm').AsString;
Qry_FPJH.First;
while not Qry_FPJH.Eof do
begin
Qry_FPJH.Edit;
if TMenuItem(Sender).Tag = 11 then //
case DBG_FPJH.SelectedIndex of
2:
Qry_FPJH.FieldByName('ZBR').AsString := v_zbr;
3:
Qry_FPJH.FieldByName('ZDRQ').AsDateTime := v_zbrq;
end
else
case DBG_FPJH.SelectedIndex of
2:
if Qry_FPJH.FieldByName('ZBR').AsString = '' then
Qry_FPJH.FieldByName('ZBR').AsString := v_zbr;
3:
if Qry_FPJH.FieldByName('ZDRQ').IsNull then
Qry_FPJH.FieldByName('ZDRQ').AsDateTime := v_zbrq;
end;
Qry_FPJH.Next;
end;
Qry_FPJH.Locate('YZLDM', v_yzldm, []);
end;
procedure Tfrm_SJNDFPJH_FP.PM_ExpPopup(Sender: TObject);
begin
N1.Enabled := (FDtState <> dtBrowse) and (DBG_FPJH.SelectedIndex in [2, 3]);
end;
procedure Tfrm_SJNDFPJH_FP.DBG_FPJHEnter(Sender: TObject);
begin
if Sender = DBG_FXJH then
begin
DBG_FXJH.TitleFont.Color := clNavy;
DBG_FPJH.TitleFont.Color := clWindowText;
end
else
begin
DBG_FXJH.TitleFont.Color := clWindowText;
DBG_FPJH.TitleFont.Color := clNavy;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -