-
Total de ítens
251 -
Registro em
-
Última visita
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Posts postados por Rodrigo Cardilo
-
-
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
-
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.
- 2
-
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?
-
Em 21/07/2023 at 16:21, Victor H. Gonzales - Panda disse:
Boa tarde,
obrigado pela contribuição.
por favor faça as modificações na ultima versão que consta no SVN, a unit está 100% sinalizada com alteração.
*obs, não altere a formatação do arquivo original.
Boa tarde,
Não entendi. A minha alteração não foi na última versão?
-
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
-
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á
-
29 minutos atrás, Daniel Simoes disse:
A TMS tem um componente bacana para isso:
Vou dar uma pesquisada.. Vlw @Daniel Simoes
-
11 minutos atrás, Daniel Simoes disse:
Qual Linguagem de programação e IDE, você usa ?
Oi @Daniel Simoes, o bom e velho delphi.
-
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
-
Em 14/02/2023 at 07:50, Aggille Sistemas de Gestão disse:
eu faço desta forma.. e vêm retorno em todos os fitros...
// em aberto por vencimento
aFiltros[0] := TACBrBoletoWSFiltroConsulta.Create;
aFiltros[0].Clear;
aFiltros[0].indicadorSituacao := TACBrIndicadorSituacaoBoleto.isbAberto;
aFiltros[0].boletoVencido := ibvSim;
aFiltros[0].dataVencimento.DataInicio := AInicio;
aFiltros[0].dataVencimento.DataFinal := AFinal;// em aberto por emissao
aFiltros[1] := TACBrBoletoWSFiltroConsulta.Create;
aFiltros[1].Clear;
aFiltros[1].indicadorSituacao := TACBrIndicadorSituacaoBoleto.isbAberto;
aFiltros[1].dataRegistro.DataInicio := AInicio;
aFiltros[1].dataRegistro.DataFinal := aFinal;
aFiltros[1].boletoVencido := ibvSim;// liquidados
aFiltros[2] := TACBrBoletoWSFiltroConsulta.Create;
aFiltros[2].Clear;
aFiltros[2].indicadorSituacao := TACBrIndicadorSituacaoBoleto.isbBaixado;
aFiltros[2].dataMovimento.DataInicio := AInicio;
aFiltros[2].dataMovimento.DataFinal := AFinal;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.
- 1
- 1
-
26 minutos atrás, Aggille Sistemas de Gestão disse:
tinha um erro na unit ACBrBoletoW_Inter_API;, nas linhas 265 e 266.. ali ele estava fazendo o filtro por Vencimento mas usando as datas de Movimento.. segue unit alterada..
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.
-
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á
-
Em 12/01/2023 at 13:24, Renato Rubinho disse:
Certo,
Se colocar meu outro select como subselect totalizando o valor e agrupando por data não resolve?
SELECT SUM(VALORTOTAL), DATA FROM( SELECT (SUM( CASE WHEN M.TIPOMOV < 2000 THEN M.QUANT ELSE 0 END - CASE WHEN M.TIPOMOV > 1999 THEN M.QUANT ELSE 0 END ) * F.CUSTO ) AS VALORTOTAL, M.DATA, F.CODPRODUTO FROM UN05100 F LEFT JOIN UN05300 M ON M.CODPRODUTO = F.CODPRODUTO WHERE M.DATA BETWEEN :DTESTOQUEINI AND :DTESTOQUEFIM GROUP BY M.DATA, F.CODPRODUTO, F.CUSTO ) GROUP BY DATA
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
- 2
-
13 horas atrás, Renato Rubinho disse:
Boa noite,
Acredito que este código ou algo próximo a isso lhe atenda.
SELECT (SUM( CASE WHEN M.TIPOMOV < 2000 THEN M.QUANT ELSE 0 END - CASE WHEN M.TIPOMOV > 1999 THEN M.QUANT ELSE 0 END ) * F.CUSTO ) AS VALORTOTAL, M.DATA, F.CODPRODUTO FROM UN05100 F LEFT JOIN UN05300 M ON M.CODPRODUTO = F.CODPRODUTO WHERE M.DATA BETWEEN :DTESTOQUEINI AND :DTESTOQUEFIM GROUP BY M.DATA, F.CODPRODUTO, F.CUSTO
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.
-
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:
-
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á.
-
4 minutos atrás, Daniel Simoes disse:
Ele apenas verifica, se já atingiu o prazo de espera em OffLine...
//Verifica tempo de espera para voltar Emitir On-Line if CheckTimer(LStartTimerAtivarOnLine, FConfigContigencia.TempoAtivarOnLine) then begin LigarOnLine(Self); LStartTimerAtivarOnLine:= Now; end;
Feito isso.. na próxima transmissão, se houver novamente erro.. ele sinaliza que deve voltar para OffLine, novamente...
Não há uma maneira segura, de testar se um Site/Servidor está OnLine.. pois você pode ter sucesso em um teste, e ele ficar Offline instantes depois...
Então o melhor teste é tentar transmitir algo, e capturar o erro de transmissão, se ele ocorrer...
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?
-
55 minutos atrás, Juliomar Marchetti disse:
No caso está correto . seu A.V. é por não criar objetos e tentar acessar o mesmo.
Thread tu tem que isolar tudo dentro dela. conexão, componentes não deve ficar acessando externamente, pois por exemplo um form ou dm não estar criado
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á
-
20 horas atrás, Juliomar Marchetti disse:
tu assistiu o curso? se sim lá tu tem elas disponíveis para baixar
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
-
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á
-
33 minutos atrás, Juliomar Marchetti disse:
Sim mas como falamos acima e nota no seu código, ele está aproveitando conexão externa e componentes query externos
Tbl05900.RemoteServer := DMG.DSPVConnection1;
Fiz tudo aqui e agora deu certo @Juliomar Marchetti. Muito obrigado pela ajuda.
- 1
-
2 minutos atrás, Juliomar Marchetti disse:
Sim mas como falamos acima e nota no seu código, ele está aproveitando conexão externa e componentes query externos
Tbl05900.RemoteServer := DMG.DSPVConnection1;
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?
-
7 minutos atrás, Juliomar Marchetti disse:
Boa tarde
sim . tudo o que for usar declare e instancia dentro da thread
não tente ficar usando por exemplo uma conexão externa passando por parametro
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
-
Em 04/09/2022 at 08:01, Daniel Simoes disse:
Crie componentes de acesso aos dados dentro da Thread...
Mesmo o ACBrNCM poderia estar dentro da Thread
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á.
Falha Catastrófica
em Object Pascal - Delphi & Lazarus
Postado
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.