unit ufrmPesquisa; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, System.DateUtils, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, umstMaster, Data.DB, Vcl.Grids, Vcl.DBGrids, Vcl.StdCtrls, Vcl.Buttons, Vcl.ComCtrls, Vcl.ExtCtrls, ZAbstractRODataset, ZAbstractDataset, ZDataset, StrUtils, Vcl.Menus, ClipBrd, Datasnap.DBClient; type TfrmPesquisa = class(TmstMaster) grpb_pesquisa: TGroupBox; edtSelecionar: TEdit; SpeedButton1: TSpeedButton; grpb_grid: TGroupBox; DBGrid1: TDBGrid; dtsDB: TDataSource; ZQuery1: TZQuery; ccb_campo: TComboBox; ppmn_pesquisa: TPopupMenu; Copiar1: TMenuItem; edt_copytoclipboard: TEdit; gb_hist: TGroupBox; dtsHist: TDataSource; dbgr_hist: TDBGrid; procedure SpeedButton1Click(Sender: TObject); procedure DBGrid1DblClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure edtSelecionarKeyPress(Sender: TObject; var Key: Char); procedure Copiar1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure dbgr_histDblClick(Sender: TObject); procedure DBGrid1TitleClick(Column: TColumn); private procedure WMMoving(var Msg: TWMMoving); message WM_MOVING; // procedure WMGetMinMaxInfo(var M: TWMGetMinMaxInfo); // message WM_GETMINMAXINFO; { Private declarations } public veio_cobranca: boolean; { Public declarations } end; var frmPesquisa: TfrmPesquisa; implementation {$R *.dfm} uses udtmSystem, ucadDevedores, ufrmCobranca, System.UITypes, ufrmEfetuarCobranca; // aqui que as pesquisas são feitas conforme o tipo de campo que deseja ser pesquisado procedure TfrmPesquisa.Copiar1Click(Sender: TObject); begin Clipboard.AsText := DBGrid1.SelectedField.Text; // copia pra clipboard end; procedure TfrmPesquisa.DBGrid1DblClick(Sender: TObject); begin if not dtmSystem.tblDevedores.Active then begin dtmSystem.tblDevedores.Open; end else begin dtmSystem.tblDevedores.Refresh; end; // if ZQuery1.FieldByName('ID_DEVEDOR') // .AsString = dtmSystem.tblDevedoresID_DEVEDOR.AsString then // begin // // end; if dtmSystem.tblDevedores.Locate('ID_DEVEDOR', ZQuery1.FieldByName('ID_DEVEDOR').AsString, []) then begin dtmSystem.cdsHist.DisableControls; // if dtmSystem.cdsHist.RecordCount > 10 then begin dtmSystem.cdsHist.First; dtmSystem.cdsHist.Delete; end; // if not(dtmSystem.cdsHist.Locate('TX_NOME', ZQuery1.FieldByName('TX_NOME') .AsString, [loCaseInsensitive, loPartialKey])) then begin dtmSystem.cdsHist.Append; dtmSystem.cdsHisttx_nome.AsString := ZQuery1.FieldByName('TX_NOME').AsString; dtmSystem.cdsHistid_devedor.AsInteger := ZQuery1.FieldByName('ID_DEVEDOR') .AsInteger; dtmSystem.cdsHist.Post; end; // dtmSystem.cdsHist.EnableControls; with dtmSystem do begin if not tblEnderecos.Active then begin tblEnderecos.Open; tblEnderecos.First; end else begin tblEnderecos.Refresh; end; if not tblTelefones.Active then begin tblTelefones.Open; tblTelefones.First; end else begin tblTelefones.Refresh; end; if not tblEmail.Active then begin tblEmail.Open; tblEmail.First; end else begin tblEmail.Refresh; end; if not tblTitulos.Active then begin tblTitulos.Open; tblTitulos.First; end else begin tblTitulos.Refresh; end; if not tblHistorico.Active then begin tblHistorico.Open; tblHistorico.First; end else begin tblHistorico.Refresh; end; end; if veio_cobranca then begin frmEfetuarCobranca.achou := true; Close; end else begin cadDevedores := TcadDevedores.Create(Self); // cadDevedores.pesquisa := helper; cadDevedores.ShowModal; end; end; end; procedure TfrmPesquisa.DBGrid1TitleClick(Column: TColumn); begin dtmSystem.OrganizaPorColuna(DBGrid1.DataSource.DataSet, Column); end; procedure TfrmPesquisa.dbgr_histDblClick(Sender: TObject); var helper: integer; begin if not dtmSystem.tblDevedores.Active then begin dtmSystem.tblDevedores.Open; end else begin dtmSystem.tblDevedores.Refresh; end; if dbgr_hist.DataSource.DataSet.FieldByName('id_devedor') .AsInteger = dtmSystem.tblDevedoresID_DEVEDOR.AsInteger then begin dtmSystem.tblEnderecos.Refresh; dtmSystem.tblEnderecos.First; dtmSystem.tblTelefones.Refresh; dtmSystem.tblTelefones.First; dtmSystem.tblEmail.Refresh; dtmSystem.tblEmail.First; dtmSystem.tblTitulos.Refresh; dtmSystem.tblTitulos.First; dtmSystem.tblHistorico.Refresh; dtmSystem.tblHistorico.First; end; if dtmSystem.tblDevedores.Locate('ID_DEVEDOR', dbgr_hist.DataSource.DataSet.FieldByName('id_devedor').AsInteger, []) then begin helper := dtmSystem.tblDevedores.recno; if veio_cobranca then begin frmEfetuarCobranca.achou := true; Close; end else begin cadDevedores := TcadDevedores.Create(Self); cadDevedores.pesquisa := helper; cadDevedores.ShowModal; end; end; end; procedure TfrmPesquisa.edtSelecionarKeyPress(Sender: TObject; var Key: Char); begin inherited; if (Key = #13) then begin SpeedButton1Click(Self); // enter pra pesquisar end; end; procedure TfrmPesquisa.FormClose(Sender: TObject; var Action: TCloseAction); begin // inherited; // dtmSystem.tblDevedores.close; frmPesquisa := nil; end; procedure TfrmPesquisa.FormCreate(Sender: TObject); begin inherited; // cbb_seletor.ItemIndex := 0; ccb_campo.ItemIndex := 0; if not(dtmSystem.tblDevedores.Active) then begin dtmSystem.tblDevedores.Open; end else begin dtmSystem.tblDevedores.Refresh; end; DBGrid1.Enabled := false; veio_cobranca := false; if not(dtmSystem.cdsHist.Active) then begin dtmSystem.cdsHist.Open; end; if not(dtmSystem.tblEnderecos.Active) then begin dtmSystem.tblEnderecos.Open; end; if veio_cobranca then begin frmEfetuarCobranca.achou := false; end; end; procedure TfrmPesquisa.SpeedButton1Click(Sender: TObject); var tx_pesquisa, string_query, help_cpfcnpj, tx_tel, query2: string; i, tam1: integer; begin inherited; // se vazio, sai if edtSelecionar.Text = '' then begin // exit; abort; end; // coloca o caracter coringa tx_pesquisa := Ansiuppercase(stringreplace(edtSelecionar.Text, ' ', '%', [rfReplaceAll])); string_query := 'select ID_DEVEDOR, TX_NOME, case when TP_CLIENTE = ''F'' ' + 'then CD_CPF when TP_CLIENTE = ''J'' then CD_CNPJ end as TX_DOCUMENTO from ' + 'CHG_DEVEDORES where '; query2 := string_query; Screen.Cursor := crHourglass; case ccb_campo.ItemIndex of 0: // Nome/Razão begin string_query := string_query + 'upper(TX_NOME COLLATE WIN_PTBR) LIKE ' + QuotedStr('%' + tx_pesquisa + '%'); end; 1: // Telefone sem DDD begin // if copy(tx_pesquisa, 1, 1) <> '(' then // begin // tx_pesquisa := '(' + tx_pesquisa; // end; // if copy(tx_pesquisa, 4, 1) <> ')' then // begin // tx_pesquisa := copy(tx_pesquisa, 1, 3) + ')' + // copy(tx_pesquisa, 4, 15); // end; // if copy(tx_pesquisa, 9, 1) <> '-' then // begin // tx_pesquisa := copy(tx_pesquisa, 1, 8) + '-' + // copy(tx_pesquisa, 9, 15); // end; // if (length(tx_pesquisa) < 13) or (length(tx_pesquisa) > 14) then // begin // MessageDlg('Número de telefone inválido.', mtWarning, [mbOK], 0); // exit; // end; tx_tel := stringreplace(tx_pesquisa, '-', '', [rfReplaceAll, rfIgnoreCase]); if (length(tx_pesquisa) < 8) or (length(tx_pesquisa) > 9) then begin MessageDlg ('Número de telefone inválido. Ele deve conter ao menos 8 dígitos e no máximo 9 para que a pesquisa possa ser realizada.', mtWarning, [mbOK], 0); abort; end; if length(tx_pesquisa) = 8 then begin tx_pesquisa := copy(tx_pesquisa, 1, 4) + '-' + copy(tx_pesquisa, 5, 4); end else begin tx_pesquisa := copy(tx_pesquisa, 1, 5) + '-' + copy(tx_pesquisa, 6, 4); end; string_query := string_query + 'ID_DEVEDOR in (SELECT ID_DEVEDOR FROM CHG_TELEFONES WHERE NR_NUMERO = ' + QuotedStr(tx_pesquisa) + ' or NR_NUMERO = '+ QuotedStr(tx_tel) +')'; end; 2: // CPF/CNPJ begin tx_pesquisa := stringreplace(tx_pesquisa, '.', '', [rfReplaceAll]); tx_pesquisa := stringreplace(tx_pesquisa, '-', '', [rfReplaceAll]); tx_pesquisa := stringreplace(tx_pesquisa, '/', '', [rfReplaceAll]); if length(tx_pesquisa) < 14 then begin tx_pesquisa := stringreplace(tx_pesquisa, 'TX_DOCUMENTO', 'CD_CPF', [rfReplaceAll]); help_cpfcnpj := copy(tx_pesquisa, 1, 3) + '.' + copy(tx_pesquisa, 4, 3) + '.' + copy(tx_pesquisa, 7, 3) + '-' + RightStr(tx_pesquisa, 2); string_query := string_query + 'CD_CPF like ' + QuotedStr(help_cpfcnpj); end else if length(tx_pesquisa) >= 14 then begin tx_pesquisa := stringreplace(tx_pesquisa, 'TX_DOCUMENTO', 'CD_CNPJ', [rfReplaceAll]); help_cpfcnpj := copy(tx_pesquisa, 1, 2) + '.' + copy(tx_pesquisa, 3, 3) + '.' + copy(tx_pesquisa, 6, 3) + '/' + copy(tx_pesquisa, 9, 4) + '-' + RightStr(tx_pesquisa, 2); string_query := string_query + 'CD_CNPJ like ' + QuotedStr(help_cpfcnpj); string_query := stringreplace(string_query, 'CD_CPF', 'CD_CNPJ', [rfReplaceAll]); end; end; 3: // Nº do documento begin // select id_devedor from chg_devedores where id_devedor = (select id_devedor from chg_titulos where cd_devedor = '1') string_query := string_query + 'ID_DEVEDOR in (select id_devedor from chg_titulos where (cd_devedor like ' + QuotedStr('%' + tx_pesquisa + '%') + ') or (tx_produto like' + QuotedStr('%' + tx_pesquisa + '%') + '))'; end; 4: begin string_query := string_query + 'id_devedor in ( select id_devedor from chg_emails where upper(TX_EMAIL) LIKE ' + QuotedStr('%' + tx_pesquisa + '%') + ')'; end; 5: begin // string_query := string_query + // 'ID_DEVEDOR in (select distinct id_devedor from chg_titulos where ((cd_devedor like ' // + QuotedStr('%' + tx_pesquisa + '%') + ') or (tx_produto like' + // QuotedStr('%' + tx_pesquisa + '%') + // ')) and id_empresa in (5, 7, 9, 73, 74, 242, 258))'; string_query := string_query + 'ID_DEVEDOR in (select id_devedor from chg_titulos where tx_produto containing ' + QuotedStr(tx_pesquisa) + ' and id_empresa in (5, 7, 9, 73, 74, 242, 258))'; end; 6: begin string_query := string_query + 'CD_DEVEDOR LIKE ' + QuotedStr('%' + tx_pesquisa + '%') end; end; string_query := string_query + ' order by tx_nome'; DBGrid1.Enabled := true; ZQuery1.Close; ZQuery1.SQL.Text := string_query; //ZQuery1.ExecSQL; ZQuery1.Open; Application.ProcessMessages; //ZQuery1.Active := true; if (ZQuery1.IsEmpty)then // se vazio, avisa que não achou nada begin //ZQuery1.Active := false; ZQuery1.Close; MessageDlg('Nenhuma entrada foi encontrada.', mtWarning, [mbOK], 0); end; for i := 0 to ZQuery1.FieldCount - 1 do // arruma o tamanho das colunas conforme os dados begin if AnsiContainsText(DBGrid1.Columns[i].Title.Caption, 'ID_') then begin DBGrid1.Columns[i].Title.Caption := 'Id'; end; if DBGrid1.Columns[i].Title.Caption = 'TX_NOME' then begin DBGrid1.Columns[i].Title.Caption := 'Nome'; end; if DBGrid1.Columns[i].Title.Caption = 'TX_DOCUMENTO' then begin DBGrid1.Columns[i].Title.Caption := 'Nº do documento'; tam1 := 543; end; if DBGrid1.Columns[i].Title.Caption = 'CD_CPF' then begin DBGrid1.Columns[i].Title.Caption := 'CPF'; tam1 := 584; end; if DBGrid1.Columns[i].Title.Caption = 'CD_CNPJ' then begin DBGrid1.Columns[i].Title.Caption := 'CNPJ'; tam1 := 567; end; if DBGrid1.Columns[i].Title.Caption = 'TX_CNPJ' then begin DBGrid1.Columns[i].Title.Caption := 'CNPJ'; tam1 := 543; end; end; for i := 0 to ZQuery1.FieldCount - 1 do begin if AnsiContainsText(DBGrid1.Columns[i].Title.Caption, 'Id') then begin DBGrid1.Columns[i].Width := 40; end; if DBGrid1.Columns[i].Title.Caption = 'Nome' then begin DBGrid1.Columns[i].Width := tam1; end; end; Screen.Cursor := crDefault; end; procedure TfrmPesquisa.WMMoving(var Msg: TWMMoving); var workArea: TRect; begin workArea := Screen.WorkareaRect; with Msg.DragRect^ do begin if Left < workArea.Left then OffsetRect(Msg.DragRect^, workArea.Left - Left, 0); if Top < workArea.Top then OffsetRect(Msg.DragRect^, 0, workArea.Top - Top); if Right > workArea.Right then OffsetRect(Msg.DragRect^, workArea.Right - Right, 0); if Bottom > workArea.Bottom then OffsetRect(Msg.DragRect^, 0, workArea.Bottom - Bottom); end; end; end.