Clipper On Line • Ver Tópico - Lotes no XML baixado pelo impnfe.exe

Lotes no XML baixado pelo impnfe.exe

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

Lotes no XML baixado pelo impnfe.exe

Mensagempor Ariston Santos » 04 Ago 2018 14:34

Olá. Eu estou usando o Impnfe.exe para baixar os XMLs e sou muito grato ao Rubens, que o disponibilizou.
Só quero relatar um erro que encontrei: a NF-e 35180573856593000409550030000493221182770442 contém 3 lotes, mas no XML baixado pelo IMPNFE só vem 1.
Poderia corrigir e postar a atualização?
Obrigado.

Ps: Estou postando também em novo POST por se tratar de novo assunto
Imagem
Avatar de usuário

Ariston Santos
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 8
Data de registro: 03 Ago 2018 20:26
Cidade/Estado: Macapá-AP
Curtiu: 2 vezes
Mens.Curtidas: 0 vez

Lotes no XML baixado pelo impnfe.exe

Mensagempor rubens » 04 Ago 2018 16:51

Boa tarde...

Ariston, na realidade os créditos são do Daniel e do Toledo... eu só fiz uma pequena modificação...

Acho que você tá se referindo a mudanças no layout da nfe 4.00, né... ?
Vamos aguardar o Daniel fazer as alterações e a gente compila de novo...

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

Lotes no XML baixado pelo impnfe.exe

Mensagempor Ariston Santos » 04 Ago 2018 17:16

Agradeço por responder.
Se quiser, e puder disponibilizar o código fonte, eu mesmo posso fazer a adequação e postar o código atualizado.
O que acha?
Imagem
Avatar de usuário

Ariston Santos
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 8
Data de registro: 03 Ago 2018 20:26
Cidade/Estado: Macapá-AP
Curtiu: 2 vezes
Mens.Curtidas: 0 vez

Lotes no XML baixado pelo impnfe.exe

Mensagempor Jairo Maia » 05 Ago 2018 02:01

Olá Ariston Santos,

A última versão com os códigos fontes disponibilizadas pelo Daniel está aqui: viewtopic.php?p=123929#p123929
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

Lotes no XML baixado pelo impnfe.exe

Mensagempor Ariston Santos » 05 Ago 2018 11:20

Olá.
O código fonte realmente está lá. O problema é que trabalhar em código de terceiros é como chegar numa cidade sem conhecer nada. Só vai com ajuda de GPS mesmo (kkk).

Notei que os lotes são tratados nestes trechos:

         AADD(aMedicamentos, {{"","Lote",'Nro. do Lote', 0},; //1-
                              {"","qLote",'Quantidade de produtos no lote', 0},; //2-
                              {"","dFab",'Data de fabricaçã', 0},; //3-
                              {"","dVal",'Data de validade', 0},;  //4-
                              {"","vPMC",'Preço Máximo Consumido', 0},; //5-
                              {"","infAdProd",'Descrição', 0}}) //6-

      //Tags Medicamentos
      nIni := At( '<legend>Detalhamento específico dos medicamentos</legend>', cPar_ )
      IF nIni > 0
         cPar1_ := SubStr( cPar_, nIni )
         FOR i := 1 TO Len( aMedicamentos[ p_ ] )
            nIni := At( aMedicamentos[ p_, i, 3 ], cPar1_ )
            IF nIni > 0
               c_span := SubStr( cPar1_, nIni )
               nIni   := At( '<span>', c_span ) + 6
               nTamTag := At( '</span>', c_span ) - nIni
               c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
               IF aMedicamentos[ p_, i, 4 ] != 0
                  IF aMedicamentos[ p_, i, 4 ] > 0
                     c_tag := Left( c_tag, aMedicamentos[ p_, i, 4 ] )
                  ELSE
                     c_tag := AllTrim( SubStr( c_tag, Abs( aMedicamentos[ p_, i, 4 ] ) + 1 ) )
                     c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
                  ENDIF
               ENDIF
               IF i != 6
                  c_tag := StrTran( c_tag, ".",  "" )
                  c_tag := StrTran( c_tag, ",", "." )
               ENDIF
               IF StrZero( i, 2 ) $ "-03-04"
                  c_tag := SubStr( c_tag, 7, 4 ) + "-" + SubStr( c_tag, 4, 2 ) + "-" + Left( c_tag, 2 )
               ENDIF
               aMedicamentos[ p_, i, 1 ] := c_tag
            ENDIF
         NEXT i
      ENDIF

        lpoemTag:= .F.
        For i:= 1 To Len(aMedicamentos[p_])
          If i == 1
            If ! Empty(aMedicamentos[p_,i,1])
                 cXML+= '<med><nLote>' + aMedicamentos[p_,i,1] + '</nLote>'
                 lpoemTag:=.T.
            EndIf
          Else
            If ! Empty(aMedicamentos[p_,i,1])
               If i == 6
                   cDiscAdicional:= '<'+aMedicamentos[p_,i,2]+'>'+ aMedicamentos[p_,i,1] + '</'+aMedicamentos[p_,i,2]+'>'
               Else
                   cXML+='<'+aMedicamentos[p_,i,2]+'>'+ aMedicamentos[p_,i,1] + '</'+aMedicamentos[p_,i,2]+'>'
               EndIf
            EndIf
          EndIf
        Next
        If lpoemTag
          cXML+='</med>'
        EndIf

O página que baixei, para gerar o XML, mostra 3 lotes, que podem ser vistos neste trecho:
<legend>Detalhamento específico dos medicamentos</legend><div><h5 class="toggle">Medicamento 1</h5><table class="toggable box"><tr class="col-3"><td><label>Código de Produto da ANVISA</label><span></span></td><td><label>Nro. do Lote</label><span>18E73B</span></td><td><label>Quantidade de produtos no lote</label><span>11,000</span></td></tr><tr class="col-3"><td><label>Data de fabricação</label><span>12/04/2018</span></td><td><label>Data de validade</label><span>12/04/2020</span></td><td><label>Preço Máximo Consumidor</label><span>0,00</span></td></tr></table></div><div><h5 class="toggle">Medicamento 2</h5><table class="toggable box"><tr class="col-3"><td><label>Código de Produto da ANVISA</label><span></span></td><td><label>Nro. do Lote</label><span>18E37E</span></td><td><label>Quantidade de produtos no lote</label><span>2.171,000</span></td></tr><tr class="col-3"><td><label>Data de fabricação</label><span>17/05/2018</span></td><td><label>Data de validade</label><span>17/05/2020</span></td><td><label>Preço Máximo Consumidor</label><span>0,00</span></td></tr></table></div><div><h5 class="toggle">Medicamento 3</h5><table class="toggable box"><tr class="col-3"><td><label>Código de Produto da ANVISA</label><span></span></td><td><label>Nro. do Lote</label><span>18E38E</span></td><td><label>Quantidade de produtos no lote</label><span>2.168,000</span></td></tr><tr class="col-3"><td><label>Data de fabricação</label><span>17/05/2018</span></td><td><label>Data de validade</label><span>17/05/2020</span></td><td><label>Preço Máximo Consumidor</label><span>0,00</span></td></tr></table></div></fieldset><fieldset><legend class="titulo-aba-interna">Informações adicionais do produto</legend><table class="box"><tr><td><label>Descrição</label><span>CI 0 % - FCI B4F5AD6E-6FA8-4583-87B4-463D99BE53F5|Lt. 18E73B Val. 12.04.2020 Qt. 11,000|Lt. 18E37E Val. 17.05.2020 Qt. 2171,000|Lt. 18E38E Val. 17.05.2020 Qt. 2168,000</span></td></tr></table>

Como faço para fazer com que todos os lotes sejam inseridos em aMedicamentos, não apenas 1?
:)Pos
Imagem
Avatar de usuário

Ariston Santos
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 8
Data de registro: 03 Ago 2018 20:26
Cidade/Estado: Macapá-AP
Curtiu: 2 vezes
Mens.Curtidas: 0 vez

Lotes no XML baixado pelo impnfe.exe (Resolvido)

Mensagempor Ariston Santos » 05 Ago 2018 15:33

Olá, senhores.
Consegui fazendo um pequeno ajuste técnico (kkk) em dois trechos do código, mas preciso da revisão dos universitários.
Segue:
      nIni := At( '<legend>Detalhamento específico dos medicamentos</legend>', cPar_ )
      IF nIni > 0
         cPar1_ := SubStr( cPar_, nIni )
         FOR i := 1 TO Len( aMedicamentos[ p_ ] )
            nIni := At( aMedicamentos[ p_, i, 3 ], cPar1_ )
            IF nIni > 0
               c_span := SubStr( cPar1_, nIni )
               nIni   := At( '<span>', c_span ) + 6
               nTamTag := At( '</span>', c_span ) - nIni
               c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
               IF aMedicamentos[ p_, i, 4 ] != 0
                  IF aMedicamentos[ p_, i, 4 ] > 0
                     c_tag := Left( c_tag, aMedicamentos[ p_, i, 4 ] )
                  ELSE
                     c_tag := AllTrim( SubStr( c_tag, Abs( aMedicamentos[ p_, i, 4 ] ) + 1 ) )
                     c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
                  ENDIF
               ENDIF
               IF i != 6
                  c_tag := StrTran( c_tag, ".",  "" )
                  c_tag := StrTran( c_tag, ",", "." )
               ENDIF
               IF StrZero( i, 2 ) $ "-03-04"
                  c_tag := SubStr( c_tag, 7, 4 ) + "-" + SubStr( c_tag, 4, 2 ) + "-" + Left( c_tag, 2 )
               ENDIF
              *aMedicamentos[ p_, i, 1 ] := c_tag
               aMedicamentos[ p_, i, 1 ] := cPar1_ // Gambiarra por Ariston Santos (kkk)
            ENDIF
         NEXT i
      ENDIF

      **** Início - Modificações por Ariston Santos ****
      * Lotes
        IF Len(aMedicamentos[p_]) > 0
          cPar1_ := aMedicamentos[p_, 1, 1]
          If ! Empty(cPar1_)
             nMed := 1
             WHILE .T.
                cMed1 := "Medicamento "+ALLTRIM(STR(nMed))
                cMed2 := "Medicamento "+ALLTRIM(STR(nMed+1))
                nPos1 := At(cMed1, cPar1_)
                 nPos2 := At(cMed2, cPar1_) - LEN(cMed2)
                 if nPos2 > 0
                    cTex1 := SubStr(cPar1_, nPos1, nPos2)
                else
                    cTex1 := SubStr(cPar1_, nPos1)
                endif
                If !(cMed1 $ cTex1) .or. nPos2 = 0
                   Exit
                Endif
               FOR i := 1 TO Len( aMedicamentos[ p_ ] )
                  nIni := At( aMedicamentos[ p_, i, 3 ], cPar1_ )
                  IF nIni > 0
                     c_span := SubStr( cPar1_, nIni )
                     nIni   := At( '<span>', c_span ) + 6
                     nTamTag := At( '</span>', c_span ) - nIni
                     c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
                     IF aMedicamentos[ p_, i, 4 ] != 0
                        IF aMedicamentos[ p_, i, 4 ] > 0
                           c_tag := Left( c_tag, aMedicamentos[ p_, i, 4 ] )
                        ELSE
                           c_tag := AllTrim( SubStr( c_tag, Abs( aMedicamentos[ p_, i, 4 ] ) + 1 ) )
                           c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
                        ENDIF
                     ENDIF
                     IF i != 6
                        c_tag := StrTran( c_tag, ".",  "" )
                        c_tag := StrTran( c_tag, ",", "." )
                     ENDIF
                     IF StrZero( i, 2 ) $ "-03-04"
                        c_tag := SubStr( c_tag, 7, 4 ) + "-" + SubStr( c_tag, 4, 2 ) + "-" + Left( c_tag, 2 )
                     ENDIF
                     aMedicamentos[ p_, i, 1 ] := c_tag
                  ENDIF
               NEXT i
                   lpoemTag:= .F.
                 For i:= 1 To Len(aMedicamentos[p_])
                   If i == 1
                     If ! Empty(aMedicamentos[p_,i,1])
                          cXML+= '<med><nLote>' + aMedicamentos[p_,i,1] + '</nLote>'
                          lpoemTag:=.T.
                     EndIf
                   Else
                     If ! Empty(aMedicamentos[p_,i,1])
                        If i == 6
                            cDiscAdicional:= '<'+aMedicamentos[p_,i,2]+'>'+ aMedicamentos[p_,i,1] + '</'+aMedicamentos[p_,i,2]+'>'
                        Else
                            cXML+='<'+aMedicamentos[p_,i,2]+'>'+ aMedicamentos[p_,i,1] + '</'+aMedicamentos[p_,i,2]+'>'
                        EndIf
                     EndIf
                   EndIf
                 Next
                 If lpoemTag
                   cXML+='</med>'
                 EndIf

                cPar1_ := SubStr(cPar1_, nPos2)
                aMedicamentos[ p_, 1, 1 ] := cPar1_
                nMed ++
                MsgInfo(cTex1)
             END
          EndIf
      ENDIF
      **** Final - Modificações por Ariston Santos ****
Avatar de usuário

Ariston Santos
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 8
Data de registro: 03 Ago 2018 20:26
Cidade/Estado: Macapá-AP
Curtiu: 2 vezes
Mens.Curtidas: 0 vez




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Google [Bot], Google Adsense [Bot] e 14 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