Tutorial ACBRMonitorPlus

Fórum sobre desenvolvimento de software para atender as exigências da legislação fiscal e tributária (NFe, NFCe, NFSe, SPEED, Projeto ACBr, TEF, ECD, EFD, etc.)

Moderador: Moderadores

Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Tutorial ACBRMonitorPlus

Mensagem por fladimir »

Acho que a maioria dos programadores que vendem sistemas não tem direito legal (cnpj), nem recursos, pra adquirir um
certificado para realizar os testes, o que é entristecedor....
Com relação a maioria não ter CNPJ, acredito q possa ser assim, mas hj não esta complicado de tirar CNPJ, da pra tirar em menos de 10 minutos online sem pagar nada como MEI e depois paga uma taxa mensal entre 42,00 e 46,00.

Sabemos q é mais um custo, mas quem quer trabalhar com sistemas para área fiscal vai ter q investir.

Quanto ao certificado o valor é 165,00 a 190,00 o modelo A1, mas não é um valor absurdo e precisá se feito o investimento.

A realidade é essa, vejo q são barreiras a serem transpostas mas não é impossível.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Tutorial ACBRMonitorPlus

Mensagem por ANDRIL »

fladimir escreveu:Sabemos q é mais um custo, mas quem quer trabalhar com sistemas para área fiscal vai ter q investir.
Lembrando em se tratando de S@T, não ADIANTA ter CNPJ como MEI se quer revender seus programas, precisa abrir uma empresa com CNAEs na classificação 62**.
Fique atento!
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Tutorial ACBRMonitorPlus

Mensagem por lugab »

Valeu as dicas, pessoal...

Mas eu me referi aos programadores pessoa física, avulsos, que nem contrato formal possuem na maioria dos casos....
lugab
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Tutorial ACBRMonitorPlus

Mensagem por JoséQuintas »

Quando a gente quer fazer, e precisa fazer, a gente faz.

Comecei com NFE em 2008, o primeiro ramo obrigatório.
Não existia nada do que existe hoje, ninguém pra pedir ajuda e nenhum material disponível pra ajuda.
Hoje em dia tá fácil.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
AutomoSistema
Usuário Nível 2
Usuário Nível 2
Mensagens: 87
Registrado em: 27 Nov 2015 22:09
Localização: Jardim-MS

Tutorial ACBRMonitorPlus

Mensagem por AutomoSistema »

Boa tarde Fladimir, tenho uma pergunta, trabalha com a daruma?
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Tutorial ACBRMonitorPlus

Mensagem por fladimir »

Aqui no fórum se não me engano tem um exemplo, teria q procurar...

Mas basicamente é via troca de arquivos, vc no monitor configurar a pasta q vai ser monitorada e vai criando os arquivos TXT com os comandos e vai lendo os
arquivos q o ACBr vai criar apos ler os teus arquivos q no caso são os arquivos de retorno...

Exemplo

Vc cria um arquivo chamado ENT.TXT contendo:

Código: Selecionar todos

ECF.LeituraX
Ai o ACBr vai ver q tem o arquivo na pasta ler o arquivo ver q é o comando para Leitura X e fazer a emissão da leitura X e devolver um retorno chamado SAI.TXT contendo:

Código: Selecionar todos

OK: 
Ai vc le o arquivo de retorno e sabera q deu certo... se estiver lá dentro ERRO tera q tratar interpretando...

Basicamente é isso.. pra vender a mesma coisa mas com os devidos comandos dentro do arquivo.. tipo

Código: Selecionar todos

ECF.AbreCupom
ECF.VendeItem(....)
ECF.VendeItem(....)
ECF.FechaCupom
Esta listagem de comandos esta no próprio manual q acompanha qdo vc instala o ACBr.

É ler o manual e saber o comando necessário.... além de teu sistema ficar compatível com várias ECFs de um modo geral.

[]´s
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Tutorial ACBRMonitorPlus

Mensagem por porter »

olá fladimir, por favor, se você puder tirar minha duvida, a aba Monitor do AcbrMonitor Plus está configurada assim:

Entrada: ENTNFE.TXT
Saída: SAINFE.TXT

Log de Comandos habilitado
Arquivo: LOG.TXT

qual deve ser o conteúdo do comando Caminho->PathNFe

Creio que Caminho é um arquivo e PathNFe, é um campo, qual conteúdo deve ter nesse campo ?

obrigado.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Tutorial ACBRMonitorPlus

Mensagem por fladimir »

na aba monitorar esta ENT.TXT então o caminho é a Pasta que o ACBr esta instalado, ou seja, se for a pasta padrão será

Código: Selecionar todos

C:\ACBrMonitor\
Se vc quiser monitorar outra pasta igual eu faço, eu mudo lá onde esta Monitorar a pasta e esta ENT.TXT eu coloco:

Código: Selecionar todos

C:\PastadoMeuSistema\ACBr\ENT.TXT 
Ai no sistema o Caminho->PathNFe ficará:

Código: Selecionar todos

C:\PastadoMeuSistema\ACBr\
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Tutorial ACBRMonitorPlus

Mensagem por Mário Isa »

Muito bom esse tópico.
Que tal enriquecê-lo ainda mais com o MDF-e ?

Vou deixar aqui o meu caminho das pedras...
o .prg inicial de como tentar fazer um mdfe pelo acbrmonitor plus.

Código: Selecionar todos

==============================================================
detectando quando é outro estado

   if confirma('NFE foi emitida. Deseja imprimir agora')="S"

    if cliente->estcli # vem(ontem->uf)
     Msginfo('ATENÇÃO ! Notas emitidas para outro estado entregues por você ou transportadora tem que acompanhar a MDF-e.')


     if confirma('Deseja emitir o MDF-e') = "S"
      emitir_mdfe(totnf)
     else
      Tecle(6039) // Se necessário emita-o pelo F8-MDFe
     end


    end

==============================================================


//----------->
     Function emitir_mdfe(totnf)
     acbrinsta := acbrnfeinsta()

     if !fornec->(loc("!empty(tara)"))
      Tecle(6030) // hb_ansitooem('Não existe proprietário e/ou motorista cadastrado.'))
      return nil
     end

     na_janela(maxrow(),1,'Confeccionando Mdf-e....',NIL,8)
     TEcle(6031) // hb_ansitooem('Entre com o código do fornecedor proprietário do veículo.'))
     fornec_tran := ESCOMER('FORNEC','NOME','CODFOR')
     fornec->(dbseek(fornec_tran))
     if empty(fornec->tara) .or. empty(fornec->placa)
      Tecle(6032) //hb_ansitooem('Fornecedor inválido. Ajuste o fornecedor proprietário e 
      return nil
     end
     TEcle(6033) //hb_ansitooem('Entre com o código do fornecedor MOTORISTA.'))
     fornec_moto := ESCOMER('FORNEC','NOME','CODFOR')

     peso_tot_car := 0
     valor_tot_nfe := totnf

     vortadado := pededado('Peso Total..: ',peso_tot_car,'@e 99,999.99','.t.','Valor Total.: ',valor_tot_nfe,'@e 99,999.99','.t.')
     peso_tot_car := vortadado[1]
     valor_tot_nfe := vortadado[2]

     if lastkey() = 27
      Tecle(6022) // abortado
      return nil
     end

     if mdfe_nfe()
      tecle('Emitido com sucesso.')

      //apendanot("MDFE")

     else
      tecle(hb_ansitooem('Falha na emissão do MDF-e'))
     end
     fechajanela()
     return nil
==============================================================


Function mdfe_nfe()
local fll := ''
local formar := subs(vem(ontem->codcidad),1,2) + subs(dtoc(hoje),9) + subs(dtoc(hoje),4,2)+sohnumero(vem(ontem->cgc))+'58'+'000'+strzero(paramet->mdrvyct,9)+'1'+strzero(paramet->mdrvyct,8)
local ritorna
local ondestava := select()

/*
22
16
04
73883381000178
58
000
000000001
1
00000001
*/

m_chave_nfe := curdrive()+':'+curdirx()+'nfe\envresp.txt\'+formar + '-mdfe.xml'

fll+='<?xml version="1.0" encoding="UTF-8"?>'
fll+='<MDFe xmlns="http://www.portalfiscal.inf.br/mdfe">'
fll+='<infMDFe Id="MDFe' + formar + validignfe(formar,2,9) + '" versao="1.00">'
fll+='<ide>'
fll+='<cUF>'+subs(vem(ontem->codcidad),1,2)+'</cUF>'
fll+='<tpAmb>' + if(stoq2000ehdos = 0 , '2' , '1') + '</tpAmb>'
fll+='<tpEmit>2</tpEmit>'
fll+='<mod>58</mod>'
fll+='<serie>0</serie>'
fll+='<nMDF>'+ltri(str(paramet->mdrvyct))+'</nMDF>'
fll+='<cMDF>'+strzero(paramet->mdrvyct,8)+'</cMDF>'
fll+='<cDV>'+validignfe(formar,2,9)+'</cDV>'
fll+='<modal>1</modal>'
fll+='<dhEmi>'+ subs(dtoc(hoje),7) + '-' + subs(dtoc(hoje),4,2) + '-' + subs(dtoc(hoje),1,2)  +'T' + time()+'</dhEmi>'
fll+='<tpEmis>1</tpEmis>'
fll+='<procEmi>0</procEmi>'
fll+='<verProc>1.00</verProc>'
fll+='<UFIni>'+vem(ontem->uf)+'</UFIni>'
fll+='<UFFim>'+cliente->estcli+'</UFFim>'
fll+='<infMunCarrega>'
fll+='<cMunCarrega>'+vem(ontem->codcidad)+'</cMunCarrega>'
fll+='<xMunCarrega>'+trim(vem(ontem->cidad))+'</xMunCarrega>'
fll+='</infMunCarrega>'
fll+='</ide>'
fll+='<emit>'
fll+='<CNPJ>'+vem(ontem->cgc)+'</CNPJ>'
fll+='<IE>'+vem(ontem->iest)+'</IE>'
fll+='<xNome>'+trim(vem(ontem->razsoc))+'</xNome>'
fll+='<enderEmit>'
fll+='<xLgr>'+trim(vem(ontem->ender))+'</xLgr>'
fll+='<nro>'+trim(vem(ontem->numero))+'</nro>'
fll+='<xBairro>'+trim(vem(ontem->bairro))+'</xBairro>'
fll+='<cMun>'+vem(ontem->codcidad)+'</cMun>'
fll+='<xMun>'+trim(vem(ontem->cidad))+'</xMun>'
fll+='<UF>'+vem(ontem->uf)+'</UF>'
fll+='<CEP>'+vem(ontem->cep)+'</CEP>'
fll+='<fone>'+trim(vem(ontem->telef))+'</fone>'
fll+='</enderEmit>'
fll+='</emit>'
fll+='<infModal versaoModal="1.00">'
fll+='<rodo>'
fll+='<veicTracao>'

fornec->(dbseek(fornec_tran))

fll+='<cInt>'+substitui('-','',fornec->placa)+'</cInt>'
fll+='<placa>'+substitui('-','',fornec->placa)+'</placa>'
fll+='<tara>'+ltri(str(fornec->tara))+'</tara>'
fll+='<capKG>'+ltri(str(fornec->capkg))+'</capKG>'
fll+='<capM3>'+trim(fornec->capm3)+'</capM3>'
fll+='<prop>'
fll+='<CPF>'+sohnumero(fornec->cgcfor)+'</CPF>'
fll+='<RNTRC>'+trim(fornec->rntrc)+'</RNTRC>'
fll+='<xNome>'+trim(fornec->nome)+'</xNome>'
fll+='<IE>'+trim(fornec->iesfor)+'</IE>'
fll+='<UF>'+trim(fornec->uffor)+'</UF>'
fll+='<tpProp>2</tpProp>'
fll+='</prop>'

fornec->(dbseek(fornec_moto))

fll+='<condutor>'
fll+='<xNome>'+trim(fornec->nome)+'</xNome>'
fll+='<CPF>'+sohnumero(fornec->cgcfor)+'</CPF>'
fll+='</condutor>'
fll+='<tpRod>01</tpRod>'
fll+='<tpCar>02</tpCar>'
fll+='<UF>'+trim(fornec->uffor)+'</UF>'
fll+='</veicTracao>'
fll+='</rodo>'
fll+='</infModal>'
fll+='<infDoc>'
fll+='<infMunDescarga>'
fll+='<cMunDescarga>'+cliente->codcity+'</cMunDescarga>'
fll+='<xMunDescarga>'+semacento(trim(cliente->cidcli))+'</xMunDescarga>'
fll+='<infNFe>'
fll+='<chNFe>'+extraichave(a_chave_nfe,'\',.t.)+'</chNFe>'
fll+='</infNFe>'
fll+='</infMunDescarga>'
fll+='</infDoc>'
fll+='<tot>'
fll+='<qNFe>1</qNFe>'

fll+='<vCarga>'+ltrim(transform(valor_tot_nfe,'99999999999.99'))+'</vCarga>'
fll+='<cUnid>01</cUnid>'
fll+='<qCarga>'+ltrim(transform(peso_tot_car,'99999999999.99'))+'</qCarga>'
fll+='</tot>'
fll+='</infMDFe>'
fll+='</MDFe>'

mymemow(m_chave_nfe,fll)

if assinamdfe() .and. validamdfe() .and. enviamdfe()

 dbselectar('hisnot')
 adireg(0)

 repassa(1,'CODM'     ,   '00001')
 repassa(1,'NOMECOM'  ,   'MDF-e')
 repassa(1,'QTDE'     ,   1)
 repassa(1,'PRECO'    ,   0.01)
 repassa(1,'FORNEC'   ,   paramet->nclibalc)
 repassa(1,'NFISC'    ,   strzero(paramet->mdrvyct,8))
 repassa(1,'VLRCOM'   ,   0.01)
 repassa(1,'VENDEDOR' ,   ovendedor)
 repassa(1,'DTCOMP'   ,   hoje)
 repassa(1,'PUNIT'    ,   0.01)
 repassa(1,'QTDENF'   ,   1)
 repassa(1,'NFISCNF'  ,   strzero(paramet->mdrvyct,8))
 repassa(1,'NOT_TEF'  ,   'A')
 repassa(1,'NFCANCEL' ,   'N')
 repassa(1,'ENTSAI'   ,   'C')
 repassa(1,'TEXTCFOP' ,   'MDF-e')
 repassa(1,'CHAVE_NFE',   m_chave_nfe)


 Tecle(6035) // mdfe emitido com sucesso

 if confirma('Deseja imprimir agora.') = "S"


  oquedamfe := GETADO(3,'123','Como Imprimir-->:' , {'1-Impressora' , '2-Visualizar' , '3-Sair' })

  if oquedamfe == '1'

   minport := ''
   os_ssa := cacaimp()

   if empty(minport)
    Tecle(6022) //'ImpressÆo abortada.')
   end

   ncopy := my_wget({'Quantas','C¢pias','?'},'99','.t.','Entrar n£mero C¢pias',2)

   if imprimemfe(minport,ncopy)
    Tecle(6036) // 'NFE foi impressa.')
   else
    Tecle(154) // "Problemas com a impressora. Utilize opção PDF ao imprimir novamente.")
   end
  
   Tecle(6037) // 'Para reimpressão menu Estoque/ Opção B-Histórico Notas / posicione-se sobre a NFE / pressione F5-Imprimir DANFE.')
  elseif oquedamfe == '2'

   IF !impmfepdf(a_chave_nfe)
    Tecle(6023) //'Problemas ao visualizar o PDF.')
   else

    arqpdf := subs(a_chave_nfe,1,at('-nfe.xml',a_chave_nfe)-1) //+'.pdf'

    if !file('nfe\envresp.txt\'+extraichave(arqpdf,'\')+'.pdf')
     arqpdf := arqpdf+'-nfe.pdf'
    else
     arqpdf := arqpdf+'.pdf'
    end

    arqpdfsub := 'nfe\envresp.txt\'+extraichave(arqpdf,'\') 

    m_chave_antes_pdf := m_chave_nfe
    m_chave_nfe := arqpdfsub
    TEcle(184) // Visualizando por PDF vc poderá enviar por e-mail bla blaba
    execdos('start '+m_chave_nfe)
    m_chave_nfe := m_chave_antes_pdf
   end
  END

 end


 ritorna := .t.
else
 ritorna := .f.
end


sele paramet
repassa(1,'mdrvyct',mdrvyct+1)
dbselectar(ondestava)

return ritorna

*--------------->

//------------>
Function validamdfe()

na_janela(maxrow(),1,'Validando o MDF-e.',NIL,8)
aguarda(1)
memowrit("nfe\entnfe.tmp",'MDFE.VALIDARMDFE("'+m_chave_nfe+'")')

if !comandanfe()
 fechajanela()
 return .f.
end
 fechajanela()
return .t.

//------------------------->
Function assinamdfe()

na_janela(maxrow(),1,'Assinando o MDF-e.',NIL,8)
aguarda(1)

memowrit("nfe\entnfe.tmp",'MDFE.ASSINARMDFE("'+m_chave_nfe+'")')

if !comandanfe()
 fechajanela()
 return .f.
end
fechajanela()
return .t.

//----------->
Function enviamdfe()

na_janela(maxrow(),1,'Tentando enviar o MDF-e ao FISCO.',NIL,8)
aguarda(1)
memowrit("nfe\entnfe.tmp",'MDFE.ENVIARMDFE("'+m_chave_nfe+'",1,0,0)')

if !comandanfe()
 fechajanela()
 return .f.
end

fechajanela()
return .t.

//------------------------->
Function imprimemfe(minport,ncopy)

if ncopy = 0
 Tecle(6038) // 'Abortado. C¢pias = 0.')
 return .t.
end

if !file(m_chave_nfe) .and. file('nfe\envresp.txt\'+a_chave_nfe+'-mdfe.xml')
 a_chave_nfe := curdrive()+':\'+curdir()+'\nfe\envresp.txt\'+a_chave_nfe+'-mdfe.xml'
end


  arqpdf := subs(m_chave_nfe,1,at('-mdfe.xml',m_chave_nfe)-1) //+'.pdf'

  if !file('nfe\envresp.txt\'+extraichave(arqpdf,'\')+'.pdf')
   arqpdf := arqpdf+'-mdfe.pdf'
  else
   arqpdf := arqpdf+'.pdf'
  end
arqpdfsub := 'nfe\envresp.txt\'+extraichave(arqpdf,'\')



if ! file(m_chave_nfe)   //file(a_chave_nfe)

 if file(arqpdfsub)
  Tecle('Arquivo XML nao encontrado.')
  if confirma(6040) = "S" //'Deseja visualizar o PDF para poder imprimir pelo Editor de PDF')="S"
   execdos('start '+arqpdfsub)
   return .t.
  End
 end

end

na_janela(maxrow(),1,'Imprimindo o MDF-e.',NIL,8)
aguarda(1)




memowrit("nfe\entnfe.tmp",'MDFE.IMPRIMIRDAMDFE("'+a_chave_nfe+'","'+minport+'",'+ltri(str(ncopy))+')')

if !comandanfe()
 fechajanela()
 return .f.
end
fechajanela()

if !file('nfe\envresp.txt\'+extraichave(m_chave_nfe,'\',.t.)+'.pdf')
 impmfepdf(m_chave_nfe)
end

return .t.


//------------------------->
Function impmfepdf(o_arq_pdf)
local arqpdftest,arqtestpdf

acbrinsta := acbrnfeinsta()


arqpdftest := subs(o_arq_pdf,1,at('-mdfe.xml',o_arq_pdf)-1)+'.pdf'
arqtestpdf := subs(o_arq_pdf,1,at('-mdfe.xml',o_arq_pdf)-1)+'-mdfe.pdf'


if !file(o_arq_pdf)
 //Tecle(153) // 'NFE deve ser impressa na estação que tem o certificado.')
 //Tecle(hb_ansitooem('Porém faça uma tentativa.'))
end


if !testafile(arqpdftest) .or. !testafile(arqtestpdf)
 limpa()
 Tecle(6039) //'Arquivo .PDF do MDFE está aberto. Feche-o.')
 retu .f.
end




na_janela(maxrow(),1,'Imprimindo o PDF do MDFE.',NIL,8)
aguarda(1)

memowrit("nfe\entnfe.tmp",'NFe.ImprimirDAMDFEPDF("'+o_arq_pdf+'")')

if !comandanfe()
 fechajanela()
 return .f.
end
 fechajanela()
return .t.
Bom.... eu já até consegui fazer bastante coisa. Consegui emitir o mdf-e

Mas na hora de encerrar é que tá o perigo....
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Tutorial ACBRMonitorPlus

Mensagem por Mário Isa »

Finalmente consegui encerrar... ufa

segue o comando

Código: Selecionar todos

MDFe.EncerrarMDFe( "35160501227708000142580000000000631000000638", 27/05/2016, "5004403", "01227708000142", "1")
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Tutorial ACBRMonitorPlus

Mensagem por rubens »

Muito bem vinda sua contribuição Mário !!!

Obrigado
Rubens
:-Y
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Tutorial ACBRMonitorPlus

Mensagem por JoséQuintas »

Deve ajudar muita gente.

Sugestão pra simplificar:
(Facilita o fonte, reduz erros de digitação, e reduz o EXE):

Código: Selecionar todos

fll += '<prop>' 
fll += '<CPF>' + sohnumero( fornec->cgcfor ) + '</CPF>' 
fll += '<RNTRC>' + trim( fornec->rntrc ) + '</RNTRC>' 
fll += '<xNome>' + trim( fornec->nome ) + '</xNome>' 
fil += '<IE>' + trim( fornec->iesfor ) + '</IE>' 
fll += '<UF>' + trim( fornec->uffor ) + '</UF>' 
fll += '<tpProp>2</tpProp>' 
fil += '</prop>' 

Código: Selecionar todos

   cXml += "prop"
   cXml += XmlTag( "CPF", sonumero( fornec->cgcfor ) )
   cXml += XmlTag( "RNTRC", fornec->rntrc )
   cXml += XmlTag( "xNome", fornec->nome )
   cXml += XmlTag( "IE", fornec->iesfor )
   cXml += XmlTag( "UF", fornec->uffor )
   cXml += XmlTag( "tpProp", "2" )
   cXml += "</prop>"
...
FUNCTION XmlTag( cTag, cConteudo )
   RETURN "<" + cTag + ">" + Trim( cTag ) + "</" + cTag + ">"
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Tutorial ACBRMonitorPlus

Mensagem por Mário Isa »

Ótima a sua função XMLTag José Quintas....

Agora estou tendo um pequeno probleminha no acbrmonitorplus....

estou tentando encerrar e ele volta com a mensagem

veja o comando de entrada
MDFe.EncerrarMDFe( "35160501227708000142580000000000731000000731", 28/05/2016, "3520442", "01227708000142", "1")
e veja o retorno.txt

Código: Selecionar todos

ERRO: 
Não foi possível carregar XML
<?xml version="1.0" encoding="UTF-8"?><mdfeProc versao="1.00" xmlns="http://www.portalfiscal.inf.br/mdfe"><MDFe xmlns="http://www.portalfiscal.inf.br/mdfe"><infMDFe versao="1.00" Id="MDFe35160501227708000142580000000000731000000731"><ide><cUF>35</cUF><tpAmb>1</tpAmb><tpEmit>2</tpEmit><mod>58</mod><serie>0</serie><nMDF>73</nMDF><cMDF>00000073</cMDF><cDV>1</cDV><modal>1</modal><dhEmi>2016-05-28T09:30:51</dhEmi><tpEmis>1</tpEmis><procEmi>0</procEmi><verProc>1.00</verProc><UFIni>SP</UFIni><UFFim>MS</UFFim><infMunCarrega><cMunCarrega>3520442</cMunCarrega><xMunCarrega>ILHA SOLTEIRA</xMunCarrega></infMunCarrega></ide><emit><CNPJ>01227708000142</CNPJ><IE>749079200112</IE><xNome>MARIO ANTONIO PEREIRA I.SOLTEIRA ME</xNome><enderEmit><xLgr>PSO SAO LUIZ</xLgr><nro>209</nro><xBairro>ZONA NORTE</xBairro><cMun>3520442</cMun><xMun>ILHA SOLTEIRA</xMun><CEP>15385000</CEP><UF>SP</UF><fone>1837424186</fone></enderEmit></emit><infModal versaoModal="1.00"><rodo><veicTracao><cInt>BMR3562</cInt><placa>BMR3562</placa><tara>3000</tara><capKG>3500</capKG><capM3>2</capM3><prop><CPF>05597601830</CPF><RNTRC>12345678</RNTRC><xNome>MARIO ANTONIO PEREIRA</xNome><IE/><UF>SP</UF><tpProp>2</tpProp></prop><condutor><xNome>SANDRA LUCIA MACIEL PEREIRA</xNome><CPF>08527232880</CPF></condutor><tpRod>01</tpRod><tpCar>02</tpCar><UF>SP</UF></veicTracao></rodo></infModal><infDoc><infMunDescarga><cMunDescarga>5004403</cMunDescarga><xMunDescarga>INOCENCIA</xMunDescarga><infNFe><chNFe>35160501227708000142550010000062641000062642</chNFe></infNFe></infMunDescarga></infDoc><tot><qNFe>1</qNFe><vCarga>0.68</vCarga><cUnid>01</cUnid><qCarga>120.0000</qCarga></tot></infMDFe><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /><Reference URI="#MDFe35160501227708000142580000000000731000000731"><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /><DigestValue></DigestValue></Reference></SignedInfo><SignatureValue></SignatureValue><KeyInfo></KeyInfo></Signature></MDFe>
O xml tá lá ....
e ele é válido pois abro no editor de xml e ele não apresenta nenhum problema de tags erradas...
tb consigo imprimir o .PDF através desse xml (então penso: ele é válido)

:%
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Tutorial ACBRMonitorPlus

Mensagem por Mário Isa »

Resolvido !

Foi só reiniciar o acbrmonitorplus que voltou a funcionar....

será mais um bug ?

Será q o comando ler.ini é semelhante a reiniciar o acbrmonitor ?

Vamos lá.... ;)
Kiko Fernandes
Usuário Nível 3
Usuário Nível 3
Mensagens: 213
Registrado em: 24 Out 2008 22:41
Localização: Foz do Iguaçu

Tutorial ACBRMonitorPlus

Mensagem por Kiko Fernandes »

Boa Noite!
José se me permite fazer uma observação apenas.

Penso que o correto é " +Trim(cConteudo) +" ao invés de "+ Trim(cTag) +"

JoséQuintas escreveu:Deve ajudar muita gente.

...
FUNCTION XmlTag( cTag, cConteudo )
RETURN "<" + cTag + ">" + Trim( cTag ) + "</" + cTag + ">"
[/code]
Responder