Ir para conteúdo
  • Cadastre-se

Rodrigo Cardilo

Membros Pro
  • Total de ítens

    251
  • Registro em

  • Última visita

Tudo que Rodrigo Cardilo postou

  1. Boa tarde amigos, Estou com um problema que nunca vi e gostaria de compartilhar caso alguém já tenha visto algo parecido. Meu sistema utiliza datasnap com Firedac no Servidor de Aplicação. Quando vou fazer uma consulta e logo em seguida gravar no banco está aparecendo a mensagem Falha Catastrófica. Como não é uma mensagem que ajuda muito andei forçando e logo após aparece uma mensagem que eu nunca me deparei antes conforme figura abaixo: A única coisa que identifiquei familiar nessa mensagem é o meu provider PV08480. Caso alguém saiba "decifrar" essa mensagem e puder me ajudo fico agradecido.
  2. Prezados, Fiz um último ajuste na leitura do retorno pois estava tendo problema com o tamanho máximo do nosso numero (10). Segue arquivo.ACBrBancoC6.pas
  3. Boa tarde amigos, Conforme conversa no discord e ajuda do amigo @Daniel InfoCotidiano e @Victor H. Gonzales - Panda segue unit alterada para cobrança registrada do C6. A principal mudança foi a utilização da modalidade onde Modalidade = '' ou = '1' é do modo que já funcionava (cobrança direta) e Modalidade = '2' é cobrança registrada segundo manual anexo. Uma sugestão minha seria apagar os comentários existentes na unit sobre remessa cnab240 pois o banco não utiliza isso. Grato desde já e obrigado pela ajuda. ACBrBancoC6.pas
  4. Boa tarde amigos do ACBR, Conversando com o @Daniel InfoCotidiano no discord e estudando a unit ACBRBancoC6 eu percebi que temos um problema com o tipo de cobrança. O C6 trabalha com cobrança direta e cobrança com registro (que é meu caso) e não é contemplado pelo arquivo. Minha dúvida é, para melhor colaborar, existe alguma propriedade no componente ACBrBoleto onde posso classificar o tipo de cobrança? Segue algumas telas do manual explicando esse detalhe
  5. Boa tarde, Não entendi. A minha alteração não foi na última versão?
  6. Boa tarde, Fiz algumas modificações na unit AcbrBoletoC6 depois de tentar homologar minha empresa. O suporte deles ainda está engatinhando porém conseguimos ajustar. Fiz algumas alterações na remessa e implementei o retorno corretamente. Segue anexo documentação e arquivo. Grato, ACBrBancoC6.pas Motivos de ocorrencias Layout C6 (1).xlsx Layout Cnab 400 C6Bank_Junho 2022 (2).pdf
  7. Bom dia amigos, Aconteceu esse caso com um cliente meu semana passada. Ele emitiu um ct-e de MG para SP com o valor errado. O tomador, que é contribuinte de ICMS, realizou o evento Prestação do Serviço em Desacordo e solicitou um outro Ct-e. Agora não consigo gerar um Ct-e substituto sem colocar uma chave, seja do Ct-e de Anulação, seja de NF-e de Anulação. Alguém sabe como deve ser feito a partir de agora, ainda na versão 3.0? Grato desde já
  8. Olá amigos, Tenho um sistema para controle de ocupação de um determinado condomínio que a partir de agora me solicitaram uma espécie de mapa de ocupação conforme imagens anexo. Já tenho esse controle de ocupação por data em banco de dados e fiz um mapa usando dbgrid porém é muito lento para ser montado. Estou procurando uma alternativa e não sei qual componente eu poderia utilizar ou uma maneira de ser preenchido dinamicamente pegando os dados do Banco de Dados. Se alguém tiver alguma dica e puder me ajudar eu agradeço. Grato
  9. Também fiz dessa forma e funcionou muito bem. @Luiz Carlos Panoni Junior o exemplo é somente para dar um norteio. O componente é bem flexível seguindo o padrão do Banco.
  10. Passei pelo mesmo problema do amigo acima e resolvi fazendo as modificações na unit conforme o amigo @Aggille Sistemas de Gestão. Agora funcionou perfeitamente.
  11. Boa tarde amigos, Após uma troca de mensagens com o usuário Daniel no discord, o mesmo me pediu pra abrir esse tópico. Estou tentando utilizar o ACBBoletoWs no Banco inter. Fiz toda a configuração e coloquei o código abaixo: ACBrBoleto1.Configuracoes.WebService.ArquivoCRT := 'D:\AdmCardilo\Boleto\InterAPI_Certificado.crt'; ACBrBoleto1.Configuracoes.WebService.ArquivoKEY := 'D:\AdmCardilo\Boleto\InterAPI_Chave.key'; ACBrBoleto1.Configuracoes.WebService.SSLHttpLib := httpOpenSSL; ACBrBoleto1.Configuracoes.WebService.SSLCryptLib := cryOpenSSL; ACBrBoleto1.Configuracoes.WebService.SSLXmlSignLib := xsLibXml2; ACBrBoleto1.Configuracoes.WebService.SSLType := LT_TLSv1_2; ACBrBoleto1.Configuracoes.WebService.UseCertificateHTTP := True; ACBrBoleto1.Configuracoes.WebService.TimeOut := 10000; ACBrBoleto1.Cedente.CedenteWS.ClientID := 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; ACBrBoleto1.Cedente.CedenteWS.ClientSecret := 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; ACBrBoleto1.Cedente.CedenteWS.Scope := 'extrato.read boleto-cobranca.read boleto-cobranca.write'; Depois tentei fazer a consulta dos boletos em aberto com o seguinte código: procedure TForm1.Button2Click(Sender: TObject); var FiltrosAPI: TACBrBoletoWSFiltroConsulta; boleto: TACBrBoleto; SLRetorno: TStringList; Retorno: TListaACBrBoletoRetornoWS; I: Integer; begin boleto := ACBrBoleto1; FiltrosAPI := boleto.Configuracoes.WebService.Filtro; FiltrosAPI.Clear; FiltrosAPI.indicadorSituacao := isbAberto; FiltrosAPI.dataVencimento.DataInicio := StrToDate('01/01/2023') ; FiltrosAPI.dataVencimento.DataFinal := Date + 30; boleto.Configuracoes.WebService.Operacao := tpConsulta; boleto.Enviar; Retorno := boleto.ListaConsultaRetornoWeb; if Retorno.Count > 0 then begin SLRetorno := TStringList.Create; try SLRetorno.Add('Cod_Retorno=' + Retorno[I].CodRetorno + sLineBreak + 'Msg_Retorno=' + Retorno[I].MsgRetorno + sLineBreak + 'Ori_Retorno=' + Retorno[I].OriRetorno + sLineBreak + 'HTTP_Result=' + IntToStr(Retorno[I].HTTPResultCode) + sLineBreak + 'JSON=' + Retorno[I].JSON); SLRetorno.Add('indicadorContinuidade=' + BoolToStr(Retorno[0].indicadorContinuidade)); SLRetorno.Add('proximoIndice=' + IntToStr(Retorno[0].proximoIndice)); SLRetorno.Add(' '); SLRetorno.Add(' '); for I := 0 to Pred(Retorno.Count) do begin SLRetorno.Add('[Boletos Index = ' + FormatFloat('000', I) + ']'); SLRetorno.Add('numeroBoletoBB = ' + Retorno[I].DadosRet.TituloRet.NossoNumero); SLRetorno.Add('dataRegistro = ' + DateToStr(Retorno[I].DadosRet.TituloRet.DataRegistro)); SLRetorno.Add('dataVencimento = ' + DateToStr(Retorno[I].DadosRet.TituloRet.Vencimento)); SLRetorno.Add('valorOriginal = ' + DateToStr(Retorno[I].DadosRet.TituloRet.ValorDocumento)); SLRetorno.Add('carteiraConvenio = ' + Retorno[I].DadosRet.TituloRet.Carteira); SLRetorno.Add('variacaoCarteiraConvenio = ' + IntToStr(Retorno[I].DadosRet.TituloRet.Modalidade)); SLRetorno.Add('codigoEstadoTituloCobranca = ' + Retorno[I].DadosRet.TituloRet.codigoEstadoTituloCobranca); SLRetorno.Add('estadoTituloCobranca = ' + Retorno[I].DadosRet.TituloRet.estadoTituloCobranca); SLRetorno.Add('contrato = ' + Retorno[I].DadosRet.TituloRet.Contrato); SLRetorno.Add('dataMovimento = ' + DateToStr(Retorno[I].DadosRet.TituloRet.dataMovimento)); SLRetorno.Add('dataCredito = ' + DateToStr(Retorno[I].DadosRet.TituloRet.dataCredito)); SLRetorno.Add('valorAtual = ' + CurrToStr(Retorno[I].DadosRet.TituloRet.valorAtual)); SLRetorno.Add('valorPago = ' + CurrToStr(Retorno[I].DadosRet.TituloRet.ValorPago)); SLRetorno.Add(' --- '); end; SLRetorno.SaveToFile(PathWithDelim(ExtractFilePath(Application.ExeName)) + formatDateTime('yyyy.mm.dd.hh.nn.ss.zzz', now) + '-RetornoConsulta.txt'); finally SLRetorno.Free; end; end; showMessage('Fim'); end; Retornou o log e retorno em anexo. Fiz os mesmos testes pelo postman e funcionou. Se alguém puder me ajudar fico grato. Enviei os logs para [email protected] Grato desde já ArqBoletoWS.log 2023.02.08.18.27.27.868-RetornoConsulta.txt
  12. Oi @Renato Rubinho. Na verdade o valor do estoque do dia eu já tenho o sql pronto, conforme mostrei no primeiro post. Eu precisa juntar aquele select que já funciona a outro com um periodo de datas. Suas dicas não deram certo, mas fiz de outra forma, dentro do próprio delphi pegando o valor de cada data que eu precisava. Agradeço a disponiblidade
  13. Amigo @Renato Rubinho, na verdade eu preciso de um select que junte o meu select acima mencionado (que é o total de venda por dia) ao outro pra pegar o valor por um periodo como o exemplo abaixo: DATA VALOR 01/01/2023 100,00 02/01/2023 2000,00 03/01/2023 800,00 O valor por dia eu já consigo pelo meu select porém quero um select unico que me retorne da forma menciona. O Group by seria o campo DATA Mesmo assim grato pela ajuda.
  14. Bom dia amigos, Estou tentando montar uma consulta com as seguintes condições: Tenho uma tabela com os campos : CODPRODUTO, DATA, TIPOMOV, DATA, QUANT e outra com os campos CODPRODUTO, CUSTO A principio eu precisava do saldo do estoque e o valor total de custo em uma determinada data. Consegui usando o código abaixo: SELECT SUM( (COALESCE((SELECT SUM(M.QUANT) from UN05300 M where M.CODPRODUTO = F.CODPRODUTO AND M.TIPOMOV < 2000 AND M.DATA <= :DTESTOQUE),0) - COALESCE((SELECT SUM(M.QUANT) from UN05300 M where M.CODPRODUTO = F.CODPRODUTO AND M.TIPOMOV > 1999 AND M.DATA <= :DTESTOQUE),0)) * F.CUSTO) FROM UN05100 F Porém eu precisava agora de um select que me retornasse o valor de um periodo de datas agrupado por dia com as colunas DATA E VALORTOTAL usando o código acima. Alguém já passou por isso? Já tentei JOIN's de todos os tipos mas não obtive sucesso. Grato desde jáo em uma determinada data. Consegui usando o código abaixo:
  15. Boa tarde amigos, Eu tenho uma aplicação que OBRIGATORIAMENTE precisa acessar uma rotina utilizando a tecla F1. Em algumas situações, geralmente depois de utilizar outras teclas de atalho, aparece o erro "no context-sensitive help installed" A rotina funciona perfeitamente mas esse erro fica incomodando meu usuário. Alguém já passou por isso e saberia como desativar essa mensagem de erro? Grato desde já.
  16. Entendi @Daniel Simoes, então a lógica é. Eu entrei em contingência. Depois de X segundos eu volto pra Online. Na tentativa de enviar o próximo ou algum pendente eu verifico novamente e caso não tiver sucesso volto pra Offiline correto?
  17. Consegui criar corretamente @Juliomar Marchetti. E já está dando certo. Agora tenho uma outra dúvida.. Analisando os fontes procurei a rotina para voltar a emissão de NFC-e para online porém não achei nada que verifique o status da receita antes. Simplesmente existe uma procedure LigarOnLine que tem um código somente para mudar de True para False. procedure TContingenciaNFCe.LigarOnLine; begin if (FConfigContigencia.FOffLine) then begin FConfigContigencia.FOffLine := False; FConfigContigencia.SalvarArquivo; end; end; Tem alguma outra forma no exemplo de verificar se a receita está online antes de mudar? Gratos desde já
  18. Sim, assisti o curso, baixei os fontes e estou testando. Porém, como não vou utilizar todas as rotinas do thread utilizada no curso resolvi montar minha própria Thread copiando o que eu realmente preciso na minha aplicação. O primeiro problema que eu estou esbarrando é configurar a classe. Fiz uma procedure identica ao do curso: procedure TDM1.GravarConfiguracaoContingencia; var Config: TConfigContigencia; begin Config := TConfigContigencia.Create; try Config.TempoTransmissaoOffLine := DM1.TB10910TEMPOTRANSMISSAOOFFLINE.Value; Config.TempoAtivarOnLine := DM1.TB10910TEMPOATIVARONLINE.Value; ContingenciaNFCe.SetConfigContingencia(Config); finally Config.Free; end; end; Porém dá erro de Access violation exatamente nesse ponto: procedure TConfigContigencia.Assign(DeConfigContigencia: TConfigContigencia); begin TempoTransmissaoOffLine := DeConfigContigencia.TempoTransmissaoOffLine; TempoAtivarOnLine := DeConfigContigencia.TempoAtivarOnLine; end; Como disse, sou novo na criação de Threads mas acredito que o erro não está diretamente à Thread e sim algo que eu não criei pra tentar gravar. Deixei anexo minha unit da classe que ainda está em construção caso alguém possa me ajudar. Desde já agradeço uContingenciaNFCe.pas
  19. Boa tarde, Estou fazendo alterações no meu sistema para enviar a contingência NFC-e corretamente. Estou criando uma thread nova adaptando para minha realidade. Nesse primeiro momento preciso criar apenas 2 rotinas nessa Thread. A primeira é para verificar se a receita está online e sair do modo contingência. A segunda é, caso a receita estiver ok, enviar os cupons emitidos offline. Essas 2 rotinas eu preciso fazer conforme o exemplo do curso, ou seja, depois de x minutos o sistema verificar e executar. Alguém poderia me dar uma luz de onde eu posso encontrar na unit uContingenciaNFCe essas rotinas pra tirar como exemplo? Grato desde já
  20. Fiz tudo aqui e agora deu certo @Juliomar Marchetti. Muito obrigado pela ajuda.
  21. Entendi. então o que vc me sugere é que eu crie o DSPVConnection e consenquentemente o SqlConnection a quem ele está vinculado conforme na imagem abaixo correto?
  22. Boa tarde @Juliomar Marchetti, eu entendi o que quis dizer porém como faço com o DataSnap? Já tentei enviar via sql direto porém o erro muda. Se eu aguardar a Thread, o que não é o objetivo, não dá erro algum. O problema só acontece quando tento fazer outro acesso aos dados ao mesmo tempo que Thread está rodando
  23. Oi @Daniel Simoes, você diz criar o clientdataset dentro da Thread? Tentei da forma abaixo e não deu certo. procedure TDM1.AtualizarNCM; var I: Integer; Tbl05900: TClientDataSet; begin try ACBrNCMs1.ObterNCMs; // Primeiro Baixar Tabela de NCM válidos TransactionSql := 'DELETE FROM UN05900'; DMG.ExecutaTransacaoSql; Tbl05900 := TClientDataSet.Create(Self); Tbl05900.RemoteServer := DMG.DSPVConnection1; Tbl05900.ProviderName := 'PV05900'; Tbl05900.Open; for I := 0 to ACBrNCMs1.NCMs.Count - 1 do begin if Length(ACBrNCMs1.NCMs[I].CodigoNcm) = 8 then begin TBl05900.Insert; TBL05900.FieldByName('NCM').AsString := ACBrNCMs1.NCMs[I].CodigoNcm; TBL05900.FieldByName('DTINICIO').AsDateTime := ACBrNCMs1.NCMs[I].DataInicio; TBL05900.FieldByName('DTFIM').AsDateTime := ACBrNCMs1.NCMs[I].DataFim; TBl05900.Post; end; TBl05900.ApplyUpdates(-1); end; except end; end; Estou chamando a procedure acima com a rotina abaixo: TThread.CreateAnonymousThread(DM1.AtualizarNCM).Start; Só retorna erro quando tento fazer um acesso à outra tabela ao mesmo tempo. Grato desde já.
×
×
  • 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.