Ir para conteúdo
  • Cadastre-se

Painel de líderes

Conteúdo popular

Showing content with the highest reputation on 14-05-2024 em todas as áreas

  1. Bom dia @Desenvolvimento total S, Favor atualizar todos os fontes de todas as pastas, reinstale o ACBr e faça novos testes.
    2 pontos
  2. Olá @Diego Foliene, como vai? Enviados. Obrigado.
    2 pontos
  3. Aparentemente não foi informado o provedor (Provedor:0) Informe o provedor nas configurações, conforme a documentação a seguir. https://acbr.sourceforge.io/ACBrLib/ConfiguracoesdaBiblioteca20.html
    1 ponto
  4. @Ao3 Tech Subimos uma correção , vai estar disponivel na próxima compilação da LIB. O "|" Pipe vai ser a quebra; Informe assim: OrientacaoBanco="SAC CAIXA: 0800 726 0101 (informações, reclamações, sugestões e elogios) | Para pessoas com deficiência auditiva ou de fala: 0800 726 2492 | Ouvidoria: 0800 725 7474 - caixa.gov.br" Resultando:
    1 ponto
  5. Arquivos recebidos e devidamente anexados na TK correspondente para serem utilizados nos testes.
    1 ponto
  6. Boa tarde @João Guilherme Marques, Exatamente, eu fiz as perguntas só para provocar. Não mudou absolutamente nada a não ser o layout do pedido de cancelamento que já foi feito o ajuste em 13/07/2023. Resumindo, não se preocupe com essa informação.
    1 ponto
  7. Quem nunca né? kkkkk Agora enviei corretamente.
    1 ponto
  8. Obrigado Ítalo! Fazendo os Testes e indo bem por enquanto.
    1 ponto
  9. Obrigado pessoal, verificar o Status, deu certo, agora preciso verificar pelo Log, o motivo de precisar ficar desligando o computador, para conseguir emitir a Danfe.
    1 ponto
  10. Opa @Diego Foliene Obrigado... Só pra efeito de conhecimento... será avisado aqui nesse topico mesmo quando corrigirem?
    1 ponto
  11. Boa tarde! E-mail recebido, no entanto, não vieram os arquivos.
    1 ponto
  12. Provavelmente você não levou as DLLs do OpenSSL, de 64 Bits http://svn.code.sf.net/p/acbr/code/trunk2/DLLs/OpenSSL/1.1.1.10/x64/ Deixe-as na mesma pasta da ACBrLib Sim, houve mudanças, na assinatura dos métodos... o atual é conforme a documentação, e também há novas chaves de configuração para o WebService a ser utilizado
    1 ponto
  13. @Edrisio, essa mensagem indica que a PGWebLib, não está encontrando a pasta de trabalho Para corrigir, você precisa efetuar um Reset do PDC, e nova instalação Verifique se você está inicializando a Lib, usando o mesmo diretório de trabalho informado anteriormente, ou se a pasta de trabalho que você informou na inicialização, foi apagada
    1 ponto
  14. Obrigado Italo! Vamos tentar entrar em contato com o SEFAZ e ver se descobrimos a situação então. Qualquer novidade volto com retorno.
    1 ponto
  15. estou iniciando os testes com o Soap habilitado para pegar o XML, Obrigado.
    1 ponto
  16. Boa tarde @LeonardoRocha, Fiz uma alteração no componente visando a não impressão da informação "Opção Simples Nacional" quando o provedor não possui essa informação no XML da nota. Como você utiliza o ACBrLibNFSe favor aguardar uma nova versão do mesmo.
    1 ponto
  17. boa tarde, não tive mais relatos de problemas, pedimos para o cliente trocar a internet
    1 ponto
  18. Beleza ... vou baixar nova versão. Obrigado!
    1 ponto
  19. Agora funcionou. O preview está na função Boleto_Imprimir. O texto na documentação deveria mencionar o preview. Obrigado pela ajuda !
    1 ponto
  20. Bom dia, Encontrei mais dois problemas no código. ACBrBoletoRet_Safra.pas ACBrBoletoW_Safra.pas
    1 ponto
  21. A princípio o componente só trazia as informações que a consulta da receita federal fornece. https://solucoes.receita.fazenda.gov.br/servicos/cnpjreva/cnpjreva_solicitacao.asp Com o bloqueio do acesso dessa página pelo reCaptcha o componente foi alterado pra usar APIs de terceiros, receitaws, cnpjws, brasilapi... Essas APIs podem trazer informações adicionais, como as inscrições estaduais vinculadas ao CNPJ, então foi adicionada a propriedade pra trazer a IE da sede da empresa. Outras possíveis informações que as APIs disponibilizam (regime tributário, por exemplo) nos JSONs não estão totalmente mapeadas como propriedades, então precisa modificar o componente pra fazer isso. Fique a vontade pra modificar o componente da forma que achar interessante, e anexar aqui os fontes alterados pra serem analisados e enviados para o SVN.
    1 ponto
  22. Olá pessoal! O provedor ISSBarueri possui leaiute próprio e realiza a validação de dois campos de identificação, o campo "IdentificacaoRemessa" e o campo "NumeroRPS". Caso estejam recebendo o retorno: É necessário que o valor de identificação correspondente seja implementado. Uma dica compartilhada pelo membro de nossa comunidade @cueiogordo é que se você receber algum outro erro, o mesmo número de RPS pode ser utilizado se o IdentificacaoRemessa for incrementado.
    1 ponto
  23. Olá pessoal! Compartilhando mais uma dica, agora do colega @Sidney_Navis: Se você estiver recebendo o erro ao fazer uma consulta de lote usando o número de protocolo que recebeu no retorno do envio: <Codigo>R0404</Codigo> <Mensagem>Não há informações disponíveis com os parâmetros fornecidos</Mensagem> Isso ocorre porque provedor ISSBarueri diferente dos demais provedores que adotam o envio assíncrono e usam o mesmo número de protocolo na consulta de situação e de lote, o ISSBarueri gera um número de protocolo para cada etapa do processo. Ou seja: Você envia o XML do RPS e recebe um número de protocolo. Você consulta a situação do lote usando o protocolo que recebeu no retorno do envio e recebe um novo número de protocolo. Você consulta o Lote do RPS usando o novo número que recebeu no retorno da consulta situação.
    1 ponto
  24. Olá pessoal! O colega @maxdatasistema compartilhou conosco a informação de que a ConsultarNFSeRps também foi liberada pelo provedor para ser executada em horário comercial.
    1 ponto
  25. Bom dia @C4Dev, Já esta no SVN.
    1 ponto
  26. Obrigado pela atenção
    1 ponto
  27. Tópico movido para a área do SAC, para que o SLA de respostas seja considerado
    1 ponto
  28. @siac.sistemas Obrigado pela sugestão. Foi criado a tarefa TK-5426 para análise.
    1 ponto
  29. Bom dia @Suporte Octec! Por favor, faça o seguinte teste: Antes de enviar para o Monitor o comando que cria e envia o XML, envie o comando NFe.SetModeloDF com parâmetro 65 para confirmar ao Monitor que o XML que deve ser gerado é o de uma NFCe. Caso ainda assim persista o problema. Foi gerada uma nova compilação do monitor, peço que atualize e faça novo teste.
    1 ponto
  30. Se observar o retorno, ele devolveu uma rejeição: O valor deve ser menor ou igual a 60 de incluirCobrancaAsync.body.numDiasAgenda Valor :45423 O que diz o manual: https://developers.inter.co/references/cobranca-bolepix#tag/Cobranca/operation/emitirCobrancaAsync Em resumo este numDiasAgenda é a Data limite para pagamento. então se o seu padrao for 30 dias, vai ficar assim quando incluir um titulo:
    1 ponto
  31. Obrigado pela contribuição... @EliasCesar, nos ajuda com esse merge ?
    1 ponto
  32. A solução ACBrBoleto já tem suporte a cobrança API com PIX no Banco INTER. Recebemos a contribuição inicial do amigo @ActioSistemas, (a partir da qual fizemos as devidas adequações para a implementação da unit para integrar as soluções ACBr) Para utilizar endpoint pix, basta marcar a propriedade IndicadorPix como true igual aos outros bancos. Inter tem 2 API's: - boletos normais - boletos com QrCode PIX O que vai definir em qual incluir, baixar ou consultar é a propriedade IndicadorPIX: Quando falso, ele utiliza API Boleto Normais Quando true, ele utiliza API Boleto com QrCodePIx * Uma não devolve boleto registrado na outra! Atenção: Uma das informações que deve ser armazenada do retorno da inclusão é a propriedade “NossoNumeroCorrespondente” pois toda operação de alteração, baixa e consulta você vai precisar informar esta propriedade. (é um código UUID de identificação do boleto) Somente a API Cobrança com PIX retorna UUID. Quando API Pix não está devolvendo NossoNumero: Existem relatos que após a inclusão , a API não está devolvendo o campo nossoNumero, neste cado se olhar o log, o banco esta devolvendo: "situacao": "EM_PROCESSAMENTO"; Então deve aguardar alguns minutinhos e realizar a consulta detalhe utilizando a propriedade NossoNumeroCorrepondente Como utilizar: Após inclusão guardar o GUUID devolvido na propriedade NossoNumeroCorrepondente; Para ConsultarDetalhe, ALTERAR e BAIXAR, informar o GUUID (retornado na inclusão) na propriedade NossoNumeroCorrespondente; (carregar o titulo) Como passar esta informação via componente (Delphi/lazarus): Titulo.NossoNumeroCorrespondente := '4cac8ea0-a960-4ac4-af55-c6b05728f3x0'; Como passar esta informação via INI do titulo (ACBrLibBoleto, ACBrMonitorPlus): [Titulo1] .. NossoNumeroCorrespondente=24d5fdcd-608d-40b9-ad42-52e4af8eb7f1 Consulta Lista: Vamos ter agora as situacao isbAberto isbBaixado isbCancelado Baixado e cancelado, filtro dataMovimento isbAberto: filtro dataVencimento ele tbm vai usar a opcao Filtro.boletoVencido ibvSim/ibvNao (ele procura por data de vencimento boletos a receber ou vencidos) isbAberto: filtro dataRegistro ele consulta por data emissao os boletos em aberto Como o banco Inter não tem ambiente de homologação, cuidado com seus testes, após executar, baixar o boleto para ele não ficar pendente no sistema do banco de cobrança. Quer saber como funciona nos bastidores ?: Para quem leu a documentação da cobrança pix do Inter, sabe que é diferente a forma que é realizada a inclusão, tanto a resposta como o endpoint de cobrança PIX. Após a inclusão do boleto, recebemos um codigoSolicitacao (UUID) caso tenha registrado o boleto com sucesso (HttpResultCode 200); Este código UUID é devolvido pela solução ACBrBoleto na propriedade “NossoNumeroCorrespondente”. Ele não nos devolve as informações do boleto como no endpoint convencional. Sendo assim, após inclusão é realizada uma consulta passando este UUID para que seja retornado os dados do boleto e qrcode na propriedade EMV como nos outros bancos. Lembrando que esta consulta ocorre de forma transparente, ou seja, a solução acbr abstrai isso para você, ou seja, realizando a inclusão no TpInclui com o indicadorPix como true, a solução realiza uma consulta da UUID logo após a inclusão e devolve todas as informações do boleto. Agradecimento também para @Antonio Gomes, @Gabriel Mororó por terem efetuados alguns testes e ao @ralty por ter cedido credenciais.
    1 ponto
  33. @HelioNeto Maravilha meu amigo, as dicas foram valiosas. Acabei caindo aqui fórum do ACBR por acaso depois de um vídeo seu. Estou desenvolvendo um middleware de integração bancaria que recebe dados por meio de WSDL e comunica REST com o banco escolhido, isso em linguagem PHP. Deixo meu https://github.com/rafabarzotto, caso alguém encontre dificuldade e precise tirar alguma duvida sobre essa API do Bradesco.
    1 ponto
  34. Olá! Recentemente houve a necessidade por parte de meus clientes de uma forma mais detalhada de auditoria de inserções, atualizações e deleções de informações. Depois de muita dedicação consegui uma estrutura de fácil manuseio para aqueles que utilizam o FireBird da versão 2.5 em diante. A auditoria é feita em uma database externa, dessa forma o banco de dados continua independente e não sofre uma expansão referente a esses dados. Fato importante é que o banco da empresa não é afetado com possíveis exceções provenientes do banco de auditoria, ou seja, caso algo dê errado externamente o fluxo de dados na empresa não é afetado. Segue procedimento: 1) Criar banco de dados para auditoria (LOGGERAL.FDB). 2) Criação das tabelas de auditoria, etc: CREATE GENERATOR GEN_LOGOPERACAO_ID; CREATE TABLE LOGOPERACAO ( CD_LOGOPERACAO BIGINT NOT NULL, DS_TABELA VARCHAR(31) NOT NULL, FG_OPERACAO CHAR(1) NOT NULL, CD_USUARIO VARCHAR(10) NOT NULL, DT_OPERACAO TIMESTAMP NOT NULL, DS_CHAVE VARCHAR(255) NOT NULL ); ALTER TABLE LOGOPERACAO ADD CONSTRAINT PK_LOGOPERACAO PRIMARY KEY (CD_LOGOPERACAO); SET TERM ^ ; /* Trigger: LOGOPERACAO_BI */ CREATE OR ALTER TRIGGER LOGOPERACAO_BI FOR LOGOPERACAO ACTIVE BEFORE INSERT POSITION 0 as begin if (new.cd_logoperacao is null) then new.cd_logoperacao = gen_id(gen_logoperacao_id,1); end ^ SET TERM ; ^ CREATE GENERATOR GEN_LOGDATA_ID; CREATE TABLE LOGDATA ( CD_LOGDATA BIGINT NOT NULL, CD_LOGOPERACAO BIGINT NOT NULL, DS_CAMPO VARCHAR(31) NOT NULL, DS_OLD VARCHAR(4000), DS_NEW VARCHAR(4000) ); ALTER TABLE LOGDATA ADD CONSTRAINT PK_LOGDATA PRIMARY KEY (CD_LOGDATA); ALTER TABLE LOGDATA ADD CONSTRAINT FK_LOGDATA_LOGOPERACAO FOREIGN KEY (CD_LOGOPERACAO) REFERENCES LOGOPERACAO (CD_LOGOPERACAO); SET TERM ^ ; /* Trigger: LOGDATA_BI */ CREATE OR ALTER TRIGGER LOGDATA_BI FOR LOGDATA ACTIVE BEFORE INSERT POSITION 0 as begin if (new.cd_logdata is null) then new.cd_logdata = gen_id(gen_logdata_id,1); end ^ SET TERM ; ^ Explicações rápidas: 1) A tabela LOGOPERACAO registra: qual tabela (DS_TABELA) passou por uma inserção (FG_OPERACAO = 'I'), atualização (FG_OPERACAO = 'U') ou deleção (FG_OPERACAO = 'D'), qual foi o usuário responsável (CD_USUARIO), quando ocorreu a operação (DT_OPERACAO), e qual foi a PK (DS_CHAVE) afetada. 2) Vocês vão perceber que nesse processo não importa quantas chaves primárias sua tabela tem, pois o código foi pensado para concatenar as chaves separadas por pipe ('|'). 3) A tabela LOGDATA armazena informações mais detalhadas sobre a LOGOPERACAO. Nesse caso seus registros contemplam qual foi o campo afetado na tabela (DS_CAMPO) apresentando seu valor antigo (DS_OLD) e o novo (DS_NEW). 3) Criação das procedures para auditoria no banco da empresa: SET TERM ^ ; create or alter procedure PROC_LOG ( DS_TABELA varchar(31) not null) as declare variable "TYPE" smallint; declare variable DS_CAMPO varchar(31); declare variable SQL varchar(32765); declare variable AUXOPERACAO varchar(255); declare variable DS_CHAVEAUX varchar(31); declare variable DS_CHAVENEW varchar(255); declare variable DLL blob sub_type 1 segment size 256; declare variable DS_CHAVEOLD varchar(255); begin if (user = 'BACKUP') then exit; sql = ''; ds_chavenew = ''; ds_chaveold = ''; auxoperacao = ''; dll = ''; for select upper(trim(F.RDB$FIELD_NAME)), FS.RDB$FIELD_TYPE from RDB$RELATION_FIELDS F left join RDB$FIELDS FS on FS.RDB$FIELD_NAME = F.RDB$FIELD_SOURCE where F.RDB$RELATION_NAME = :ds_tabela order by F.RDB$FIELD_POSITION into :ds_campo, :type do begin if ((:type <> 261) and (:ds_campo not in ('CD_USRINCALT', 'DT_INCALT'))) then /* IGNORAR 261 = BLOB */ begin sql = sql || ' if (new.' || :ds_campo || ' is distinct from old.' || :ds_campo || ') then' || ascii_char(13) || ' execute procedure proc_logdata(' || ascii_char(13) || ' :cd_logoperacao, ' || ascii_char(13) || ' ''' || :ds_campo || ''',' || ascii_char(13) || ' old.' || :ds_campo || ',' || ascii_char(13) || ' new.' || :ds_campo || ');' || ascii_char(13); end end auxoperacao = ' if (inserting) then fg_operacao = ''I'';' || ascii_char(13) || ' else if (updating) then fg_operacao = ''U'';' || ascii_char(13) || ' else if (deleting) then fg_operacao = ''D'';' || ascii_char(13); for select trim(I.RDB$FIELD_NAME) from RDB$RELATION_CONSTRAINTS RC join RDB$INDEX_SEGMENTS I on (I.RDB$INDEX_NAME = RC.RDB$INDEX_NAME) join RDB$INDICES IDX on (IDX.RDB$INDEX_NAME = RC.RDB$INDEX_NAME) where (RC.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY') and (RC.RDB$RELATION_NAME = :ds_tabela) order by I.RDB$FIELD_POSITION into :ds_chaveaux do begin ds_chavenew = ds_chavenew || 'new.' || :ds_chaveaux || '||''|''||'; ds_chaveold = ds_chaveold || 'old.' || :ds_chaveaux || '||''|''||'; end ds_chavenew = substring(ds_chavenew from 1 for char_length(ds_chavenew) - 7); ds_chaveold = substring(ds_chaveold from 1 for char_length(ds_chaveold) - 7); dll = 'CREATE OR ALTER TRIGGER LOG_' || :ds_tabela || ' for ' || :ds_tabela || ascii_char(13) || 'ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 32767' || ascii_char(13) || 'as' || ascii_char(13) || ' declare variable fg_operacao char(1) = null;' || ascii_char(13) || ' declare variable cd_logoperacao bigint;' || ascii_char(13) || 'begin' || ascii_char(13) || auxoperacao || ascii_char(13) || ' if (:fg_operacao is null) then exit;' || ascii_char(13) || ascii_char(13) || ' if (:fg_operacao = ''I'') then' || ascii_char(13) || ' execute procedure proc_logoperacao(' || ascii_char(13) || ' ''' || :ds_tabela || ''',' || ascii_char(13) || ' ''I'',' || ascii_char(13) || ' ' || :ds_chavenew || ')' || ascii_char(13) || ' returning_values :cd_logoperacao;' || ascii_char(13) || ' else' || ascii_char(13) || ' execute procedure proc_logoperacao(' || ascii_char(13) || ' ''' || :ds_tabela || ''',' || ascii_char(13) || ' :fg_operacao,' || ascii_char(13) || ' ' || :ds_chaveold || ')' || ascii_char(13) || ' returning_values :cd_logoperacao;' || ascii_char(13) || ascii_char(13) || sql || ascii_char(13) || ' when any do' || ascii_char(13) || ' begin' || ascii_char(13) || ascii_char(13) || ' end' || ascii_char(13) || 'end'; if (sql <> '') then execute statement :dll; end^ SET TERM ; ^ SET TERM ^ ; create or alter procedure PROC_LOGOPERACAO ( DS_TABELA varchar(31) not null, FG_OPERACAO char(1) not null, DS_CHAVE varchar(255) not null) returns ( CD_LOGOPERACAO bigint) as declare variable SQL varchar(16384); begin sql = 'insert into logoperacao(' || 'ds_tabela, ' || 'fg_operacao, ' || 'cd_usuario, ' || 'dt_operacao, ' || 'ds_chave) ' || 'values(' || ':ds_tabela, ' || ':fg_operacao, ' || ':cd_usuario, ' || ':dt_operacao, ' || ':ds_chave) ' || 'returning ' || 'cd_logoperacao'; execute statement (:sql) ( ds_tabela := :ds_tabela, fg_operacao := :fg_operacao, cd_usuario := user, dt_operacao := current_timestamp, ds_chave := :ds_chave) on external 'c:\sysfire\loggeral.fdb' as user 'SYSDBA' password 'sys@#$' with common transaction into :cd_logoperacao; end^ SET TERM ; ^ SET TERM ^ ; create or alter procedure PROC_LOGDATA ( CD_LOGOPERACAO bigint not null, DS_CAMPO varchar(31) not null, DS_OLD varchar(4000), DS_NEW varchar(4000)) as declare variable SQL varchar(16384); begin sql = 'insert into logdata(' || 'cd_logoperacao, ' || 'ds_campo, ' || 'ds_old, ' || 'ds_new) ' || 'values(' || ':cd_logoperacao, ' || ':ds_campo, ' || ':ds_old, ' || ':ds_new)'; execute statement (:sql) ( cd_logoperacao := :cd_logoperacao, ds_campo := :ds_campo, ds_old := :ds_old, ds_new := :ds_new) on external 'c:\sysfire\loggeral.fdb' as user 'SYSDBA' password 'sys@#$' with common transaction; end^ SET TERM ; ^ Explicações rápidas: 1) A PROC_LOGOPERACAO insere os registros no banco externo na tabela LOGOPERACAO. 2) A PROC_LOGDATA insere os registros no banco externo na tabela LOGDATA. 3) A PROC_LOG gera automaticamente uma trigger para after insert, update e delete (na última posição possível 32767) em uma tabela que seja necessário a auditoria. Aqui não importa quais são os campos da tabela, a geração é autônoma e independe do tipo, tamanho, etc. 3.1) Caso a tabela possua campos tipo BLOB (261) eles serão ignorados. 3.2) Se for necessário auditar campos VARCHAR com tamanho superior a 4000 será necessário rever a criação da tabela LOGDATA e da procedure PROC_LOGDATA pois na forma atual esse é o limite (o maior campo da minha estrutura de dados possui 4000 posições, esse é o motivo da minha escolha). 3.3) Os campos CD_USRINCALT e DT_INCALT estão sendo ignorados pois fazem parte das minhas tabelas e não precisam ser auditados, retirar ou deixá-los no código não afetará em nada no funcionamento. Caso existam campos que você quer ignorar, faça a inserção manual no código, a mesma coisa para tipos de campos, atualmente apenas BLOB é ignorado (você pode pesquisar no fonte para ver os códigos referentes a outros tipos). 4) Na PROC_LOGOPERACAO e PROC_LOGDATA verificar o caminho do banco de auditoria, como teste está fixo c:\sysfire\loggera.fdb. Verificar também a senha do user master SYSDBA, pois a conexão com o banco externo será feita por ele. Após realizar os passos acima só será necessário escolher as tabelas que precisam ser auditadas e chamar a PROC_LOG para geração das triggers (o nome da tabela deve ser exato, com letras maiúsculas e minúsculas, caso seja informada uma tabela que não existe em sua database uma exceção é lançada). execute procedure PROC_LOG('nome_da_tabela'); A partir daqui qualquer tipo de insert, update e delete nas tabelas executas com a PROC_LOG vão gerar registros no banco de auditoria. Bom proveito, obrigado! Edit1: caso uma tabela que já está sendo auditada sofra alterações de campos (novos campos ou drop de campos antigos) é só fazer a chamadada mesma com a PROC_LOG que as triggers serão atualizadas automaticamente. Processo fácil e rápido para manutenção.
    1 ponto
×
×
  • 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.