Clipper On Line • Ver Tópico - Classe e função pra carregar XML

Classe e função pra carregar XML

Projeto hbNFe (Nota Fiscal Eletronica/Danfe) para [x]Harbour

Moderador: Moderadores

 

Classe e função pra carregar XML

Mensagempor JoséQuintas » 12 Dez 2016 20:33

Esse switch eu achei perigoso, por estar acostumado com DO CASE que não precisa EXIT em cada opção.

Um que eu uso bastante, é pra não ter que numerar cada opção, permitindo acrescentar/eliminar itens fácil:

nTemp := 1
DO CASE
CASE nOpcao == nTemp++
CASE nOpcao == nTemp++
CASE nOpcao == nTemp++
CASE nOpcao == nTemp++
CASE nOpcao == nTemp++
CASE nOpcao == nTemp++
ENDCASE
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Classe e função pra carregar XML

Mensagempor JoséQuintas » 12 Dez 2016 20:54

E não é que não tem comandos no manual do Harbour.
Alguém tinha reparado nisso?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Classe e função pra carregar XML

Mensagempor JoséQuintas » 15 Dez 2016 21:35

Eh a primeira vez que For Each tbm... e ate me parece mais simples que For... Next


Fechou Quintas... Declare local oProduto e depois peguei oProduto:Nome ...


Estou usando e abusando das novas no Harbour como WITH OBJECT, SWITCH, o FOR EACH, esses comandos são ótimos e substitui muito os tradicionais na maioria dos casos


Esqueci de comentar:

É legal ver isso.
É isso que mostra que "estamos ativos e vivos".
E vai despertando curiosidade de aprender cada vez mais.
O que era rotineiro e cansativo, começa a se transformar em novas aventuras... rs
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Classe e função pra carregar XML

Mensagempor rubens » 20 Jan 2017 06:21

JoséQuintas,

Fiz uma implementações na classe, mais especificamente no prg ze_spedxmlClass.prg. Acrescentei uns campos que a classe não estava pegando. Onde acrescentei coloquei meu nome na linha.
Se você achar que é interessante por favor atualize para que não seja necessário alterar aqui no prg quando fizer uma atualização da classe.

Obrigado
Rubens

ze_spedxmlClass.prg
(33.3 KiB) Baixado 209 vezes
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

Classe e função pra carregar XML

Mensagempor JoséQuintas » 20 Jan 2017 07:57

Vou olhar com mais atenção as alterações.
Como uso direto no meu aplicativo, talvez tenha que alterar meu aplicativo.

Mas já dá pra adiantar que tem pelo menos uma coisa errada:
a chave fica em :cChaveAcesso e em uma parte usou :cChave
Também já cometi esse erro, talvez seja hora de alterar o nome pra :cChave mesmo
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Classe e função pra carregar XML

Mensagempor rubens » 25 Jan 2017 11:37

JoséQuintas....

O XML em anexo me deu uma canseira danada e mesmo assim não consegui resolver... A sequencia da numeração dos produtos veio quebrada... veio o item 18 depois o 22,23 e o 19,20,21...
52170102595626000113550010006859911001640370.xml
(22.56 KiB) Baixado 178 vezes

Daí tanto com for each com a sua classe, tanto usando minha rotina com for next, se perde a sequencia de leitura dos itens e para sempre no item 21.
A minha rotina não consegue ler os itens fora da sequencia... o que eu poderia fazer ? (nesse caso para resolver abri o arquivo com o bloco de nota e corrigi a sequencia dos itens).

Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

Classe e função pra carregar XML

Mensagempor JoséQuintas » 25 Jan 2017 17:54

Use MultipleNodeToArray()
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Classe e função pra carregar XML

Mensagempor rubens » 21 Mar 2017 16:12

José Quintas...

Essa MultipleNodeToArray() vai ter que ser usada na classe... onde faz a leitura dos arquivos vai ter que mudar xmlnode() para MultipleNodeToArray()?

Achei que ia ser um caso isolado o problema dos itens fora de sequencia mas agora estou com três clientes recebendo notas desse tipo... agora tenho que correr atrás...

Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

Classe e função pra carregar XML

Mensagempor JoséQuintas » 21 Mar 2017 16:44

   FOR nCont = 1 TO 1000
      cBlocoItem := XmlNode( cBlocoDetalhe, [det nItem="] + LTrim( Str( nCont ) ) + ["])
      IF Len( Trim( cBlocoItem ) ) = 0 // Se acabaram os itens
         EXIT
      ENDIF


Com MultipleNodeToArray(), deve ficar até mais fácil, acho que assim basta:

FOR EACH cBlocoItem IN MultipleNodeToArray( cBlocoDetalhe, "det nItem" )
      IF Len( Trim( cBlocoItem ) ) = 0 // Se acabaram os itens
         EXIT
      ENDIF
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Classe e função pra carregar XML

Mensagempor rubens » 23 Jun 2017 23:26

Olá...

Quintas, por favor dá mais uma aulinha aqui... tem horas que a gente tá meio travado... (ou é burro mesmo)...
Eu tinha conseguido fazer funcionar com MultipleNodeToArray(), tive que fazer uma alteração na função mas funcionou... Que alteração? Quando manda somente o cNode para MultipleNodeToArray() lendo uma nfe não funcionava por que o bloco de itens começa com det item e termina somente com det. Daí implementei para mandar cNode e cNodeFim, se não for enviado cNodeFim ele assume por default cNode.
Daí ficou assim:
FUNCTION MultipleNodeToArray( cXml, cNode, cNodeFim )
   LOCAL aNodes :={}
   hb_Default( @cNodeFim, cNode )
   DO WHILE "<" + cNode + "=" $ cXml .OR. "<" + cNode + ">" $ cXml
      Aadd( aNodes , XmlNode( cXml , cNode ) )
      IF ! "</" + cNodeFim $ cXml
         cXml := ""
      ELSE
         cXml := Substr( cXml, At( "</" + cNodeFim + ">", cXml ) + Len( "</" + cNodeFim + ">" ) )
      ENDIF
   ENDDO
   RETURN aNodes

Agora não estou conseguindo chamar a função... Se uso:
For EACH oProduto IN ( oNfe:Produto )

Funciona beleza... desde que a ordem dos produtos esteja correta...
Se a ordem dos produtos está errada, não está em sequencia ( 1,2,3,4,9,6,57 ) não funciona.
Como eu colocaria para usar o MultipleNodeToArray().
Já tinha conseguido isso mas perdi uns dois dias de programação e a rotina que tinha conseguido estava nesses dias.
O meu conceito é:
Preciso pegar a relação dos produtos... daí envio para MultipleNodeToArray() cXML que é o texto da NFE certo? daí MultipleNodeToArray() adiciona em aNodes os produtos. Mas eu não tenho um variável texto com a NFE. oNFE é um objeto de class e oNFE:Produto é uma array.
O mais próximo que consegui chegar foi:
cXml          := Hb_MemoRead( cArqXml )
For EACH oProduto IN ( MultipleNodeToArray( cXml, 'det nItem','det')
cNomPro := oProduto:Nome   --> Dá erro aqui
Next

Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

Classe e função pra carregar XML

Mensagempor JoséQuintas » 24 Jun 2017 00:53

Simples:

a função não tinha problema, não tinha nada pra ser consertado, você simplesmente a estragou.

A classe tem tudo que precisa, tem até o Danfe que retira toda informação da nota.
Tem até rotina pronta pra pegar dados da nota, além dessa.

Não querendo ser chato, mas já sendo:

Não era a rotina que estava errada, era você.
O nome não é "det item", é "det".

MultipleNodeToArray( cXml, "det" )

Era só ter olhado os fontes da classe pra encontrar o uso correto.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Classe e função pra carregar XML

Mensagempor gilbertosilverio » 06 Jul 2017 18:54

Ola Jose Quintas,

Estou estudando teu exemplo, de como criar classes, para tentar criar uma rotina, e esta ocorrendo o erro apos a emissao da NFe.

O que pode ser, o PDF e gerado, mais o qrcode não, dando o erro abaixo, a ja tentei entender, mais não consegui fazer funcionar.

35170644463156000184550750004914211108131768.XML
Error BASE/1111 Argument error: LEN
Called from LEN(0)
Called from HBNFEDANFCE:CONSULTACHAVEACESSO(434)
Called from HBNFEDANFCE:CALCULAPDF(165)
Called from HBNFEDANFCE:TOPDF(72)
Called from (b)HBNFEDANFCE(16)
Called from HBNFEDANFCE:EXECUTE(0)
Called from TESTDANFE(230)
Called from MAIN(65)

Retirei o que tinha, oFILES do teu exemplo, e inclui um numero de uma NFe valida, ela gera o pdf mais da o erro abaixo.
FUNCTION TestDanfe()

   LOCAL oDanfe, oFiles, cFileXml, cFilePdf

   oFiles := { "35170644463156000184550750004914211108131768.XML" }
   FOR EACH cFileXml IN oFiles
      oDanfe := hbNfeDaGeral():New()
      cFilePdf := Substr( cFileXml, 1, At( ".", cFileXml ) ) + "pdf"
      fErase( cFilePdf )
      oDanfe:cLogoFile := JPEGImage()
      oDanfe:cDesenvolvedor := "www.jpatecnologia.com.br"
      oDanfe:ToPDF( cFileXml, cFilePdf, iif( cFileXml == "nfecancel.xml", "nfecancelcan.xml", "" ) )
      ? cFileXml, oDanfe:cRetorno
      PDFOpen( cFilePdf )
   NEXT
   oDanfe := hbNFeDaNFCe():New()
   oDanfe:Execute( "www.jpatecnologia.com.br" )
   PDFOpen( "pdfqrcode.pdf" )
   Inkey(0)

   RETURN NIL
gilbertosilverio
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 332
Data de registro: 18 Jan 2009 09:39
Cidade/Estado: Ribeirao Pires - SP
Curtiu: 1 vez
Mens.Curtidas: 23 vezes

Classe e função pra carregar XML

Mensagempor gilbertosilverio » 06 Jul 2017 19:13

Jose Quintas,

Inclui :
OTHERWISE
cUrl := ""
Não sei se e certo, mais não deu mais o erro...

METHOD ConsultaChaveAcesso() CLASS hbNFeDaNFCe

   LOCAL cUF, cUFList, cUrl

   // DIVISAO IV - Informacoes da consulta via chave de acesso -------------------------------------------------------------------
   cUFList := "AC,12,AL,27,AM,13,AP,16,BA,29,CE,23,DF,53,ES,32,GO,52,MG,31,MS,50,MT,51,MA,21,PA,15,PB,25,PE,26,PI,22,PR,41,RJ,33,RO,11,RN,24,RR,14,RS,43,SC,42,SE,28,SP,35,TO,17,"
   cUF     := Substr( cUFList, At( ::aIde[ "cUF" ], cUFList ) - 3, 2 )

   // Fonte: http://nfce.encat.org/consumidor/consulte-sua-nota/
   IF ::aIde[ "tpAmb" ] == WS_AMBIENTE_PRODUCAO
      DO CASE
      CASE cUF == "AC" ; cUrl := "www.sefaznet.ac.gov.br/nfce/consulta"
      CASE cUF == "AL" ; cUrl := "http://nfce.sefaz.al.gov.br/consultaNFCe.htm"
      CASE cUF == "AP" ; cUrl := "https://www.sefaz.ap.gov.br/sate/seg/SEGf_AcessarFuncao.jsp?cdFuncao=FIS_1261"
      CASE cUF == "AM" ; cUrl := "sistemas.sefaz.am.gov.br/nfceweb/formConsulta.do"
      CASE cUF == "BA" ; cUrl := "nfe.sefaz.ba.gov.br/servicos/nfce/default.aspx"
      CASE cUF == "CE" ; cUrl := ""
      CASE cUF == "DF" ; cUrl := "http://dec.fazenda.df.gov.br/NFCE/"
      CASE cUF == "ES" ; cUrl := "http://app.sefaz.es.gov.br/ConsultaNFCe"
      CASE cUF == "GO" ; cUrl := ""
      CASE cUF == "MA" ; cUrl := "http://www.nfce.sefaz.ma.gov.br/portal/consultaNFe.do?method=preFilterCupom&"
      CASE cUF == "MT" ; cUrl := "http://www.sefaz.mt.gov.br/nfce/consultanfce"
      CASE cUF == "MS" ; cUrl := "http://www.dfe.ms.gov.br/nfce"
      CASE cUF == "MG" ; cUrl := ""
      CASE cUF == "PA" ; cUrl := "https://appnfc.sefa.pa.gov.br/portal/view/consultas/nfce/consultanfce.seam"
      CASE cUF == "PB" ; cUrl := "www.receita.pb.gov.br/nfce"
      CASE cUF == "PR" ; cUrl := "http://www.fazenda.pr.gov.br"
      CASE cUF == "PE" ; cUrl := ""
      CASE cUF == "PI" ; cUrl := "http://webas.sefaz.pi.gov.br/nfceweb/consultarNFCe.jsf"
      CASE cUF == "RJ" ; cUrl := "www.nfce.fazenda.rj.gov.br/consulta"
      CASE cUF == "RN" ; cUrl := "http://nfce.set.rn.gov.br/consultarNFCe.aspx"
      CASE cUF == "RS" ; cUrl := "https://www.sefaz.rs.gov.br/NFCE/NFCE-COM.aspx"
      CASE cUF == "RO" ; cUrl := "http://www.nfce.sefin.ro.gov.br"
      CASE cUF == "RR" ; cUrl := "https://www.sefaz.rr.gov.br/nfce/servlet/wp_consulta_nfce"
      CASE cUF == "SC" ; cUrl := ""
      CASE cUF == "SP" ; cUrl := "https://www.nfce.fazenda.sp.gov.br/NFCeConsultaPublica/Paginas/ConsultaPublica.aspx"
      CASE cUF == "SE" ; cUrl := "http://www.nfce.se.gov.br/portal/portalNoticias.jsp"
      CASE cUF == "TO" ; cUrl := ""
      OTHERWISE
          cUrl := ""
      ENDCASE
   ELSE
      DO CASE
      CASE cUF == "AC" ; cUrl := "http://hml.sefaznet.ac.gov.br/nfce/consulta"
      CASE cUF == "AL" ; cUrl := "http://nfce.sefaz.al.gov.br/consultaNFCe.htm"
      CASE cUF == "AP" ; cUrl := "https://www.sefaz.ap.gov.br/sate1/seg/SEGf_AcessarFuncao.jsp?cdFuncao=FIS_1261"
      CASE cUF == "AM" ; cUrl := "homnfce.sefaz.am.gov.br/nfceweb/formConsulta.do"
      CASE cUF == "BA" ; cUrl := "http://hnfe.sefaz.ba.gov.br/servicos/nfce/default.aspx"
      CASE cUF == "CE" ; cUrl := "http://nfceh.sefaz.ce.gov.br/pages/consultaNota.jsf"
      CASE cUF == "DF" ; cUrl := "http://dec.fazenda.df.gov.br/NFCE/"
      CASE cUF == "ES" ; cUrl := "http://homologacao.sefaz.es.gov.br/ConsultaNFCe"
      CASE cUF == "GO" ; cUrl := ""
      CASE cUF == "MA" ; cUrl := "http://www.hom.nfce.sefaz.ma.gov.br/portal/consultarNFCe.jsp"
      CASE cUF == "MT" ; cUrl := "http://homologacao.sefaz.mt.gov.br/nfce/consultanfce"
      CASE cUF == "MS" ; cUrl := "http://www.dfe.ms.gov.br/nfce"
      CASE cUF == "MG" ; cUrl := ""
      CASE cUF == "PA" ; cUrl := "https://appnfc.sefa.pa.gov.br/portal-homologacao/view/consultas/nfce/consultanfce.seam"
      CASE cUF == "PB" ; cUrl := ""
      CASE cUF == "PR" ; cUrl := "http://www.fazenda.pr.gov.br"
      CASE cUF == "PE" ; cUrl := ""
      CASE cUF == "PI" ; cUrl := "http://webas.sefaz.pi.gov.br/nfceweb-homologacao/consultarNFCe.jsf"
      CASE cUF == "RJ" ; cUrl := "www.nfce.fazenda.rj.gov.br/consulta"
      CASE cUF == "RN" ; cUrl := "http://nfce.set.rn.gov.br/consultarNFCe.aspx"
      CASE cUF == "RS" ; cUrl := "https://www.sefaz.rs.gov.br/NFCE/NFCE-COM.aspx"
      CASE cUF == "RO" ; cUrl := "http://www.nfce.sefin.ro.gov.br"
      CASE cUF == "RR" ; cUrl := "http://200.174.88.103:8080/nfce/servlet/wp_consulta_nfce"
      CASE cUF == "SC" ; cUrl := ""
      CASE cUF == "SP" ; cUrl := "https://www.homologacao.nfce.fazenda.sp.gov.br/NFCeConsultaPublica/Paginas/ConsultaPublica.aspx"
      CASE cUF == "SE" ; cUrl := "http://www.hom.nfe.se.gov.br/portal/portalNoticias.jsp"
      CASE cUF == "TO" ; cUrl := ""
      OTHERWISE
          cUrl := ""
      ENDCASE
   ENDIF

gilbertosilverio
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 332
Data de registro: 18 Jan 2009 09:39
Cidade/Estado: Ribeirao Pires - SP
Curtiu: 1 vez
Mens.Curtidas: 23 vezes

Classe e função pra carregar XML

Mensagempor JoséQuintas » 06 Jul 2017 21:13

Sim... não.... talvez... melhor o porque:

Se tem todas as UFs, e nenhuma serviu... ou está faltando UF, ou chegou uma UF errada até aí.
Pode ser interessante verificar quando acontecer erro, já que seria uma "nova" UF.

Será que não chega o código da UF ao invés da UF?
Tem função de converter, UfCodigo() e UFSigla() se não me engano.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Classe e função pra carregar XML

Mensagempor JoséQuintas » 06 Jul 2017 21:22

Estou estudando teu exemplo, de como criar classes, para tentar criar uma rotina, e esta ocorrendo o erro apos a emissao da NFe.


De um modo geral, classe é como se fosse um fonte usando variáveis PUBLIC/PRIVATE que valem pro fonte inteiro.
METHOD é igual função.

Argument error, LEN
Significa que foi usar a função Len() em algum conteúdo que não permite Len()
Nessa linha vai dar pra ver a variável.

Estou vendo que isso tem a ver com a parte que está sendo adicionada da NFCE.
Acrescentei na classe, mas não percebi que não está finalizada.

Dá pra perceber pelo nome do que deu erro: NFCE
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Anterior Próximo



Retornar para Projeto hbNFe

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 3 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro