Exemplo de cálculo de impostos variáveis
User FUNCTION IMPVAR(cCalculo,nItem,aInfo)<br>Local aImpRef, aImpVal,nI <br>Local xRet := 0<br>Local aItemINFO<br>Local aImposto<br>Local cImpIncid<br>Local nE<br>Local nOrdSFC,nRegSFC,cImp,nAliq,nBase<br>Local lXFis := (cCalculo <> Nil)<br><br>xRet := 0<br>cImp := aInfo[1]<br><br>Do Case<br> //Deve reetornar a base do imposto<br> Case cCalculo == "B"<br> xRet := MafisRet(nItem,"IT_VALMERC")<br> //Verifica se existe algum imposto que incide na base de calculo,e e inclui o //valor deste na base<br> SFC->(DbSetOrder(2))<br> If (SFC->(MsSeek(xFilial("SFC")+MaFisRet(nItem,"IT_TES")+aInfo[1]))) <br> ;.And. !Empty(SFC->FC_INCIMP)<br> aImpRef := MaFisRet(nItem,"IT_DESCIV")<br> aImpVal := MaFisRet(nItem,"IT_VALIMP")<br> For nI:=1 to Len(aImpRef)<br> If !Empty(aImpRef[nI])<br> IF Trim(aImpRef[nI][1]) $ SFC->FC_INCIMP<br> xRet += aImpVal[nI]<br> Endif<br> Endif<br> Next<br> Endif<br> //Deve retornar a aliquota do imposto (esta deve ser pega do <br> //campo FB_ALIQ)<br> Case cCalculo == "A"<br> SFB->(DbSetOrder(1))<br> SFB->(MsSeek(xFilial("SFB")+aInfo[1]))<br> xRet := SFB->FB_ALIQ<br> //Deve retornar o valor do imposto<br> Case cCalculo == "V"<br> xRet := MafisRet(nItem,"IT_BASEIV"+aInfo[2]) * ;<br> (MafisRet(nItem,"IT_ALIQIV"+aInfo[2]) /100)<br>EndCase<br><br>//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ//³Os campos onde serao gravados os valoes de base, valor e aliquota ³<br>//³devem estar definidos na tabelas SFB confome a seguinte padronizacao³<br>//³??_ALQIMPx para a aliquota, onde x e o numero de Imposto variavel ³<br>//³??_BASIMPx para a base, onde x e o numero de Imposto variavel ³<br>//³??_VALIMPx para o valor, onde x e o numero de Imposto variavel ³<br>//³este rdmake so deve tratar os calculos conforme o exemplo acima. ³<br>//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ<br><br><br>RETURN xRet<br>