Como faço para o sistema obedecer o comando do checkbox?
08/07/2008
0
Ai quero fazer o seguinte ao marcar os checkbox dentro deste dbgrid e clicar num botão o sistema verificar quais os checkbox´s marcados e fazer um looping na tabela e chamando a procedure [b:67e6894da7]MontaEnvioEMail[/b:67e6894da7]
Bom esta procedure esta certa, apenas o looping que eu acho não estar funcionando a cada checkbox marcado
Olhem como esta o código que eu fiz pra isso:
with qryEnviaPed do begin Close; SelectSQL.Text := ´ select a.*, b. RAZAO_SOCIAL ´+ ´ from pedidos a, CLIENTESFORENCEDORES b ´+ ´ where b.id_pessoa = a.id_cliente and ´+ ´ MARCAR_CHECK = ´´T´´ ´; Open; if not IsEmpty then begin First; while not qryEnviaPed.Eof do {enquanto não for o fim} begin try {:chama a procedure a cada passada} MontaEnvioEMail; Next; except on E:Exception do begin MessageDlg(´Ocorreu um erro neste processo. ´ +#1313 +´Erro gerado: ´+13+ E.Message + 1313 + ´Todo o processo foi abortado!´, mtError, [mbOk],0); Abort; end; end; end; end; end;
Então ele chega a filtrar os pedidos que estão com o checkbox True, mais não envia todos apenas o primeiro, percebi que é pq os outros que estão marcados não estão selecionados, ai resolvi usar o MultSelect do dbgrid, mais esta enviando todos só que apenas do ultimo que eu selecionei na grade, ou seja se eu tenho 3 selecionados e ai peço para enviar ele envia 3 vezes o ultimo que eu selecionei na grade.
Adriano_servitec
Posts
08/07/2008
Adriano_servitec
Bom eu fiz mais um select para filtrar na hora do looping da tabela
Esta aqui é como ficou o código na hora de enviar, coloquei mais uma procedure ai dentro para filtrar
begin with qryEnviaPed do begin Close; SelectSQL.Text := ´ select a.*, b. RAZAO_SOCIAL ´+ ´ from pedidos a, CLIENTESFORENCEDORES b ´+ ´ where b.id_pessoa = a.id_cliente and ´+ ´ MARCAR_CHECK = ´´T´´ ´; Open; if not IsEmpty then begin First; while not qryEnviaPed.Eof do {enquanto não for o fim} begin try {:Primeiro chama a procedure que monta a SQL para gerar a Nota do Pedido} SQLMontaEnvioEMail; {:chama a procedure a cada passada} MontaEnvioEMail; Next; except on E:Exception do begin frmBlibliotecas.Dc_MessageDlg(´Ocorreu um erro neste processo. ´ +#1313 +´Erro gerado: ´+13+ E.Message + 1313 + ´Todo o processo foi abortado!´, mtError, [mbOk],0); Abort; end; end; end; end; end;
A procedure SQLMontaEnvioEMail é esta aqui, teria que a cada loop na tabela passar pela condição do where e pegar o valor da variavel, mais achei um e-mail que foi enviado que parece que não passou por este filtro, ai marquei menos no dbgrid e ai passou, mais se eu passar muitos parece que por algum motivo deve iginorar esta select ai.
procedure TfrmEnvioemail.SQLMontaEnvioEMail; var Int_ID : integer; begin {:Select para o relatório} with dm.qryEnviaPed do begin Close; SQL.Clear; SQL.Text := ´ select ´+ ´ a.*, ´+ ´ b.id_produto, ´+ ´ b.descricao, ´+ ´ b.qtde, ´+ ´ b.vl_unitario, ´+ ´ b.descontos, ´+ ´ b.vl_total, ´+ ´ b.indice_ipi, ´+ ´ c.razao_social, ´+ ´ ( C.ENDERECO||´´ Nº. ´´||C.NUM_CASA)AS ENDER_NUM, ´+ ´ C.COMPLEMENTO, ´+ ´ (C.BAIRRO||´´ CEP: ´´||C.CEP)as bairro_cep, ´+ ´ (c.MUNICIPIO||´´ UF.: ´´||c.ESTADO)as Munic_Uf, ´+ ´ (C.CPF_CNPJ||´´ IE/RG nº: ´´|| C.INSC_ESTADUAL)AS CNPJ_IE, ´+ ´ C.EMAIL, ´+ ´ (C.TELEFONE||´´ Fax: ´´||C.FAX)as Tel_Fax, ´+ ´ (C.RESPONSAVELCOMPRAS||´´ TEL.RESP. ´´||C.TELEFONERESPCOMPRAS)AS RESPCOMPRAS_TEL ´+ ´ from ´+ ´ pedidos A, ´+ ´ MOVIEMENTOPEDIDO B, ´+ ´ clientesforencedores c ´+ ´ where ´+ ´ b.id_pedido = a.id ´+ ´ and ´+ ´ a.id_cliente = c.id_pessoa ´+ ´ and ´+ ´ a.id = :ID ´; Int_ID := dsEnviaPed.DataSet.FieldByName(´ID´).asInteger; ParamByName(´ID´).AsInteger := Int_ID; Open; end; end;
Bom ai depois é so a procedure de envio de email´s que ja esta configurado certo, pois verifiquei em todos e-mail que eu mandei e esta mandando certo pra todos
procedure TfrmEnvioemail.MontaEnvioEmail; begin {:enviar pedidos, falta fazer os filtros ainda} FSMTP_Server := Edit2.Text; //variavel SMTP if Trim(Edit3.Text) <then> 0 then raise Exception.Create(´Arquivo está aberto. Feche o Adobe para gravar o pedido´) else raise E; end; end; end;
Então, quase funcionou certo, mais tem algum problema em alguma determinada hora que eu acho que o loop que é feito na hora de enviar esta se perdendo, por isso a variavel não consegue pegar o valor que é preciso para montar o PDF certo, ai quando não passa pela variavel cria uma nota de pedido com todos os itens de todos os clientes em uma só nota.
08/07/2008
Adriano_servitec
procedure TfrmEnvioemail.MontaEnvioEmail; begin {:enviar pedidos, falta fazer os filtros ainda} FSMTP_Server := Edit2.Text; //variavel SMTP if Trim(Edit3.Text) <> ´´ then FSMTP_Port := StrToInt(Edit3.Text) //variavel porta else FSMTP_Port := 25; FSMTP_Login := Edit4.Text; //variavel login do usuario SMTP FSMTP_Password := Edit5.Text; //variavel senha do usuario SMTP FSMTP_From := Edit1.Text; //endereco do email de envio FSMTP_To := dsEnviaPed.DataSet.FieldByName(´EMAIL_FORNEC´).AsString; //endereco do email do destino FSMTP_Message := ´Mensagem automática - Envio de Pedido nº ´+dsEnviaPed.DataSet.FieldByName(´ID´).asString; //mensagem enviada {:Depois chama a procedure que monta no RBuilder o Relatório da Nota de Pedido} EnvioEmail; frmBlibliotecas.EnviaPedEmail(´Em anexo envio de pedidos da Empresa Teste Representações Ltda´, ´C:\SysRepresentante\Source\´+wNomarq+´.PDF´); frmBlibliotecas.Dc_MessageDlg(´Dados enviados com sucesso´, mtInformation, [mbOK], 0); end;
procedure TfrmEnvioemail.EnvioEmail; begin try {:Gera o arquivo PDF para ser anexado} n_Pedido := IntToStr(dsEnviaPed.DataSet.FieldByName(´ID´).AsInteger); wNomarq := ´PD´+FormatDateTime(n_pedido+´.yymmdd´, now); ppReport1.DeviceType := ´PDF´; ppreport1.AllowPrintToFile := True; ppreport1.ShowPrintDialog := False; ppReport1.SaveAsTemplate := True; ppReport1.SavePrinterSetup := True; ppReport1.TextFileName := ´C:\SysRepresentante\Source\´+wNomarq+´.PDF´; //Joga o pdf criado para a pasta aonde esta o programa lá no cliente. //ppReport1.PrintReport; except on E: Exception do begin if Pos(´Cannot Open File´, E.Message) > 0 then raise Exception.Create(´Arquivo está aberto. Feche o Adobe para gravar o pedido´) else raise E; end; end; end;
09/07/2008
Adriano_servitec
procedure TfrmEnvioemail.SQLMontaEnvioEMail; var Int_ID : integer; SaveFileID : TMemo; begin {:Select para o relatório} with dm.qryEnviaPed do begin Close; SQL.Clear; SQL.Text := ´ select ´+ ´ a.*, ´+ ´ b.id_produto, ´+ ´ b.descricao, ´+ ´ b.qtde, ´+ ´ b.vl_unitario, ´+ ´ b.descontos, ´+ ´ b.vl_total, ´+ ´ b.indice_ipi, ´+ ´ c.razao_social, ´+ ´ ( C.ENDERECO||´´ Nº. ´´||C.NUM_CASA)AS ENDER_NUM, ´+ ´ C.COMPLEMENTO, ´+ ´ (C.BAIRRO||´´ CEP: ´´||C.CEP)as bairro_cep, ´+ ´ (c.MUNICIPIO||´´ UF.: ´´||c.ESTADO)as Munic_Uf, ´+ ´ (C.CPF_CNPJ||´´ IE/RG nº: ´´|| C.INSC_ESTADUAL)AS CNPJ_IE, ´+ ´ C.EMAIL, ´+ ´ (C.TELEFONE||´´ Fax: ´´||C.FAX)as Tel_Fax, ´+ ´ (C.RESPONSAVELCOMPRAS||´´ TEL.RESP. ´´||C.TELEFONERESPCOMPRAS)AS RESPCOMPRAS_TEL ´+ ´ from ´+ ´ pedidos A, ´+ ´ MOVIEMENTOPEDIDO B, ´+ ´ clientesforencedores c ´+ ´ where ´+ ´ b.id_pedido = a.id ´+ ´ and ´+ ´ a.id_cliente = c.id_pessoa ´+ ´ and ´+ ´ a.id = :ID ´; Int_ID := dsEnviaPed.DataSet.FieldByName(´ID´).asInteger; ParamByName(´ID´).AsInteger := Int_ID; Open; SaveFileID.Text := IntToStr(Int_ID); {:coloquei este comando para ver o que vai salvar no log sqlHistorico.txt} SaveFileID.Lines.SaveToFile(´C:\SysRepresentante\Source\Runtime \sqlHistoricoID.txt´); end; end;
A parte que estou querendo que salva no arquivo é esta aqui
SaveFileID.Text := IntToStr(Int_ID); {:coloquei este comando para ver o que vai salvar no log sqlHistorico.txt} SaveFileID.Lines.SaveToFile(´C:\SysRepresentante\Source\Runtime \sqlHistoricoID.txt´);
09/07/2008
Adriano_servitec
procedure TfrmEnvioemail.SQLMontaEnvioEMail; var Int_ID, I : integer; SaveFileID : TStringList; begin {:Select para o relatório} SaveFileID := TStringList.Create; // Cria instancia with dm.qryEnviaPed do begin Close; SQL.Clear; SQL.Text := ´ select ´+ ´ a.*, ´+ ´ b.id_produto, ´+ ´ b.descricao, ´+ ´ b.qtde, ´+ ´ b.vl_unitario, ´+ ´ b.descontos, ´+ ´ b.vl_total, ´+ ´ b.indice_ipi, ´+ ´ c.razao_social, ´+ ´ ( C.ENDERECO||´´ Nº. ´´||C.NUM_CASA)AS ENDER_NUM, ´+ ´ C.COMPLEMENTO, ´+ ´ (C.BAIRRO||´´ CEP: ´´||C.CEP)as bairro_cep, ´+ ´ (c.MUNICIPIO||´´ UF.: ´´||c.ESTADO)as Munic_Uf, ´+ ´ (C.CPF_CNPJ||´´ IE/RG nº: ´´|| C.INSC_ESTADUAL)AS CNPJ_IE, ´+ ´ C.EMAIL, ´+ ´ (C.TELEFONE||´´ Fax: ´´||C.FAX)as Tel_Fax, ´+ ´ (C.RESPONSAVELCOMPRAS||´´ TEL.RESP. ´´||C.TELEFONERESPCOMPRAS)AS RESPCOMPRAS_TEL ´+ ´ from ´+ ´ pedidos A, ´+ ´ MOVIEMENTOPEDIDO B, ´+ ´ clientesforencedores c ´+ ´ where ´+ ´ b.id_pedido = a.id ´+ ´ and ´+ ´ a.id_cliente = c.id_pessoa ´+ ´ and ´+ ´ a.id = :ID ´; Int_ID := dsEnviaPed.DataSet.FieldByName(´ID´).asInteger; ParamByName(´ID´).AsInteger := Int_ID; Open; //SaveFileID.Text := IntToStr(Int_ID); {:coloquei este comando para ver o que vai salvar no log sqlHistorico.txt} for i := 0 to Int_ID; //SaveFileID.Count-1 do begin //ShowMessage(SaveFileID.Names[i]+´ is ´+SaveFileID.ValueFromIndex[i]); SaveFileID.Add(SaveFileID[I]); end; SaveFileID.SaveToFile(´C:\SysRepresentante\Source\Runtime Packages\sqlHistoricoID.txt´); end; SaveFileID.Free; // -- Libera da Memória end;
Para gravar um arquivo TXT como todos os dados
Resultado de como gravou no arquivo gerado
127
127
sendo que tem que vir
127
130
132
134
...
...
...
09/07/2008
Adriano_servitec
Clique aqui para fazer login e interagir na Comunidade :)