Ir para conteúdo
  • Cadastre-se

Painel de líderes

Conteúdo popular

Showing content with the highest reputation on 27-11-2023 em todas as áreas

  1. Vou entrar em contato com o cliente, e tentar fazer um envio em produção para ver se foi sanado. tendo o resultado , posto aqui!
    2 pontos
  2. @Endrigo Rodrigues Boa tarde ! Onde vc inicializa a lib ? estava vendo outro exemplo MT e nao achei onde vc inicializa. Não encontrei onde vc inicializa a Lib
    1 ponto
  3. Mestre Daniel, boa tarde! Mais uma vez, uma honra falar com você. O problema era o roteador da Algar que barrava algumas portas e foi resolvido pelo TI da empresa. Aquele abraço.
    1 ponto
  4. usando synapse: Var http: THTTPSend; sURLRedirect: string; Begin http := THTTPSend.Create; Try sURLRedirect := ''; HTTP.HTTPMethod('POST', 'SUAURL'); If (http.ResultCode = 301) or (http.ResultCode = 302) Then Begin HeadersToList(http.Headers); sURLRedirect := http.Headers.Values['Location']; sURLRedirect := Trim(sURLRedirect); End; If sURLRedirect <> '' Then HTTP.HTTPMethod('POST', sURLRedirect); Finally Begin http.Free; End; End; End;
    1 ponto
  5. Boa tarde Wesley, Até o momento de tudo o que foi solicitado para correção não obtive resposta se foi realizado ou não. Portanto continua na mesma.
    1 ponto
  6. Senhores liguei no cliente hoje para fazer o teste, infelizmente ela estava garrada hoje, mas me ligara amanhã para os testes, porém, a mesma me disse que um outro sistema já está emitindo a nfse nacional. Então amanhã, testarei o meu também
    1 ponto
  7. Boa tarde Italo, Grato pelo retorno, vou refazer todos os passos , e lhe retorno o resultado aqui.
    1 ponto
  8. Boa tarde, Acabei de realizar um teste usando o programa exemplo: ------------------------------ Versão OpenSSL OpenSSL 3.1.3 19 Sep 2023 03.01.00.030 C:\ACBr\trunk2\Exemplos\ACBrDFe\ACBrNFSeX\Delphi\libcrypto-3.dll C:\ACBr\trunk2\Exemplos\ACBrDFe\ACBrNFSeX\Delphi\libssl-3.dll ------------------------------ Requisição Ambiente : 1 Cidade : Vitoria da Conquista/BA Provedor : EL Versão: 2.04 Data/Hora: 27/11/2023 16:00:54 Método Executado: Enviar Lote Síncrono Parâmetros de Envio Numero do Lote: 1 Parâmetros de Retorno Data de Envio : 30/12/1899 Numero do Prot: Numero da Nota: Link : Código Verif. : Sucesso : True Erro(s): Código : EL17 Mensagem: CNPJ não encontrado na base de dados - Confira o número do CNPJ informado. Caso esteja correto o prestador não esta inscrito no município. Correção: A pergunta que não quer calar: Vocês estão com todos os fontes de todas as pastas atualizados? Se sim, reinstalou o ACBr? Se sim, recompilou a aplicação com a opção Build?
    1 ponto
  9. Boa tarde! Apenas fornecendo uma atualização. Nos testes iniciais realizados, foi de fato constatado a lentidão na leitura do arquivo. Vale citar que o arquivo é de fato relativamente grande. O grupo emiDocAnt conta com 1800 ocorrências e somente o XML tem 400kb. Foi criada a #TK-4782 para realizar testes e uma possível atualização na rotina de leitura visando melhorar o desempenho.
    1 ponto
  10. Boa tarde, Utilizamos a versão enterprise.
    1 ponto
  11. Bom dia! Apenas dando um retorno. Foi feita uma alteração visando tornar esse processo mais fácil, reaproveitando essas configurações ao invés de precisar inserir novamente. Esta modificação no componente nativo já está no SVN e estamos verificando junto ao time responsável para que seja gerada uma nova compilação da Lib. Assim que for feito, avisaremos aqui para que você possa atualizar e testar.
    1 ponto
  12. Falha de segmentação SIGSEGV é comum de erro em programação que ocorre quando um programa tenta acessar uma parte da memória que não tem permissão para acessar. Isso geralmente ocorre devido a bugs no código, como acessar um ponteiro nulo, acessar uma área de memória liberada ou escrever além dos limites de um array. A linguagem de programação que você utiliza, não é minha linguagem nativa, então tive que fazer algumas pesquisas.. para entender a linguagem e tentar te ajudar.. Veja se essas opções não te ajuda em relação uso da ACBrLib MultiThread. Adicione Sincronização: Tente adicionar mutexes (travas) ao redor do código que está usando a biblioteca ACBrLibCTe. Isso pode ajudar a evitar condições de corrida entre as threads, #include <dlfcn.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <pthread.h> #define NUMERO_DE_THREADS 1 #define NUMERO_DE_INSTANCIAS 5 #define ACBRLIBCTE "/usr/local/lib/libacbrcte64.so" typedef int (*inicializar_t)(u_int64_t *, char *, char *); typedef int (*finalizar_t)(u_int64_t); inicializar_t inicializar; finalizar_t finalizar; // Mutex para sincronização pthread_mutex_t acbrMutex = PTHREAD_MUTEX_INITIALIZER; void* run(void *); int main() { // Carrega a biblioteca ACBrLibCTe void *lib = dlopen(ACBRLIBCTE, RTLD_LAZY); if (!lib) { fprintf(stderr, "Erro ao carregar a biblioteca\n\n"); exit(1); } // Atualiza os ponteiros para as funções que serão testadas na ACBrLibCte inicializar = (inicializar_t)dlsym(lib, "CTE_Inicializar"); finalizar = (finalizar_t)dlsym(lib, "CTE_Finalizar"); // Cria vetor com as threads criadas pthread_t threads[NUMERO_DE_THREADS]; for(int i=0; i<NUMERO_DE_THREADS; i++) { // Define o número da Thread para mensagem de log int *nr_thread = malloc(sizeof(int)); *nr_thread = i; // Cria a thread e inicia execução pthread_create(&threads[i], NULL, run, (void *) nr_thread); } // Aguarda a finalização de todas as threads for(int i=0; i<NUMERO_DE_THREADS; i++) { pthread_join(threads[i], NULL); } // Encerra o uso da biblioteca dlclose(lib); // Destroi o mutex pthread_mutex_destroy(&acbrMutex); } void * run(void *p) { int nr_thread = *((int *) p); u_int64_t handle[NUMERO_DE_INSTANCIAS]; char *senha = calloc(64, sizeof(char)); strcpy(senha, "senha"); // Cria instâncias da biblioteca ACBrLibCTe for (int i = 0; i < NUMERO_DE_INSTANCIAS; i++) { pthread_mutex_lock(&acbrMutex); // Trava o mutex antes de acessar a biblioteca char *arquivo = calloc(64, sizeof(char)); sprintf(arquivo, "acbrlib-%d.ini", i); int retorno = inicializar(&handle[i], arquivo, senha); printf("(Thread #%2d - Instância #%2d) Função <<<CTE_Inicializar>>> [Retorno da Biblioteca: %d] [Handle retornado : %lu]\n", nr_thread, i, retorno, handle[i]); pthread_mutex_unlock(&acbrMutex); // Destrava o mutex após acessar a biblioteca } // Finaliza as instâncias da biblioteca ACBrLibCTe for (int i = 0; i < NUMERO_DE_INSTANCIAS; i++) { pthread_mutex_lock(&acbrMutex); int retorno = finalizar(handle[i]); printf("(Thread #%2d - Instância #%2d) Função <<<CTE_Finalizar >>> [Retorno da Biblioteca: %d] [Handle finalizado: %lu]\n", nr_thread, i, retorno, handle[i]); pthread_mutex_unlock(&acbrMutex); } // Libera o parâmetros free(p); return NULL; } Inicialização Global: Inicie a biblioteca uma vez no início do programa, antes de criar qualquer thread, e compartilhe o handle entre as threads. Isso evita a necessidade de inicialização concorrente. Aqui está um exemplo: #include <dlfcn.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <pthread.h> #define NUMERO_DE_THREADS 1 #define NUMERO_DE_INSTANCIAS 5 #define ACBRLIBCTE "/usr/local/lib/libacbrcte64.so" typedef int (*inicializar_t)(u_int64_t *, char *, char *); typedef int (*finalizar_t)(u_int64_t); inicializar_t inicializar; finalizar_t finalizar; u_int64_t globalHandle; void* run(void *); int main() { // Carrega a biblioteca ACBrLibCTe void *lib = dlopen(ACBRLIBCTE, RTLD_LAZY); if (!lib) { fprintf(stderr, "Erro ao carregar a biblioteca\n\n"); exit(1); } // Atualiza os ponteiros para as funções que serão testadas na ACBrLibCte inicializar = (inicializar_t)dlsym(lib, "CTE_Inicializar"); finalizar = (finalizar_t)dlsym(lib, "CTE_Finalizar"); // Inicializa a biblioteca globalmente char *senha = calloc(64, sizeof(char)); strcpy(senha, "senha"); char *arquivo = "acbrlib-global.ini"; int retorno = inicializar(&globalHandle, arquivo, senha); // Cria vetor com as threads criadas pthread_t threads[NUMERO_DE_THREADS]; for(int i=0; i<NUMERO_DE_THREADS; i++) { // Define o número da Thread para mensagem de log int *nr_thread = malloc(sizeof(int)); *nr_thread = i; // Cria a thread e inicia execução pthread_create(&threads[i], NULL, run, (void *) nr_thread); } // Aguarda a finalização de todas as threads for(int i=0; i<NUMERO_DE_THREADS; i++) { pthread_join(threads[i], NULL); } // Finaliza a instância global da biblioteca retorno = finalizar(globalHandle); printf("(Global) Função <<<CTE_Finalizar >>> [Retorno da Biblioteca: %d] [Handle finalizado: %lu]\n", retorno, globalHandle); // Encerra o uso da biblioteca dlclose(lib); } void * run(void *p) { int nr_thread = *((int *) p); u_int64_t handle[NUMERO_DE_INSTANCIAS]; char *senha = calloc(64, sizeof(char)); strcpy(senha, "senha"); // Cria instâncias da biblioteca ACBrLibCTe for (int i = 0; i < NUMERO_DE_INSTANCIAS; i++) { char *arquivo = calloc(64, sizeof(char)); sprintf(arquivo, "acbrlib-%d.ini", i); int retorno = inicializar(&handle[i], arquivo, senha); printf("(Thread #%2d - Instância #%2d) Função <<<CTE_Inicializar>>> [Retorno da Biblioteca: %d] [Handle retornado : %lu]\n", nr_thread, i, retorno, handle[i]); } // Finaliza as instâncias da biblioteca ACBrLibCTe for (int i = 0; i < NUMERO_DE_INSTANCIAS; i++) { int retorno = finalizar(handle[i]); printf("(Thread #%2d - Instância #%2d) Função <<<CTE_Finalizar >>> [Retorno da Biblioteca: %d] [Handle finalizado: %lu]\n", nr_thread, i, retorno, handle[i]); } // Libera o parâmetros free(p); return NULL; } Como você deve conhecer a linguagem que esta utilizando, acredito que estes dois exemplos possam te ajudar..
    1 ponto
  13. Bom dia. Faça o teste por favor com a ultima versão do componente e do relatório que consta no SVN. pois até o literal impresso de sem validade não é a atual. Não foi possivel recriar esse problema na versão do SVN
    1 ponto
  14. Olá, Antonio! Tenho um outro chamado, postado em 22/05/2023, que achei que poderia estar relacionado a esta constatação, no log, de termos duas chamadas ao método Destravar para apenas uma do Travar. Talvez algum método seja chamado sem o respectivo Travar, o que gera o SEGV apresentado no caso daquele chamado. Mas isso é apenas uma hipótese aventada a partir do log. Veja o chamado antigo: Um abraço,
    1 ponto
  15. Sim, o documento usado é o CT-e (23) e detalhamento da receita é 000100 que foi nos passado pela contabilidade do cliente.
    1 ponto
  16. Atualizei os fontes agora e fiz o teste, tudo certo, muito obrigado.
    1 ponto
  17. Boa tarde! Após realização de alguns testes e análise. Chegou-se ao seguinte modelo de arquivo a ser utilizado para o evento de Insucesso da Entrega: [EVENTO] idLote=1 [EVENTO001] chCTe=<Informar a chave co CTe ao qual o evento será vinculado> CNPJ=<Informar o CNPJ do emitente> tpEvento=110190 dhEvento=<Informar a data do evento> nProt=<Informar o protocolo de autorização do CTe> dhTentativaEntrega=<Informar a data da tentativa de entrega> nTentativa=<Informar a quantidade de tentativas de entrega> tpMotivo=<Informar o motivo do insucesso, conforme opções da NT respectiva> xJustMotivo=<Justificativa do insucesso quando tpMotivo for 4> latitude=<Informar Latitude do Local de entrega no formato -XX.XXXXXXX> longitude=<Informar Longitude do Local de entrega no formato -XX.XXXXXXX> hashTentativaEntrega=<Hash tentativa de entrega calculado usando chave CTe + Imagem> dhHashTentativaEntrega=<Data de geração do Hash> [infEntrega0001] chNFe=<Chave da NFe cujas mercadorias estão sendo entregues> E ao seguinte modelo para o Cancelamento do Insucesso da Entrega: [EVENTO] idLote=1 [EVENTO001] chCTe=<Informar chave do CT-e ao qual será vinculado o evento> CNPJ=<Informar CNPJ do emitente> tpEvento=110191 dhEvento=<Informar data do evento> nProt=<Informar protocolo de autorização do CTe> nProtIE=<Informar protocolo do evento de Insucesso na Entrega> descEvento=<Informar descrição do evento> Ambos foram enviados ao SVN nas Revs 31359 e 31360 e serão adicionados na próxima atualização da documentação.
    1 ponto
  18. Bom dia @powerlog, Vamos lá: Primeiramente não é o componente que gera o XML da Nota e sim o webservice do provedor contratando pela prefeitura. O componente gera e envia o XML do RPS para o webservice, caso os dados do RPS estejam corretos o webservice gera e deixa disponível o XML da nota. Você comparou esses dois XML que anexou? Se sim, notou que as tags do XML baixado do site da prefeitura estão com todas as letras em maiúsculas, já o outros gerado e retornado pelo webservice não esta com todas as letras em maiúsculas? Baixado do site da prefeitura: <ITENS> <ITEM> <TRIBUTAVEL>S</TRIBUTAVEL> <DESCRICAO>TESTE 309</DESCRICAO> <QUANTIDADE>1</QUANTIDADE> <VALOR_UNITARIO>1,5</VALOR_UNITARIO> <VALOR_TOTAL>1,5</VALOR_TOTAL> <DEDUCAO>N</DEDUCAO> <VALOR_ISS_UNITARIO>0</VALOR_ISS_UNITARIO> </ITEM> </ITENS> Retornado pelo webservice: <Itens> <Item> <DiscriminacaoServico>TESTE 309</DiscriminacaoServico> <Quantidade>1</Quantidade> <ValorUnitario>1.5</ValorUnitario> <ValorTotal>1.5</ValorTotal> <Tributavel>S</Tributavel> </Item> </Itens> Não seria o caso de você entrar em contato com a prefeitura e questionar sobre a diferença de layout bem como a ausência de informações no XML gerado pelo webservice? Observação: O componente trabalha com o XML gerado pelo webservice e não com o baixado da prefeitura.
    1 ponto
  19. será informado aqui conforme for trabalhado. no caso quando for ao svn será informado
    1 ponto
  20. Bom dia var StreamFile : TBytesStream; begin StreamFile := TBytesStream.Create(TNetEncoding.Base64.DecodeStringToBytes('base64_aqui'); StreamFile.SaveToFile('C:\localho\meuarquivo.pdf'); end; Funciona para qualquer arquivo
    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.