-
Total de ítens
2.206 -
Registro em
-
Última visita
-
Days Won
2
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Tudo que antonio.carlos postou
-
Configurações do WS - Itaú - baixar via API o arquivo CNAB
antonio.carlos replied to Fabiano Moraes de Araújo's tópico in Boleto
-10 quer dizer que houve falha na execução do método.. Por favor configure os Logs ACBrLib e Log WebService para analise Log WebService Log ACBrLib Configure sempre Log ACBrLib nível paranoico. -
C# - Caracteres inválidos
antonio.carlos replied to Lindomar S. Menezes's tópico in NFe/NFCe - Nota Fiscal Eletrônica
Estamos analisando uma possível solução.. quando concluirmos, iremos dar um retorno aqui para você, combinado ?! -
codigoderetorno=6003, SAT não vinculado ao AC
antonio.carlos replied to PORTERR's tópico in ACBrMonitor PLUS
Quando é um SAT Novo.. Equipamento precisar ser ativado -> https://acbr.sourceforge.io/ACBrMonitor/SATAssociarAssinatura.html depois vinculado AC -> https://acbr.sourceforge.io/ACBrMonitor/SATAssociarAssinatura.html.. -
Mais um lançamento ACBrLib, desta vez chegou o ACBrLibPIXCD ! Depois de alguns meses trabalhando no desenvolvimento, chegou a hora de dizer... finalizamos mais uma biblioteca ACBrLib, o ACBrLibPIXCD. Para quem não conhece sobre PIX, o primeiro passo é acessar este tópico, para entender um pouco sobre o assunto. ACBrPIXCD - Novo Componente para integração com PIX. No Projeto ACBr temos o componente ACBrPIXCD, utilizado por desenvolvedores Delphi e Lazarus e agora utilizando o ACBrLibPIXCD é possível fazer uma integração nativa utilizando outras linguagens, por exemplo, C#, Java, VB6.. ou qualquer linguagem de programação que seja possível consumir uma dll (Windows) ou .so (Linux). Utilizando ACBrLibPIXCD é possível gerar um PIX de forma estática, configurando uma PSP em ACBrLib.ini e usando o método GerarQRCodeEstatico, veja um exemplo: //-------------------------------- Exemplo ACBrLib C# --------------------------------------// Parâmetros: AValor - Valor transação PIX. AinfoAdicional - Informaçoes Adicionais da transação PIX. (Parâmetro Opcional). ATxID - Identificador da Transação PIX. (Parâmetro Opcional). sResposta - Usado pelo retorno, contem as informações retornadas pela consulta. esTamanho - Usado pelo retorno, contem o tamanho da string (sResposta). ACBrPIXCD.GerarQRCodeEstatico(1); ACBrLibPIXCD não trabalha somente de forma estática, também é possível criar PIX dinâmico.. com os EndPoints /Pix, /Cob e /CobV, e configurando PSP em ACBrLib.ini, dessa forma você precisa utilizar os métodos que correspondem a cada EndPoint, exemplo utilizando EndPoint /CobV, com os métodos CriarCobranca: //-------------------------------- Exemplo ACBrLib C# --------------------------------------// Parâmetros: AInfCobVSolicitada - Arquivo.ini com as informações para criar uma cobrança. ATxId - Identificador da Transação PIX. sResposta - Usado pelo retorno, contem as informações retornadas pela consulta. esTamanho - Usado pelo retorno, contem o tamanho da string (sResposta). ACBrPIXCD.CriarCobranca("C:\Cobrança\CobVSolicitada.ini", "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"); CancelarCobranca: //-------------------------------- Exemplo ACBrLib C# --------------------------------------// Parâmetros: ATxId - Identificador da Transação PIX. sResposta - Usado pelo retorno, contem as informações retornadas pela consulta. esTamanho - Usado pelo retorno, contem o tamanho da string (sResposta). ACBrPIXCD.CancelarCobranca("ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"); Observação: O Projeto ACBr espera ansiosamente pelo feedback de todos e sabemos que podem ocorrer ajustes, por este motivo fique sempre atento aos commits e atualizações dos Manuais e Programa Exemplo. Obrigado @Daniel Simoes e @Juliana Tamizou por confiar e acreditar em mais um desenvolvimento ACBrLib. Agradecer também @EliasCesar e @EMBarbosa por todo apoio no projeto ACBrLibPIXCD. Até o próximo lançamento !
-
Tópico movido para a área do SAC, para que o SLA de respostas seja considerado
-
Tópico movido para a área do SAC, para que o SLA de respostas seja considerado
-
NFE_ValidarRegrasdeNegocios
antonio.carlos replied to phulano's tópico in NFe/NFCe - Nota Fiscal Eletrônica
Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico. -
Gerando NFSe usando LIB DLL
antonio.carlos replied to Desenvolvimento.microline's tópico in DFe - Documentos Fiscais Eletrônicos
Por favor, atualize ACBrLib para ultima versão disponibilizada no fórum, faça um novo teste, nos avise, por favor.. -
Gerando NFSe usando LIB DLL
antonio.carlos replied to Desenvolvimento.microline's tópico in DFe - Documentos Fiscais Eletrônicos
Vamos compilar uma nova versão, logo aviso você para fazer download de uma versão atualizada e realizar um novo teste.. -
Gerando NFSe usando LIB DLL
antonio.carlos replied to Desenvolvimento.microline's tópico in DFe - Documentos Fiscais Eletrônicos
Isso é mais um indício de que esta usando ACBrLib desatualizada.. pois parece que esta fazendo requisição para o endereço errado.. E outro fato é que você não precisa alterar nenhuma informação editando hexa do ACBrLib, isso é outro indício de que esta com ACBrLib desatualizada.. Veja os vídeos que @Diego Foliene anexou.. foi realizado teste em dois programas exemplos.. C# e VB6, inclusive VB6 utiliza stdcall em x86.. Por favor, remova e apague qualquer ACBrLib que encontrar em sua máquina.. não deixe nenhuma.. veja se não tem nada System32 ou Syswow64.. caso encontre alguma ACBrLib, por favor apague.. Faça download da ACBrLib no fórum e use somente ela.. -
Respondido.
-
Uso da biblioteca ACBrLib MT com múltiplas Threads
antonio.carlos replied to NVTech's tópico in Dúvidas gerais
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.. -
O primeiro Destravar é referente ao AplicarConfiguracoes. E o segundo Destravar é referente ao Config.Ler. Depois você chama os métodos Inicializar e Finalizar.. Você teve algum problema em usar os métodos ?
-
iniciando o uso do acbrmonitor-plus para nfse
antonio.carlos replied to m5sistemas's tópico in ACBrMonitorPLUS
Tópico movido para a área do SAC, para que o SLA de respostas seja considerado -
Pode anexar o log completo, por favor.. Travar e Destravar é um controle interno do ACBrLib.. Provavelmente o segundo Destravar foi referente algum Travar de outro método..
-
Tópico movido para a área do SAC, para que o SLA de respostas seja considerado
-
C# - ACBrCTe - Tag emit
antonio.carlos replied to Lindomar S. Menezes's tópico in DFe - Documentos Fiscais Eletrônicos
Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico. -
C# - ACBrCTe - Tag emit
antonio.carlos replied to Lindomar S. Menezes's tópico in DFe - Documentos Fiscais Eletrônicos
enviado um commit - At revision: 31229 pode atualizar svn, verificar se esta tudo certo.. por favor.. -
Tópico movido para a área do SAC, para que o SLA de respostas seja considerado
-
Tópico movido para a área do SAC, para que o SLA de respostas seja considerado
-
Olá @Henrique Lima tente utilizar este comando: https://acbr.sourceforge.io/ACBrMonitor/AbreGaveta1.html
- 1 reply
-
- 1
-
Erro "Segmentation fault" ao executar método NFE_DistribuicaoDFePorUltNSU
antonio.carlos replied to leoprates's tópico in ACBrLIB
@leoprates por desencargo, além do teste realizado no C# utilizando ACBrLibNFe.dll Fiz um teste com a ultima versão ACBrLibNFe.so.. em uma VM utilizando o programa exemplo Java.. veja: logacbrlib.txt Referente ao Consumo indevido, foi por conta do teste que Diego fez e logo em seguida eu realizei o teste no Java, necessário aguardar 1 hora, para realizar uma nova consulta.. Parece ter alguma relação ao tamanho do buffer. Veja que o @Diego Foliene comentou como funciona o buffer para o Java, seguimos este padrão para todos os Exemplos.. C#, VB6.. eles também aumentam o tamanho do buffer quando necessário..