Capitolo 21  Ripartizione dell’IVA    

 

21.1  Il Form IVASK1  

 

Quando si prepara una Fattura è importante conoscere non solo l’importo dell’IVA totale ma anche la sua ripartizione tra le varie aliquote. Infatti ogni Articolo è caratterizzato da una aliquota IVA e quindi da un suo contributo all’IVA totale. 

 

Il calcolo della ripartizione è necessario per esempio per le operazioni di stampa in cui è necessario specificare:

-        Ogni aliquota percentuale che interessa la Fattura (=0%, 4%, 10%, 20%).

-        Il relativo importo IVA.

-        Il valore dell’imponibile relativo ad ogni aliquota.

 

Nel prossimo Capitolo entreremo in merito all’operazione di stampa vera e propria. Qui ci limiteremo ad indicare le routines di calcolo della ripartizione, i cui risultati potranno poi essere opportunamente utilizzati per stampe e sommarizzazioni varie.

 

Prepariamo allora una Cartella ESERCIZIO_18 come Sottocartella di C:\GRIGLIE_ADO, cioè la collocazione C:\GRIGLIE_ADO\ESERCIZIO_18 e prepariamo una nuova versione del “FOUSK1” copiandolo e semplificandolo a scopo didattico come segue:

 

 

 

Il bottone “CMDIVA” lancia la routine di calcolo:

 

Private Sub cmdIVA_Click()

 

calcolaiva

frmIVAsk1.Show

frmFousk1.Enabled = False

 

End Sub

 

21.2  La Routine CALCOLAIVA

 

Per calcolare la ripartizione:

 

-        si i identifica il pacchetto di voci pertinenti alla Fattura in esame, ove ciascuna voce può avere potenzialmente una aliquota IVA diversa.

-        ci  si appoggia poi ad una Tabella temporanea “IVATEMP” collocata nel Database “MIOFILE” . Ciò permette a ciascun utente di effettuare i propri calcoli senza interferire con gli altri.

 

La struttura della Tabella tiene conto delle aliquote legali:

 

        zero % (esente)

4     %

        10   %

20    %

 

 

IVATEMP         Tipo                        Dimensione  

------------------------------------------------------

IVA4              Numerico                Double    

IVA10            Numerico                Double     

IVA20            Numerico                Double     

IMPONI0        Numerico                Double     

IMPONI4        Numerico                Double     

IMPONI10       Numerico                Double    

IMPONI20       Numerico                Double    

 

La Tabella “IVATEMP” viene svuotata e poi dotata di un solo Record su cui si eseguono le operazioni.

 

Per far questo si effettua un ciclo sul pacchetto di voci in “FOVFILE”  (figlie) associate alla Fattura di cui si vuole calcolare la ripartizione e si riempiono i vari campi dell’unico Record di  “IVATEMP”  usando l’opportuno campo dell’aliquota IVA della voce.

 

Ecco la Routine:

 

Sub calcolaiva()

'apre FOVFILE
'---------------------------
Selezione = "SELECT * from FOVFILE order by FOVANNO,FOVNUM "
FOV22.Open "" & Selezione & "", Cn, adOpenStatic, adLockOptimistic
FOV22.MoveFirst
Set fov22clone = FOV22.Clone
kriterio = "FOVANNO = '" & fou11!fouanno & "' and FOVNUM = " & fou11!founum & ""
fov22clone.Filter = kriterio
FOV22.Bookmark = fov22clone.Bookmark
fov22clone.Close
Set fov22clone = Nothing

If FOV22.EOF Then
FOV22.Close
Exit Sub
End If

'svuota IVATEMP
'---------------
IVAQ1 = "delete from IVATEMP"
CnMia.Execute IVAQ1
DoEvents

'apre IVATEMP
'---------------------------
SelezVoci = "SELECT * from IVATEMP "
iva11.Open "" & SelezVoci & "", CnMia, adOpenStatic, adLockOptimistic
iva11.AddNew
iva11!iva4 = 0
iva11!iva10 = 0
iva11!iva20 = 0
iva11!imponi0 = 0
iva11!imponi4 = 0
iva11!imponi10 = 0
iva11!imponi20 = 0
ztotiva = 0

'cicla su FOVFILE
'-------------------------------------
Do While Not FOV22.EOF
If (FOV22!fovanno <> fou11!fouanno) Or (FOV22!fovnum <> fou11!founum) Then
Exit Do
End If
'---------------
Select Case FOV22!aliva
Case 0
iva11!imponi0 = iva11!imponi0 + FOV22!totnetto
Case 4
iva11!imponi4 = iva11!imponi4 + FOV22!totnetto
iva11!iva4 = iva11!iva4 + FOV22!totnetto * FOV22!aliva / 100

Case 10
iva11!imponi10 = iva11!imponi10 + FOV22!totnetto
iva11!iva10 = iva11!iva10 + FOV22!totnetto * FOV22!aliva / 100

Case 20
iva11!imponi20 = iva11!imponi20 + FOV22!totnetto
iva11!iva20 = iva11!iva20 + FOV22!totnetto * FOV22!aliva / 100

End Select
FOV22.MoveNext
Loop

'formatta
'-------------------------------------
iva11!iva4 = CLng(iva11!iva4 * 100) / 100
iva11!iva10 = CLng(iva11!iva10 * 100) / 100
iva11!iva20 = CLng(iva11!iva20 * 100) / 100
iva11!imponi0 = CLng(iva11!imponi0 * 100) / 100
iva11!imponi4 = CLng(iva11!imponi4 * 100) / 100
iva11!imponi10 = CLng(iva11!imponi10 * 100) / 100
iva11!imponi20 = CLng(iva11!imponi20 * 100) / 100

'registra
'-------------------------------------
iva11.Update
FOV22.Close
'--------------------------------------
End Sub

 

I risultati del calcolo possono essere visualizzati con il Form didattico “IVASK1”

 

 

 

di cui riportiamo la Routine “CARICACOLONNE”:

 

Sub caricacolonne()

 

For i = 0 To DBGrid1.Columns.Count - 1

DBGrid1.Columns.Remove 0

Next

 

For i = 0 To 6

DBGrid1.Columns.Add (i)

DBGrid1.Columns(i).Visible = True

Next

 

DBGrid1.Columns(0).DataField = "IVA4"

DBGrid1.Columns(0).Caption = "IVA 4%"

DBGrid1.Columns(0).Width = 1000

DBGrid1.Columns(0).NumberFormat = "### ###.00;;#"

 

DBGrid1.Columns(1).DataField = "IVA10"

DBGrid1.Columns(1).Caption = "IVA 10%"

DBGrid1.Columns(1).Width = 1000

DBGrid1.Columns(1).NumberFormat = "### ###.00;;#"

 

DBGrid1.Columns(2).DataField = "IVA20"

DBGrid1.Columns(2).Caption = "IVA 20%"

DBGrid1.Columns(2).Width = 1000

DBGrid1.Columns(2).NumberFormat = "### ###.00;;#"

 

DBGrid1.Columns(3).DataField = "IMPONI0"

DBGrid1.Columns(3).Caption = "Impon.0%"

DBGrid1.Columns(3).Width = 1200

DBGrid1.Columns(3).NumberFormat = "### ###.00;;#"

 

DBGrid1.Columns(4).DataField = "IMPONI4"

DBGrid1.Columns(4).Caption = "Impon.4%"

DBGrid1.Columns(4).Width = 1200

DBGrid1.Columns(4).NumberFormat = "### ###.00;;#"

 

DBGrid1.Columns(5).DataField = "IMPONI10"

DBGrid1.Columns(5).Caption = "Impon.10%"

DBGrid1.Columns(5).Width = 1200

DBGrid1.Columns(5).NumberFormat = "### ###.00;;#"

 

DBGrid1.Columns(6).DataField = "IMPONI20"

DBGrid1.Columns(6).Caption = "Impon.20%"

DBGrid1.Columns(6).Width = 1200

DBGrid1.Columns(6).NumberFormat = "### ###.00;;#"

 

'allineamento

'--------------------

DBGrid1.RowDividerStyle = 4

For i = 0 To 6

DBGrid1.Columns(i).DividerStyle = 4

DBGrid1.Columns(i).Alignment = 1

Next

 

End Sub

 

 

 

 

Fine del Capitolo 21. Ripartizione dell’IVA