Moderador: Moderadores
REQUEST HB_CODEPAGE_PTISO
PROCEDURE Main
LOCAL cXml, cXmlTabela, cXmlRow, cXmlCol, cXmlColList, cCest, aNcm, cDesc, oElement, cTxt := ""
Set( _SET_CODEPAGE, "PTISO" )
CLS
cXml := MemoRead( "pagina.html" )
cTxt := [FUNCTION CestList()] + hb_Eol() + hb_Eol()
cTxt += [ LOCAL aList := {}] + hb_Eol() + hb_Eol()
FOR EACH cXmlTabela IN MultipleNodeToArray( cXml, "table" )
FOR EACH cXmlRow IN MultipleNodeToArray( cXmlTabela, "tr" )
cXmlColList := MultipleNodeToArray( cXmlRow, "td" )
IF Len( cXmlColList ) != 1 // Titulos
cCest := XmlNode( cXmlColList[ 2 ], "p" )
aNcm := hb_RegExSplit( "<br>", XmlNode( cXmlColList[ 3 ], "p" ) )
cDesc := XmlNode( cXmlColList[ 4 ], "p" )
FOR EACH oElement IN aNcm
cTxt += [ Aadd( aList, { ]
cTxt += ["] + SoNumeros( cCest ) + [", ]
cTxt += ["] + Pad( SoNumeros( oElement ), 8, "X" ) + [", ]
cTxt += ["] + AllTrim( StrTran( cDesc, ["], "" ) ) + [" } )]
cTxt += hb_Eol()
NEXT
ENDIF
NEXT
NEXT
cTxt += hb_Eol() + [ RETURN aList] + hb_Eol()
hb_MemoWrit( "teste.prg", cTxt )
RETURN
test.prg
\cvsfiles\josequintas\sefazclass\ze_xmlfunc.prg
\cvsfiles\josequintas\sefazclass\ze_miscfunc.prg
FUNCTION CestList()
LOCAL aList := {}
Aadd( aList, { "", "XXXXXXXX", "DESCRIÇÃO" } )
Aadd( aList, { "0100100", "38151210", "Catalisadores em colmeia cerâmica ou metálica para conversão catalítica de gases de escape de veículos e outros catalisadores" } )
Aadd( aList, { "0100100", "38151290", "Catalisadores em colmeia cerâmica ou metálica para conversão catalítica de gases de escape de veículos e outros catalisadores" } )
...
RETURN aList
FUNCTION CestFromNcm( cNcm )
LOCAL oCest, nCont, aList := {}
cNcm := SoNumeros( cNcm )
IF Len( cNcm ) == 8
FOR nCont = 8 TO 2 STEP -1
FOR EACH oCest IN CestList()
IF Pad( Left( cNcm, nCont ), 8, "X" ) == oCest[ 2 ]
AAdd( aList, oCest )
ENDIF
NEXT
IF Len( aList ) > 0
EXIT
ENDIF
NEXT
ENDIF
RETURN aList
#include "inkey.ch"
FUNCTION Main()
LOCAL cNcm := Space(8), GetList := {}, oElement, aList
CLS
SetMode( 30, 100 )
DO WHILE .T.
@ 2, 1 SAY "Código NCM a pesquisar:" GET cNcm PICTURE "@R 99.99.99.99"
READ
IF LastKey() == K_ESC
EXIT
ENDIF
aList := CestFromNcm( cNcm )
Scroll( 3, 0, MaxRow(), MaxCol(), 0 )
@ 3, 0 SAY ""
FOR EACH oElement IN aList
@ Row() + 1, 1 SAY oElement[ 1 ] PICTURE "@R 99.99.99.99"
@ Row(), Col() + 2 SAY oElement[ 2 ] PICTURE "@R 99.99.99.99"
@ Row(), Col() + 2 SAY Pad( oElement[ 3 ], 60 )
NEXT
ENDDO
RETURN NIL
Aadd( aList, { "0199900", " ", "Outras peças, partes e acessórios para veículos automotores não relacionados nos demais itens deste anexo" } )
Aadd( aList, { "2899900", " ", "Outros produtos comercializados pelo sistema de marketing direto porta-a-porta a consumidor final não relacionados em outros itens deste anexo" } )
C O N V Ê N I O
Cláusula primeira O inciso I da cláusula sexta do Convênio ICMS 92/15, de 25 de agosto de 2015, passa a vigorar com a seguinte redação:
“I - ao § 1º da cláusula terceira, a partir de:
a) 1º de julho de 2017, para a indústria e o importador;
b) 1º de outubro de 2017, para o atacadista;
c) 1ª de abril de 2018, para os demais segmentos econômicos;”.
Cláusula segunda O inciso II da cláusula trigésima sexta do Convênio ICMS 52/17, de 7 de abril de 2017, passa a vigorar com a seguinte redação:
“II - relativamente ao disposto no inciso I do caput da cláusula vigésima primeira, a partir de:
a) 1º de julho de 2017, para a indústria e o importador;
b) 1º de outubro de 2017, para o atacadista;
c) 1º de abril de 2018, para os demais segmentos econômicos;”.
Cláusula terceira Este convênio entra em vigor na data de sua publicação no Diário Oficial da União.
/*
Compilar Hbmk2 exemplo.prg -lxhb
*/
#include "inkey.ch"
REQUEST DBFCDX
REQUEST HB_CODEPAGE_PT850
Function Main()
Local cCodNcm, cCest
Clear Screen
hb_SetCodepage('PT850')
rddSetDefault( "DBFCDX" )
Do While .t.
cCodNcm := Space( 10 )
@ 2,2 say "Digite o código NCM com 8 dígitos:" Get cCodNcm Picture "@R 99.9999.99" Valid Len( StrTran( cCodNcm, " ", "" ) ) = 8
Read
If LastKey() = K_ESC
Exit
Else
cCodNcm := Trim( cCodNcm )
EndIf
cCest := PegaCest( cCodNcm )
If !Empty( cCest )
Hb_Alert( "Cest retornado => " + cCest, Nil, "B+/W" )
Else
Hb_Alert( "Sem Cest" )
EndIf
EndDo
Return Nil
Function PegaCest( cCodNcm ) // pesquisa, classifica e retorna o CEST pelo NCM
Local GetList:={}, aCests:={}, cCest, x, cCodNcmFix, nOpc, cMsg, nLen
If Select( "TabCEST" ) = 0
Use TabCEST Shared New
EndIf
If !File( "TabCEST.Cdx" )
Index On ( ncm ) To "TabCEST.Cdx"
Else
Set Index To "TabCEST.Cdx"
EndIf
cCodNcmFix := cCodNcm
Seek cCodNcm
If !Found()
For x=1 To 6
cCodNcm := Left( cCodNcm, 7 ) // se não achou, procura pelos subgrupos e até o grupo
cCodNcm := StrZero( Val( cCodNcm ), 8 )
Seek cCodNcm
If Found()
Exit
EndIf
Next
EndIf
If !Found()
cCest := ""
Hb_Alert( "O Ncm " + cCodNcm + " não é passível de ST.;Para esse NCM não existe CEST!", Nil, "B+/W" )
Else
aCests:={}
While ( ncm = cCodNcm )
AaDd( aCests, { cest, Trim( descricao ) } )
Skip
EndDo
nLen := Len( aCests )
If Len( aCests ) > 1
For x=1 To nLen
cMsg := "Opção => " + Hb_NToS( x ) + " de " + Hb_NToS( nLen ) + " - Código CEST => " + aCests[ x, 1 ]
cMsg += ";O Produto sendo cadastrado se enquadra nessa Descrição?:"
cMsg += ";;" + aCests[x,2] + ";"
nOpc := Hb_Alert( cMsg, { "Proximo", "Classificar", "Sair" }, "B+/W" )
If nOpc = 0 .Or. nOpc = 3
Exit
ElseIf nOpc = 2
cCest := aCests[x,1]
Hb_Alert( "Produto com NCM: " + cCodNcmFix + " Classificado com o CEST => " + aCests[x,1] + ";;" + aCests[x,2], Nil, "B+/W" )
Exit
EndIf
If ( x = nLen )
x := 0
EndIf
Next
Else
cCest := aCests[1,1]
Hb_Alert( "Produto com NCM: " + cCodNcmFix + ";Produto com Somente um CEST => " + aCests[1,1] + ";;" + aCests[1,2], Nil, "B+/W" )
EndIf
EndIf
Return ( cCest )
Retornar para Legislação Fiscal e Tributária
Usuários vendo este fórum: Nenhum usuário registrado online e 8 visitantes