Moderador: Moderadores
nPos := hb_ASCan( aList, { | e | ( e[ 1 ] == cUF1 .OR. e[ 1 ] == "**" ) .AND. ( e[ 2 ] == cUF2 .OR. e[ 2 ] == "**" ) } )
SELECT * FROM TABELAICMS WHERE ( ORIGEM = "SP" OR ORIGEM = "**" ) AND ( DESTINO = "SP" OR DESTINO = "**" ) LIMIT 1
LOCATE FOR ( ORIGEM = "SP" .OR. ORIGEM = "**" ) .AND. ( DESTINO = "SP" .OR. DESTINO = "**" )
<ICMS>
<ICMS00>
<orig>4</orig>
<CST>00</CST>
<modBC>3</modBC>
<vBC>1000.00</vBC>
<pICMS>7.00</pICMS>
<vICMS>70.00</vICMS>
</ICMS00>
</ICMS>
...
<ICMSUFDest>
<vBCUFDest>1000.00</vBCUFDest>
<pFCPUFDest>2.00</pFCPUFDest>
<pICMSUFDest>17.00</pICMSUFDest>
<pICMSInter>12.00</pICMSInter>
<pICMSInterPart>40.00</pICMSInterPart>
<vFCPUFDest>20.00</vFCPUFDest>
<vICMSUFDest>20.00</vICMSUFDest>
<vICMSUFRemet>30.00</vICMSUFRemet>
</ICMSUFDest>
Itamar M. Lins Jr. escreveu:Olá!
O problema agora é entender como é o calculo dos campos.<ICMS>
<ICMS00>
<orig>4</orig>
<CST>00</CST>
<modBC>3</modBC>
<vBC>1000.00</vBC>
<pICMS>7.00</pICMS>
<vICMS>70.00</vICMS>
</ICMS00>
</ICMS>
...
<ICMSUFDest>
<vBCUFDest>1000.00</vBCUFDest>
<pFCPUFDest>2.00</pFCPUFDest>
<pICMSUFDest>17.00</pICMSUFDest>
<pICMSInter>12.00</pICMSInter>
<pICMSInterPart>40.00</pICMSInterPart>
<vFCPUFDest>20.00</vFCPUFDest>
<vICMSUFDest>20.00</vICMSUFDest>
<vICMSUFRemet>30.00</vICMSUFRemet>
</ICMSUFDest>
Esse campo pICMSUFDest é a aliquota da UF no caso para achar uso nAliquotaDestino := AliquotaICMS( "BA", "ES" ) ?
Depois a tal DIFAL...
Meio complicado, e mais o imposto do FCP destino... eu heinn...
Olhei no manual e esse tal pICMSInter só pode ser 7% ou 12%
Saudações,
Itamar M. Lins Jr.
cUF UF Nome UF Aliq_1 Aliq_2 Aliq_3 . Observação
12 AC ACRE Fixo:0.00 UF não possui FCP
27 AL ALAGOAS Fixo:1.00 Fixo:2.00 UF com até 3 AlÃquotas possÃveis
16 AP AMAPA Fixo:0.00 UF não possi FCP
13 AM AMAZONAS Fixo:2.00 Fixo:1.90 UF com até 2 AlÃquotas possÃveis (2018)
29 BA BAHIA Fixo:2.00 AlÃquota única de 2.00
23 CE CEARA Fixo:0.00 UF não aplica
53 DF DISTRITO FEDERAL Fixo:2.00 AlÃquota única de 2.00
32 ES ESPIRITO SANTO Fixo:2.00 AlÃquota única de 2.00
52 GO GOIAS Max:2.00 AlÃquota máxima de 2.00 (default)
21 MA MARANHÃO Fixo:2.00 AlÃquota única de 2.00
51 MT MATO GROSSO Max:2.00 AlÃquota máxima de 2.00 (default)
50 MS MATO GROSSO DO SUL Fixo:2.00 AlÃquota única de 2.00
31 MG MINAS GERAIS Fixo:2.00 AlÃquota única de 2.00
15 PA PARA Fixo:0.00 UF não possi FCP
25 PB PARAIBA Fixo:2.00 AlÃquota única de 2.00
41 PR PARANA Fixo:2.00 AlÃquota única de 2.00
26 PE PERNAMBUCO Fixo:2.00 AlÃquota única de 2.00
22 PI PIAUI Fixo:1.00 Fixo:2.00 UF com até 3 AlÃquotas possÃveis
33 RJ RIO DE JANEIRO Max:4.00 UF com alÃquota máxima de 4.00
24 RN RIO GRANDE DO NORTE Fixo:2.00 AlÃquota única de 2.00
43 RS RIO GRANDE DO SUL Fixo:2.00 AlÃquota única de 2.00
11 RO RONDONIA Fixo:2.00 AlÃquota única de 2.00
14 RR RORAIMA Max:2.00 AlÃquota máxima de 2.00 (default)
42 SC SANTA CATARINA Fixo:0.00 UF não possi FCP
35 SP SAO PAULO Fixo:2.00 AlÃquota única de 2.00
28 SE SERGIPE Fixo:2.00 AlÃquota única de 2.00
17 TO TOCANTINS Fixo:2.00 AlÃquota única de 2.00
****************************************************************
FUNCTION AliquotaFCP( cUF )
****************************************************************
LOCAL nPos, nAliquota := 0
LOCAL aList := { ;
{ 12, "AC", 0.00, 0.00, 0.00 }, ;
{ 27, "AL", 1.00, 2.00, 0.00 }, ;
{ 16, "AP", 0.00, 0.00, 0.00 }, ;
{ 13, "AM", 2.00, 1.90, 0.00 }, ;
{ 29, "BA", 2.00, 0.00, 0.00 }, ;
{ 23, "CE", 0.00, 0.00, 0.00 }, ;
{ 53, "DF", 2.00, 0.00, 0.00 }, ;
{ 32, "ES", 2.00, 0.00, 0.00 }, ;
{ 52, "GO", 2.00, 0.00, 0.00 }, ;
{ 21, "MA", 2.00, 0.00, 0.00 }, ;
{ 16, "MT", 2.00, 0.00, 0.00 }, ;
{ 50, "MS", 2.00, 0.00, 0.00 }, ;
{ 31, "MG", 2.00, 0.00, 0.00 }, ;
{ 15, "PA", 0.00, 0.00, 0.00 }, ;
{ 25, "PB", 2.00, 0.00, 0.00 }, ;
{ 41, "PR", 2.00, 0.00, 0.00 }, ;
{ 26, "PE", 2.00, 0.00, 0.00 }, ;
{ 22, "PI", 1.00, 2.00, 0.00 }, ;
{ 33, "RJ", 4.00, 0.00, 0.00 }, ;
{ 24, "RN", 2.00, 0.00, 0.00 }, ;
{ 43, "RS", 2.00, 0.00, 0.00 }, ;
{ 11, "RO", 2.00, 0.00, 0.00 }, ;
{ 14, "RR", 2.00, 0.00, 0.00 }, ;
{ 42, "SC", 0.00, 0.00, 0.00 }, ;
{ 35, "SP", 2.00, 0.00, 0.00 }, ;
{ 28, "SE", 2.00, 0.00, 0.00 }, ;
{ 17, "TO", 2.00, 0.00, 0.00 } }
nPos := hb_ASCan( aList, { | e | e[ 2 ] == cUF } )
IF nPos != 0
nAliquota := aList[ nPos, 3 ]
ENDIF
RETURN nAliquota
Tem se for "Não contribuinte" (Igrejas/Empreiteiras)Se não for consumidor final, não tem o cálculo,
Retornar para Tabelas e Referências de Legislação
Usuários vendo este fórum: Nenhum usuário registrado online e 5 visitantes