Fórum Como faço para o sistema obedecer o comando do checkbox? #360879
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
Curtir tópico
+ 0Posts
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.
Gostei + 0
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;Gostei + 0
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´);Gostei + 0
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
...
...
...
Gostei + 0
09/07/2008
Adriano_servitec
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)