sig_gilberto Posted March 21, 2011 Report Share Posted March 21, 2011 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...." Quote Link to comment Share on other sites More sharing options...
edutraini Posted March 21, 2011 Report Share Posted March 21, 2011 http://www.emissornfe.fazenda.sp.gov.br/docs/[Emissor_NF-e]_Manual_de_layout_TXT-NF-e_v1.1.1.pdf esse é o link agora ficou facil FW24 + CLIP5_2 email :edutraini@uol.com.br Quote Link to comment Share on other sites More sharing options...
MARSAN Posted March 21, 2011 Report Share Posted March 21, 2011 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 Quote Link to comment Share on other sites More sharing options...
william Posted March 22, 2011 Report Share Posted March 22, 2011 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 Quote Link to comment Share on other sites More sharing options...
sig_gilberto Posted March 22, 2011 Report Share Posted March 22, 2011 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...." Quote Link to comment Share on other sites More sharing options...
Wellington Vieira Posted March 22, 2011 Report Share Posted March 22, 2011 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 Quote Link to comment Share on other sites More sharing options...
Wellington Vieira Posted March 22, 2011 Report Share Posted March 22, 2011 Esqueci,, tem esses manuais.. lá também.. Manual do Layout TXT-NF-e 2.0 - SEFAZ/SP (2.0.0) Manual do Layout TXT-NF-e - SEFAZ/SP (1.1.1) Modelos de Arquivos XML para NFe Layout 3.0.0 Modelos de Arquivos XML para NFe Layout 4.0.1 wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br Quote Link to comment Share on other sites More sharing options...
sig_gilberto Posted March 23, 2011 Report Share Posted March 23, 2011 wellington, muito obrigado! vou ler e analisar tudo ! Sucesso! ________________________ Gilberto Herminio - Programador Pleno III - Mogi das Cruzes-SP xHB121+Fw912 / C#/SQL2008 "Não Desenvolvo Software, crio arte Binaria...." Quote Link to comment Share on other sites More sharing options...
sig_gilberto Posted March 23, 2011 Report Share Posted March 23, 2011 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...." Quote Link to comment Share on other sites More sharing options...
Wellington Vieira Posted March 23, 2011 Report Share Posted March 23, 2011 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")+' Quote Link to comment Share on other sites More sharing options...
sig_gilberto Posted March 23, 2011 Report Share Posted March 23, 2011 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...." Quote Link to comment Share on other sites More sharing options...
sig_gilberto Posted March 25, 2011 Report Share Posted March 25, 2011 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...." Quote Link to comment Share on other sites More sharing options...
edutraini Posted March 25, 2011 Report Share Posted March 25, 2011 o cfop é por item vc pode ter varios cfop na nota exemplo nota de venda produto arruela tributo 000 cfop 5.102 produto parafuso tributo 060 cfop 5.403 quando for nota de venda para facilitar a vida do seu cliente amarre o cfop pelo tributo FW24 + CLIP5_2 email :edutraini@uol.com.br Quote Link to comment Share on other sites More sharing options...
sig_gilberto Posted March 25, 2011 Report Share Posted March 25, 2011 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...." Quote Link to comment Share on other sites More sharing options...
edutraini Posted March 25, 2011 Report Share Posted March 25, 2011 nao é o cfop e sim tributo do produto conf tributo do produto vc cria o cfop conf exemplo que coloquei FW24 + CLIP5_2 email :edutraini@uol.com.br Quote Link to comment Share on other sites More sharing options...
Wellington Vieira Posted March 25, 2011 Report Share Posted March 25, 2011 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 Quote Link to comment Share on other sites More sharing options...
sig_gilberto Posted March 25, 2011 Report Share Posted March 25, 2011 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 Quote Link to comment Share on other sites More sharing options...
Wellington Vieira Posted March 25, 2011 Report Share Posted March 25, 2011 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 Quote Link to comment Share on other sites More sharing options...
Edvaldo1361303230 Posted March 25, 2011 Report Share Posted March 25, 2011 Oi Wellington, verificando o seu exemplo, acho que é xml da versão 1., você poderia postar o seu exemplo de geração do xml da versão 2g ? Obrigado Quote Link to comment Share on other sites More sharing options...
sig_gilberto Posted March 25, 2011 Report Share Posted March 25, 2011 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...." Quote Link to comment Share on other sites More sharing options...
Wellington Vieira Posted March 25, 2011 Report Share Posted March 25, 2011 Edvaldo, E da 1.10, realmente,, neste final de semana ou na próxima semana posto o da 2 geração.. assim que der.. ok.. wellington fwh/xharbour0.99.71 Bd. Postgresql Systemup@bol.com.br Quote Link to comment Share on other sites More sharing options...
eevaldo Posted March 25, 2011 Report Share Posted March 25, 2011 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 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.