Ir para conteúdo
  • Cadastre-se

Rodrigo Guelf

Membros Pro
  • Total de ítens

    246
  • Registro em

  • Última visita

Tudo que Rodrigo Guelf postou

  1. Olá amigos, estou homologando com o banco santander e eles me retornaram dizendo que a linha digital esta errada, segue o retorno deles: LINHA DIGITÁVEL ENVIADO 0339915530 95000000000 40004100000 9 67260000001500 ESPERADO 0339915530 95000000000 40004101016 3 67260000001500 Eles dizem que deve ficar igual ao que esta em verde e não como mostra acima em vermelho. Alguém sabe me dizer como resolver? Desde já agradeço a ajuda de quem puder me ajudar!
  2. A opção de Aceito no Santander funciona assim: Sim = A Não = N Estava assim Sim = S Não = N Já corrigi, gostaria que atualizassem no ACBr. Segue em anexo a Unit ACBrBancoSantander.pas ACBrBancoSantander.pas
  3. Biniva boa noite! Descobri o problema meu, eu estava informando a alíquota na vAliqProd. Agora uma duvida, será que esta certo informar a alíquota no formato de 0.0065, no arquivo XML sai deste jeito. Não esta errado isso? Na NFe não é assim!
  4. Rodrigo Guelf

    PIS e COFINS zerados

    Pessoal boa noite! Estou emitindo cupom pelo SAT e descobri que o PIS e COFINS estão saindo zerados independente dos valores que coloco. Segue um XML de como esta saindo. No exemplo estou informando a CST 01, 3,00 e 7,60, ele mostra a CST correta porem a alicota, base e valor saem zerados. CFe35150911111111111111591234567890000284602949.xml
  5. Vou fazer um teste, desde já obrigado! Depois eu posto aqui o resultado!
  6. Régys desculpa pela demora, mais só tive tempo agora para migrar novamente para o trunk2. mudei as seguintes configurações como você pediu: ACBrNFe1.Configuracoes.Geral.SSLLib:= libCapicomDelphiSoap; ACBrNFe1.Configuracoes.WebServices.AjustaAguardaConsultaRet := True; ACBrNFe1.Configuracoes.WebServices.TimeOut := 15000; // tempo de timeout, coloque um tempo maior para resolver problemas ACBrNFe1.Configuracoes.WebServices.AguardarConsultaRet := 3000; ACBrNFe1.Configuracoes.WebServices.IntervaloTentativas := 1000; ACBrNFe1.Configuracoes.WebServices.Tentativas := 10; // quantidade de tentativas de envio ACBrNFe1.Configuracoes.WebServices.AjustaAguardaConsultaRet := True; // ajustar "AguardarConsultaRet" com o valor retornado pelo webservice ao mandar consultar o serviço já retorna o seguinte erro em anexo, se removo as configurações, tem horas que vai tem hora que da o erro.
  7. No seu sistema vc usar estas configurações do WebService? Sempre usou? ou começou a usar depois do Trunk2?
  8. Régis fiz as alterações que você pediu, depois gerei 2500 notas fiscais em bancos de dados separados, porem da mesmo empresa com o mesmo certificado digital apenas com sequencias diferentes para cada copia do sistema, na mesma maquina, na mesmo internet e as versões do Trunk1 se comportaram da seguinte forma. Trunk1 demorou 7 horas para enviar as 2500 notas fiscais, porem não ocorreu nenhum erro. Trunk2 enviei apenas 63 notas porem a cada duas notas fiscais retornava o erro htttp, sem contar que com essas configurações que você passou, ficou muito lento o envio. Régis o se nario é o mesmo, a mesma maquina, a mesma internet, o mesmo banco de dados, o mesmo certificado, a unica coisa diferente foi o sequencial que cada copia do programa estava enviando, eu não tenho duvidas que o problema esta no ACBr, porem não consigo descobrir aonde. Um detalhe importante, eu uso capicom, você também usa capicom ou openSSL? Outra coisa eu estou no estado de são paulo, e você em minas gerais certo? Tenho 6 clientes que foram atualizados para o Trunk2 e todos tiveram o mesmo problema, sempre acontece em horários de picos, eu já consegui simular o erro até no ACBrNFe_Demo e esta em anexo em um post acima neste mesmo tópico. Não sei mais o que fazer a não sem me manter no Trunk1, de qualquer forma agradeço a ajuda que você tentou em me dar!
  9. Daniel, eu entendo sobre a sua falta de tempo, pois somos do mesmo ramo, sei também que o projeto é free, e a unica coisa que possamos fazer para ajudar financeiramente é ser assinante do SAC, assim como eu sou! Porem o problema não esta em eu debugar e achar o erro, pois isso é fácil, o difícil é descobrir o porque da o erro e da onde ele vem, pois não foi eu quem desenvolvi a parte da nfe no ACBr , então vou voltar para o trunk1 e esperar até que alguém do projeto ACBr possa resolver este problema, tendo em vista que não é só este tópico que esta falando sobre isso, ou seja, tem mais pessoas passando por este problema. Tem mais duas empresas de amigo meu que migraram e começou a dar esse problema ai eles voltaram para o trunk1. Acredito que poucas pessoas já migraram para o Trunk2, eu mesmo só migrei porque um dos programadores que trabalha comigo, foi no Firebird Day deste ano e encontrou você lá e você disse que já estava funcionando 100%. Mesmo assim desde já agradeço a sua atenção!
  10. Daniel Bom Dia! Fiz o que vc pediu, consegui simular quase o mesmo erro no ACBrNFe, antes vou fazer uma observação. Em horários que não são de pico, tipo depois da 18:00 ou antes das 08:00 das 15:00 as 16:30 o erro acontece muito raro, eu mesmo já cheguei a enviar mais de 200 notas e não dar o erro, hoje as 08:00 da manha toda a nota fiscal que eu tento enviar com o meu sistema no trunk2 da o erro de requisição não enviada, e estou fazendo a mesmo coisa que o demo ACBrNFe já, carrega a nota no componente , e manda enviar, eu alterei o ACBrNFe para não imprimir apos enviar e imprimir logo em seguida, assim como esta no meu sistema. Quando da o erro de requisição não enviada no meu sistema, e eu entrar no ACBrNFe e mandar gerar uma nota fiscal com uma faixa de numero bem distante uma da outra( no meu sistema estou usando a faixa 350.??? no ACBrNFe estou usando a faixa 500.???) então o ACBrNFe da o seguinte erro: Erro interno:100060 HTTP: 0. o processo passo a passo que estou fazendo no ACBrNFe, é: Abro ele. Clico no botão Criar e Enviar. Preencho o numero da nota fiscal, exemplo: 500010 preencho o numero do lote 1, do enter aguardo, da o erro. Segue as imagens do erro que da no meu sistema e a imagem do erro que da no ACBrNFe, junto estou mandando todo o demo zipado para você analisar. Daniel alguns clientes que tive que atualizar para o trunk 2 já estão tendo este problema! Desde já agradeço a sua atenção! Delphi.rar
  11. Daniel, a unica coisa que mudou foi a minha internet de 10 megas que esta dando 2 megas, já liguei na vivo e o técnico já veio e resolveu, devo admitir que melhorou um pouco sim, agora a cada 10 notas que tento enviar somente 2 do o erro, o problema é que os cliente a maioria a internet é ruim, tipo 1 mega ou 2 no máximo, raro os que tem mais que 2 megas, ai vai ser aquela conversa, antes de atualizar o sistema esta funcionando, agora que atualizou o sistema esta dando este problema. Outra coisa, quando mando cancelar uma nota e da o erro, porem a nota cancelou na sefaz, quando mando novamente o cancelamento ele da erro de duplicidade de evento. E Daniel temos que admitir que no trunk1 nada disso esta acontecendo!
  12. Olá pessoal, fico triste em dizer mais voltou a dar o erro novamente, aconteceu ontem após as 17:00, agora o erro esta em todas as operações que tento fazer. Ao Enviar, Cancelar e Inutilizar numero. A cada 10 notas que tento enviar 1 apenas não da o erro, não alterei nada no meu computador, não instalei nada, estou usando o Windows 10 64bits original, Delphi 2010 Original e o ACBr Trunk2 Se pego a mesma nota fiscal que não foi enviada pelo ACBr Trunk2 e tento envia lá por um executável do programa que foi copilado pelo ACBr Trunk1, envia normalmente. Após dar o erro de requisição não enviada, esta dando outro erro “Invalid Pointer Operation”. Não sei o que fazer e estou assustado, pois tenho clientes para atualizar por outras solicitações no sistema e a nota fiscal não funciona. Desde já agradeço a quem puder ajudar!
  13. Pessoal boa noite, eu estava passando pelo mesmo problema, mas consegui resolver e vou deixar aqui a solução. No Windows 8 ou no 10 baixe a capicom da microsoft neste link: https://www.microsoft.com/pt-br/download/details.aspx?id=25281 No Internet Explorer vá em Ferramentas > Opções da Internet > Avançadas role a barra até o final, deixa as opções como mostra a imagem em anexo. Após mudar as configurações o internet Explorer sugere que reinicio o computador(esta escrito bem abaixo) no meu caso não houve a necessidade, só fechei e abri o internet Explorer novamente; Essas configurações abaixo não servem para o ACBr_Trunk1, as do Trunk1 são outras, isso é só para o Trunk2 Testei no windows 7 e 10 64 Bits, ambos então funcionando normal. Espero ter ajudado!
  14. Amigos eu antes guardava a data do vencimento do certificado dentro do banco de dados do programa e avisava o cliente quando faltava 30 dias para vencer o certificado dele. Agora a propriedade DataVencimento não tem mais, só tem a opção "Certificados.VerificarValidade" que nem sei como funciona, como eu faço para pegar a data do vencimento. Uso Capicom.
  15. Boa tarde! Estou homologando o boleto para a caixa econômica federal, estou com o seguinte problema Acerto 01.: SEGMENTO Q. Codigos de erro: CPF do sacado invalido. Para CNPJ preencher informação Segmento Q posição 18 conforme tabela abaixo (2). Qual o campo eu devo setar para informar corretamente se o sacado tem Cnpj ou Cpf?
  16. Juliana Tamizou, boa tarde! Já estou fazendo isso, veja o meu exemplo: procedure TFormBoleto.AdicionarCabecalhoBoleto_ACBr; begin with DtCadastro do begin RefreshTable(CDSContasB, 'SELECT * FROM BANCO '+ 'WHERE CODIGO =:CODIGO ', CDSParametrosCOD_USUARIO.AsInteger); case CDSContasBACBR_TIPO_BANCO.AsInteger of 0 : ACBrBoleto.Banco.TipoCobranca:= cobNenhum; 1 : ACBrBoleto.Banco.TipoCobranca:= cobBanestes; 2 : ACBrBoleto.Banco.TipoCobranca:= cobBanrisul; 3 : ACBrBoleto.Banco.TipoCobranca:= cobBradesco; 4 : ACBrBoleto.Banco.TipoCobranca:= cobBicBanco; 5 : ACBrBoleto.Banco.TipoCobranca:= cobSafraBradesco; 6 : ACBrBoleto.Banco.TipoCobranca:= cobBradescoSICOOB; 7 : ACBrBoleto.Banco.TipoCobranca:= cobBRB; 8 : ACBrBoleto.Banco.TipoCobranca:= cobCaixaEconomica; 9 : ACBrBoleto.Banco.TipoCobranca:= cobCaixaSicob; 10 : ACBrBoleto.Banco.TipoCobranca:= cobBancoCECRED; 11 : ACBrBoleto.Banco.TipoCobranca:= cobBancoDoBrasil; 12 : ACBrBoleto.Banco.TipoCobranca:= cobBancoDoNordeste; 13 : ACBrBoleto.Banco.TipoCobranca:= cobHSBC; 14 : ACBrBoleto.Banco.TipoCobranca:= cobItau; 15 : ACBrBoleto.Banco.TipoCobranca:= cobBancoMercantil; 16 : ACBrBoleto.Banco.TipoCobranca:= cobBancoob; 17 : ACBrBoleto.Banco.TipoCobranca:= cobBancoSafra; 18 : ACBrBoleto.Banco.TipoCobranca:= cobSicred; end; ACBrBoleto.Cedente.Agencia:= CDSContasBACBR_AGENCIA.AsString; ACBrBoleto.Cedente.AgenciaDigito:= CDSContasBACBR_AGENCIA_DIG.AsString; ACBrBoleto.Cedente.Bairro:= CDSContasBACBR_BAIRRO.AsString; case CDSContasBACBR_CARAC_TITULO.AsInteger of 0 : ACBrBoleto.Cedente.CaracTitulo:= tcCaucionada; 1 : ACBrBoleto.Cedente.CaracTitulo:= tcDescontada; 2 : ACBrBoleto.Cedente.CaracTitulo:= tcSimples; 3 : ACBrBoleto.Cedente.CaracTitulo:= tcVendor; 4 : ACBrBoleto.Cedente.CaracTitulo:= tcVinculada; end; ACBrBoleto.Cedente.CEP:= ApenasNumerosStr(CDSContasBACBR_CEP.AsString); ACBrBoleto.Cedente.Cidade:= CDSContasBACBR_CIDADE.AsString; ACBrBoleto.Cedente.CNPJCPF:= ApenasNumerosStr(CDSContasBACBR_CNPJCPF.AsString); ACBrBoleto.Cedente.CodigoCedente:= CDSContasBCOD_CEDENTE.AsString; ACBrBoleto.Cedente.CodigoTransmissao:= CDSContasBACBR_COD_TRANSMISSAO.AsString; ACBrBoleto.Cedente.Complemento:= CDSContasBACBR_COMPLEMENTO.AsString; ACBrBoleto.Cedente.Conta:= CDSContasBACBR_CONTA.AsString; ACBrBoleto.Cedente.ContaDigito:= CDSContasBACBR_CONTA_DIG.AsString; ACBrBoleto.Cedente.Convenio:= CDSContasBACBR_CONVENIO.AsString; ACBrBoleto.Cedente.Logradouro:= CDSContasBACBR_LOGRADOURO.AsString; ACBrBoleto.Cedente.Modalidade:= CDSContasBACBR_MODALIDADE.AsString; ACBrBoleto.Cedente.Nome:= CDSContasBACBR_NOME.AsString; ACBrBoleto.Cedente.NumeroRes:= CDSContasBACBR_NUMERO_RES.AsString; case CDSContasBACBR_TIPO_CARTEIRA.AsInteger of 0 : ACBrBoleto.Cedente.TipoCarteira:= tctRegistrada; 1 : ACBrBoleto.Cedente.TipoCarteira:= tctSimples; end; case CDSContasBACBR_RESP_EMISSAO.AsInteger of 0 : ACBrBoleto.Cedente.ResponEmissao:= tbBancoEmite; 1 : ACBrBoleto.Cedente.ResponEmissao:= tbBancoNaoReemite; 2 : ACBrBoleto.Cedente.ResponEmissao:= tbBancoReemite; 3 : ACBrBoleto.Cedente.ResponEmissao:= tbCliEmite; end; ACBrBoleto.Cedente.Telefone:= CDSContasBACBR_TELEFONE.AsString; case CDSContasBACBR_TIPO_INSCRICAO.AsInteger of 0 : ACBrBoleto.Cedente.TipoInscricao:= pFisica; 1 : ACBrBoleto.Cedente.TipoInscricao:= pJuridica; end; case CDSContasBACBR_LAY_REMESSA.AsInteger of 0 : ACBrBoleto.LayoutRemessa:= c240; 1 : ACBrBoleto.LayoutRemessa:= c400; end; ACBrBoleto.Cedente.UF:= CDSContasBACBR_UF.AsString; end; end; Isso eu faço uma unica vez, depois dentro de um while eu vou adicionando os boleto no titulo, assim: procedure TFormBoleto.AdicionarDadosNoBoleto_ACBr(vNossoNumero: Integer; Titulo : TACBrTitulo); begin with DtCadastro do begin Titulo := ACBrBoleto.CriarTituloNaLista; with Titulo do begin Vencimento := CDSBoletoDT_VENCIMENTO.AsDateTime; DataDocumento := CDSBoletoDT_GERADA.AsDateTime; NumeroDocumento := CDSBoletoDOCUMENTO.AsString; EspecieDoc := 'DM'; Aceite := atSim; DataProcessamento := CDSBoletoDT_GERADA.AsDateTime; case RgTipoBoleto.ItemIndex of 0 : NossoNumero := IntToStr(vNossoNumero); 1 : NossoNumero := CDSBoletoNOSSO_NUMERO.AsString; end; Carteira := CDSContasBCARTEIRA.AsString; ValorDocumento := CDSBoletoVALOR.AsCurrency; Sacado.NomeSacado := CDSBoletoCLIENTE.AsString; Sacado.CNPJCPF := ApenasNumerosStr(CDSBoletoCPF_CNPJ.AsString); Sacado.Logradouro := CDSBoletoENDERECO.AsString; Sacado.Numero := CDSBoletoEND_NUM.AsString; Sacado.Bairro := CDSBoletoBAIRRO.AsString; Sacado.Cidade := CDSBoletoCIDADES.AsString; Sacado.UF := CDSBoletoUF.AsString; Sacado.CEP := ApenasNumerosStr(CDSBoletoCEP.AsString); ValorAbatimento := 0; LocalPagamento := 'Pagar preferêncialmente nas agências deste banco'; ValorMoraJuros := (((CDSBoletoVALOR.AsCurrency * CDSContasBTX_JUROS.AsCurrency) / 100)/ 30); ValorDesconto := 0; ValorAbatimento := 0; DataMoraJuros := StrToDateDef('', 0); DataDesconto := StrToDateDef('', 0); DataAbatimento := StrToDateDef('', 0); if (CDSContasBPROTESTAR.AsInteger > 0) then DataProtesto := (CDSBoletoDT_VENCIMENTO.AsDateTime + CDSContasBPROTESTAR.AsInteger) else DataProtesto := StrToDateDef('', 0); PercentualMulta := CDSContasBTX_JUROS.AsCurrency; Mensagem.Text := CDSContasBINTRUCOES1.AsString+' '+ CDSContasBINTRUCOES2.AsString+' '+ CDSContasBINTRUCOES3.AsString; OcorrenciaOriginal.Tipo := toRemessaBaixar; Instrucao1 := ''; Instrucao2 := ''; Instrucao3 := ''; end; end; end; quando mando imprimir vem o erro em anexo
  17. Amigos, estou implantando o boleto da caixa no meu sistema e estou me deparando com o seguinte problema: Carteira Inválida Estou fazendo assim ACBrBoleto.Cedente.TipoCarteira:= tctRegistrada porem eu debuguei e notei que quando ele cai dentro da rotina abaixo function TACBrCaixaEconomica.FormataNossoNumero(const ACBrTitulo :TACBrTitulo): String; var ANossoNumero :String; begin with ACBrTitulo do begin ANossoNumero := OnlyNumber(NossoNumero); if (ACBrTitulo.Carteira = 'RG') then begin {carterira registrada} if ACBrTitulo.CarteiraEnvio = tceCedente then ANossoNumero := '14'+padR(ANossoNumero, 15, '0') else ANossoNumero := '11'+padR(ANossoNumero, 15, '0') end else if (ACBrTitulo.Carteira = 'SR')then {carteira 2 sem registro} begin if ACBrTitulo.CarteiraEnvio = tceCedente then ANossoNumero := '24'+padR(ANossoNumero, 15, '0') else ANossoNumero := '21'+padR(ANossoNumero, 15, '0') end else raise Exception.Create( ACBrStr('Carteira Inválida.'+sLineBreak+'Utilize "RG" ou "SR"') ) ; end; Result := ANossoNumero; end; o ACBrTitulo.Carteira esta vazio. Não sei se estou fazendo algo de errado ou se o ACBr esta com problema. Estou seguinte o exemplo do ACBrBoleto. Primeiro eu alimento os dados do ACBrBoleto.Cedente depois Titulo := ACBrBoleto.CriarTituloNaLista; with Titulo do begin Vencimento := CDSBoletoDT_VENCIMENTO.AsDateTime; DataDocumento := CDSBoletoDT_GERADA.AsDateTime; NumeroDocumento := CDSBoletoDOCUMENTO.AsString; EspecieDoc := 'DM'; Aceite := atSim; ..... Desde já agradeço a quem me ajudar!
  18. Amigos alguma posição sobre se o ACBr já foi corrigido? Tambem estou passando pelo mesmo problema, observei que o ACBr não esta gerando as TAGs: <vICMSOp></vICMSOp> <pDif>0.00</pDif> <vICMSDif>0.00</vICMSDif> <vICMS>0.00</vICMS> </ICMS51> esta saindo assim: -<ICMS51> <orig>0</orig> <CST>51</CST> <modBC>2</modBC> <vBC>1000.00</vBC> <pICMS>18.0000</pICMS> <vICMS>180.00</vICMS> </ICMS51>
  19. Juliomar, fiz teste com as alterações antes de enviar e notei que não é este comando que esta fazendo a impressão vir nas linhas abaixo, tentei de varias formas mais não consegui, constaria de pedir a ajuda de você se possível para resolver.
  20. Rodrigo Guelf

    Da Para Alterar No Acbr

    Pessoal estou com um problemas nos clientes de farmácia, quando imprime a nota fiscal com os lote o consumo de papel esta muito grande, tipo uma nota fiscal com 20 dias da mais de 6 paginas, gostaria de saber se é possível alterar o ACBr estas linhas abaixo: na unit ACBrNFeDANFeRLPaisagem da linha 1793 a linha 1820 esta assim: else begin if Prod.med.Count > 0 then begin for i := 0 to Prod.med.Count - 1 do begin if dm_nLote in FDetMedicamentos then sDetalhamentoEspecifico := sDetalhamentoEspecifico + 'NÚMERO DO LOTE: ' + Prod.med.Items.nLote + #13#10; if dm_qLote in FDetMedicamentos then sDetalhamentoEspecifico := sDetalhamentoEspecifico + 'QUANTIDADE DO LOTE: ' + FormatFloat('###,##0.000', Prod.med.Items.qLote) + #13#10; if dm_dFab in FDetMedicamentos then sDetalhamentoEspecifico := sDetalhamentoEspecifico + 'DATA DE FABRICAÇÃO: ' + DateToStr(Prod.med.Items.dFab) + #13#10; if dm_dVal in FDetMedicamentos then sDetalhamentoEspecifico := sDetalhamentoEspecifico + 'DATA DE VALIDADE: ' + DateToStr(Prod.med.Items.dVal) + #13#10; if dm_vPMC in FDetMedicamentos then sDetalhamentoEspecifico := sDetalhamentoEspecifico + 'PREÇO MÁX. CONSUMIDOR: R$ ' + FormatFloat('###,##0.00', Prod.med.Items.vPMC) + #13#10; if (sDetalhamentoEspecifico > '') and (sDetalhamentoEspecifico <> #13#10) then begin if i = Prod.med.Count - 1 then sDetalhamentoEspecifico := sDetalhamentoEspecifico else sDetalhamentoEspecifico := sDetalhamentoEspecifico + #13#10; end; da para mudar para ficar assim: else begin if Prod.med.Count > 0 then begin for i := 0 to Prod.med.Count - 1 do begin if dm_nLote in FDetMedicamentos then sDetalhamentoEspecifico := sDetalhamentoEspecifico + ' NÚMERO DO LOTE: ' + Prod.med.Items.nLote; if dm_qLote in FDetMedicamentos then sDetalhamentoEspecifico := sDetalhamentoEspecifico + ' QUANTIDADE DO LOTE: ' + FormatFloat('###,##0.000', Prod.med.Items.qLote); if dm_dFab in FDetMedicamentos then sDetalhamentoEspecifico := sDetalhamentoEspecifico + ' DATA DE FABRICAÇÃO: ' + DateToStr(Prod.med.Items.dFab); if dm_dVal in FDetMedicamentos then sDetalhamentoEspecifico := sDetalhamentoEspecifico + ' DATA DE VALIDADE: ' + DateToStr(Prod.med.Items.dVal); if dm_vPMC in FDetMedicamentos then sDetalhamentoEspecifico := sDetalhamentoEspecifico + ' PREÇO MÁX. CONSUMIDOR: R$ ' + FormatFloat('###,##0.00', Prod.med.Items.vPMC); if (sDetalhamentoEspecifico > '') and (sDetalhamentoEspecifico <> #13#10) then begin if i = Prod.med.Count - 1 then sDetalhamentoEspecifico := sDetalhamentoEspecifico else sDetalhamentoEspecifico := sDetalhamentoEspecifico + #13#10; end; Isso fará com que o conteúdo da linha complementar fique tudo em uma linha só, isso resolve o meu problema. Se for possível alterem também na Unit ACBrNFeDANFeRLRetrato Aguardo!
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.