segunda-feira, 8 de dezembro de 2014

Ler xml Nfe

Ler xml Nfe


1. CRIAR UMA WINDOW VAZIA

2. Crie uma Variavel Chamada Loc:NomeXml

3. Coloque para digitar essa variavel e agora, coloque um botao para importar xml

4. para facilitar coloque no lado do nome, DosFileLookup para buscar o arquivo xml
   ou digite manualmente
  
5. comandos dentro do botao importa xml

   Abrir o arquivo na memoria
   ==========================
  
   x#=xml:loadfromfile(Loc:NomeXml_SERVICO,false)  ! Esse comando le o arquivo selecionado
   if x#=0  ! caso de 0 é porque ele achou o arquivo
       message('agora vamos comecar a ler os campos do xml')
    ELSE
        message('nao Existe Xml')
   END

6.
   CRIAR UMA VARIAVEL CHAMADA
       LOC:RETORNO         CSTRING(@S80)
      
   x#=xml:loadfromfile(Loc:NomeXml_SERVICO,false)  ! Esse comando le o arquivo selecionado
   if x#=0  ! caso de 0 é porque ele achou o arquivo
        xml:gototop() ! inicio xml
        if not xml:FindNextNode('ide')  ! procura tag ide
            if not xml:FindNextNode('cUF') ! procura tag cUF
                    if ~xml:readCurrentData(loc:retorno) ! achou
                        message(loc:retorno)  !  esse é o campo cUf é so colocar onde voce quizer
                        ...
        ! esses campos irao pegar os campos normais
    ELSE
        message('nao Existe Xml')
    END




 
   
      43
      00001988
      5101 Venda de producao do estabelecimento 07 pis
   
   
7. pegar campos dos produtos

   
     
        REFNum1
       
        TERMOSTATO
        39199000
        5101
        UN
        10.0000
        10.00000000
        100.00
       
        UN
        10.0000
        10.00000000
        1
     

     
   
    Dentro do Local Data
       Oher Declarations
          Criar a variavel queue para ler os produtos
         
Recs    LONG

Nota_nfe_Queue  QUEUE,PRE(nfeq)  ! esse é a queue com os itens do produtos, conforme as tags
nItem     string(3)
cProd     STRING(20)
xProd     string(50)
CFOP      string(20)
uCom      string(20)
qCom      string(20)
vUnCom    string(20)
vProd     string(20)
uTrib     string(20)
qTrib     string(20)
vUnTrib   string(20)
NCM       string(20)
orig      string(10),dim(20)
CST       string(10),dim(20)
modBC     string(10),dim(20)
vBC       string(10),dim(20)  ! 1=ICM 2=IPI
pICMS     string(10),dim(20)
vICMS     string(10),dim(20)
pIPI      string(10),dim(20)
vIPI      string(10),dim(20)
pRedBC    string(10),dim(20)
vBCST     string(10),dim(20)
pICMSST   string(10),dim(20)
vICMSST   string(10),dim(20)
           END

loc:importa_nfe      cstring(255)

   Dentro do programa abaixo do xml que ja esta baixando acrescente o seguinte:
  
    free(Nota_nfe_Queue) ! limpa queue
    xml:gototop() ! inicio xml
    if not XML:FindNextNode('det') ! procura tag det
       recs = xml:loadqueue(Nota_nfe_Queue,true,true)  ! move para memoria
    end
    sort(Nota_nfe_Queue,+nfeq:nItem) ! classifica queue
    loop contador#=1 to records(Nota_nfe_Queue)  ! loop queue
         get(Nota_nfe_Queue,contador#)  ! ler queu
         message(nfeq:nItem) ! aqui esta cada linha, e so usar
    end
       

linha completa
       
  
   x#=xml:loadfromfile(Loc:NomeXml_SERVICO,false)  ! Esse comando le o arquivo selecionado
   if x#=0  ! caso de 0 é porque ele achou o arquivo
        xml:gototop() ! inicio xml
        if not xml:FindNextNode('ide')  ! procura tag ide
            if not xml:FindNextNode('cUF') ! procura tag cUF
                    if ~xml:readCurrentData(loc:retorno) ! achou
                        message(loc:retorno)  !  esse é o campo cUf é so colocar onde voce quizer
                        ...
        free(Nota_nfe_Queue) ! limpa queue
        xml:gototop() ! inicio xml
        if not XML:FindNextNode('det') ! procura tag det
           recs = xml:loadqueue(Nota_nfe_Queue,true,true)  ! move para memoria
        end
        sort(Nota_nfe_Queue,+nfeq:nItem) ! classifica queue
        loop contador#=1 to records(Nota_nfe_Queue)  ! loop queue
             get(Nota_nfe_Queue,contador#)  ! ler queu
             message(nfeq:nItem) ! aqui esta cada linha, e so usar
        end
     ELSE
        message('nao Existe Xml')
     END


 












Instalar IqXml -

Instalar IqXml

Se ja instalou desconsidere essa etapa.

Para instalar entre no site

http://www.paresi.net/clarion/

e baixe a versao para 6.0

sexta-feira, 1 de agosto de 2014

sexta-feira, 20 de junho de 2014

Essa rotina ira fazer com que nao quebre palavras

Essa rotina ira fazer com que nao quebre palavras

!Loc:Transfere_Obs
    !Essa rotina ira fazer com que nao quebre palavras
    !loc:Texto string 2000
    !loc:contador long
    !loc:inicial long
    !loc:final long
    !loc:transfere_obs => Grupo => com ! wobs dim[6] Tamanno 80
    loc:Texto=Loc:Transfere_Obs
    Loc:Transfere_Obs=''  
    loc:contador=0
    LOOP
        IF loc:Texto<>''
            Loc:Inicio=1;loc:Final=80;loc:contador+=1
            IF loc:contador>6
                BREAK
            ELSE          
                LOOP
                    if (SUB(loc:Texto,loc:Final,1)<>'' AND SUB(loc:Texto,loc:Final+1,1)='') OR (SUB(loc:Texto,loc:Final,1)='')
                        WObs[loc:contador]=CLIP(LEFT(sub(loc:Texto,Loc:Inicio,loc:Final)))
                        loc:Texto=sub(loc:Texto,loc:Final+1,20000)
                        BREAK
                    ELSE
                        LOC:FINAL-=1
                        IF LOC:FINAL<1 p="">                            LOC:INICIO=LOC:INICIO+loc:Final
                            WObs[loc:contador]=CLIP(LEFT(sub(loc:Texto,Loc:Inicio,loc:Final)))
                            LOC:FINAL=80
                            BREAK
                        END        
                    END
                END
            END      
        ELSE
            BREAK
        END  
    END
!Loc:Transfere_Obs