Jump to content
Fivewin Brasil

nfe eletronica o primeiro passo


neto_23

Recommended Posts

Seria este o manual a ser lido "http://www.nfe.fazenda.gov.br/portal/docs/Manual_NFe_v401_2009-11-04.pdf" ?

Mais precisamente em "Diagrama simplificado dos grupos de informações da NF-e" na página 107 ?

________________________

Gilberto Herminio - Programador Pleno III - Mogi das Cruzes-SP

xHB121+Fw912 / C#/SQL2008

"Não Desenvolvo Software, crio arte Binaria...."

Link to comment
Share on other sites

Te aconselho a classe do gilmer como outros aqui ja o fizeram. Funciona de modo resumido assim:

1) Vc gera o arquivo txt seguindo o layout acima e envia como parametro a uma funcao do gilmer.

2) Se estiver tudo ok com seu txt, esta funcao "trasnforma" seu txt em xml, assina e ja transmite este.

3) Depois tem outros metodos na propria classe que consulta retorno do sefaz, que cancela ou inutiliza.....vc nao precisa se preocupar com o emissor gratuito.....sera tudo do seu proprio sistema.

Tive certa dificuldade ha 2 anos atras em implementar, pois nunca nem tinha ouvido falar em xharbour,bcc5, muito menos ainda classes. Mas com a paciencia do sr gilmer eu consegui com algumas hras de estudo.

Vc que ja tem experiencia sera moleza. Preco considerei justo.

Antes da classe eu gerava o txt e importava pelo sistema publico, la eu assinava e enviava.......vc pode comercar por ai.....mas n aconselho.....melhor fazer tudo pelo sistema.

FORTE ABRACO

fwh 9.03+xharbour,bcc55,xdev

Link to comment
Share on other sites

Sr Gilberto, só um detalhe que vc deve ficar atento: Se for utilizar o emissor do governo , saiba que este não nao gera o Sintegra das informações lançadas. Conheço 1 empresa aqui em Pouso Alegre - MG que começou utilizando o software do governo. Ele usou por 1 ano e no mês passado foi intimado pelo fisco a apresentar os sintegras do mês de JUNHO e JULHO de 2010. Daí ele se ferrou , até hoje não resolveu a situação , creio que será multado !

Então para desenvolver e comercializar 1 sistema de NFE , não se esqueça de implementar o sintegra para que nem vc nem seus clientes tenham problemas com o fisco no futuro.

William Adami

Xharbour 1.0 - Fwh - Sqlrdd , Mysql 5.0, PHP, WS , Timprime 4.0 , Display 3.0

Link to comment
Share on other sites

Olá Desenvolvedores, Bom Dia!

Finalmente consegui varias respostas para dúvidas que estavam travando meus passos iniciais. Muito bem, obrigado à todos!!

Passei por outros vários foruns e, tem muuiittaa gente perdida sem saber por onde começar..

O que eu quero na verdade é inicialmente entender a exportação que tanto se fala que poderia ser em TXT ou XML.

Quero fazer a exportação passo-a-passo para entendê-la.

EDU : O manual é este mesmo, com 32 páginas, chamado de Software Emissor NF-e / Manual de Importação/Exportação TXT

Notas Fiscais eletrônicas / Versão 1.1.1 / (29/10/2008) ?

Estou perguntando sobre ele pois já baixei um monte de manuais com um monte de layout´s e fiquei ainda mais confuso.

Mas beleza, vou baixar este manual agora, e iniciar a criação do TXT. E caso tenha mais dúvidas, vou voltar e postá-las heim..rsrs

Mas uma vez, Sucesso à Todos!!

________________________

Gilberto Herminio - Programador Pleno III - Mogi das Cruzes-SP

xHB121+Fw912 / C#/SQL2008

"Não Desenvolvo Software, crio arte Binaria...."

Link to comment
Share on other sites

Boa Tarde,

Uma solução para quem esta começando com a NF-E, e não tem tempo ou conhecimento no momento para desenvolver sua própria ferramente de gerenciamento de nf-e, é o projeto UNINFE da Unimake softwares.

http://www.unimake.com.br/uninfe/

Este projeto traz..

Aplicativo DANFEmon - Monitor do UniDANFe (1.1.9)

Aplicativo DANFE View - Visualizador e gerenciador de Notas Fiscais Eletrônicas (2.1.15)

Aplicativo UniCTe - Emissão do Conhecimento de Transporte Eletrônico / Integração ao ERP v1.1

Aplicativo UniDANFe 3.x - Emissão do Documento Auxiliar da Nota Fiscal Eletrônica (3.2.1)

Aplicativo UniNFe - Emissão da Nota Fiscal Eletrônica / Integração ao ERP v2.2

Aplicativo UniNFe - Emissão da Nota Fiscal Eletrônica / Integração ao ERP v2.3

Aplicativo UniNFe - Emissão da Nota Fiscal Eletrônica / Integração ao ERP v3.1 p/lay-out 4.0.1 NF-e

Artigo com informações sobre integração de softwares com a NFe

Código fonte do aplicativo UniNFe e UniCTe, em C# (SourceForge)

Manual de instalação, utilização e integração do UniCTe com sistemas ERP

Manual de instalação, utilização e integração do UniNFe com sistemas ERP

Manual de Utilização do Software UniDANFe 3.x

A integração da aplicação em qualquer linguagem com o UNINFE E O UniDANFe é bem simples atraves de arquivo txt, seguindo o manual do uninfe, ou de acordo com o Manual de integração 4.0.1 (2.0) em XML.

Vale a pena conferir. Eu utilizo há mais de 02(anos), e conheço uma grande quantidades de programadores que estão utilizando, até que as suas ferramentas de desenvolvimento próprio fiquem prontas. É free..

wellington

fwh/xharbour0.99.71 Bd. Postgresql

Systemup@bol.com.br

Link to comment
Share on other sites

Sabem, a minha maior dúvida até o momento que acaba de ser aumentada por email de resposta de um grupo do yahoo sobre NFe é o formato realmente que a minha aplicação ERP deverá gerar ? TXT ou XML ?

Não é assim que funciona :

1)MinhaAplicaçãoERP gerar TXT

2)Através do Emissor Gratuito ou mesmo o Unimake, anexo este TXT, onde ele é

tranformado em XML, validado e o enviado ao SEFAZ.

É +- isso ?

________________________

Gilberto Herminio - Programador Pleno III - Mogi das Cruzes-SP

xHB121+Fw912 / C#/SQL2008

"Não Desenvolvo Software, crio arte Binaria...."

Link to comment
Share on other sites

Um exemplo de criar arquivos XML, e fazendo a integração do ERP com o UNINFE,, enviando arquivos e recebendo arquivos XML e os lendo.

Obs. Cada um faça de acordo com o sistema que possui.. ,,

abaixo é um exemplo de como eu trato.. isso em um dos..

sistema que possuo...


#include "FiveWin.ch"

#include "common.ch"

#include "postgres.ch"

#include "Folder.ch"

#include "report.ch"

#include "Splitter.ch"

#include "fileio.ch"

#include "hbxml.ch"

#define linebuff 1024

static lEof:=.F.

// variavel que guarda o processo o estado do arquivo de nf-e ,, digitação,,validade e assinada, etc...

// pstu - vazio... esta em digitacao..

// pstu - 1 validada e assinada..

// pstu - 3 lote gerado aguardando recibo..

// pstu - 4 recibo lido e gravado aguardando n§ de protocolo

// pstu - 5 aprovada...

// variaveis que guardam as pastas onde serão tratados os arquivos gerados e recebidos pelo UNINFE, que deverão estar

// na aplicação ERP e também no UNINFE..,, POIS OS ARQUIVOS SERÃO GERADOS NESTAS PASTAS,, E PROCESSADAS PELO UNINFE,,

// E OS RETORNOS VINDOS DO WEBSERVICE SERÃO GRAVADOS NAS PASTAS INFORMADAS E PROCESSADAS PELO SISTEMA ERP.

//zaenv && VARIAVEL QUE GUARDA A pasta onde o xml a serem enviados individualmente para os Webservices

//zalot && VARIAVEL QUE GUARDA A pasta onde o xml a serem enviados em lote para os webservices

//zaret && VARIAVEL QUE GUARDA A pasta onde o xml de retorno dos webservices

//zaaut && VARIAVEL QUE GUARDA A pasta onde o xml enviados, processados e autorizados nos webservices

//zatbk && VARIAVEL QUE GUARDA A pasta onde o xml temporarios que apresentam erro na tentativa de envio:

//zabkp && VARIAVEL QUE GUARDA A pasta onde o xml backup dos enviados

//zavld && VARIAVEL QUE GUARDA A pasta onde o xml a serem somente validados.

function fa110139(onotafis,objtipo)

nNotafis = onotafis

nobjtipo = objtipo

if empty(zantf)

msgstop("Tipo de nota fiscal ( IMPRESSA ) ou ( NF-E Nota Fiscal Eletronica ) nao informada no cadastro de empresa.","Atencao")

return nil

endif

if zantf = 1

msgstop("Tipo de nota fiscal ( IMPRESSA) e nao (ELETRONICA).","Atencao")

return nil

endif

if zantf = 2

if empty(zaibg)

msgstop("Codigo do Municipio do IBGE da NF-e no cadastro de empresa vazio.","Atencao")

return nil

endif

if empty(zambt)

msgstop("Tipo de Ambiente da NF-e de producao ou homologacao no cadastro de empresa vazio.","Atencao")

return nil

endif

if empty(zafnd)

msgstop("Finalidade de emisao da NF-e Normal, Complementar ou Ajutos no cadastro de empresa esta vazio.","Atencao")

return nil

endif

if empty(zasca)

msgstop("Serie da NF-e em Contigencia esta vazio no cadastro de empresa.","Atencao")

return nil

endif

if empty(zacrt)

msgstop("Codigo do regime tributario esta vazio no cadastro de empresa.","Atencao")

endif

endif

define brush obrush color rgb(255,239,214)

define dialog nfeletronica title "Gerencia NF-E Nota(s) Fiscal(ais) Eletronica(s)" from 010,010 to 438,790 pixel brush oBrush

define font mtahoma name "Tahoma" size 5.5,13

define font mtahoma1 name "Tahoma" size 08,22

define font oFont name 'MS Sans Serif' size 6,15

define font ofontL name "Courier" size 11,11

mdtin = date()

mdtfi = date()

asamplzNOTA = {""}

arecNOTA = {}

mnr = 0 // mumero da sequencia da nota no f509000000

paest = "" // estado do emitente

pandn = "" // cnpj do emitente

//mvalor = 0

@ 003, 001 say "Período " of nfeletronica font mtahoma color mcolorAA,mcolorAB pixel

@ 003, 025 get odtin var mdtin font mtahoma size 28,9 of nfeletronica color mcolorCA,mcolorCB pixel

@ 003, 055 say "A " of nfeletronica font mtahoma color mcolorAA,mcolorAB pixel

@ 003, 065 get odtfi var mdtfi font mtahoma size 28,9 of nfeletronica color mcolorCA,mcolorCB pixel

@ 001, 105 button oclicar0 prompt "Consultar" size 040,12 font oFont OF nfeletronica pixel action( enchenfeletronica() )

//@ 015, 047 say "Teste " of nfeletronica font mtahoma color mcolorAA,mcolorAB pixel

//@ 015, 067 say ovalor var mvalor font mtahoma size 58,9 of nfeletronica color mcolorCA,mcolorCB pixel

@ 045.5,002 listbox obrzNOTA fields asamplzNOTA[obrzNOTA],asamplzNOTA[obrzNOTA],;

asamplzNOTA[obrzNOTA],asamplzNOTA[obrzNOTA],asamplzNOTA[obrzNOTA],;

asamplzNOTA[obrzNOTA],asamplzNOTA[obrzNOTA],asamplzNOTA[obrzNOTA],asamplzNOTA[obrzNOTA],;

asamplzNOTA[obrzNOTA];

headers "","Serie","Numero","Emissao","Nome","CNPJ/CPF","UF","Tipo","Situacao","DanFe";

FIELDSIZES 20,30,100,50,200,110,30,050,105,20 on dblclick marca_nfe();

size 388,125;

pixel of nfeletronica

obrzNOTA:lCellStyle = .t.

obrzNOTA:lAutoSkip = .t.

obrzNOTA:SetArray(asamplzNOTA)

obrzNOTA:bGoTop = { || obrzNOTA:nat := 1 }

obrzNOTA:bGoBottom = { || obrzNOTA:nat := Eval( obrzNOTA:bLogicLen ) }

obrzNOTA:bSkip = { | nWant, nOld | nOld := obrzNOTA:nat, obrzNOTA:nat += nWant,;

obrzNOTA:nat := Max( 1, Min( obrzNOTA:nat, Eval( obrzNOTA:bLogicLen ) ) ),;

obrzNOTA:nat - nOld }

obrzNOTA:bLogicLen = { || Len( asamplzNOTA ) }

obrzNOTA:cAlias = "Array" // Just put something

obrzNOTA:SetFocus()

obrzNOTA:Refresh()

@ 200,004 button orombut0 prompt "Valida NF-e " size 040,12 font oFont OF nfeletronica pixel action ( valida_nfe() )

@ 200,047 button orombut1 prompt "Envia NF-e " size 040,12 font oFont OF nfeletronica pixel action ( envia_nfe() )

@ 200,090 button orombut2 prompt "Pendencia(s) " size 040,12 font oFont OF nfeletronica pixel action ( retorno_pendente_nfe() )

@ 200,133 button orombut3 prompt "Cancela Nf-e " size 040,12 font oFont OF nfeletronica pixel action ( cancela_nfe())

@ 200,176 button orombut4 prompt "Inutiliza Nro(s)" size 040,12 font oFont OF nfeletronica pixel when .f.

@ 200,219 button orombut5 prompt " " size 040,12 font oFont OF nfeletronica pixel when .f.

@ 200,262 button orombut6 prompt "Imprimir Danfe " size 040,12 font oFont OF nfeletronica pixel action ( imprime_danfe() )

@ 200,305 button orombut7 prompt "Cons. Servico " size 040,12 font oFont OF nfeletronica pixel action ( consulta_servico(1) )

@ 200,348 button orombut8 prompt "Sair " size 040,12 font oFont OF nfeletronica pixel action ( nfeletronica:end() )

activate dialog nfeletronica center on init( enchenfeletronica(nNotafis) );

on Paint ( WndBoxIn(nfeletronica:Hdc, 054, 001, 056, 790) ,;

WndBoxIn(nfeletronica:Hdc, 349, 001, 351, 790) ,;

WndBoxIn(nfeletronica:Hdc, 391, 001, 393, 790) )

//msginfo(zavrs)

return nil

// Funcao que verifica se chegou o arquivo da nota fiscal.......................

function ver_arquivo_nfe_xml()

cQuery := "select * from f50900000 where"+;

" pasq = " + alltrim(str(mnr))+;

" order by pasq asc;"

oQuery := oServer:Query(cQuery)

npchv = oQuery:Fieldget(oQuery:Fieldpos('pchv')) // numero da nf-e ..

npchv = alltrim(npchv)

npstu = oQuery:Fieldget(oQuery:Fieldpos('pstu'))

np035 = oQuery:Fieldget(oQuery:Fieldpos('p035'))

ndata = substr(dtos(np035),5,2) + substr(dtos(np035),1,4)

nprot = oQuery:Fieldget(oQuery:Fieldpos('prot'))

oQuery:destroy()

if npstu = 6

msgstop("Nota fiscal cancelada.","Atencao")

return("S")

endif

cDirXML = reverso(alltrim(zaaut))+"\Autorizados\"+ndata+"\"+alltrim(npchv)+"-procNFE.xml"

if file(cDirXML)

//if empty(nprot)

tprot = abrir_xml(cDirXML,"nProt")

if empty(tprot)

msgstop("Erro. Nao foi possivel ler o XML com o numero do protocolo gerado para esta nota fiscal.","Atencao")

return("S")

endif

cQuery := "Update f50900000 set "+;

"prot = " + "'"+tprot+"'"+","+;

"pstu = " + "5"+;

" where pasq = " + alltrim(str(mnr))

oQuery := oServer:Query(cQuery)

oQuery:destroy()

oServer:Commit()

enchenfeletronica()

//endif

return("S")

endif

return("N")

function imprime_danfe()

public oDlgWait

qq = ver_marcado_nota()

if qq = "N"

msgstop("Nenhuma nota fiscal foi marcada para a impressao.","Atencao")

return nil

endif

nresp = fWait( "........* processando *........")

cQuery := "select * from f50900000 where"+;

" pasq = " + alltrim(str(mnr))+;

" order by pasq asc;"

oQuery := oServer:Query(cQuery)

npchv = oQuery:Fieldget(oQuery:Fieldpos('pchv')) // numero da nf-e ..

npchv = alltrim(npchv)

npstu = oQuery:Fieldget(oQuery:Fieldpos('pstu'))

nprec = oQuery:Fieldget(oQuery:Fieldpos('prec'))

nprec = alltrim(nprec)

nprot = oQuery:Fieldget(oQuery:Fieldpos('prot'))

nprot = alltrim(nprot)

np035 = oQuery:Fieldget(oQuery:Fieldpos('p035'))

ndata = substr(dtos(np035),5,2) + substr(dtos(np035),1,4)

np091 = oQuery:Fieldget(oQuery:Fieldpos('p091'))

oQuery:destroy()

if empty(npstu)

oDlgWait:end()

msgstop("Esta nota nao foi validada.","Atencao")

return nil

endif

if npstu <= 4

oDlgWait:end()

msgstop("Esta nota nao foi autorizada.","Atencao")

return nil

endif

if npstu = 5

cDirXML = reverso(alltrim(zaaut))+"\Autorizados\"+ndata+"\"+alltrim(npchv)+"-procNFE.xml"

elseif npstu = 6

cDirXML = reverso(alltrim(zaaut))+"\Autorizados\"+ndata+"\"+alltrim(npchv)+"-procNFE.xml"

endif

//cCommand = "c:\unimake\uninfe\unidanfe.exe arquivo="+cDirXML+" edição=free configuração=RETRATO"+;

// " logotipo=c:\unimake\uninfe\logonfe.jpg"+;

// " visualizar=1 imprimir=0"

//

cCommand = "\sisau\unidanfe\unidanfe.exe arquivo="+cDirXML+" edição=free configuração=RETRATO"+;

" logotipo=logonfe.jpg"+;

" visualizar=1 imprimir=0"

//cCommand = "\prg\necta\unidanfe\unidanfe.exe arquivo="+cDirXML+" edição=free configuração=RETRATO"+;

// " logotipo=logonfe.jpg"+;

// " visualizar=1 imprimir=0"

//msgstop(cCommand)

winexec(cCommand)

oDlgWait:end()

return nil

// Cancela Nf-e.........

function Cancela_nfe()

public oDlgWait

qq = ver_marcado_nota()

if qq = "N"

msgstop("Nenhuma nota fiscal foi marcada para a validacao.","Atencao")

return nil

endif

nresp = fWait( "........* processando *........")

if consulta_servico(2) == "N"

oDlgWait:end()

return nil

endif

cQuery := "select * from f50900000 where"+;

" pasq = " + alltrim(str(mnr))+;

" order by pasq asc;"

oQuery := oServer:Query(cQuery)

npchv = oQuery:Fieldget(oQuery:Fieldpos('pchv')) // numero da nf-e ..

npchv = alltrim(npchv)

npstu = oQuery:Fieldget(oQuery:Fieldpos('pstu'))

nprec = oQuery:Fieldget(oQuery:Fieldpos('prec'))

nprec = alltrim(nprec)

nprot = oQuery:Fieldget(oQuery:Fieldpos('prot'))

nprot = alltrim(nprot)

np091 = oQuery:Fieldget(oQuery:Fieldpos('p091'))

oQuery:destroy()

// Verifica se a NF-e foi validada ou nao .............................

if empty(npstu)

oDlgWait:end()

msgstop("Esta nota nao foi validada.","Atencao")

return nil

endif

if npstu != 5

oDlgWait:end()

msgstop("Esta nota nao pode ser cancelada.","Atencao")

return nil

endif

if empty(nprec)

msgstop("Nao foi gerado o recibo desta nota fiscal. Envie a nota novamente.","Atencao")

oDlgWait:end()

return nill

endif

if empty(nprot)

msgstop("Nao foi gerado o protocolo desta nota fiscal. Verifique pendencias ou envie a nota novamente.","Atencao")

oDlgWait:end()

return nill

endif

// Cria o motivo para o cancelamento..................................

DEFINE BRUSH oBrush COLOR rgb(255,239,214)

define dialog teladialog title "Cancelamento" from 010,010 to 120,400 pixel brush oBrush //TRANSPARENT

mtvcancelamento = ""

@ 000,002 say "Informe o motivo do cancelamento" of teladialog font mtahoma color mcolorAA,mcolorAB pixel

@ 010.5, 002 get otvcancelamento var mtvcancelamento memo size 142,37 of teladialog font mtahoma colors mcolorAA,mcolorCB pixel

@ 020,150 BUTTON oteladialogbut6 prompt "&Confirmar" size 040,12 font oFont OF teladialog pixel action ( teladialog:end() )

activate dialog teladialog center

if empty(mtvcancelamento)

msgstop("Nao CANCELADO, poi e necessario informar o motivo do cancelamento.","Atencao")

oDlgWait:end()

return nil

endif

// Pedido de cancelamento da nf-e......................................

cDirXML = reverso(alltrim(zaenv))+"\"+alltrim(npchv)+"-ped-can.xml"

// aqui muda de versao para acompanhar o uninfe.......................

if alltrim(zavrs) = "1.10" .or. alltrim(zavrs) = "1.07"

nAnte := zavrs

zavrs := "1.07"

endif

lh := 00

oPrn := TDosPrn():New(cDirXML)

oPrn:StartPage()

oPrn:lZeraBuffer:=.T.

mlinha = '<?xml version='+'"'+'1.0'+'"'+ ' encoding='+'"'+'UTF-8'+'"'+' ?>'

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+alltrim(zambt)+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+'CANCELAR'+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+npchv+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+nprot+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+mtvcancelamento+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = '' + alltrim(str(np091)) + ''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

oPrn:EndPage()

oPrn:End()

cDirXML = reverso(alltrim(zaret))+"\"+alltrim(npchv)+"-can.xml"

cDirXME = reverso(alltrim(zaret))+"\"+alltrim(npchv)+"-can.err"

msn = "N"

nqte = 0

do while nqte < 100000

if file(cDirXML)

msn = "S"

exit

endif

if file(cDirXME)

msn = "N"

exit

endif

++nqte

enddo

// tempo de espera de 7 segundos......................................

SysWait(7)

if msn = "N"

if file(cDirXME)

// ler o arquivo no formato txt.................................

csource = cDirXME

nsource:=fopen("&csource",0)

if ( nsource ) # -1

lEof:=.F.

nn = 1

do while !lEof

c :=p_readln(nSource,linebuff)

if !lEof .and. c#chr(26)

if nn = 1

cInfo := c

++nn

else

cInfo+=CRLF+c

endif

endif

enddo

endif

fclose(nsource)

msgstop(cInfo,"Atencao")

ferase(cDirXME)

else

msgstop("Erro na geracao do arquivo de lote do UNINFE... Tente novamente..","Atencao")

endif

oDlgWait:end()

// aqui muda de versao para acompanhar o uninfe.......................

if alltrim(zavrs) = "1.10" .or. alltrim(zavrs) = "1.07"

zavrs := nAnte

endif

return nil

elseif msn = "S"

status = abrir_xml(cDirXML,"cStat")

if empty(status)

msgstop("Erro. Nao foi possivel ler o XML com o numero de lote gerado para esta nota fiscal.","Atencao")

ferase(cDirXML)

oDlgWait:end()

// aqui muda de versao para acompanhar o uninfe.......................

if alltrim(zavrs) = "1.10" .or. alltrim(zavrs) = "1.07"

zavrs := nAnte

endif

return nil

endif

if status != '101'

motivo = abrir_xml(cDirXML,"xMotivo")

msgstop(motivo,"Atencao")

ferase(cDirXML)

oDlgWait:end()

// aqui muda de versao para acompanhar o uninfe.......................

if alltrim(zavrs) = "1.10" .or. alltrim(zavrs) = "1.07"

zavrs := nAnte

endif

return nil

else

cQuery := "Update f50900000 set "+;

"pstu = " + "6"+;

" where pasq = " + alltrim(str(mnr))

oQuery := oServer:Query(cQuery)

if oQuery:neterr()

oQuery:destroy()

oServer:Commit()

ferase(cDirXML)

msgStop("Não foi possível liberar o cancelamento para esta nota fiscal.","ATENÇÂO")

oDlgWait:end()

// aqui muda de versao para acompanhar o uninfe.......................

if alltrim(zavrs) = "1.10" .or. alltrim(zavrs) = "1.07"

zavrs := nAnte

endif

return nil

endif

oQuery:destroy()

oServer:Commit()

enchenfeletronica()

ferase(cDirXML)

endif

endif

oDlgWait:end()

// aqui muda de versao para acompanhar o uninfe.......................

if alltrim(zavrs) = "1.10" .or. alltrim(zavrs) = "1.07"

zavrs := nAnte

endif

return nil

// Pega o retorno pendente da nfe..............................................

function retorno_pendente_nfe()

public oDlgWait

qq = ver_marcado_nota()

if qq = "N"

msgstop("Nenhuma nota fiscal foi marcada para a validacao.","Atencao")

return nil

endif

// Verifica se existe o arquivo para ser validado.....................

if ver_arquivo_nfe_xml() = "S"

return nil

endif

nresp = fWait( "........* processando *........")

if consulta_servico(2) == "N"

oDlgWait:end()

return nil

endif

cQuery := "select * from f50900000 where"+;

" pasq = " + alltrim(str(mnr))+;

" order by pasq asc;"

oQuery := oServer:Query(cQuery)

npchv = oQuery:Fieldget(oQuery:Fieldpos('pchv')) // numero da nf-e ..

npchv = alltrim(npchv)

npstu = oQuery:Fieldget(oQuery:Fieldpos('pstu'))

nprot = oQuery:Fieldget(oQuery:Fieldpos('prot'))

nprot = alltrim(nprot)

oQuery:destroy()

// Verifica se a NF-e foi validada ou nao .............................

if empty(npstu)

oDlgWait:end()

msgstop("Esta nota nao foi validada.","Atencao")

return nil

endif

//if npstu = 1

// oDlgWait:end()

// msgstop("Esta nota precisa ser enviada primeiro.","Atencao")

// return nil

//endif

// aqui muda de versao para acompanhar o uninfe.......................

if alltrim(zavrs) = "1.10" .or. alltrim(zavrs) = "1.07"

nAnte := zavrs

zavrs := "1.07"

endif

cDirXML = reverso(alltrim(zaenv))+"\"+alltrim(npchv)+"-ped-sit.xml"

lh := 00

oPrn := TDosPrn():New(cDirXML)

oPrn:StartPage()

oPrn:lZeraBuffer:=.T.

mlinha = '<?xml version='+'"'+'1.0'+'"'+ ' encoding='+'"'+'UTF-8'+'"'+' ?>'

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+alltrim(zambt)+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+'CONSULTAR'+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+npchv+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

oPrn:EndPage()

oPrn:End()

cDirXML = reverso(alltrim(zaret))+"\"+alltrim(npchv)+"-sit.xml"

cDirXME = reverso(alltrim(zaret))+"\"+alltrim(npchv)+"-sit.err"

msn = "N"

nqte = 0

do while nqte < 100000

if file(cDirXML)

msn = "S"

exit

endif

if file(cDirXME)

msn = "N"

exit

endif

++nqte

enddo

// tempo de espera de 7 segundos......................................

SysWait(7)

if msn = "N"

if file(cDirXME)

// ler o arquivo no formato txt.................................

csource = cDirXME

nsource:=fopen("&csource",0)

if ( nsource ) # -1

lEof:=.F.

nn = 1

do while !lEof

c :=p_readln(nSource,linebuff)

if !lEof .and. c#chr(26)

if nn = 1

cInfo := c

++nn

else

cInfo+=CRLF+c

endif

endif

enddo

endif

fclose(nsource)

msgstop(cInfo,"Atencao")

ferase(cDirXME)

else

msgstop("Erro na geracao do arquivo de lote do UNINFE... Tente novamente..","Atencao")

endif

oDlgWait:end()

// aqui muda de versao para acompanhar o uninfe.......................

if alltrim(zavrs) = "1.10" .or. alltrim(zavrs) = "1.07"

zavrs := nAnte

endif

return nil

elseif msn = "S"

status = abrir_xml(cDirXML,"cStat")

if empty(status)

msgstop("Erro. Nao foi possivel ler o XML com o numero de lote gerado para esta nota fiscal.","Atencao")

ferase(cDirXML)

oDlgWait:end()

// aqui muda de versao para acompanhar o uninfe.......................

if alltrim(zavrs) = "1.10" .or. alltrim(zavrs) = "1.07"

zavrs := nAnte

endif

return nil

endif

if status = '100'

nprotocolo = abrir_xml(cDirXML,"nProt")

cQuery := "Update f50900000 set "+;

"prot = " + "'"+nprotocolo+"'"+","+;

"pstu = " + "5"+;

" where pasq = " + alltrim(str(mnr))

oQuery := oServer:Query(cQuery)

if oQuery:neterr()

oQuery:destroy()

oServer:Commit()

ferase(cDirXML)

msgStop("Não foi possível gravar o numero do protocolo da NF-e no arquivo de notas.","ATENÇÂO")

// aqui muda de versao para acompanhar o uninfe.......................

if alltrim(zavrs) = "1.10" .or. alltrim(zavrs) = "1.07"

zavrs := nAnte

endif

return nil

endif

oQuery:destroy()

oServer:Commit()

enchenfeletronica()

ferase(cDirXML)

else

motivo = abrir_xml(cDirXML,"xMotivo")

msgstop(motivo,"Atencao")

ferase(cDirXML)

oDlgWait:end()

// aqui muda de versao para acompanhar o uninfe.......................

if alltrim(zavrs) = "1.10" .or. alltrim(zavrs) = "1.07"

zavrs := nAnte

endif

return nil

endif

endif

oDlgWait:end()

// aqui muda de versao para acompanhar o uninfe.......................

if alltrim(zavrs) = "1.10" .or. alltrim(zavrs) = "1.07"

zavrs := nAnte

endif

return nil

//Valida a nota fiscal eletronica..............................................

function valida_nfe()

public oDlgWait

qq = ver_marcado_nota()

if qq = "N"

msgstop("Nenhuma nota fiscal foi marcada para a validacao.","Atencao")

return nil

endif

// Verifica se existe o arquivo para ser validado.....................

if ver_arquivo_nfe_xml() = "S"

return nil

endif

nresp = fWait( "........* processando *........")

cQuery := "select * from f50900000 where"+;

" pasq = " + alltrim(str(mnr))+;

" order by pasq asc;"

oQuery := oServer:Query(cQuery)

np091 = oQuery:Fieldget(oQuery:Fieldpos('p091')) // normal ou contigencia

np034 = oQuery:Fieldget(oQuery:Fieldpos('p034')) // numero da nota fiscal

npsnf = oQuery:Fieldget(oQuery:Fieldpos('psnf')) // serie da nota fiscal

np007 = oQuery:Fieldget(oQuery:Fieldpos('p007')) // CNPJ

np035 = oQuery:Fieldget(oQuery:Fieldpos('p035')) // data de emissao

npstu = oQuery:Fieldget(oQuery:Fieldpos('pstu'))

oQuery:destroy()

if np035 != date()

oDlgWait:end()

msgstop("A data de emissao desta nota foi dia: " + dtoc(np035),"Atencao")

return nil

endif

if npstu > 1

oDlgWait:end()

msgstop("Nota fiscal nao pode ser mais validade. Para isso sera preciso refazer a nota.","Atencao")

return nil

endif

// Gera a chava da NFe para ser gravado no arquivo do sistema..........

cDirXML = reverso(alltrim(zaenv))+"\"+alltrim(str(mnr))+"-gerar-chave.xml"

lh := 00

oPrn := TDosPrn():New(cDirXML)

oPrn:StartPage()

oPrn:lZeraBuffer:=.T.

mlinha = '<?xml version=' + '"'+ '1.0' + '"' + ' encoding=' + '"' + 'UTF-8' + '"' + '?>'

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ' ' + '' + ver_estado() + ''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ' ' + '' + alltrim(str(np091)) + ''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ' ' + '' + alltrim(str(val(np034))) + ''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ' ' + '' + alltrim(str(mnr)) + ''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ' ' + '' + alltrim(npsnf) + ''

oPrn:Say(lh,000,mlinha)

++lh

ndata = substr(dtos(np035),3,2) + substr(dtos(np035),5,2)

mlinha = ' ' + '' + ndata + ''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ' ' + '' + alltrim(pandn) + ''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''

oPrn:Say(lh,000,mlinha)

oPrn:EndPage()

oPrn:End()

// Pega a chave da NF-e ou o erro da geracao da chave.................

cDirXML = reverso(alltrim(zaret))+"\"+alltrim(str(mnr))+"-ret-gerar-chave.xml"

cDirXME = reverso(alltrim(zaret))+"\"+alltrim(str(mnr))+"-ret-gerar-chave.err"

msn = "N"

nqte = 0

do while nqte < 100000

if file(cDirXML)

msn = "S"

exit

endif

if file(cDirXME)

msn = "N"

exit

endif

++nqte

enddo

// tempo de espera de 7 segundos......................................

SysWait(7)

if msn = "N"

oDlgWait:end()

msgstop("Erro. Tente novamente.","Atencao")

ferase(cDirXME)

return nil

elseif msn = "S"

nchave = abrir_xml(cDirXML,"chaveNFe")

if empty(nchave)

oDlgWait:end()

msgstop("Erro. Nao foi possivel ler o XML com a chave, tente novamente.","Atencao")

ferase(cDirXML)

return nil

endif

cQuery := "Update f50900000 set "+;

"pchv = " + "'"+nchave+"'"+;

" where pasq = " + alltrim(str(mnr))

oQuery := oServer:Query(cQuery)

if oQuery:neterr()

oQuery:destroy()

oServer:Commit()

oDlgWait:end()

ferase(cDirXML)

msgStop("Não foi possível gravar a chave da NF-e no arquivo de notas.","ATENÇÂO")

return nil

endif

oQuery:destroy()

oServer:Commit()

endif

ferase(cDirXML)

geraXMLNFe("V")

// Faz o aguardo da validacao e assinatura... para informar o retorno..

cQuery := "select * from f50900000 where"+;

" pasq = " + alltrim(str(mnr))+;

" order by pasq asc;"

oQuery := oServer:Query(cQuery)

npchv = oQuery:Fieldget(oQuery:Fieldpos('pchv'))

npchv = alltrim(npchv)

oQuery:destroy()

cDirXML = reverso(alltrim(zaret))+"\"+alltrim(npchv)+"-nfe-ret.xml"

cDirErr = reverso(alltrim(zaret))+"\"+alltrim(npchv)+"-nfe-ret.err"

machou = "N"

do while .t.

if file(cDirXML)

machou = "X"

exit

endif

if file(cDirErr)

machou = "E"

exit

endif

enddo

// tempo de espera de 7 segundos......................................

SysWait(7)

motivo = ""

cstatus = ''

if machou = "X"

motivo = abrir_xml(cDirXML,"xMotivo")

SysWait(3)

cstatus = abrir_xml(cDirXML,"cStat")

ferase(cDirXML)

elseif machou = "E"

motivo = abrir_xml(cDirErr,"xMotivo")

ferase(cDirErr)

endif

oDlgWait:end()

if !empty(motivo)

msgstop(motivo,"Atencao")

if machou = "X"

if cstatus = '1'

// grava o tipo de operacao efetuada que foi a validacao...........

cQuery := "Update f50900000 set "+;

"pstu = " + "1"+;

" where pasq = " + alltrim(str(mnr))

oQuery := oServer:Query(cQuery)

oQuery:destroy()

oServer:Commit()

ferase(cDirXML)

enchenfeletronica()

endif

endif

endif

return nil

//Funcao que envia a NF-e .....................................................

function envia_nfe()

public oDlgWait

qq = ver_marcado_nota()

if qq = "N"

msgstop("Nenhuma nota fiscal foi marcada para o envio.","Atencao")

return nil

endif

// Verifica se existe o arquivo para ser validado.....................

if ver_arquivo_nfe_xml() = "S"

return nil

endif

nresp = fWait( "........* processando *........")

if consulta_servico(2) == "N"

oDlgWait:end()

return nil

endif

cQuery := "select * from f50900000 where"+;

" pasq = " + alltrim(str(mnr))+;

" order by pasq asc;"

oQuery := oServer:Query(cQuery)

npchv = oQuery:Fieldget(oQuery:Fieldpos('pchv')) // numero da nf-e ..

npstu = oQuery:Fieldget(oQuery:Fieldpos('pstu'))

oQuery:destroy()

// Verifica se a NF-e foi validada ou nao .............................

if empty(npstu)

oDlgWait:end()

msgstop("Esta nota nao foi validada.","Atencao")

return nil

endif

if npstu > 1

nsituacao = ""

if empty(npstu) .or. npstu = 0

nsituacao = "Digitacao"

elseif npstu = 1

nsituacao = "Validada e Assinada"

elseif npstu = 3

nsituacao = "Aguardando recibo"

elseif npstu = 4

nsituacao = "Aguardando protocolo"

elseif npstu = 5

nsituacao = "Autorizada"

elseif npstu = 6

nsituacao = "Cancelada"

endif

if msgnoyes("Esta nota esta " + nsituacao + " . Deseja realmente envia-la ?","") == .f.

oDlgWait:end()

return nil

endif

endif

// gera o xml a ser enviado a Receita .................................

geraXMLNFe("E")

// pega os retornos do xml ............................................

if retorno_nfe_lote() = "N"

oDlgWait:end()

return nil

endif

if retorno_nfe_recibo() = "N"

oDlgWait:end()

return nil

endif

if retorno_nfe_protocolo() = "N"

oDlgWait:end()

return nil

endif

oDlgWait:end()

return nil

// Funcao que gera o XML do recibo do lote enviado a SEFAZ.....................

//function geraXMLrecibo()

// B02_cUF = ver_estado()

//

// cQuery := "select * from f50900000 where"+;

// " pasq = " + alltrim(str(mnr))+;

// " order by pasq asc;"

// oQuery := oServer:Query(cQuery)

// npchv = oQuery:Fieldget(oQuery:Fieldpos('pchv')) // numero da nf-e ..

// npchv = alltrim(npchv)

// nprec = oQuery:Fieldget(oQuery:Fieldpos('prec'))

// nprec = alltrim(nprec)

// mp091 = oQuery:Fieldget(oQuery:Fieldpos('p091'))

// mp091 = alltrim(str(mp091))

// oQuery:destroy()

//

// cDirXML = reverso(alltrim(zaenv))+"\"+alltrim(nprec)+"-ped-rec.xml"

//

// lh := 00

// oPrn := TDosPrn():New(cDirXML)

// oPrn:StartPage()

// oPrn:lZeraBuffer:=.T.

//

// mlinha = '<?xml version=' + '"'+ '1.0' + '"' + ' encoding=' + '"' + 'UTF-8' + '"' + '?>'

// oPrn:Say(lh,000,mlinha)

// ++lh

// mlinha = ''

// oPrn:Say(lh,000,mlinha)

// ++lh

//

// mlinha = ''+alltrim(zambt)+''

// oPrn:Say(lh,000,mlinha)

// ++lh

//

// mlinha = ''+nprec+''

// oPrn:Say(lh,000,mlinha)

// ++lh

//

// mlinha = ''+ver_estado()+''

// oPrn:Say(lh,000,mlinha)

// ++lh

//

// mlinha = ''+ mp091 +''

// oPrn:Say(lh,000,mlinha)

// ++lh

//

// mlinha = ''

// oPrn:Say(lh,000,mlinha)

// ++lh

// oPrn:EndPage()

// oPrn:End()

//return nil

// Funcao que gera o XML da nota fiscal eletronica.............................

function geraXMLNFe(objet)

B02_cUF = ver_estado()

if alltrim(zavrs) = "2.00"

B03_cNF = strzero(mnr,8)

elseif alltrim(zavrs) = "1.10" .or. alltrim(zavrs) = "1.07"

B03_cNF = strzero(mnr,9)

endif

B06_mod = "55"

cQuery := "select * from f50900000 where"+;

" pasq = " + alltrim(str(mnr))+;

" order by pasq asc;"

oQuery := oServer:Query(cQuery)

npchv = oQuery:Fieldget(oQuery:Fieldpos('pchv')) // numero da nf-e ..

npchv = alltrim(npchv)

mp016 = oQuery:Fieldget(oQuery:Fieldpos('p016')) // numero do pedido ou romaneio..

mp016 = alltrim(mp016)

mptip = oQuery:Fieldget(oQuery:Fieldpos('ptip')) // se romaneio ou pedido

B04_natOP = oQuery:Fieldget(oQuery:Fieldpos('p048')) // natureza da operacao..

B04_natOP = alltrim(B04_natOP)

B05_indPag = oQuery:Fieldget(oQuery:Fieldpos('p089')) // forma de pagamento

B07_serie = oQuery:Fieldget(oQuery:Fieldpos('psnf')) // serie da nf-e.

B07_serie = alltrim(B07_serie)

B08_nNF = oQuery:Fieldget(oQuery:Fieldpos('p034')) // numero do documento fiscal

B08_nNF = alltrim(str(val(B08_nNF)))

mp035 = oQuery:Fieldget(oQuery:Fieldpos('p035')) // dt de emissao

B09_dEmi = alltrim(str(year(mp035))) + "-" + substr(dtoc(mp035),4,2) + "-" + substr(dtoc(mp035),1,2)

mp033 = oQuery:Fieldget(oQuery:Fieldpos('p033')) // dt de said

if !empty(mp033)

B10_dSaiEnt = alltrim(str(year(mp033))) + "-" + substr(dtoc(mp033),4,2) + "-" + substr(dtoc(mp033),1,2)

endif

B10a_hSaiEnt = oQuery:Fieldget(oQuery:Fieldpos('p065')) // Hora de saida ou entrada de mercadoria/Produto

mp094 = oQuery:Fieldget(oQuery:Fieldpos('p094'))

B11_tpNF = iif(mp094 = "S","1","0") // tipo de nota 0-entrada 1-saida

B12_cMunFG = substr(zaibg,1,7) // municipio de ocorrencia do fato gerador numerico

B21_tpImp = "1" // Formato de Impressao do DANFE.

mp091 = oQuery:Fieldget(oQuery:Fieldpos('p091')) // Tipo de Emissao da Nf-e

B22_tpEmis = alltrim(str(mp091))

mpchv = oQuery:Fieldget(oQuery:Fieldpos('pchv')) // Digito verificador da chave de acesso.

B23_cDV = substr(alltrim(mpchv),44,1)

B24_tpAmb = zambt // Identificacao do ambiente

B25_finNFe = zafnd // finalidade da emissao

B26_procEmi = "0" // Identificacao do processo de emissao da NF-e 0-emissao de NF-e com aplicativo do contribuinte

B27_verProc = "4.0.1" // versao do processo de emissao da NF-e

C02_CNPJ = alltrim(zandn) // CNPJ do emitente

C02a_CPF = alltrim(zandn) // CPF do emitente

C03_xNome = alltrim(zaden) // Razao social do emitente

C03_xNome = trata_XML(C03_xNome)

C04_xFant = "" // Nome fantasia

if !empty(C04_xFant)

C04_xFant = trata_XML(C04_xFant)

endif

C06_xLgr = alltrim(zaend) // Endereco do emitente

C06_xLgr = trata_XML(C06_xLgr)

C07_nro = alltrim(str(zanro)) // numero do endereco do emitente

C08_xCpl = alltrim(zacpl) // complemento do endereco do emitente

C08_xCpl = trata_XML(C08_xCpl)

C09_xBairro = alltrim(zabai) // bairro do emitente

C09_xBairro = trata_XML(c09_xBairro)

C10_cMun = alltrim(zaibg) // Codigo do municipio no IBGE do emitente

c11_xMun = alltrim(zacid) // Nome do municipio

c11_xMun = trata_XML(c11_xMun)

C12_UF = alltrim(zaest) // Estado do municipio do emitente

C13_CEP = alltrim(zacep) // cep do emitente

C14_cPais = "" // codigo do pais do emitente

C15_xPais = "" // nome do pais do emitente

C16_fone = ""

C17_IE = alltrim(zaies) // Inscricao Estadual do Emitente

C21_CRT = zacrt // codigo de regime tributario

E02_CNPJ = oQuery:Fieldget(oQuery:Fieldpos('p007')) // CNPJ do destinatario

E02_CNPJ = alltrim(E02_CNPJ)

E03_CPF = oQuery:Fieldget(oQuery:Fieldpos('p007')) // CPF do destinatario

E03_CPF = alltrim(E03_CPF)

E04_xNome = oQuery:Fieldget(oQuery:Fieldpos('p001')) // Nome do destinatario

E04_xNome = alltrim(E04_xNome)

E04_xNome = trata_XML(E04_xNome)

E06_xLgr = oQuery:Fieldget(oQuery:Fieldpos('p002')) // Logradouro do destinatario

E06_xLgr = alltrim(E06_xLgr)

E06_xLgr = trata_XML(E06_xLgr)

E07_nro = oQuery:Fieldget(oQuery:Fieldpos('p02a')) // Numero do logradouro do destinatario

E07_nro = alltrim(E07_nro)

E08_xCpl = oQuery:Fieldget(oQuery:Fieldpos('p02b')) // Complemento do endereco

if !empty(E08_xCpl)

E08_xCpl = alltrim(E08_xCpl)

E08_xCpl = trata_XML(E08_xCpl)

endif

E09_xBairro = oQuery:Fieldget(oQuery:Fieldpos('p003')) // Bairro do destinatario

E09_xBairro = alltrim(E09_xBairro)

E09_xBairro = trata_XML(E09_xBairro)

E10_cMun = oQuery:Fieldget(oQuery:Fieldpos('p05a')) // Codigo do Municipio do destinatario no IBGE

E10_cMun = alltrim(E10_cMun)

E10_cMun = trata_XML(E10_cMun)

E11_xMun = oQuery:Fieldget(oQuery:Fieldpos('p005')) // Nome do municipio do destinatario

E11_xMun = alltrim(E11_xMun)

E11_xMun = trata_XML(E11_xMun)

E12_UF = oQuery:Fieldget(oQuery:Fieldpos('p006')) // Estado do destinatario

E13_CEP = oQuery:Fieldget(oQuery:Fieldpos('p004')) // cep do destinatario.

mp008 = oQuery:Fieldget(oQuery:Fieldpos('p008')) // inscricao ou rg

mp08a = oQuery:Fieldget(oQuery:Fieldpos('p08a')) // tipo de documento

E17_IE = iif(mp08a = 2,alltrim(substr(mp008,1,14)),iif(mp08a = 5,"ISENTO",""))

np021 = oQuery:Fieldget(oQuery:Fieldpos('p021')) // valor do frete

np022 = oQuery:Fieldget(oQuery:Fieldpos('p022')) // valor do seguro

np024 = oQuery:Fieldget(oQuery:Fieldpos('p024')) // total dos produtos

np025 = oQuery:Fieldget(oQuery:Fieldpos('p025')) // total do ipi

np026 = oQuery:Fieldget(oQuery:Fieldpos('p026')) // total da nota

np053 = oQuery:Fieldget(oQuery:Fieldpos('p053')) // base de calculo

np054 = oQuery:Fieldget(oQuery:Fieldpos('p054')) // valor do icms.

np055 = oQuery:Fieldget(oQuery:Fieldpos('p055')) // base calc. icm substit

np056 = oQuery:Fieldget(oQuery:Fieldpos('p056')) // icms substituicao

np063 = oQuery:Fieldget(oQuery:Fieldpos('p063')) // outras despesas e acessorios.

np069 = oQuery:Fieldget(oQuery:Fieldpos('p069')) // modalidade de frete

np010 = oQuery:Fieldget(oQuery:Fieldpos('p010')) // transportadora

np010 = alltrim(np010)

np010 = trata_XML(np010)

np011 = oQuery:Fieldget(oQuery:Fieldpos('p011')) // endereco

np011 = alltrim(np011)

np011 = trata_XML(np011)

np012 = oQuery:Fieldget(oQuery:Fieldpos('p012')) // bairro

np012 = alltrim(np012)

np012 = trata_XML(np012)

np013 = oQuery:Fieldget(oQuery:Fieldpos('p013')) // municipio

np013 = alltrim(np013)

np013 = trata_XML(np013)

np014 = oQuery:Fieldget(oQuery:Fieldpos('p014')) // estado

np015 = oQuery:Fieldget(oQuery:Fieldpos('p015')) // placa do veiculo

np015 = alltrim(np015)

np066 = oQuery:Fieldget(oQuery:Fieldpos('p066')) // c.n.p.j. transportador

np066 = alltrim(np066)

np067 = oQuery:Fieldget(oQuery:Fieldpos('p067')) // insc. estadual transp.

np067 = alltrim(np067)

np068 = oQuery:Fieldget(oQuery:Fieldpos('p068')) // estado do veiculo

np029 = oQuery:Fieldget(oQuery:Fieldpos('p029')) // quantidade

np029 = alltrim(np029)

np030 = oQuery:Fieldget(oQuery:Fieldpos('p030')) // especie

np030 = alltrim(np030)

np027 = oQuery:Fieldget(oQuery:Fieldpos('p027')) // marca

np027 = alltrim(np027)

np028 = oQuery:Fieldget(oQuery:Fieldpos('p028')) // numero

np028 = alltrim(np028)

np031 = oQuery:Fieldget(oQuery:Fieldpos('p031')) // peso liquido

np031 = alltrim(np031)

np032 = oQuery:Fieldget(oQuery:Fieldpos('p032')) // peso bruto

np032 = alltrim(np032)

np093 = oQuery:Fieldget(oQuery:Fieldpos('p093')) // informacao adicional ao contribuinte

nprct = oQuery:Fieldget(oQuery:Fieldpos('prct')) // parcial ou total..

oQuery:destroy()

if empty(npchv)

msgstop("Nao foi possivel gerar a NF-e. Tente novamente.","Atenco")

return nil

endif

if objet = "V" // gera na pasta a ser validada

cDirXML = reverso(alltrim(zavld))+"\"+alltrim(npchv)+"-nfe.xml"

elseif objet = "E" // gera na pasta a ser enviada e/ou aprovada..

cDirXML = reverso(alltrim(zaenv))+"\"+alltrim(npchv)+"-nfe.xml"

endif

lh := 00

oPrn := TDosPrn():New(cDirXML)

oPrn:StartPage()

oPrn:lZeraBuffer:=.T.

mlinha = '<?xml version='+'"'+'1.0'+'"'+ ' encoding='+'"'+'UTF-8'+'"'+' ?>'

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

// Identificacao da Nf-e ( Nota fiscal eletronica ) ..................

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+B02_cUF+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+B03_cNF+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+B04_natOP+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+B05_indPag+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+B06_mod+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+B07_serie+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+B08_nNF+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+B09_dEmi+''

oPrn:Say(lh,000,mlinha)

++lh

if !empty(mp033)

mlinha = ''+B10_dSaiEnt+''

oPrn:Say(lh,000,mlinha)

++lh

endif

mlinha = ''+B11_tpNF+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+B12_cMunFG+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+B21_tpImp+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+B22_tpEmis+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+B23_cDV+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+B24_tpAmb+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+B25_finNFe+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+B26_procEmi+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+B27_verProc+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

// Identificacao do emitente da nota fiscal eletronica.................

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

if len(alltrim(zandn)) > 11

mlinha = ''+C02_CNPJ+''

oPrn:Say(lh,000,mlinha)

++lh

else

mlinha = ''+C02a_CPF+''

oPrn:Say(lh,000,mlinha)

++lh

endif

mlinha = ''+C03_xNome+''

oPrn:Say(lh,000,mlinha)

++lh

// Endereco do Emitente................................................

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+C06_xLgr+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+C07_nro+''

oPrn:Say(lh,000,mlinha)

++lh

if !empty(C08_xCpl)

mlinha = ''+C08_xCpl+''

oPrn:Say(lh,000,mlinha)

++lh

endif

mlinha = ''+C09_xBairro+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+C10_cMun+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+c11_xMun+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+C12_UF+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+C13_CEP+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+C17_IE+''

oPrn:Say(lh,000,mlinha)

++lh

// somente para versao 2.00...........................................

if alltrim(zavrs) = "2.00"

mlinha = ''+C21_CRT+''

oPrn:Say(lh,000,mlinha)

++lh

endif

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

// Identificacao do Destinatario da Nf-e..............................

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

if len(alltrim(E02_CNPJ)) > 11

mlinha = ''+E02_CNPJ+''

oPrn:Say(lh,000,mlinha)

++lh

else

mlinha = ''+E03_CPF+''

oPrn:Say(lh,000,mlinha)

++lh

endif

mlinha = ''+E04_xNome+''

oPrn:Say(lh,000,mlinha)

++lh

// Dados do endereco do Destinatario...................................

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+E06_xLgr+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+E07_nro+''

oPrn:Say(lh,000,mlinha)

++lh

if !empty(E08_xCpl)

mlinha = ''+E08_xCpl+''

oPrn:Say(lh,000,mlinha)

++lh

endif

mlinha = ''+E09_xBairro+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+E10_cMun+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+E11_xMun+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+E12_UF+''

oPrn:Say(lh,000,mlinha)

++lh

if !empty(E13_CEP)

mlinha = ''+alltrim(E13_CEP)+''

oPrn:Say(lh,000,mlinha)

++lh

endif

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

if empty(E17_IE)

mlinha = ''+''

oPrn:Say(lh,000,mlinha)

++lh

else

mlinha = ''+E17_IE+''

oPrn:Say(lh,000,mlinha)

++lh

endif

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

// Detalha os produtos e seus impostos................................

cQuery := "select * from f51000000 where"+;

" qemp = " + alltrim(str(memp))+;

" and qnpd = " + "'"+mp016+"'"+;

" and qtip = " + "'"+mptip+"'"+;

" order by qnpd asc;"

oQuery := oServer:Query(cQuery)

nn = 1

DO WHILE !oQuery:Eof()

nqcap = oQuery:Fieldget(oQuery:Fieldpos('qcap')) // codigo de acesso ao produto

nqcfo = oQuery:Fieldget(oQuery:Fieldpos('qcfo')) // codigo fical de operacao

nqqtd = oQuery:Fieldget(oQuery:Fieldpos('qqtd')) // quantidade do produto

nquni = oQuery:Fieldget(oQuery:Fieldpos('quni')) // unidade do produto

nqvru = oQuery:Fieldget(oQuery:Fieldpos('qvru')) // valor unitario

nqvti = oQuery:Fieldget(oQuery:Fieldpos('qvti')) // valor total do item

nqcst = oQuery:Fieldget(oQuery:Fieldpos('qcst')) // c.s.t. do produto

nqbci = oQuery:Fieldget(oQuery:Fieldpos('qbci')) // base de calculo do i.c.m

nqaic = oQuery:Fieldget(oQuery:Fieldpos('qaic')) // aliquota de icm

nqvic = oQuery:Fieldget(oQuery:Fieldpos('qvic')) // valor do icm

nqisn = oQuery:Fieldget(oQuery:Fieldpos('qisn')) // isento

nqtrs = oQuery:Fieldget(oQuery:Fieldpos('qtrs')) // tributacao na saida

nqadc = oQuery:Fieldget(oQuery:Fieldpos('qadc')) // classificacao fiscal

nqads = oQuery:Fieldget(oQuery:Fieldpos('qads')) // aliquota diferenciada

cwQuery := "select * from e40100000 where "+;

"bcap = " + alltrim(str(nqcap)) + " order by bcap asc;"

owQuery := oServer:Query(cwQuery)

nqnpc = owQuery:Fieldget(owQuery:Fieldpos('bcdg')) // numero da pe‡a

nbcdo = owQuery:Fieldget(owQuery:Fieldpos('bcdo'))

nqdpr = owQuery:Fieldget(owQuery:Fieldpos('bprd')) // descricao do produto

nqdpr = trata_XML(nqdpr)

nqund = owQuery:Fieldget(owQuery:Fieldpos('bund')) // unidade do produto

nqund = trata_xml(nqund)

owQuery:destroy()

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

// Detalhamento dos dados do produto...........................

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

if empty(nprct)

mlinha = ''+nqnpc+''

oPrn:Say(lh,000,mlinha)

++lh

else

if nprct = "T"

mlinha = ''+nqnpc+''

oPrn:Say(lh,000,mlinha)

++lh

elseif nprct = "P"

mlinha = ''+alltrim(nbcdo)+''

oPrn:Say(lh,000,mlinha)

++lh

else

mlinha = ''+nqnpc+''

oPrn:Say(lh,000,mlinha)

++lh

endif

endif

mlinha = ''+''+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+alltrim(nqdpr)+''

oPrn:Say(lh,000,mlinha)

++lh

if alltrim(zavrs) = "2.00"

if !empty(nqadc)

mlinha = ''+alltrim(substr(nqadc,1,8))+''

oPrn:Say(lh,000,mlinha)

++lh

else

mlinha = ''+'12345678'+''

oPrn:Say(lh,000,mlinha)

++lh

endif

elseif alltrim(zavrs) = "1.10" .or. alltrim(zavrs) = "1.07"

if !empty(nqadc)

if alltrim(substr(nqadc,1,8)) != "99"

mlinha = ''+alltrim(substr(nqadc,1,8))+''

oPrn:Say(lh,000,mlinha)

++lh

endif

endif

endif

mlinha = ''+substr(nqcfo,1,4)+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+alltrim(nqund)+''

oPrn:Say(lh,000,mlinha)

++lh

if alltrim(zavrs) = "2.00"

mlinha = ''+alltrim(str(nqqtd,15,4))+''

elseif alltrim(zavrs) = "1.10" .or. alltrim(zavrs) = "1.07"

mlinha = ''+alltrim(str(nqqtd,12,4))+''

endif

oPrn:Say(lh,000,mlinha)

++lh

if alltrim(zavrs) = "2.00"

mlinha = ''+alltrim(str(nqvru,15,4))+''

elseif alltrim(zavrs) = "1.10" .or. alltrim(zavrs) = "1.07"

mlinha = ''+alltrim(str(nqvru,16,4))+''

endif

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+alltrim(str(nqvti,15,2))+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+''+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+alltrim(nqund)+''

oPrn:Say(lh,000,mlinha)

++lh

if alltrim(zavrs) = "2.00"

mlinha = ''+alltrim(str(nqqtd,15,4))+''

elseif alltrim(zavrs) = "1.10" .or. alltrim(zavrs) = "1.07"

mlinha = ''+alltrim(str(nqqtd,12,4))+''

endif

oPrn:Say(lh,000,mlinha)

++lh

if alltrim(zavrs) = "2.00"

mlinha = ''+alltrim(str(nqvru,15,4))+''

elseif alltrim(zavrs) = "1.10" .or. alltrim(zavrs) = "1.07"

mlinha = ''+alltrim(str(nqvru,16,4))+''

endif

oPrn:Say(lh,000,mlinha)

++lh

if alltrim(zavrs) = "2.00"

mlinha = ''+'1'+''

oPrn:Say(lh,000,mlinha)

++lh

endif

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

// Detalhamento dos imposto(s) do(s) produto(s).................

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

if substr(nqcst,1,3) = "000"

mlinha = ''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+'0'+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+'00'+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+'3'+''

oPrn:Say(lh,000,mlinha)

++lh

mlinha = ''+iif(nqbci > 0,alltrim(str(nqbci,15,2)),"0.00")+'

Link to comment
Share on other sites

Wellington, agora sim, você matou a pau..rsrsrs

Eu não quero "copiar" a sua aplicação. O que quero é entender como funciona!!!

Parabêns, muuuiittooo obrigado!

________________________

Gilberto Herminio - Programador Pleno III - Mogi das Cruzes-SP

xHB121+Fw912 / C#/SQL2008

"Não Desenvolvo Software, crio arte Binaria...."

Link to comment
Share on other sites

Olá Desenvolvedores, Bom Dia!!

Já estou montando+- o XML de envio das NFe.

Tenho uma dúvida : (caso possam responder!)

1ª O CFOP deverá ser informado, pelo usuário, na hora da digitação no ERP da NF, ou ele já deverá esta previamente cadastrado nos produto ?

2ª Numa NF poderá haver mais uma um CFOP diferente ou na NF só pode haver uma classificação de CFOP ?

Resumidno, onde coloco, no ERP, o campo de CFOP ? No cadastro de produtos ou na hora de lançar a NF ?

________________________

Gilberto Herminio - Programador Pleno III - Mogi das Cruzes-SP

xHB121+Fw912 / C#/SQL2008

"Não Desenvolvo Software, crio arte Binaria...."

Link to comment
Share on other sites

Edu, primeiramente obrigado pelo retorno.

Deixa eu ver se entendi direito.

Então, trocando em miúdos, o CFOP deverá fazer parte da estrutura de cadastro da tabela de produtos.Onde cada produto deverá ter o seu CFOP.

Assim, ao começar digitar um pedido que depois vai virar uma NF, a cada produto que o usuário for chamando, o CFOP vem junto (produto-a-produto)...hum..Eu pensei que deveria lançar toda a NF e dai por final, informar o CFOP da NF...

Então certo e lançar o CFOP de cada produto..OK

+Uma Vez, Valeu!!

________________________

Gilberto Herminio - Programador Pleno III - Mogi das Cruzes-SP

xHB121+Fw912 / C#/SQL2008

"Não Desenvolvo Software, crio arte Binaria...."

Link to comment
Share on other sites

Bom dia,

CFOP - Código Fiscal de Operação e Prestação, que são códigos numéricos que identificam:

* Naturezas das operações de circulação de mercadorias;

* Prestações de serviços de transportes intermunicipal e

interestadual;

* Serviços de Comunicação.

É permitida a inclusão de operações enquadradas em

diferentes códigos fiscais numa mesma nota fiscal,

hipótese em que estes serão indicados no campo “CFOPâ€

no quadro “Emitente†e no quadro “Dados do Produtoâ€,

na linha correspondente a cada item, após a descrição

do produto.

Obs.- Nos meus softwares eu faço assim, qdo vou emitir a NF, peço apenas um CFOP e o repito para todos os produtos. Caso seja necessário mudar um CFOP de um produto permito que altere o CFOP do(s) produto(s) na própria Nota ou pedido, pois se vc, cadastrar o CFOP na tabela de produtos, vc, terá um CFOP fixo. Sabendo que se eu vendar para dentro do estado é um CFOP, para fora do Estado é outro CFOP, REmessa é outro CFOP, Manifesto é outro CFOP e assim por diante. Então não acho prático vc,, cadastrar o CFOP na tabela de produtos.. Acredito que o melhor é criar uma tabela de CFOP e toda a vez que emitir a nota pedir o CFOP Geral, e permitir que se mude o CFOP de cada produto na nota ou pedido, qdo isso se fizer necessário. É apenas uma observação.

Ao contrário do CST, que esse sim,, vc,, pode ter no seu cadastro de produto..

wellington

fwh/xharbour0.99.71 Bd. Postgresql

Systemup@bol.com.br

Link to comment
Share on other sites

Certo...

Então eu posso ter um CFOP prévio "default' ao lançar os produtos na NF. Caso haja variações, posso mudar de produto em produto..

Este CFOP que referem-se é :

5110 - VENDA DE PRODUCAO DO ESTABELECIMENTO

5102 - VENDA DE MERCADORIA ADQUIRIDA OU RECEBIDA DE TERCEIROS

5103 - ....

5104 - ....

Agora, então CST tem que ser individual e cadastrado na tabela de produtos ? Como funciona este tabela ?

Tabela A - Origem da Mercadoria

0 - nacional

1 - estrangeira - importação direta

2 - estrangeira - adquirida no mercado interno

Tabela B - Tributação pelo ICMS

00 - Tributada integralmente

10 - Tributada e com cobrança do ICMS por substituição tributária

20 - Com redução de base de cálculo

30 - Isenta ou não tributada e com cobrança do ICMS por substituição tributária

40 - Isenta

41 - Não tributada

50 - Suspensão

51 - Diferimento

60 - ICMS cobrado anteriormente por substituição tributária

70 - Com redução de base de cálculo e cobrança do ICMS por substituição tributária

90 - Outras

________________________

Gilberto Herminio - Programador Pleno III - Mogi das Cruzes-SP

xHB121+Fw912 / C#/SQL2008

"Não Desenvolvo Software, crio arte Binaria...."

Editado por - sig_gilberto on 25/03/2011 12:27:21

Editado por - sig_gilberto on 25/03/2011 12:31:00

Link to comment
Share on other sites

Quanto ao CFOP, correto..

Quanto ao CST eu faria assim,, é somente um exemplo para um sistema que tenha diferentes produtos com diferentes CST, no seu cadastro de produtos.. ex: SUPERMERCADO, Peças.. etc..

Tabela..

CST - 0.00.1 -> o ultimo digito é proprio do Sistema permitindo assim ter vários CST da mesma nomenclatura com situações diferentes.

Descrição -> descrição do CST.

Percentual -> Percentual da tributação na saída

Isenta -> Se este CST é isento

Aliquota diferenciada-> Se este CST usa uma aliquota diferenciada

substituição tributaria -> Se este CST é uma substituição tributaria

CFOP subs.trib. no estado

CFOP subs.trib. fora do estado.

ex(1):

CST : 0.00.1

Descrição : Produto Tributado Integralmente

Tributação Saída: 100,00% []Isenta Aliq.Diferenciada[ 0,00]

[]substituição Tributária

CFOP Subs.Tributaria no Estado [ ]

CFOP Subs.Tributaria fora do Estado[ ]

Neste caso todo produto cadastrado com este tipo de CST, tera 100% do seu valor tributado pela aliq. de ICMS do estado para qual esta vendendo o produto.

ex(2):

Supondo que ha incentivo fiscal em redução na base de cálculo por parte de algum estado em algum produto e que este incentivo é de 25%,, então..

CST : 0.00.2

Descrição : Produto Trib. Integralmente c/red. base calculo

Tributação Saída: 85,00% []Isenta Aliq.Diferenciada[ 0,00]

[]substituição Tributária

CFOP Subs.Tributaria no Estado [ ]

CFOP Subs.Tributaria fora do Estado[ ]

Neste caso todo produto cadastrado com este tipo de CST, tera 85% do seu valor tributado pela aliq. de ICMS do estado para qual esta vendendo o produto, dentro ou fora do estado..

ex(3):

Supondo que o produto é isento.

CST : 0.40.1

Descrição : Isento

Tributação Saída: 0,00% [X]Isenta Aliq.Diferenciada[ 0,00]

[]substituição Tributária

CFOP Subs.Tributaria no Estado [ ]

CFOP Subs.Tributaria fora do Estado[ ]

Neste caso todo produto cadastrado com este tipo de CST, sera isento

E assim por diante....

OBS: Eu coloco o CST com 4 digitos, pq,, assim eu posso variar o mesmo CST 0.00.1,0.00.2,0.003 e assim por diante, mas qdo ele for para a nota,, somente com 3 digitos..

OBS: No cadastro de produtos. vc, pode ter dois campos..

CST dentro do estado e CST fora do estado..

wellington

fwh/xharbour0.99.71 Bd. Postgresql

Systemup@bol.com.br

Link to comment
Share on other sites

Wellington, mais uma vez obrigado! Você parece falar com propriedade sobre este assunto, deve dominar bem!! Parabêns!! (um dia eu chego lá!)

É pessoal, realmenete o "buraco é mais embaixo!!" rsrsr

É um universo imenso de informações.

Vou procurar até um bom livro sobre escrituração fiscal para entender um pouco mais sobre este assunto. Aliás, como já é uma realidade entre muitos desenvolvedores, que tal criar aqui Forum um "TÓPICO" sobre "Desenvolvedores X NFe" ? Serie muito útil !!!

Ainda, se posso indicar tudo bem, caso não, desculpe-me, mas achei este link muito interessante que mostra bem o Diagrama da NFe, vejam : http://www.flexdocs.com.br/guiaNFe/gerarNFe.html

Bem, vou fazendo estas pequena alterações/ajustes no meu ERP e a medida que surgirem mais dúvidas, eu volto! com Certeza !!!

________________________

Gilberto Herminio - Programador Pleno III - Mogi das Cruzes-SP

xHB121+Fw912 / C#/SQL2008

"Não Desenvolvo Software, crio arte Binaria...."

Link to comment
Share on other sites

citação:

Wellington, mais uma vez obrigado! Você parece falar com propriedade sobre este assunto, deve dominar bem!! Parabêns!! (um dia eu chego lá!)

É pessoal, realmenete o "buraco é mais embaixo!!" rsrsr

É um universo imenso de informações.

Vou procurar até um bom livro sobre escrituração fiscal para entender um pouco mais sobre este assunto. Aliás, como já é uma realidade entre muitos desenvolvedores, que tal criar aqui Forum um "TÓPICO" sobre "Desenvolvedores X NFe" ? Serie muito útil !!!

Ainda, se posso indicar tudo bem, caso não, desculpe-me, mas achei este link muito interessante que mostra bem o Diagrama da NFe, vejam : http://www.flexdocs.com.br/guiaNFe/gerarNFe.html

Bem, vou fazendo estas pequena alterações/ajustes no meu ERP e a medida que surgirem mais dúvidas, eu volto! com Certeza !!!

________________________

Gilberto Herminio - Programador Pleno III - Mogi das Cruzes-SP

xHB121+Fw912 / C#/SQL2008

"Não Desenvolvo Software, crio arte Binaria...."


id=quote>id=quote>

Ola Gilberto,

ja exixte um forum dedicado somente a nfe 2g e o primeiro

nota fiscal eletronica Classe VoNfeUtil

Obrigado.

Evaldo Wagner

FiveWin9.07 xHarbour 1.21,BCC55, Pelles C xDev,xHarbour for Linux(console)

evaldowl@hotmail.com

Editado por - eevaldo on 25/03/2011 16:30:03

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...