unit U_ZDYHelpSelXR;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage,
  cxEdit, DB, cxDBData, ToolWin, ComCtrls, cxGridCustomTableView,
  cxGridTableView, cxGridDBTableView, cxGridLevel, cxClasses, cxControls,
  cxGridCustomView, cxGrid, DBClient, ADODB, ImgList, StdCtrls, ExtCtrls,
  cxCheckBox, cxTextEdit, cxLookAndFeels, cxLookAndFeelPainters, 
   cxNavigator, dxDateRanges, System.ImageList,
  System.Types, dxBarBuiltInMenu, cxGridCustomPopupMenu, cxGridPopupMenu,
   dxScrollbarAnnotations, Vcl.Menus;

type
  TfrmZDYHelpSelXR = class(TForm)
    TV1: TcxGridDBTableView;
    cxGrid1Level1: TcxGridLevel;
    cxGrid1: TcxGrid;
    V1Code: TcxGridDBColumn;
    V1Name: TcxGridDBColumn;
    ToolBar1: TToolBar;
    ADOQueryMain: TADOQuery;
    ADOQueryTemp: TADOQuery;
    ADOQueryCmd: TADOQuery;
    DataSource1: TDataSource;
    ClientDataSet1: TClientDataSet;
    TBAdd: TToolButton;
    TBSave: TToolButton;
    TBDel: TToolButton;
    TBClose: TToolButton;
    ToolButton1: TToolButton;
    TBEdit: TToolButton;
    V1Note: TcxGridDBColumn;
    V1OrderNo: TcxGridDBColumn;
    ADOConnection1: TADOConnection;
    Panel1: TPanel;
    Label1: TLabel;
    ZDYName: TEdit;
    ThreeImgList: TImageList;
    Label2: TLabel;
    ImageList_new32: TImageList;
    cxGridPopupMenu1: TcxGridPopupMenu;
    cxGrid2: TcxGrid;
    Tv2: TcxGridDBTableView;
    cxGridDBColumn1: TcxGridDBColumn;
    cxGridDBColumn2: TcxGridDBColumn;
    cxGridDBColumn3: TcxGridDBColumn;
    cxGridDBColumn4: TcxGridDBColumn;
    cxGridDBColumn5: TcxGridDBColumn;
    cxGridLevel1: TcxGridLevel;
    ClientDataSet2: TClientDataSet;
    DataSource2: TDataSource;
    TV1Column1: TcxGridDBColumn;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure TBAddClick(Sender: TObject);
    procedure TBSaveClick(Sender: TObject);
    procedure TBDelClick(Sender: TObject);
    procedure TBCloseClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
    procedure TBEditClick(Sender: TObject);
    procedure TV1CellDblClick(Sender: TcxCustomGridTableView; ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton; AShift: TShiftState; var AHandled: Boolean);
    procedure ZDYNameChange(Sender: TObject);
    procedure V1NamePropertiesEditValueChanged(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure V1NotePropertiesEditValueChanged(Sender: TObject);
    procedure V1Column1PropertiesChange(Sender: TObject);
    procedure TV1Column1PropertiesEditValueChanged(Sender: TObject);
    procedure N1Click(Sender: TObject);
  private
    procedure InitGrid();
    { Private declarations }
  public
    flag, flagname, FChkStr, snote, MainType, ReturnStr, FGStr: string;
    fnote, forderno: Boolean;
    PPSTE, JiangeStr: integer;
    { Public declarations }
  end;

var
  frmZDYHelpSelXR: TfrmZDYHelpSelXR;

implementation

uses
  U_DataLink, U_RTFun;

{$R *.dfm}

procedure TfrmZDYHelpSelXR.FormCreate(Sender: TObject);
begin
  try

    cxGrid1.Align := alClient;
    with ADOConnection1 do
    begin
      Connected := false;
      ConnectionString := DConString;
      //ConnectionString:='';
      Connected := true;
    end;
  except
    {if Application.MessageBox('网络连接失败,是否要再次连接?','提示',32+4)=IDYES then
    begin
      try
        with ADOConnection1 do
        begin
          Connected:=false;
          ConnectionString:=DConString;
          //ConnectionString:='23242';
          Connected:=true;
        end;
      except
      end;
    end; }

    frmZDYHelpSelXR.Free;
  end;
end;

procedure TfrmZDYHelpSelXR.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  writeCxGrid('自定义' + Trim(flag), TV1, '自定义数据');
  ZDYName.SetFocus;
  Action := caFree;
end;

procedure TfrmZDYHelpSelXR.InitGrid();
begin
  try
    ADOQueryMain.DisableControls;
    with ADOQueryMain do
    begin
      Close;
      sql.Clear;
      sql.Add('select * from KH_ZDY where Type=''' + flag + '''');
      if Trim(MainType) <> '' then
      begin
        sql.Add(' and MainType=''' + Trim(MainType) + '''');
      end;
      Open;
    end;
    SCreateCDS(ADOQueryMain, ClientDataSet1);
    SInitCDSData(ADOQueryMain, ClientDataSet1);
    SCreateCDS(ADOQueryMain, ClientDataSet2);
    SInitCDSData(ADOQueryMain, ClientDataSet2);
    ClientDataSet2.EmptyDataSet
  finally
    ADOQueryMain.EnableControls;
  end;
end;

procedure TfrmZDYHelpSelXR.N1Click(Sender: TObject);
begin
  with ClientDataSet2 do
  begin
    Append;
    FieldByName('SSel').Value := True;
    FieldByName('ZDYName').Value := ClientDataSet1.FieldByName('ZDYName').asstring;
    Post;
  end;
end;

procedure TfrmZDYHelpSelXR.TBAddClick(Sender: TObject);
var
  i: Integer;
begin
  ZDYName.SetFocus;
  TV1.OptionsData.Editing := True;
  TV1.OptionsSelection.CellSelect := True;
  for i := 0 to TV1.ColumnCount - 1 do
  begin
    if uppercase(TV1.Columns[i].DataBinding.FieldName) <> 'SSEL' then
      TV1.Columns[i].Options.Editing := True;
  end;
  for i := 0 to 5 do
  begin
    with ClientDataSet1 do
    begin
      Append;
      Post;
    end;
  end;

end;

procedure TfrmZDYHelpSelXR.TBSaveClick(Sender: TObject);
var
  maxno: string;
begin
  if ClientDataSet1.IsEmpty then
    Exit;
  try
    ADOQueryCmd.Connection.BeginTrans;
    with ADOQueryTemp do
    begin
      Close;
      SQL.Clear;
      SQL.Add('select * from KH_ZDY where ZdyNo=''' + Trim(flag) + '''');
      open;
    end;
    if ADOQueryTemp.IsEmpty then
    begin
      with ADOQueryCmd do
      begin
        close;
        sql.Clear;
        sql.Add('insert into KH_ZDY(ZDYNo,ZDYName,Type,MainType) select :ZDYNo,:ZDYName,:Type,:MainType ');
        Parameters.ParamByName('ZDYNo').Value := Trim(flag);
        Parameters.ParamByName('ZDYName').Value := Trim(flagname);
        Parameters.ParamByName('Type').Value := 'Main';
        Parameters.ParamByName('MainType').Value := Trim(MainType);
        ExecSQL;
      end;
    end;
    with ADOQueryCmd do
    begin
      with ClientDataSet1 do
      begin
        First;
        while not eof do
        begin
          if Trim(ClientDataSet1.FieldByName('ZDYNO').AsString) = '' then
          begin
            if GetLSNo(ADOQueryTemp, maxno, 'SY', 'KH_ZDY', 3, 1) = False then
            begin
              ADOQueryCmd.Connection.RollbackTrans;
              Application.MessageBox('取最大编号失败！', '提示', 0);
              Exit;
            end;
          end
          else
          begin
            maxno := Trim(ClientDataSet1.fieldbyname('ZDYNo').AsString);
          end;
          with ADOQueryCmd do
          begin
            Close;
            sql.Clear;
            SQL.Add('delete KH_ZDY where ZDYNO=''' + Trim(ClientDataSet1.fieldbyname('ZDYNO').AsString) + '''');
            ExecSQL;
          end;
          with ADOQueryCmd do
          begin
            Close;
            sql.Clear;
            sql.Add('select * from KH_ZDY where 1<>1');
            Open;
          end;
          if Trim(ClientDataSet1.FieldByName('ZDYName').AsString) = '' then
          begin
            ADOQueryCmd.Connection.RollbackTrans;
            Application.MessageBox('名称不能为空！', '提示', 0);
            Exit;
          end;
          ADOQueryCmd.Append;
          ADOQueryCmd.FieldByName('ZDYNo').Value := Trim(maxno);
          ADOQueryCmd.FieldByName('ZDYName').Value := ClientDataSet1.fieldbyname('ZDYName').AsString;
          ADOQueryCmd.FieldByName('note').Value := Trim(snote);
          //ADOQueryCmd.FieldByName('orderno').Value:=ClientDataSet1.fieldbyname('Name').AsString;
          ADOQueryCmd.FieldByName('Type').Value := flag;
          ADOQueryCmd.FieldByName('valid').Value := 'Y';
          if Trim(MainType) <> '' then
            ADOQueryCmd.FieldByName('MainType').Value := Trim(MainType);
          //ADOQueryCmd.FieldByName('sel').Value:=0;
          ADOQueryCmd.Post;
          ClientDataSet1.Edit;
          ClientDataSet1.FieldByName('ZDYNo').Value := Trim(maxno);
          ClientDataSet1.Post;
          Next;
        end;
      end;
    end;
    ADOQueryCmd.Connection.CommitTrans;
    Application.MessageBox('保存成功！', '提示', 0);
  except
    ADOQueryCmd.Connection.RollbackTrans;
    Application.MessageBox('保存失败！', '提示', 0);
  end;
 // TV1.OptionsData.Editing:=False;
end;

procedure TfrmZDYHelpSelXR.TBDelClick(Sender: TObject);
begin
  if ClientDataSet1.IsEmpty then
    Exit;
  if (Trim(ClientDataSet1.FieldByName('ZDYNo').AsString) <> '') or (Trim(ClientDataSet1.FieldByName('ZDYname').AsString) <> '') then
  begin
    if application.MessageBox('确定要删除吗?', '提示信息', 1) = 2 then
      exit;
    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add('delete KH_ZDY where ZDYNo=''' + Trim(ClientDataSet1.fieldbyname('ZDYNo').AsString) + '''');
      SQL.Add('and Type=''' + Trim(flag) + '''');
      ExecSQL;
    end;
  end;
  ClientDataSet1.Delete;
end;

procedure TfrmZDYHelpSelXR.TBCloseClick(Sender: TObject);
begin
  ModalResult := 2;
  ZDYName.SetFocus;
  Close;
end;

procedure TfrmZDYHelpSelXR.FormShow(Sender: TObject);
var
  fsj, fsj1: string;
  FStrs: TStringList;
  i: Integer;
begin
  {if PPSTE=1 then
  begin
    Application.Terminate;
    Exit;
  end; }

  for i := 0 to TV1.ColumnCount - 1 do
  begin
    if uppercase(TV1.Columns[i].DataBinding.FieldName) <> 'SSEL' then
      TV1.Columns[i].Options.Editing := false;
  end;
  ReadCxGrid('自定义' + Trim(flag), TV1, '自定义数据');
  InitGrid();
  fsj := Trim(flag) + '01';
  fsj1 := Trim(flagname) + '01';

  if Trim(FChkStr) <> '' then
  begin
    FStrs := TStringList.Create();
    ExtractStrings(['|'], [' '], PChar(FChkStr), FStrs);
    frmZDYHelpSelXR.Caption := Trim(flagname);
    with ClientDataSet1 do
    begin
      First;
      while not eof do
      begin
        if FStrs.IndexOf(Trim(FieldByName('ZDYName').AsString)) >= 0 then
        begin
          Edit;
          FieldByName('SSel').Value := true;
          Post;
        end;
        Next;
      end;
    end;
    FStrs.Free;
  end;

end;

procedure TfrmZDYHelpSelXR.ToolButton1Click(Sender: TObject);
begin
  ReturnStr := '';
  with ClientDataSet1 do
  begin
    First;
    while not Eof do
    begin
      if FieldByName('SSel').AsBoolean = True then
      begin
        if JiangeStr <> 99 then
        begin
          if FGStr <> '' then
            ReturnStr := ReturnStr + Trim(fieldbyname('ZDYName').AsString) + FGStr
          else
            ReturnStr := ReturnStr + Trim(fieldbyname('ZDYName').AsString) + ';'
        end
        else
          ReturnStr := ReturnStr + Trim(fieldbyname('ZDYName').AsString);
      end;
      Next;
    end;
  end;
  if JiangeStr <> 99 then
    ReturnStr := Copy(ReturnStr, 1, Length(ReturnStr) - 1);
  ModalResult := 1;
end;

procedure TfrmZDYHelpSelXR.TBEditClick(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to TV1.ColumnCount - 1 do
  begin
    if uppercase(TV1.Columns[i].DataBinding.FieldName) <> 'SSEL' then
      TV1.Columns[i].Options.Editing := True;
  end;
end;

procedure TfrmZDYHelpSelXR.TV1CellDblClick(Sender: TcxCustomGridTableView; ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton; AShift: TShiftState; var AHandled: Boolean);
begin
  if TV1.OptionsData.Editing = False then
  begin
    ModalResult := 1;
  end;
end;

procedure TfrmZDYHelpSelXR.TV1Column1PropertiesEditValueChanged(Sender: TObject);
var
  mvalue: string;
begin
  if Trim(ClientDataSet1.fieldbyname('ZdyName').AsString) = '' then
  begin
    Application.MessageBox('名称不能为空!', '提示', 0);
    Exit;
  end;
  mvalue := TcxTextEdit(Sender).EditingText;
  if Trim(mvalue) = '' then
  begin
    mvalue := '';
  end;
  with ClientDataSet1 do
  begin
    Edit;
    FieldByName('Note1').Value := mvalue;
    Post;
  end;
  with ADOQueryCmd do
  begin
    Close;
    SQL.Clear;
    sql.Add('Update KH_Zdy Set Note1=''' + Trim(mvalue) + '''');
    sql.Add(' where ZdyNo=''' + Trim(ClientDataSet1.fieldbyname('ZdyNo').AsString) + '''');
    ExecSQL;
  end;
end;

procedure TfrmZDYHelpSelXR.ZDYNameChange(Sender: TObject);
begin
  if ADOQueryMain.Active then
  begin
    SDofilter(ADOQueryMain, SGetFilters(Panel1, 1, 2));
    SCreateCDS(ADOQueryMain, ClientDataSet1);
    SInitCDSData(ADOQueryMain, ClientDataSet1);
  end;
end;

procedure TfrmZDYHelpSelXR.V1Column1PropertiesChange(Sender: TObject);
begin
  if ClientDataSet1.FieldByName('SSel').AsBoolean = True then
  begin
    with ClientDataSet2 do
    begin
      Append;
      FieldByName('SSel').Value := True;
      FieldByName('ZDYName').Value := ClientDataSet1.FieldByName('ZDYName').asstring;
      Post;
    end;
  end
  else
  begin
//       if CDS_2.Locate('ZDYName', JYXH.Text, []) = True then
  end;
end;

procedure TfrmZDYHelpSelXR.V1NamePropertiesEditValueChanged(Sender: TObject);
var
  maxno, mvalue: string;
begin
  mvalue := TcxTextEdit(Sender).EditingText;
  if Trim(mvalue) = '' then
  begin
    //Application.MessageBox('名称不能为空！','提示',0);
    Exit;
  end;
  with ClientDataSet1 do
  begin
    Edit;
    FieldByName('ZdyName').Value := Trim(mvalue);
    //Post;
  end;
  try
    ADOQueryCmd.Connection.BeginTrans;
    with ADOQueryTemp do
    begin
      Close;
      SQL.Clear;
      SQL.Add('select * from KH_ZDY where ZdyNo=''' + Trim(flag) + '''');
      open;
    end;
    if ADOQueryTemp.IsEmpty then
    begin
      with ADOQueryCmd do
      begin
        close;
        sql.Clear;
        sql.Add('insert into KH_ZDY(ZDYNo,ZDYName,Type,MainType) select :ZDYNo,:ZDYName,:Type,:MainType ');
        Parameters.ParamByName('ZDYNo').Value := Trim(flag);
        Parameters.ParamByName('ZDYName').Value := Trim(flagname);
        Parameters.ParamByName('Type').Value := 'Main';
        Parameters.ParamByName('MainType').Value := Trim(MainType);
        ExecSQL;
      end;
    end;
    with ADOQueryCmd do
    begin
      //ClientDataSet1.DisableControls;
      //with ClientDataSet1 do
      //begin
        //First;
        //while not eof do
        //begin
      if Trim(ClientDataSet1.FieldByName('ZDYNO').AsString) = '' then
      begin
        if GetLSNo(ADOQueryTemp, maxno, 'SY', 'KH_ZDY', 3, 1) = False then
        begin
          ADOQueryCmd.Connection.RollbackTrans;
              //ClientDataSet1.EnableControls;
          Application.MessageBox('取最大编号失败！', '提示', 0);
          Exit;
        end;
      end
      else
      begin
        maxno := Trim(ClientDataSet1.fieldbyname('ZDYNo').AsString);
      end;
      with ADOQueryTemp do
      begin
        Close;
        sql.Clear;
        sql.add('select * from KH_Zdy where Type=''' + Trim(flag) + '''');
        if Trim(MainType) <> '' then
          SQL.Add(' and MainType=''' + Trim(MainType) + '''');
        sql.Add(' and ZdyName=''' + Trim(ClientDataSet1.fieldbyname('ZdyName').AsString) + '''');
        Open;
      end;
      if ADOQueryTemp.IsEmpty = False then
      begin
        if ADOQueryTemp.RecordCount > 1 then
        begin
          ADOQueryCmd.Connection.RollbackTrans;
              //ClientDataSet1.EnableControls;
          Application.MessageBox('名称重复！', '提示', 0);
          Exit;
        end;
        if Trim(ClientDataSet1.fieldbyname('ZdyNo').AsString) = '' then
        begin
          ADOQueryCmd.Connection.RollbackTrans;
              //ClientDataSet1.EnableControls;
          Application.MessageBox('名称重复！', '提示', 0);
          Exit;
        end
        else
        begin
          if Trim(ADOQueryTemp.fieldbyname('ZdyNo').AsString) <> Trim(ClientDataSet1.fieldbyname('ZdyNo').AsString) then
          begin
            ADOQueryCmd.Connection.RollbackTrans;
                //ClientDataSet1.EnableControls;
            Application.MessageBox('名称重复！', '提示', 0);
            Exit;
          end;
        end;
      end;
      with ADOQueryCmd do
      begin
        Close;
        sql.Clear;
        SQL.Add('delete KH_ZDY where ZDYNO=''' + Trim(ClientDataSet1.fieldbyname('ZDYNO').AsString) + '''');
        ExecSQL;
      end;
      with ADOQueryCmd do
      begin
        Close;
        sql.Clear;
        sql.Add('select * from KH_ZDY where 1<>1');
        Open;
      end;
      ADOQueryCmd.Append;
      ADOQueryCmd.FieldByName('ZDYNo').Value := Trim(maxno);
      ADOQueryCmd.FieldByName('ZDYName').Value := ClientDataSet1.fieldbyname('ZDYName').AsString;
      ADOQueryCmd.FieldByName('note').Value := Trim(snote);
          //ADOQueryCmd.FieldByName('orderno').Value:=ClientDataSet1.fieldbyname('Name').AsString;
      ADOQueryCmd.FieldByName('Type').Value := flag;
      ADOQueryCmd.FieldByName('valid').Value := 'Y';
      if Trim(MainType) <> '' then
        ADOQueryCmd.FieldByName('MainType').Value := Trim(MainType);
          //ADOQueryCmd.FieldByName('sel').Value:=0;
      ADOQueryCmd.Post;
      ClientDataSet1.Edit;
      ClientDataSet1.FieldByName('ZDYNo').Value := Trim(maxno);
          //ClientDataSet1.Post;
         // Next;
        //end;
      //end;
     // ClientDataSet1.EnableControls;
    end;
    ADOQueryCmd.Connection.CommitTrans;
    //Application.MessageBox('保存成功！','提示',0);
    //TV1.OptionsData.Editing:=False;
    //TV1.OptionsSelection.CellSelect:=False;
  except
    ADOQueryCmd.Connection.RollbackTrans;
    Application.MessageBox('保存失败！', '提示', 0);
  end;
end;

procedure TfrmZDYHelpSelXR.V1NotePropertiesEditValueChanged(Sender: TObject);
var
  mvalue: string;
begin
  if Trim(ClientDataSet1.fieldbyname('ZdyName').AsString) = '' then
  begin
    Application.MessageBox('名称不能为空!', '提示', 0);
    Exit;
  end;
  mvalue := TcxTextEdit(Sender).EditingText;
  if Trim(mvalue) = '' then
  begin
    mvalue := '';
  end;
  with ClientDataSet1 do
  begin
    Edit;
    FieldByName('Note').Value := mvalue;
    Post;
  end;
  with ADOQueryCmd do
  begin
    Close;
    SQL.Clear;
    sql.Add('Update KH_Zdy Set Note=''' + Trim(mvalue) + '''');
    sql.Add(' where ZdyNo=''' + Trim(ClientDataSet1.fieldbyname('ZdyNo').AsString) + '''');
    ExecSQL;
  end;
end;

procedure TfrmZDYHelpSelXR.FormDestroy(Sender: TObject);
begin
  frmZDYHelpSelXR := nil;

end;

end.

