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

📄 sy_sjndfpjh_fp.pas

📁 省级集邮品管理ERP
💻 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 + -