
Marcos Gerene
Membros-
Total de ítens
514 -
Registro em
-
Última visita
-
Days Won
1
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Tudo que Marcos Gerene postou
-
Boa tarde Ítalo, Fiz a alteração que me passou e a que eu tinha dito no outro post, porém agora a exceção ocorre em ACBrDFeCapicomDelphiSoap procedure TDFeCapicomDelphiSoap.OnBeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer); var CertContext: ICertContext; PCertContext: Pointer; ContentHeader: String; begin CertContext := Certificado as ICertContext; CertContext.Get_CertContext(integer(PCertContext)); with FpDFeSSL do begin if not InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT, PCertContext, SizeOf(CERT_CONTEXT)) then raise EACBrDFeException.Create('Erro ao ajustar INTERNET_OPTION_CLIENT_CERT_CONTEXT: ' + IntToStr(GetLastError)); if trim(ProxyUser) <> '' then if not InternetSetOption(Data, INTERNET_OPTION_PROXY_USERNAME, PChar(ProxyUser), Length(ProxyUser)) then raise EACBrDFeException.Create('Erro ao ajustar INTERNET_OPTION_PROXY_USERNAME: ' + IntToStr(GetLastError)); if trim(ProxyPass) <> '' then if not InternetSetOption(Data, INTERNET_OPTION_PROXY_PASSWORD, PChar(ProxyPass), Length(ProxyPass)) then raise EACBrDFeException.Create('Erro ao ajustar INTERNET_OPTION_PROXY_PASSWORD: ' + IntToStr(GetLastError)); ContentHeader := Format(ContentTypeTemplate, [FMimeType+'; charset=utf-8']); HttpAddRequestHeaders(Data, PChar(ContentHeader), Length(ContentHeader), HTTP_ADDREQ_FLAG_REPLACE); end; FIndyReqResp.CheckContentType; end; Na linha CertContext.Get_CertContext(integer(PCertContext)); ocorre um Acess Violation. Obrigado pela atenção
-
Boa tarde, Hoje de manhã fiz um post por esbarrar num problema com o NFSe usando o provedor do SimplISS. Nesse post até propus uma solução no fonte para esse problema, mas conforme fui avançando notei que toda a parte de "consumo" do webservice do NFSe está "em cima" do ACBrDFeWebService e este faz N validações do certificado. O problema é que o SimplISS não exige certificado o que faz com que eu não consiga enviar absolutamente nada para o webservice. Abaixo está a função EnviarDados do ACBrDFeWebServices todas minhas requisições passaram por ela e ela por si só exige informações do certificado. procedure TDFeWebService.EnviarDados; Var Tentar, Tratado: Boolean; begin { Sobrescrever apenas se necessário } FPRetWS := ''; FPRetornoWS := ''; { Verifica se precisa converter o Envelope para UTF8 antes de ser enviado. Entretanto o Envelope pode já ter sido convertido antes, como por exemplo, para assinatura. Se o XML está assinado, não deve modificar o conteúdo } if not XmlEstaAssinado(FPEnvelopeSoap) then FPEnvelopeSoap := ConverteXMLtoUTF8(FPEnvelopeSoap); Tentar := True; while Tentar do begin Tentar := False; Tratado := False; if FPConfiguracoes.Certificados.VerificarValidade and (FPDFeOwner.SSL.CertDataVenc < Now) then raise EACBrDFeException.Create('Data de Validade do Certificado já expirou: '+ FormatDateBr(FPDFeOwner.SSL.CertDataVenc)); try FPRetornoWS := FPDFeOwner.SSL.Enviar(FPEnvelopeSoap, FPURL, FPSoapAction, FPMimeType); except if Assigned(FPDFeOwner.OnTransmitError) then FPDFeOwner.OnTransmitError( FPDFeOwner.SSL.HTTPResultCode, FPDFeOwner.SSL.InternalErrorCode, FPURL, FPEnvelopeSoap, FPSoapAction, Tentar, Tratado) ; if not (Tentar or Tratado) then raise; end; end; { Resposta sempre é UTF8, ParseTXT chamará DecodetoString, que converterá de UTF8 para o formato nativo de String usada pela IDE } FPRetornoWS := ParseText(FPRetornoWS, True, True); end; Existe algo que eu possa fazer? Estou pensando da forma correta (uso o componente a um bom tempo, mas fui tentar "entender" ele recentemente)? Att, Marcos
-
function TACBrNFSe.Enviar(ALote: String; Imprimir: Boolean): Boolean; var i: Integer; begin if NotasFiscais.Count <= 0 then GerarException(ACBrStr('ERRO: Nenhum RPS adicionado ao Lote')); if NotasFiscais.Count > 50 then GerarException(ACBrStr('ERRO: Conjunto de RPS transmitidos (máximo de 50 RPS)' + ' excedido. Quantidade atual: ' + IntToStr(NotasFiscais.Count))); if (NotasFiscais.ACBrNFSe as TACBrNFSe).Configuracoes.Geral.ConfigAssinar.RPS then NotasFiscais.Assinar(Configuracoes.Geral.ConfigAssinar.RPS); Result := WebServices.Envia(ALote); if DANFSE <> nil then begin for i:= 0 to NotasFiscais.Count-1 do begin if NotasFiscais.Items[i].Confirmada and Imprimir then NotasFiscais.Items[i].Imprimir; end; end; end; Dessa forma deu certo, porém no WebServices.Envia(ALote) apareceu "número do certificado não encontrado". O SimplISS não tem certificado, devo fazer essa correção para onde der esse erro e postar meus .pas ou o modo que estou pensando/fazendo está errado?
-
Boa tarde ALA, O SimplISS não utiliza certificado, somente um usuário e senha, justamente por isso tentei setar o campo .SSL.CetCNPJ porém o mesmo é ReadOnly. No .ini do SimplISS note que não deve ser assinado nada: ; No grupo abaixo é definido se o XML do RPS deve ser assinado ou não ; se o Lote deve ser assinado ou não ; e se o GerarNFSe deve ser assinado ou não ; o Campo URI faz parte da assinatura no caso da Digifred ele não deve ser informado ; É definido também quais tipos de acessos devem ser assinados ; 0 = False / 1 = True (se True então assina) [Assinar] RPS=0 Lote=0 URI=0 Recepcionar=0 ConsSit=0 ConsLote=0 ConsNFSeRps=0 ConsNFSe=0 Cancelar=0 Gerar=0 RecSincrono=0 Substituir=0 Existe alguma propriedade que pegue essa informação (se deve assinar o RPS)? Porque se existir é só alterar o método "Enviar". function TACBrNFSe.Enviar(ALote: String; Imprimir: Boolean): Boolean; var i: Integer; begin if NotasFiscais.Count <= 0 then GerarException(ACBrStr('ERRO: Nenhum RPS adicionado ao Lote')); if NotasFiscais.Count > 50 then GerarException(ACBrStr('ERRO: Conjunto de RPS transmitidos (máximo de 50 RPS)' + ' excedido. Quantidade atual: ' + IntToStr(NotasFiscais.Count))); if (ASSINAR_RPS) then // -> Atualmente não existe esse IF NotasFiscais.Assinar(Configuracoes.Geral.ConfigAssinar.RPS); Result := WebServices.Envia(ALote); if DANFSE <> nil then begin for i:= 0 to NotasFiscais.Count-1 do begin if NotasFiscais.Items[i].Confirmada and Imprimir then NotasFiscais.Items[i].Imprimir; end; end; end; Att, Marcos
-
Erro ao Assinar. O XML informado possui CNPJ diferente do Certificado Digital
um tópico no fórum postou Marcos Gerene ACBrNFSe
Bom dia a todos, Estou migrando para o trunk2, atualmente usando o SimplISS (que já tem o .ini criado). Ao tentar transmitir um RPS, na procedure de Assinar do ACBrNFSeNotasFiscais estou tendo um problema nesse trecho: // VErificando se pode assinar esse XML (O XML tem o mesmo CNPJ do Certificado ??) CNPJEmitente := OnlyNumber(NFSe.Prestador.CNPJ); CNPJCertificado := OnlyNumber(TACBrNFSe(TNotasFiscais(Collection).ACBrNFSe).SSL.CertCNPJ); // verificar somente os 8 primeiros digitos, para evitar problemas quando // a filial estiver utilizando o certificado da matriz if Copy(CNPJEmitente, 1, 8) <> Copy(CNPJCertificado, 1, 8) then raise EACBrNFSeException.Create('Erro ao Assinar. O XML informado possui CNPJ diferente do Certificado Digital' ); Notei que a propriedade .SSL.CetCNPJ não estava preechida e tentei preencher de forma manual mas não consegui, porém vale lembrar que o SimplISS não usa certificado, ele requer somente um usuário e senha (diferente do Ginfes, por exemplo). Existe alguma configuração que eu não fiz para que este problema seja ignorado? Att, Marcos -
Bom dia Daniel, Eu estava "instalando" o trunk2 ainda então quando fui compilar tinha algumas units que usavam os xxxUtil.pas e fui comentando eles no uses e colocando os pxxxConversaoXxx.pas no lugar e o software compilou, vou começar hoje a testar os meus fontes com o trunk2. NF-e, SAT, SPED acredito que eu testo hoje. Obrigado pela ajuda, Marcos
-
Boa tarde, Estou fazendo a migração do Trunk para o Trunk2, a instalação do componente aconteceu sem erros, porém ao tentar compilar um projeto que usa MDFe estou com um erro na unit ACBrMDFeUtil mais precisamente com as sua use pmdfeConversao. Notei que na pasta ACBr\Fontes\ACBrDFe\ACBrMDFe\PCNMDFe\ não existe o pmdfeConversao, mas sim o pmdfeConversaoMDFe, então fiz a mudança na unit porém a mesma não reconhece "TpcteMask". Notei que o ACBrMDFeUtil fica em uma pasta chamada "verificar necessidade" e não entendi muito bem... o ACBRMDfeUtil deve ser "ignorado"? aonde eu uso ele devo usar o que no lugar?
-
Sim, na verdade como já tinha trabalhado com fast report ia usar ele, mas vi que era pago e resolvi usar o FortesReport... uso muitos componentes e tenho vários fontes separados... está sendo um pouco traumático a migração, mas acho que vai dar certo... tem que dar rs... obrigado pela força
-
Boa tarde Juliomar, tudo bem? Como estou fazendo a migração nesse momento, até então usava o quickreport com o ACBr (Delphi 7) e notei que o trunk2 não utiliza o QR. A partir de qual versão do Fast Report é suportada, sabe me dizer?
-
Boa tarde a todos, A um mês tentei migrar para o Trunk2 mas esbarrei na NFS-e, então voltei para o Trunk, mas venho acompanhando o Trunk2 deste então. Bem, notei que recentemente foi "liberado" o .ini do SimplISS que o servidor que uso (alem do Ginfes que foi o primeiro a ser liberado), então tentei novamente migrar para o trunk2, mas esbarrei no GNRe. Voltei novamente ao trunk porém notei que as novas tags da NF-e para a NT2015/003 e segundo o contador do meu cliente,esta nova NT vai obrigar meu cliente a emitir o GNRe (que ainda não está liberado no trunk2). A minha pergunta não é necessariamente para os desenvolvedores do ACBr mas sim para quem está implementando a NT em seus sistemas, gostaria de saber qual a solução que vocês estão encontrando para essa situação. Att, Marcos
-
Mudança de Provedor em Jaú/SP (GINFEs para CONAM)
Marcos Gerene replied to ivantgm's tópico in ACBrNFSe
Bom dia ivantgm, Ainda estou analisando com o cliente a necessidade e viabilidade do projeto, pelo pouco que li e entendi, ao consumirmos o webservice, a única parte que realmente vai ter que ser feita na unha é a montagem do XML, certo?! Se for assim, caso eu realmente faça, monto uma unit separada todo o esquema do XML para consumir esse webservice e disponibilizo aqui, caso contrário, se já tiver algo encaminhado e puder disponibilizar, agradeço. Att, Marcos -
Mudança de Provedor em Jaú/SP (GINFEs para CONAM)
Marcos Gerene replied to ivantgm's tópico in ACBrNFSe
Boa tarde ivantgm , Entrei em contato via e-mail com o [email protected]. Pergunta: gostaria de saber qual o servidor e aonde posso encontrar o material para integração com o novo web-service da NFS-e para a cidade de Jaú. Resposta: Para fazer o teste de webservice, deve-se efetuar o cadastro do CPF para ter acesso ao layout no link: https://nfehomologacao.etransparencia.com.br/sp.jau Após o teste utilizar o link de produção https://nfe.etransparencia.com.br/sp.jahu. No link do cadastro da para fazer o cadastro mesmo sendo pessoa física, coisa de 2 minutos, acredito que com isso você já consiga ter o login e senha. PS: o que você está fazendo é nos padrões ABCr ou "por fora"? -
Bom dia a todos, Estou com um problema para adicionar conhecimentos ao MDF-e. FrmMDFe.QryCidades.First; while not FrmMDFe.QryCidades.Eof do begin with infDoc.infMunDescarga.Add do begin cMunDescarga := FrmMDFe.QryCidades.FieldByName('CID_IBGE').AsInteger; xMunDescarga := FrmMDFe.QryCidades.FieldByName('CIDADE').AsString; Query.Close; Query.ParamByName('CID_IBGE').AsString := FrmMDFe.QryCidades.FieldByName('CID_IBGE').AsString; Query.Open; Query.FetchAll; Query.First; while not Query.Eof do begin if ( Copy(Query.FieldByName('PROTOCOLO').AsString,21,2) = '57' ) then begin with infCTe.Add do begin chCTe := Query.FieldByName('PROTOCOLO').AsString; SegCodBarra := ''; end; end else with infNFe.Add do begin chNFe := Query.FieldByName('PROTOCOLO').AsString; SegCodBarra := ''; end; Query.Next; end; end; FrmMDFe.QryCidades.Next; end; O meu código adiciona tanto CT-e quanto NF-e, se eu dou um showmessage em infCTe.Count vem a quantidade de CT-e adicionadas, porém no MDF-e vem assim: <infMunDescarga><cMunDescarga>3106200</cMunDescarga><xMunDescarga>BELO HORIZONTE</xMunDescarga></infMunDescarga> Fiz uma breve pesquisa e aqui no forum li algo relacionado a não poder "mesclar" tipos diferentes de documentos, então eu barrei o "with infNfe.Add do" para adicionar somente os conhecimentos e ver se era esse mesmo o problema, porém não obtive sucesso. PS: Atualmente uso o Trunk (1) e não posso migrar ainda para o trunk2, pois na ultima tentativa de migrar tive problemas com o NFS-e que ainda não estava "pronto" =/ Bom dia novamente, já encontrei a solução, está relacionada ao Ide.tpEmit, quando for "teTranspCargaPropria" só serão adicionados CT-es, quando for "teTransportadora" somente os CT-es.
-
Fiz o teste em uma máquina "virgem" e tive o mesmo resultado. O Acbr chega alterar as propriedades Porta, Path, etc do bemafi32.ini, mas quando vai fazer o "Bematech_FI_AbrePortaSerial" retorna isso: Erro em Bematech_FI_AbrePortaSerial Cod.: -4 - Arquivo BemaFI32.INI não encontrado. Verifique!
-
Boa tarde, Existe uma propriedade PathDlls que eu não setava, era por isso que o meu bemafi32.ini não modificava e criava um novo no c:\windows\. Porém na minha máquina agora ele acha o .ini, modifica ele, mas na hora de abrir a porta serial da impressora ele diz que o bemafi32.ini não foi encontrado (erro -4). Vou fazer um teste em uma máquina "virgem" para garantir que não tem nada interferindo nisso e posto o resultado. [ ]'s
-
No comando PafMF_MFD_Cotepe1704() os parâmetros são Data inicial, Data final e diretório, não controlo o nome do arquivo gerado... procedure TFrmPDV.GravarCat52(data:TDate); var dir, arquivo, arq_log_MFD:string; logMFD:TStringList; begin if (MessageBox(Handle,'Este processo pode ser muito lento se a movimentação do dia for grande. Deseja continuar?', 'Gerar CAT-52', Mb_yesno+mb_iconquestion+MB_DEFBUTTON2) = ID_NO) then Exit; try dir := ExtractFilePath(Application.ExeName)+'Cat52\'; arq_log_MFD := dir+'logCAT_52.txt'; logMFD := TStringList.Create; if (FileExists(arq_log_MFD)) then logMFD.LoadFromFile(arq_log_MFD); try if not DirectoryExists(dir) then ForceDirectories(dir); dir := dir+IntToStr(YearOf(data))+'\'; if not DirectoryExists(dir) then ForceDirectories(dir); dir := dir + PegaMes(data) + '\'; if not DirectoryExists(dir) then ForceDirectories(dir); case ECF.Modelo of ecfFiscNET : arquivo := dir + 'Memoria.tdm'; ecfEpson : arquivo := dir + 'ACBr_CTP.txt'; ecfBematech : arquivo := dir + 'Download.MFD'; ecfDaruma, ecfEscECF : arquivo := dir+'ver_nomes.txt'; //To do. end; if (FileExists(arquivo)) then DeleteFile(arquivo); try Aguardar(True); ECF.PafMF_MFD_Cotepe1704(data, data, dir); if (FileExists(arquivo)) then RenameFile(arquivo, dir+FormatDateTime('ddmmyyyy',data)+'.txt'); logMFD.Add('Arquivo CAT-52 de '+FormatDateTime('dd/mm/yyyy',data)+' gerado com sucesso.'); finally Aguardar(False); end; except on e:exception do begin logMFD.Add('Erro ao gerar arquivo CAT-52 de '+FormatDateTime('dd/mm/yyyy',data)); logMFD.Add(' '+e.Message); end; end; finally try logMFD.SaveToFile(arq_log_MFD); finally logMFD.Free; end; end; Existe uma função da ECF PafMF_GerarCAT52() pensei em usar ela, mas vi em alguns posts você dizendo que essa função era pra impressoras antigas matriciais... Vou ver se acho algo para separar esses arquivos no cat-52 que eu preciso... e quanto ao Bemafi32.ini, alguma dica de porque ele não alterar o que está na pasta ao ínvés de criar um novo? PS: Cheguei a apagar o .ini ai no meu log apareceu o erro que não existe o .ini mesmo criando no c:\windows...
-
Bom dia Daniel, Fiz o que disse e testei hoje com a Elgin e com a Bematech, ambas deram certo, mas existem algumas "ressalvas". 1-) O que eu queria era o arquivo do cat-52 mesmo, já formatado bonitinho, isso é possível? a função que citei acima na bematech gerou o "download.mfd" e na Elgin o "Memoria.tdm", ambos são o arquivo de leitura antes de separar... Com a bematech Epson foi gerado o "ACBr_CTP.txt", este exatamente do jeito que eu queria.... existe como separar esses arquivos pelo componente (gerar o arquivo final do cat-52)? Ou devo usar outra função que faça isso? 2-) No caso da Bematech eu coloquei o bemafi32.ini na pasta do meu exe e ao invés de mudar o Path do meu bemafi32.ini quando mudo o diretório, quando eu chamava a função era criado um novo bemafi32.ini no "C:\Windows\" Muito obrigado pela ajuda, Marcos
-
Bom dia Daniel Então nesse caso eu teria que testar "em produção"? Hoje uso Bematech, Epson, Daruma e Elgin, para todas a função seria essa que usei mesmo (PafMF_MFD_Cotepe1704())? Obrigado
-
Bom dia, Estou tentando fazer o meu PDV (frente de caixa) gerar automaticamente todo dia o arquivo do CAT-52. Vi que o ACBr tem várias forma de gerar o CAT-52, porém nenhuma deu muito certo nos meus testes (estou usando o emulador da Bematech mp-4200th). Código: dir := ExtractFilePath(Application.ExeName)+'Cat52\'; if not DirectoryExists(dir) then ForceDirectories(dir); dir := dir+IntToStr(YearOf(data))+'\'; if not DirectoryExists(dir) then ForceDirectories(dir); dir := dir + PegaMes(data) + '\'; if not DirectoryExists(dir) then ForceDirectories(dir); ecf.PafMF_MFD_Cotepe1704(Date(),Date(),dir); function PegaMes(Data:TDate):String; begin case MonthOf(Data) of 1: Result := 'Janeiro'; 2: Result := 'Fevereiro'; 3: Result := 'Marco'; 4: Result := 'Abril'; 5: Result := 'Maio'; 6: Result := 'Junho'; 7: Result := 'Julho'; 8: Result := 'Agosto'; 9: Result := 'Setembro'; 10: Result := 'Outubro'; 11: Result := 'Novembro'; 12: Result := 'Dezembro'; end; end; O diretório da variável dir existe e o log do ACBr não tem nada (limpei ele, executei de novo a função e continuou em branco). Alguma sugestão? Existe algum esquema de "cada função pra determinada impressora"? Obrigado, Marcos Acabei de tentar de mudar o emulado para o da Epson e o erro agora foi: Erro ao carregar a função: EPSON_Obter_Dados_MF_MFD de: InterfaceEpson.dll PS: O log continua em branco
-
Boa tarde, Estou fazendo uma consulta via lote do RPS, com o retorno eu faço um laço correndo todas as notas para pegar o Número, Código de verificação e o Status. Bem em um lote específico cancelei uma NFS-e. Ao consultar a nota de forma avulsa, o retorno que tenho é de que ela está cancelada, porém se eu consultar o lote ao qual a nota pertence, a mesma NFS-e sempre retorna "normal". Abri o XML de retorno das NFS-es e não achei nada relacionado ao status... Para pegar esse status vou ter que consultar "nota a nota" do meu lote? Tem alguma opção mais "leve"? Código: NFSe.ConsultarLoteRps(LOTE_CODIGO.Text, LOTE_PROTOCOLO.Text); for i:=0 to NFSe.NotasFiscais.Count-1 do begin sNumero := NFSe.NotasFiscais.Items[i].NFSe.Numero; sVerificacao := NFSe.NotasFiscais.Items[i].NFSe.CodigoVerificacao; if (NFSe.NotasFiscais.Items[i].NFSe.Status = srCancelado) then //Sempre retorna normal ShowMessage('Cancelado'); end; PS: Estou usando o servidor do Ginfes para Ribeirão Preto - SP em homologação. Obrigado, Marcos
-
Erro ao compilar o ACBrNFSeDANFeRLRetrato
Marcos Gerene replied to Marcos Gerene's tópico in ACBrNFSe
Boa tarde Ítalo, Obrigado -
Boa tarde, Estou começando a migrar para o Trunk2, ao tentar instalar o DANFSe do FortesReport aparece o seguinte erro: [Error] ACBrNFSeDANFSeRLRetrato.pas(343): There is no overloaded version of 'FormatDateTime' that can be called with these arguments Isso acontece em todos os lugares que chamam FormatDateTime ou FormatFloat como esta linha: rllEmissao.Caption := FormatDateTime(DateTimeToStr(FNFSe.DataEmissao)); //Astrogildo em 13/12/12 Acredito que essa função tenha sido modificada para outro nome no ABCrUtils, porque quando tento ver de onde vem a referencia aponta para o SysUtils e a forma de escrever no FormatDateTime são diferentes (argumentos usados). Vi que no ACBrUtils existe a FormatFloatBr e FormatDateTimeBr, é só dar um Find Files e alterar tudo para estas funções?
-
Boa tarde a todos, já faz um tempo a postagem, mas hoje vim no fórum para ver como andam as coisas com o S.F. e vi este post. Eu não consegui achar o problema, então simplesmente "barrei" (comentei) a linha que valida, e deixei somente gerando o lote e enviando no final. Feito isso, funcionou, acredito (não tenho conhecimento para isso, mas em alguns vi em alguns posts do fórum) que algumas funções só funcionam em determinados Provedores, então minha conclusão foi que a função de Validar não funcione com o Ginfes, mas peço para que me corrijam caso eu esteja errado para não ficar a informação errada aqui no fórum. Att, Marcos