Página 1 de 1

Lotes no XML baixado pelo impnfe.exe

Enviado: 04 Ago 2018 14:34
por Ariston Santos
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

Lotes no XML baixado pelo impnfe.exe

Enviado: 04 Ago 2018 16:51
por rubens
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

Lotes no XML baixado pelo impnfe.exe

Enviado: 04 Ago 2018 17:16
por Ariston Santos
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?

Lotes no XML baixado pelo impnfe.exe

Enviado: 05 Ago 2018 02:01
por Jairo Maia
Olá Ariston Santos,

A última versão com os códigos fontes disponibilizadas pelo Daniel está aqui: viewtopic.php?p=123929#p123929

Lotes no XML baixado pelo impnfe.exe

Enviado: 05 Ago 2018 11:20
por Ariston Santos
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:

Código: Selecionar todos

         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-

Código: Selecionar todos

      //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

Código: Selecionar todos

  		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:

Código: Selecionar todos

<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

Lotes no XML baixado pelo impnfe.exe (Resolvido)

Enviado: 05 Ago 2018 15:33
por Ariston Santos
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:

Código: Selecionar todos

      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

Código: Selecionar todos

      **** 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 ****