Ir para conteúdo
  • Cadastre-se

Renan Garcia de Oliveira

Membros
  • Total de ítens

    58
  • Registro em

  • Última visita

Tudo que Renan Garcia de Oliveira postou

  1. Bom dia, Estou com o seguinte erro na validação do meu xml: '1824 - Element ''{http://www.portalfiscal.inf.br/nfe}qrCode'': ''?chNFe=52160316971926000164650011234567891358658191&nVersao=100&tpAmb=2&cDest=10522535631&dhEmi=323031362D30332D33315431303A31323A34302D30333A3030&vNF=10.80&vICMS=0.00&digVal=334C58593041544E30396F774C4655374A4F72617A4A5A707379303D&cIdToken=000000&cHashQRCode=3E1E38531CAE327B2BD0564DCA2BF8A5AB103ED5'' is not a valid value of the local atomic type.'#$A Já atualizei os Schemas e os fontes do acbr atualizei semana passada. Segue em anexo o meu xml de teste. Obrigado! teste.xml
  2. Bom dia, Em um cliente da empresa em que trabalho aleatoriamente no decorrer do dia ocorre um erro ao executar o comando FechaCupom. Aparentemente o componente parece entrar em um looping com o comando "VerificaFimImpressao" e fica nisso até retornar o erro "Impressora Bematech não está respondendo". O fechamento do cupom é executado com sucesso no ECF só a resposta é que parece não chegar. Isso ocorre em todas as 4 ECFs Bematech do cliente, todas compradas em épocas diferentes, ligadas direto na porta serial da placa-mãe, nenhuma usa placa multi-serial, o que ao meu ver não justifica dizer que é erro em cabo USB ou na própria ECF como já me foi reportado no fórum aberto do ACBr. O log com o erro segue em anexo e o mesmo pode ser encontrado aos "14/03 19:21:30:714" do log. Atenciosamente, Renan Garcia de Oliveira. LOG-ECF-NEREUS-14-03-2016.TXT P.s.: Onde escrevi "cabo USB " na verdade quis dizer "cabo SERIAL".
  3. Bom dia, sim, faço com ela exatamente o mesmo procedimento que faço com a MP-4000 utilizando o ACBr, mas essa porta serial virtual que a MP-4200 cria simplesmente não funciona, a Bematech até hoje não acertou a mão nisso. E agora ainda fizeram alguma coisa com o driver que nem com a DLL não vai também e eles afirmam que não mudaram nada. Só lembrando que a ECF está conectado com cabo USB ao computador. Ontem o técnico da Bematech reinstalou o driver dela várias vezes até que funcionou, mas para utilizar a ECF precisei usar a DLL da Bematech e conectando na porta serial que ela cria, se configurar a DLL para USB não funciona. Foi a única forma de fazer funcionar e também não pode instalar o Bematools pois o driver para de funcionar. Vou tentar levantar um pouco mais de informação e postar isso no fórum caso alguém precise também porque foi um parto fazer a ECF funcionar com cabo USB, daqui pra frente só recomendo Daruma para os clientes que forem comprar uma nova.
  4. Certo, eu vou procurar ver certinha a legislação de cada estado, mas no meu sistema vou fazer do jeito certo, mas que desse modo errado ia ficar muito mais rápido o sistema isso ia. =D
  5. Bom dia, Estou desenvolvendo o módulo de Cupom Eletrônico no ERP em que trabalho. Gostaria de saber se é muito errado e se pode ocorrer problemas colocar todas os Cupons Eletrônicos em modo contingência, para que o Ponto de Venda finalize a venda mais rápido independente de ter internet ou rede, para então criar no servidor uma regra responsável somente pelo envio dos Cupons Eletrônicos. Pergunto isso pois recentemente fiz uma viagem para Primavera do Leste no Mato Grosso e fiz uma compra em um mercado que possui cupom eletrônico e na impressão consta que foi emitido em contingência, mas visualmente não parecia ter nenhum problema de rede ou internet no local. Atenciosamente, Renan Garcia de Oliveira.
  6. Bom dia, Tenho um cliente que adquiriu uma ECF Bematech 4200 TH FI e ela simplesmente não funciona de forma alguma. Essa impressora agora cria uma porta serial virtual quando instala o driver dela, mas não funciona nem via serial (com ACBr) e nem via DLL em uma classe que desenvolvemos. Gostaria de saber se já tiveram relatos de problemas com esse ECF nova da Bematech, o suporte da Bematech jura que não mudaram nada na ECF do modelo anterior pra esse novo e não conseguem sequer explicar o porquê do erro. Estou enviando em anexo o log do ECFTeste, onde ocorre o mesmo erro que em meu sistema. Atenciosamente, Renan Garcia de Oliveira. acbrlog.txt
  7. Boa tarde, O método abaixo: ACBrPAF.SaveFileTXT_B(""); Na versão do trunk2 é utilizado agora como no exemplo abaixo? ACBrPAF.PAF_B.NomeArquivo := 'nome.txt'; ACBrPAF.PAF_B.SaveToFile; Atenciosamente, Renan Garcia de Oliveira.
  8. Mais agora voltou a ficar igual antes e dá o mesmo erro no Delhpi XE3. [dcc32 Error] ACBrBase.pas(93): E2029 $IFEND expected but $ENDIF found
  9. No Delphi XE3 consegui corrigir alterando o código para: uses Classes, SysUtils, Contnrs, ACBrConsts, syncobjs, {$IFDEF COMPILER6_UP} Types {$ELSE} Windows, ACBrD5 {$ENDIF} {$IFNDEF NOGUI} {$IFDEF FMX} ,System.UITypes {$ENDIF} {$IF DEFINED(VisualCLX)} ,QDialogs {$ELSEIF DEFINED(FMX)} ,FMX.Dialogs {$ELSE} ,Dialogs {$IFEND} {$ENDIF}; type Alterando o penúltimo ENDIF para IFEND, no Delphi XE7 dessa forma também funcionou.
  10. Boa tarde, Estou tendo este erro ao compilar o ACBrBase no Delphi XE3, no XE7 não dá o erro em questão. [dcc32 Error] ACBrBase.pas(96): E2029 $IFEND expected but $ENDIF found Atenciosamente, Renan Garcia de Oliveira.
  11. Boa tarde, Estou projetando a integração do NFC-e no Ponto de Venda do ERP que trabalho e vou utilizar para isso o componente ACBr, mas tenho uma dúvida que não é relacionada com o componente mas com o processo em si. A dúvida é a seguinte: qual o melhor tratamento para gerenciar o número da nota em um ambiente onde eu posso ter mais de um ponto de venda que pode trabalhar off-line? Por exemplo se eu utilizar série 01 na nota e gerar a nota no servidor, não haverá problemas na sequência da numeração, mas se o servidor ficar off-line aí eu perco o fio da meada nas estações e com certeza vão haver notas duplicadas. Uma outra alternativa que pensei foi utilizar uma série para cada caixa e aí a sequência de numeração seria gerada em cada caixa e não iria depender do servidor, o problema é que não sei se essa abordagem é lá muito correta. Atenciosamente, Renan Garcia de Oliveira.
  12. Boa tarde, Eu utilizo uma classe que fiz para o CliSiTef, mas fiz o teste com o TEFDemo do ACBr e tive o mesmo problema. Eu imagino que o problema seja algo relacionado à versão da DLL, vou entrar em contato com a Software Express para tentar solucionar, mas mesmo assim estou enviando em anexo o log gerado pelo TEFDemo. Atenciosamente, Renan Garcia de Oliveira. [update] Dito e feito, eram as DLL's mesmo. Eu pedi o material de homologação para eles em dezembro, e veio com a DLL versão 4.0.0.24, eu voltei para as minhas DLL's antigas, versão 4.0.0.17 e consegui efetuar a carga no PinPad. CliSiTef.txt
  13. Boa tarde, Estou iniciando os testes para homologar o CliSiTef, mas sempre que vou tentar vender com um cartão de crédito magnético o TEF começa a atualizar as tabelas do pinpad, mas sempre trava na hora de carregar o registro 5. Eu tive esse problema antigamente - na versão anterior do meu sistema - e acontecia porque eu ficava exibindo a mensagem do comando 3 na tela do pinpad, aparentemente isso lotava a comunicação com o pinpado, pois o TEF estava atualizando as tabelas e eu enviando mensagens para a tela. Recentemente refizemos todo o nosso PDV mas eu mantive praticamente todo o código antigo do CliSiTef, tomando o devido cuidado de não mandar nada para a tela do pinpad durante a carga de tabelas, mesmo assim estou tendo o antigo erro. Gostaria de saber se alguém já teve este problema ao carregar as tabelas do pinpad e qual a solução encontrada. Estou enviando em anexo o debug com os comandos e mensagens recebidos no ContinuaFuncaoSiTefInterativo. Atenciosamente, Renan Garcia de Oliveira. Debug.txt
  14. Sim, coloquei as duas junto da aplicação e deu o memso erro de novo. Rodei o registra.bat e executei o programa em outro computador que não mexi com a libeay, nada ainda. Mais ou menos um mês atrás eu consegui rodar este comando, quinta-feira agora eu vou homologar o PAF, aí peguei o roteiro e to repassando ele só pra confirmar, logo que chegou no teste do menu fiscal me vem essa ¬¬
  15. Estou tentando realizar o comando ArquivoMF_DLL, testei com uma ECF Daruma e uma Bematech nas ruas recebo um erro de access violation na libeay32.dll. Alguém já teve este problema, ou está tendo e o que posso fazer para tentar resolver? Já copiei as DLLs libeay32 da pasta OpenSSL do ACBr pra tudo quanto é lado no computador e até agora nada.
  16. Em fim, consegui resolver o problema de "Carácter inválido encontrado no texto". Na verdade o método acima funciona perfeitamente para enviar o arquivo, quem me pregou uma peça foi a própria estrutura do sistema daqui da empresa, não sei o porquê direito mas de certa forma algumas classes estavam sobrescrevendo alguns do métodos utilizados, por exemplo: o "Reset(vF);", minha regra de negócio herda de uma classe que já possui um método Reset mas que faz outras funções. Agora que o SNGPC está tinindo gostaria de saber se não há algum manual de como adequar o código dele para que eu possa contribuir com o código para o Projeto ACBr também.
  17. Vou tentar postar mais uma vez o meu problema, ontem o dia todo e hoje fiz diversas tentativas para gerar um arquivo e sempre o mesmo bendito erro: "Caractere inválido encontrado no texto" Segue abaixo todo o código que utilizo para enviar o arquivo ao SNGPC (via webservice) e um arquivo gerado. //Gerar XML vNomeArquivo := FormatDateTime('yyyymmddhhnnsszzz', Now); vXMLResultante := TXMLDocument.Create(nil); vXMLResultante.Active := False; vXMLResultante.FileName := ''; vXMLResultante.LoadFromXML(FInventario.GerarSngpc2Inventario); //Salvar arquivo e compactar em formato zip if not DirectoryExists(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc') then ForceDirectories(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc'); vXMLResultante.Active := true; vXMLResultante.SaveToFile(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + vNomeArquivo + '.xml'); vNomeArquivo := DoCompactaXML(vNomeArquivo); { DoCompactaXML } function TRN_EQ_SNGPC2.DoCompactaXML(pNomeArquivo: string): string; var vZipFile: TZipFile; begin //Compacta o arquivo vZipFile := TZipFile.Create; try vZipFile.Open(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + pNomeArquivo + '.zip', zmWrite); vZipFile.Add(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + pNomeArquivo + '.xml'); vZipFile.Close; finally vZipFile.Free; DeleteFile(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + pNomeArquivo + '.xml'); Result := ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + pNomeArquivo + '.zip'; end; end; //Gerar Hash FDSDados.DataSet.Edit; //FDSDados.DataSet.FieldByname('SNGPC_HASH').AsString := DoGetHashFromZipFile(vNomeArquivo); FDSDados.DataSet.FieldByname('SNGPC_HASH').AsString := MD5Print(MD5String(vXMLResultante.XML.Text)); { DoGetHashFromZipFile - Atualemten estou gerando hash a partir do texto xml, mas pelo arquivo zip ainda ocorria o mesmo erro } function TRN_EQ_SNGPC2.DoGetHashFromZipFile(pNomeArquivo: string): string; var vIdmd5: TIdHashMessageDigest5; vFs: TFileStream; begin vIdmd5 := TIdHashMessageDigest5.Create; vFs := TFileStream.Create(pNomeArquivo, fmOpenRead or fmShareDenyWrite); try Result := vIdmd5.HashStreamAsHex(vFs); finally vFs.Free; vIdmd5.Free; end; end; //Enviar FDSDados.DataSet.FieldByname('MENSAGEM').AsString := vGerenciador.EnviarArquivo( FInventario.Usuario, FInventario.Senha, FDSDados.DataSet.FieldByname('SNGPC_HASH').AsString, vNomeArquivo, vHomologacao); { EnviarArquivo } function TSngpc2Gerenciador.EnviarArquivo(pEmail, pSenha, pHash, pArquivo: string; pTeste: Boolean): string; var FacWsTeste: ITSngpc2SoapTeste; FacWsProducao: ITSngpc2SoapProducao; begin Result := EmptyStr; try try if pTeste then begin FacWsTeste := TSngpc2SoapTeste.Create; with FacWsTeste do begin WsTeste := LoadSngpcSoapTeste(); Result := WsTeste.EnviaArquivoSNGPC(pEmail, pSenha, FileToByteArray(pArquivo), pHash); end; end else begin FacWsProducao := TSngpc2SoapProducao.Create; with FacWsProducao do begin WsProducao := LoadSngpcSoapProducao(); Result := WsProducao.EnviaArquivoSNGPC(pEmail, pSenha, FileToByteArray(pArquivo), pHash); end; end; except on E: Exception do raise Exception.Create(E.Message); end; finally DeleteFile(pArquivo); end; end; { FileToByteArray } function TSngpc2Gerenciador.FileToByteArray(const pFileName: string): TByteDynArray; const BLOCK_SIZE = 1024; var vBytesRead, vBytesToWrite, vCount: integer; vF: file of Byte; vTemp: Pointer; begin AssignFile(vF, pFileName); Reset(vF); try vCount := FileSize(vF); SetLength(Result, vCount); vTemp := @Result[0]; vBytesRead := BLOCK_SIZE; while (vBytesRead = BLOCK_SIZE) do begin vBytesToWrite := Min(vCount, BLOCK_SIZE); BlockRead(vF, vTemp^, vBytesToWrite, vBytesRead); vTemp := Pointer(LongInt(vTemp) + BLOCK_SIZE); vCount := vCount - vBytesRead; end; finally CloseFile(vF); end; end; 20130903093315710.xml
  18. Ainda continuo sem conseguir enviar o arquivo pelo WebService, o mesmo erro de sempre.
  19. É pra acabar mesmo, tentei as duas alternativas: - Fiz o método RemoveAcento(); - Na hora de salvar o xml utilizei o encoding, .SaveToFile('asdasda', TEcncoding.UTF8); E nada, continuo recebendo a mensagem 'Caractere inválido encontrado no texto'.
  20. Eu imagino que não seja esse o caso, pois o mesmo arquivo que gero para o web service é o que utilizo para fazer upload direto no site do SNGPC, aliás é a forma que osclientes estão utilizando atualmente. Mas irei testar ainda assim.
  21. É esse erro mesmo , meu carma dos últimos dias...
  22. Vou tentar postar mais uma vez pra ver se alguém ainda está com o problema de: Caracteres inválidos encontrados no texto. Esse é o passo a passo que faço para enviar oarquivo ao SNGPC 1º - Gero o conteúdo do arquivo e salvo ele em disco, em seguida compacto o arquivo para o formato .zip //Gerar XML vXMLResultante := FInventario.GerarSngpc2Inventario; //Salvar arquivo e compactar em formato zip if not DirectoryExists(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc') then ForceDirectories(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc'); vNomeArquivo := FormatDateTime('yyyymmddhhnnsszzz', Now); vArquivo.Text := vXMLResultante; vArquivo.SaveToFile(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + vNomeArquivo + '.xml'); vNomeArquivo := DoCompactaXML(vNomeArquivo); // * // *Método de compactação function TRN_EQ_SNGPC2.DoCompactaXML(pNomeArquivo: string): string; var vZipFile: TZipFile; begin //Compacta o arquivo vZipFile := TZipFile.Create; try vZipFile.Open(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + pNomeArquivo + '.zip', zmWrite); vZipFile.Add(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + pNomeArquivo + '.xml'); vZipFile.Close; finally vZipFile.Free; DeleteFile(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + pNomeArquivo + '.xml'); Result := ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + pNomeArquivo + '.zip'; end; end; 2º - Gero um hash utilizando o arquivo .zip //Gerar Hash FDSDados.DataSet.Edit; FDSDados.DataSet.FieldByname('SNGPC_HASH').AsString := DoGetHashFromZipFile(vNomeArquivo); // ** // ** Método para gerar o hash function TRN_EQ_SNGPC2.DoGetHashFromZipFile(pNomeArquivo: string): string; var vIdmd5: TIdHashMessageDigest5; vFs: TFileStream; begin vIdmd5 := TIdHashMessageDigest5.Create; vFs := TFileStream.Create(pNomeArquivo, fmOpenRead or fmShareDenyWrite); try Result := vIdmd5.HashStreamAsHex(vFs); finally vFs.Free; vIdmd5.Free; end; end; 3º - Efetuo o envio do arquivo FDSDados.DataSet.FieldByname('MENSAGEM').AsString := vGerenciador.EnviarArquivo(FInventario.Usuario, FInventario.Senha, FDSDados.DataSet.FieldByname('SNGPC_HASH').AsString, vNomeArquivo, vHomologacao); // *** // *** Método de envio do arquivo function TSngpc2Gerenciador.EnviarArquivo(pEmail, pSenha, pHash, pArquivo: string; pTeste: Boolean): string; var FacWsTeste: ITSngpc2SoapTeste; FacWsProducao: ITSngpc2SoapProducao; vFile: TByteDynArray; begin Result := EmptyStr; try if pTeste then begin vFile := FileToByteArray(pArquivo); // **** FacWsTeste := TSngpc2SoapTeste.Create; with FacWsTeste do begin WsTeste := LoadSngpcSoapTeste(); Result := WsTeste.EnviaArquivoSNGPC(pEmail, pSenha, vFile, pHash); end; end else begin vFile := FileToByteArray(pArquivo); FacWsProducao := TSngpc2SoapProducao.Create; with FacWsProducao do begin WsProducao := LoadSngpcSoapProducao(); Result := WsProducao.EnviaArquivoSNGPC(pEmail, pSenha, vFile, pHash); end; end; except on E: Exception do raise Exception.Create(E.Message); end; end; // *** Método para converter o arquivo no formato TByteDynArray function TSngpc2Gerenciador.FileToByteArray(const pFileName: string): TByteDynArray; const BLOCK_SIZE = 1024; var BytesRead, BytesToWrite, Count: Integer; F: file of Byte; pTemp: Pointer; begin AssignFile(F, pFileName); Reset(F); try Count := FileSize(F); SetLength(Result, Count); pTemp := @Result[0]; BytesRead := BLOCK_SIZE; while (BytesRead = BLOCK_SIZE) do begin BytesToWrite := Min(Count, BLOCK_SIZE); BlockRead(F, pTemp^, BytesToWrite, BytesRead); pTemp := Pointer(LongInt(pTemp) + BLOCK_SIZE); Count := Count - BytesRead; end; finally CloseFile(F); end; end; Já virei esse código do avesso um monte de vezes, e até hoje continuo com esse erro.
  23. Isso é porque o WideString do Delphi 7 é o tipo string do Delphi XE+
  24. A variável pHash está declarada como String, no Delphi XE3 e segue em anexo as units do WSDL Importer e a que uso para enviar o SNGPC. P.s.: se eu conseguir deixar ok o SNGPC pretendo compartilhar com o pessoal da ACBr, para ajudar que for possível. Sngpc2Gerenciador.pas sngpc.pas
×
×
  • 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.