IVA.TXT ======= AZIONE DATA CHI COMMENTO ======================================================================================================= creato 1996/07/19 angelo descrizione dei file usati nei programmi di liquidazione aggiornato 1996/10/22 angelo descrizione generica del funzionamento del programma di liquidazione aggiornato 1996/11/13 angelo modifiche per trasferimento ad IVA 11'96 aggiornato 1996/11/20 angelo modifiche per aggiungere codice A36 in stampa riepilogo progressivi aggiornato 1996/12/01 angelo modifiche per trasferimento IVA11. Corretto il trasferimento di piu' attivita' aggiornato 1997/10/20 angelo modifiche per implementazione progressivi (PIM) sulla 13a liquidazione aggiornato 1997/10/31 angelo modifiche per nuovo prospetto agricolo aggiornato 1997/12/01 angelo modifiche per IVA11'97 aggiornato 1997/12/05 angelo modifiche per PRORATA dal 1998 aggiornato 1999/02/10 angelo modifiche per Sospensione IVA, PLAFOND & PRORATA dal 1998 PROPOSITO ========= Il seguente file non e' niente di ufficiale e pertanto da ritenersi valido cosi com'e'. La documentazione che segue sono varie note sul funzionamento dei programmi IVA, descrizione delle tabelle utilizzate ecc. di modo che' chicchessia possa subentrare senza troppi problemi in questo sconfinato mondo di imposte sul valore aggiunto. Sarebbe cosa buona e giusta che eventuali importanti modifiche ai programmi siano qui dettagliatamente spiegate, onde evitare avere sempre un documento a portata di mano che tutti possano consultare, senza dover scorrere disperatamente 10000 linee di C++ 19 Luglio 1996 TABELLE PROGRESSIVI ------------------- Ecco qui, tanto per cominciare un elenco riassuntivo delle tabelle utilizzate dai programmi di calcolo liquidazione, visualizzazione e stampe varie. %DEL: tabella comune per memorizzare i versamenti effettuati (deleghe IVA) CODTAB = CODDITTA(Z)[0-4]+ANNO[5-8]+MESE(Z)[9-10]+TIPO[11,11] S6 = Codice tributo S7 = Codice ABI banca S8 = Codice CAB banca S9 = Codice concessione D0 = Data delega R0 = Importo versamento (esclusi interessi) R1 = Interessi da pagare R2 = Importo del versamento inclusi interessi B0 = Stampato Nota: l'ultimo carattere di CODTAB (TIPO) si riferisce al tipo di versamento: 1 = normale 2 = annuale 3 = art.74 4 = cessazione attivita' 5 = integrativa 7 = acconti IVA Il campo R2 in realta' non e' la somma di R0 + R1, poiche' R0 = ROUND(R2 - R1). Pertanto e' utile tenere l'importo lordo non arrotondato in un campo separato visto che in alcuni casi la liquidazione richiede di stampare proprio questo valore. %LIA: tabella comune per memorizzare i risultati della Liquidazione IVA Annuale CODTAB = DITTA[0-4](Z)+ANNO[5-8] S1 = Credito precedente e acquisti intracomunitari separati da ! S7 = Frequenza versamenti per anno liquidazione (M,T) S8 = Tipo acconto ("S"aldo oppure "A"cconto) R0 = Credito anno precedente R1 = Volume di affari lordo R2 = Volume di affari attivita' 1 R3 = Volume di affari attivita' 2 R4 = Acconto dicembre R5 = Credito di costo agenzie di viaggio R6 = Credito utilizzato R7 = Iva sulle vendite annotate fino al 20/12 R8 = Iva sugli acquisti annotati fino al 20/12 R9 = Rettifica R10 = Iva chiesta a rimborso R11 = Ulteriori detrazioni R12 = Pro-rata indetraibile R13 = Iva su operaz. fino al 20 dic., ma non fatturate R14 = Iva su operaz. fino al 20 dic., ma non annotate B1 = Liquidazione differita B2 = Regime agricoltore minimo LAM: tabella di ditta per memorizzare i risultati Liquidazione Attivita' Mensile CODTAB = ANNO[0-3]+MESE(Z)[4-5] R0 = Totale IVA vendite in regime IVA su tutte le attivita' R1 = Totale IVA acquisti in regime IVA su tutte le attivita' R2 = Credito precedente o inizio anno R3 = Debito precedente da liquidazione a debito < 50.000 LIM: tabella di ditta per memorizzare i risultati della Liquidazione Iva Mensile CODTAB = ANNO[0-3]+MESE(Z)[4-5] S0 = Descrizione rettifica (1) S1 = Descrizione rettifica (2) S4 = Codice ABI presso cui e' effettuato il versamento S5 = Codice CAB presso cui e' effettuato il versamento S6 = Codice concessione a cui e' intestato il versamento S7 = D = rettifica a debito; C = rettifica a credito R0 = Risultato mese ( < 0 = credito): comprende tutto R1 = Rimborso richiesto (immesso da visualizzazione) R2 = Credito di costo agenzie di viaggio R3 = Debito mensile agenzie di viaggio R4 = Percentuale di ripartizione agenzie di viaggio R5 = Importo rettifica ( < 0 = a credito) R6 = Totale ulteriori detrazioni R7 = Totale conguaglio prorata (solo in annuale) R8 = Totale versamenti effettuati R9 = Totale versamenti integrativi effettuati R10 = Tasso di interesse applicato R11 = Acconto versato a dicembre (solo per dicembre!) R12 = Risultato totale a credito (segno +) R13 = Risultato totale a debito R14 = Interesse versato D0 = Data versamento B0 = Mese calcolato (invalidato da primanota) B1 = Stampato su registro bollato B2 = Diritto al rimborso infraannuale per il mese PIM: Tabella di ditta per memorizzare i progressivi IVA CODTAB = ANNO[0-3]+ATT(Z)[4-8]+TIPATT[9,9]+REG[10,12]+MESE(Z)[13,14]+ TIPOCR[15,15]+CODIVA[16,19]+TIPODET[20,20] S0 = Imponibile/IVA importi relativi art40 c.5/6/8 a.i.(separati da "!") S1 = Imponibile/IVA fatture in ritardo (separati da "!") S2 = Imponibile/IVA corrispettivi registrati al netto dell'IVA (separati da "!") S4 = Codice IVA a cui ventilare (corrispettivi) S5 = Tipo IVA (da tabella IVA) I0 = Tipo importi (1 = netto, 2 = lordo) I1 = Tipo movimento (1 = vendita, 2 = acquisto) R0 = Imponibile totale R1 = IVA totale R2 = Lordo corrispettivi R5 = Imponibile fatture con scontrino (<= R0) R6 = IVA fatture con scontrino (<= R1) R7 = Imponibile autofatture non resid. art. 17 (<= R0) R8 = IVA autofatture non resid. art. 17 (<= R1) R9 = Imponibile bolle doganali relative (compreso in R0) R10 = IVA bolle doganali relative (compreso in R1) R11 = Totale imponibile fatture sospensione imposta (indipendente da R0) R12 = Totale IVA fatture sospensione imposta (indipendente da R1) R13 = Totale imponibili falsi corrispettivi (reg corr ma doc come FS) R14 = Totale IVA falsi corrispettivi (reg corr ma doc come FS) B1 = Codice IVA corrispettivi da ventilare B2 = Valido per calcolo volume di affari B3 = Validi per calcolo rimb. infraanuuale B4 = Riporta il flag RicAcq dei parametri ditta Dove: ANNO e' l'anno di riferimento ATT e' il codice attivita'(zerofilled) TIPOATT e' il tipo di attivita' (1 default, 2 se ci sono anche altre attivita') REG e' il registro (ACQ, VEN, COR) MESE e' il mese di riferimento TIPOCR e' il tipo di costo/ricavo (0,1,2,3,4,5,6,7,8,9: vedi piano dei conti) CODIVA e' il codice IVA relativo TIPODET e' il tipo di detrazione (" " = regime normale, "1" = IVA ind. su acquisti riferiti a ricavi esenti, "3" = IVA indicata per passaggi interni al solo fine di calcolo ventilazione, "9" IVA non detrabile per articolo 19) PUM: Tabella di ditta per memorizzare i progressivi IVA CODTAB = ANNO[0-3]+CODATT[4,8]+TIPOATT[9,9]+MESE[10,11] R0 = Totale cessioni beni ammortizzabili R1 = Totale IVA su cessioni ammortizzabili R2 = Tot. acquisti ammortizzabili detraz. 6% R3 = IVA su beni ammortizz. detr. 6% R4 = Totale vendite esenti IVA riga B1 (C1) R5 = Totale vendite esenti IVA riga B2 (C2) R6 = Totale vendite esenti IVA riga B3 (C3) R7 = Totale acquisti esenti IVA riga B14 R8 = Totale imponibile passaggi interni R9 = Totale IVA passaggi interni R10 = Totale imponibile reg. agricolo tipo 1 R11 = Totale imponibile reg. agricolo tipo 2 R12 = Totale imponibile vendite esenti IVA R13 = Totale vendite esenti iva riga B4 (C1A) PAM: Tabella di ditta per memorizzare i progressivi IVA CODTAB = ANNO[0-3]+CODATT[4,8]+TIPOATT[9,9]+MESE(Z)[10,11] R0 = Totale acquisti in regime IVA R1 = Totale vendite in regime IVA (Vol Aff. Lordo Mensile) R2 = Totale lordo acquisti beni per rivendita da inizio anno R3 = Totale corrispettivi da ventilare R4 = Totale imponibile bolle doganali (acquisti) R5 = Totale IVA bolle doganali (acquisti) R6 = Totale imponibile acquisti in sosp. imposta R7 = Totale IVA acquisti in sosp. imposta R8 = Totale imponibile vendite in sosp. imposta R9 = Totale IVA vendite in sosp. imposta R10 = Totale imponibile spese generali R11 = Totale IVA spese generali R12 = Totale Imponibile acquisti a esig. diff da detrarre R13 = Totale IVA acquisti a esig. differita da detrarre R14 = Totale Imponibile vendita a esig. differita da pagare R15 = Totale IVA vendita a esig. differita da pagare POM: Tabella di ditta per memorizzare i progressivi IVA CODTAB = ANNO[0-3]+CODATT[4,8]+TIPOATT[9,9]+MESE[10,11] R0 = Totale IVA acquisti intracomunitari (flag INTRA su rmoviva) R1 = Totale imponibile acquisti non detraibili art. 19 R2 = Totale IVA acquisti non detraibili art. 19 R3 = Totale imponibile acquisti beni ammortizzabili detraibili R4 = Totale IVA acquisti beni ammortizzabili detraibili R5 = Totale imponibile acquisti beni per rivendita (non sono tutti base per ventilazione) R6 = Totale IVA acquisti beni per rivendita R7 = Totale imponibile beni acquisiti in leasing R8 = Totale IVA beni acquisiti in leasing R9 = Totale imponibile acquisti indetraibili su ricavi esenti R10 = Totale IVA acquisti indetraibili su ricavi esenti R11 = Totale imponibile acq. beni ammortizz. non detraibili R12 = Totale IVA acq. beni ammortizz. non detraibili R13 = IVA a debito agenzie viaggio PLM: Tabella di ditta per memorizzare i Progressivi Liquidazione Mensili CODTAB = ANNO[0-3]+CODATT[4,8]+TIPOATT[9,9]+MESE[10,11] R0 = IVA vendite R1 = IVA acquisti R2 = Pro-rata indetraibile totale (acq. rif. anno attuale + acq. rif. anni precedenti) R3 = Ulteriori detrazioni (6%) R4 = % pro-rata anno precedente R5 = se AG.VIAGGIO: Corrispettivi CEE; se AGRICOLO: tipo agr. == 1 R6 = se AG.VIAGGIO: Corrispettivi extra CEE; se AGRICOLO: tipo agr. == 2 R7 = se AG.VIAGGIO: Acquisti CEE; se AGRICOLO: tipo agr. == 3 R8 = se AG.VIAGGIO: Acquisti fuori CEE; se AGRICOLO: tipo agr. == 4 R9 = se AG.VIAGGIO: Corrispettivi misti CEE; se AGRICOLO: tipo agr. == 5 R10 = se AG.VIAGGIO: Acquisti misti CEE; se AGRICOLO: tipo agr. == 6 R11 = se AG.VIAGGIO: Acquisti misti fuori CEE; R12 = % pro-rata corrente R13 = se AGRICOLO: totale iva in detrazione Ia parte tabella A R14 = Pro-rata indetraibile acq. rif. doc. 2 anni precedenti (ma con % prorata anno addietro) R15 = Pro-rata indetraibile acq. rif. doc. 3 anni precedenti (ma con % prorata 2 anni addietro) R16 = % pro-rata 2 anni addietro B0 = Attivita' calcolata B1 = TRUE se vi sono documenti con riferimento anno prec. ma manca la tabella (solo dal 1998) PPA: Tabella di ditta per memorizzare i Progressivi Plafond Attivita mensili CODTAB = ANNO[0-3]+CODATT(Z)[4-8]+TIPOATT[9,9](sempre = 1)+MESE(Z)[10,11]TIPOESENZIONE[12,12] R0 = Totale acquisti Italia R1 = Totale acquisti estero (bolle doganali) R2 = Rimanenza plafond mese precedente (non conteggia il mese in corso) %PLA: Tabella comune per memorizzare i dati annuali per i PLAfond CODTAB = DITTA[0-4]+ANNO[5-8]+CODATT(Z)[9-13]+TIPOATT(sempre = 1)[14,14] S1 = (real)Volume di affari attivita' 2 S2 = (Non utilizzati) S3 = (Non utilizzati) S3 = (Non utilizzati) S7 = Tipo attivita' ("S"ervizio, "M", "E") R0 = Totale vendite in regime IVA (valido per calcolo prorata) R1 = Totale acquisti esenti riga B1 (C1) R2 = Totale acquisti esenti riga B2 (C2) R3 = Totale acquisti esenti riga B3 (C3) R4 = Totale cessioni beni ammortizzabili R5 = Ammontare iniziale plafond art. 8 R6 = Ammontare iniziale plafond art. bis R7 = Ammontare iniziale plafond art. 9 R8 = % pro-rata R9 = conguaglio pro-rata R10 = % pro-rata ricalcolato (vale per l'anno successivo) R11 = Totale IVA acquisti attivita' (senza pro-rata pagato nell'anno) R12 = Totale pro-rata pagato nell'anno R13 = Totale lordo vendite attivita' R14 = Volume affari attivita' 1 R15 = Totale acquisti esenti riga B4 (C1A) %IVA: Tabella comune per memorizzare i dati relativi ai codici iva CODTAB = Codice S0 = Descrizione S1 = Tipo codice ("" = Regime normale, "VE" = ricavi da ventilare, "ES" = operazioni esenti" "NI" = operazioni non imponibili, "NS" = Non soggetti S3 = Tipo di gestione plafond ("" = gestione normale, "1" Op. art. 8, "2" op. art. 8bis, "3" op. art. 9) S4 = Tipo di gestione regime agricolo ("" = regime normale, "1" vendite regime agr., "2" = vendite accessorie/acquisti non agr., "3" = acquisti ad uso promiscuo) S5 = Tipo di gestione per ag. viaggio ("" = regime normale, "1" = op. interno CEE, "2" = op. fuori CEE, "3" = vendite miste CEE, "4" = acquisti misti parte CEE, "5" acquisti misti parte fuori CEE) S6 = Codice IVA a cui ventilare S7 = Numero della colonna allegato clienti ("" = non in allegato, "1" = imponibili, "3" = non imponibili) S8 = Numero della colonna allegato fornitori ("" = non in allegato "1" = imponibili, "3" = senza app. imp., "4" = Non imponibili) R0 = Aliquota I0 = Percentuale IVA teorica S2 = N.ro di riga vendite IVA11 per op. esenti e non imponibili "" Nessuno "20" Operazioni non imponibili (comma 1, artt.8, 8bis e 9) "21" Operazioni non imponibili a seguito di dich. d'intento "22" Altre operazioni non imponibili "24" Operazioni non soggette (art. 74 comma 7) "25" Op. non sogg. effettuate nei confronti di terremotati "B1" Ammontare op. es. escluse da nr. 1 a 9 e 11 art. 10 "B2" Ammontare op. es. di cui al nr. 11 art. 10 "B3" Ammontare op. es. di cui ai nr. 1 a 9 art. 10 "B4" Ammontare op. es. di cui ai nr. "B5" Ammontare op. es. di cui ai nr. "G7A" Cessioni intracomunitarie non imponibili "G7B" Prestazioni di servizi non soggette all'imposta S9 = N.ro di riga acquisti IVA11 per op. esenti e non imponibili "" Nessuno "10" Acquisti non imponibili (comma 2, artt8, 8bis e 9) "11" Altri acquisti non imponibili "12" Acquisti esenti "13" Acquisti non soggetti (art. 74 comma 7) "14" Acquisti non soggetti all'imposta effettuati dai terremotati B0 = TRUE se il codice deve comparire nel modello 101 B1 = TRUE se il codice deve comparire nel modello 102 B2 = Codice IVA sospeso (TRUE se vero) B3 = Codice escluso dal calcolo rimborso infrannuale (TRUE se vero) B4 = Codice escluso dal calcolo rimborso per aliquota media (TRUE se escluso) ESC: tabella di ditta per memorizzare gli esercizi contabili CODTAB = Codice esercizio D0 = Data inizio esercizio D1 = Data fine esercizio D2 = Data di scarico RMB: tabella di ditta per memorizzare i rimborsi (obsolete?) CODTAB = ANNO[0-3]+MESE(Z)[4-5]+CODIVA(Z)[6-9]+TIPOREG[10,10] R0 = Imponibile per rimborso R1 = IVA per rimborso R2 = Percentuale IVA relativa %VER: tabella comune per memorizzare i parametri relativi agli interessi ed ai versamenti. CODTAB = ANNO[0,3]+MESE[4,5] R0 = Percentuale interesse primo trimestre R1 = Percentuale interesse secondo trimestre R2 = Percentuale interesse terzo trimestre R3 = Percentuale interesse quarto trimestre R4 = Percentuale interesse annuale R5 = Importo minimo versamento periodico R6 = Importo minimo versamento annuale R7 = Importo minimo versamento acconto R8 = Importo minimo versamento integrativo R9 = Importo minimo versamento cessazione R10 = Importo minimo versamento Art. 74 R11 = Percentuale per calcolo acconti su liquidazione normale R12 = Percentuale per calcolo acconti su liquidazione differita PIA: Tabella di ditta per memorizzare i Progressivi IVA compensazione Agricoli CODTAB = ANNO[0-3]+CODATT[4,8]+TIPOATT[9,9]+MESE[10,11]+IVAORD[12,15]+IVACOM[16,19] R0 = Totale imponibile R1 = Totale IVA secondo codice IVA di compensazione 22 Ottobre 1996 SEQUENZA DELLE CHIAMATE A FUNZIONE (FLUSSO GENERICO DEL PROGRAMMA) ================================================================== Parte I: elaborazioni e calcoli: ------------------------------- schema generico di flusso: - set_print() : * selezione input/ditte - recalc_all() * ciclo per ditte selezionate * setta ditta corrente * reperisce dati dalla ditta * controlla sulle lim(B0) dei mesi preceddenti se devono essere ricalcolate * ciclo da 1 al mese selezionato in input (_month) - update_firm() per ogni mese del ciclo * carica alcuni dati della ditta * ciclo per ogni attivita' della ditta * ciclo per tipo di attivita' (1 o 2) * reperisce dati per l'attivita' corrente, inizializzando tabelle per memorizzare progressivi e calcoli * scorre i registri per settare flag per ventilazione (_isvent) * se e' necessario il calcolo chiama: - update_att() * se sta calcolando la 13a chiama: - recalc_annual() * se e' richiesto il riepilogo liq ed e' l'ultimo mese in elaborazione chiama: - describe_att() ** fine ciclo * se attivita' mista stampa il riepilogo: - describe_att() ** fine ciclo * se quater stampa il riepilogo: - describe_att() * se mese compatibile con il regime frequenza IVA: - write_liq() * se e' l'ultimo mese in elaborazione del ciclo: - recalc_rimborso() * se e' l'ultimo mese in elaborazione del ciclo e deve stampare la liquidazione: - describe_firm() - describe_liq() * se e' stampa registri ed e' stato calcolato l'acconto - describe_liq_acc(); * fine ciclo per mese * fine ciclo per ditte dettagli di funzioni: - update_att() // aggiorna i progressivi per la ditta/mese/attivita' corrente - zero_att() // scorre i pim/pum/pam/plm... e azzera quelli del mese/attivita' corrente - recalc_att() - recalc_ventilation() - recalc_corripettivi() - recalc_annual() // ricalcola progressivi annuali liq. * legge dalla PLA alcuni dati * scorre i PIM dell'anno corrente * esegue la sommatoria di PIM->R0 per calcolare i volumi d'affari * scorre i PLM della corrente attivita' * esegue la sommatoria di alcuni campi di PLM/PUM/PAM * scrive in PLA i dati calcolati - describe_att() // setta i vari DescrItem, che aggiunge a _descr_arr per la stampa successiva - describe_name() - describe_plafond() - describe_ventilation() - describe_agricolo() - describe_viaggio() - describe_pims() - describe_consistence() - write_liq() // Calcolo liq. mensili e liq. annuali. Scrive le lim * posiziona tabella %VER * calcola mese di rif. per liq. differita * azzera variabili per totali vari * ciclo sulle attivita' passate come parametro * se differita e primo mese setta l'anno precedente * ciclo su tutti i mesi (1..13) * posiziona PLM * totalizza vari importi * fine ciclo sui mesi * se agenzia di viaggio e non liq. diff. * calcola credito costo, debito mensile, perc. ripart. * fine ciclo su attivita' * rettifica il risultato con credito prec. in base al mese corrente. * se e' 13a liq. * ciclo sulle attivita' * totalizza volumi d'affari e calcola nuovo prorata, riscrivi PLA e LIA solo se tipo di attivita' e' 1 * fine ciclo * riscrive i volumi d'affari in LIA (R1,R2,R3) * azzera record corrente di LIM, tranne R1, R5, S1, S0, S7 * rettifica il risultato con versamenti, acconto di dicembre... * schiaffa dentro LIM/LAM vari risultati di calcoli * mette il flag di ricalcolato sul record LIM del mese corrente(B1) * se 13a liq. arrotonda alle 1000 lire sup. diversi importi e li rischiaffa in LIM/LAM * riscrive LIM/LAM - recalc_rimborso() // calcola condizioni per il diritto al rimborso infrannuale // chiamata soltanto per i trimestri anche se annuale // aggiornata a normative per anno liq. > 1994 * ciclo sulle attivita' * totalizza volume d'affari ed es. non impon. (varia se usare 3 mesi oppure no) // Prima condizione per il rimborso * se rapporto tra esenti e vol. d'affari e > minima parte esente (0.25) crea il _DescrItem del RIMBORSO // Seconda condizione per il rimborso * scorre i PIM per totalizzare imponibile/imposta acquisti/vendite * se (iva acquisti/totale acquisti) > (iva vendite/ totale vendite), ovvero se l'aliquota medit adegli acquisti e' > dell'aliquota media delle vendite, allora... * se l'aliquota acquisti eccede la soglia minima (10%) allora si ha diritto al rimborso. * genera un _DescrItem con totale acquisti/vendite, rispettivi totali imposte ed aliquota media. * se sono state riscontrate le condizioni per il rimborso riscrive LIM. * ritorna il _DescrItem generato. - describe_firm() * genera un _DescrItem con i dati della ditta: rag. soc., freq. iva, mese corrente. * aggiunge il _DescrItem generato all'array _descr_arr - describe_liq() * genera un _DescrItem con i dati finali della liquidazione con eventuale satellite per il rimborso e prospettino per i versamenti * aggiunge il _DescrItem all'array _descr_arr - describe_liq_acc() * genera un _DescrItem con i dati per la liquidazione dell'acconto * aggiunge il _DescrItem a _descr_arr dettagli di update_att() ************************ // funzioni chiave per il calcolo - recalc_att() * azzera variabili contenenti i progressivi * ciclo per gli elementi del cursore impostato. Il cursore e' cosi' fatto: LF_MOV |------->LF_RMOVIVA |------->LF_CAUSALI Quindi il ciclo sara' sui movimenti, controlla se il registro e' presente, la relativa riga di rmoviva e' presente e se la data deve essere considerata. * ciclo per ogni riga IVA del movimento corrente * qui totalizza nei vari casi, sottocasi, casi particolari, tutte le imposte/imponibili, memorizzandoli nei progressivi IVA. * fine ciclo per righe IVA * fine ciclo per movimenti * calcolati tutti i movimenti e aggiornati i pim se necessario risistema le imposte acquisti beni per rivendita (scorre i PIM dal primo all'ultimo ricalcolando l'iva e riscrivendoli) * calcola il prorata solo se liq. periodica, e lo memorizza in PLM->R2 * se e' agenzia di viaggio memorizza i relativi progressivi * se e' agricolo memorizza i relativi progressivi * memorizza sempre e comunque altri progressivi comuni * riscrive i record delle tabelle mensili(PLM,PAM,PUM,POM) - recalc_ventilation() // ricalcolo della ventilazione * ricalcola i pim dei mesi dal primo al corrente se necessario: esegue un ciclo da 1 al mese corrente e chiama ogni volta update_att() (sembra una storia ricorsiva, in realta' lo e' poco) * ciclo da 1 al mese corrente // aggiunge gli acquisti del mese m operando sui pim * ciclo per tutti i PIM relativi. Per i codici != da NS, NI ed ES aggiunge all'array _vent_arr i progressivi. * calcola totale acquisti su tutte le aliquote (scorre tutti gli elementi di _vent_arr, sommando l'elemento _totale. * calcola totale vendite (solo se mese 13 e si sta calcolando la 13a) * ricalcola (solo per il mese in corso!) operando sull'array _vend_arr, ove sono memorizzate le vendite. * scorre gli elementi di _vend_arr * calcola la percentuale di ripartizione: se siamo in annuale si deve ripartire il totale vendite annuale tra i vari mesi, altrimenti il totale del mese. L'importo cosi' preparato viene affettato a seconda degli elementi di _vent_arr, le percentuali di ripartizione sono ottenute dal rapporto tra il totale acquisti del mese e il totale acquisti * scorre ancora gli elementi di _vent_arr e calcola l'imposta/imponibile da ventilar. Corregge l'iva vendite nei PLM->R0 ed il volume d'affari nei PAM->R1 ed aggiorna i PIM->(R0,R1) * se siamo in annuale, dopo aver ripartito una prima volta, esce dal ciclo (in pratica viene eseguito una sola volta) * fine ciclo * memorizza i totali per il prospettino di ventilazione * riscrive il tot. acq e vendite in PAM - recalc_corrispettivi() // ricalcolo dei corrispettivi * viene eseguita solo se ci sono elementi in _corr_arr (modificato tramite add_corrisp() in recalc_att()) * scorre tutti gli elementi di _corr_arr * per ogni _CorrItem estrae imponibile, imposta * aggiusta l'IVA vendite in PLM->R0 * aggiusta il volume d'affari in PAM->R1 * aggiorna i PIM->(R0,R1) * riscrive i records modificati Parte II: stampa: ------------------------------- schema generico di flusso. * La stampa, avviene dopo aver creato tutti gli opportuni _DescrItem e memorizzati in _descr_arr. Per far cio' si utilizza il meccanismo della TPrint_application pur non utilizzando nessun cursore o relazione di stampa, basta ridefinire preprocess_page(), postprocess_page() e la set_page(). Si utilizza quest'ultima come fulcro centrale della stampa sfruttando il parametro cnt che viene passato alla stessa, visto che in casi come questi esso e' sempre incrementale. Per farla in breve, sappiamo tutti che una TPrint_applicatione e' cosi' fatta: * ciclo fintantoche' set_print() [vedi sopra] ritorna TRUE * ciclo fintantoche' si vuol ripetere la stampa. * ciclo per il numero di copie della stampa * ciclo (almeno una volta) fino a quando postprocess_print() ritorna la ripetizione * se preprocess_print() ritorna TRUE allora * ciclo (almeno una volta) fino a quando postprocess_page() ritorna la ripetizione * se preprocess_page() ritorna TRUE allora * set_page() * print_one() * fine ciclo * fine ciclo * fine ciclo * fine ciclo * fine ciclo Nel nostro caso la preprocess_page() ritorna TRUE se il numero di elementi di _descr_arr e' != da 0. La postprocess_page() ritorna NEXT_PAGE solo se non ci sono elementi in _descr_arr o se l'elemento che tiene il conteggio (cnt) e' arrivato alla fine (_descr_arr.items()-1) Ecco quindi che la set_page() assume una importanza fondamentale per settare le righe di stampa: - set_page() * reperisce il _DescrItem corrente grazie a cnt da _descr_arr. * resetta tutte le righe di stampa * setta il salto foglio automatico a FALSE * esegue una selezione multipla in base al membro _flags di _DescrItem: CHG_PARMS SET_FIRM PIM_ROW PIM_HEAD MISC_LIQ TOT_ROW PLAFOND VENTILA REGAGR REGVIA THE_END LIQACC ACCONTO ACCHEAD DELDEB DELCRED in base ad ognuno di questi flags viene chiamata una diversa funzione di set delle righe di stampa. 13 Novembre 1996 TRASFERIMENTO IVA11 =================== Nuova feature aggiunta in occasione delle modifiche per il trasferimento IVA11: - cache di lettura per i codici IVA e tabella registri. Vengono semplicemente mantenuti 2 assoc array (1 per i codici iva ed uno per i registri) dove ogni volta che viene letto un record nuovo (quindi non presente nell'array) viene memorizzato. Quando viene richiesta la lettura di un record viene prima controllato che esso non sia gia' presente in cache. Le modifiche sono state effettuate nelle funzioni look_iva() e look_reg(). Per il trasferimento IVA 11 sono state implementate 3 nuove funzioni: iva11_set_arr(), iva11_set_arr_pim(), iva11_write() ed aggiunto un assoc array: _iva11_arr. Il procedimento e relativamente semplice: viene utilizzato un assoc array dove memorizzare i valori da trasferire sui files tab1100a e tab1100b. La chiave per memorizzare i valori viene posta uguale al nome campo relativo, facilitando cosi' l'accesso e senza troppi sprechi di memoria essendo al massimo 125 campi. Il filling dei campi viene effettuato in 2 procedure (iva11_set_arr e iva11_set_arr_pim). La prima viene chiamata quando vengono scorse le righe di movimento IVA (recalc_att()); la seconda viene chiamata alla fine del calcolo dell'attivita', prima dello spostamento della relazione sulla prossima (update_firm()). La scrittura dei campi avviene in iva11_write(), chiamata subito dopo la iva11_set_arr_pim(). Particolarita': iva11_set_arr_pim(): esegue un ciclo per tutti i PIM della ditta, scartando quelli che non servono e raggruppando quelli che rispondono alle condizioni di trasferimento. iva11_write(): esegue un ciclo per tutti i campi settati in _iva11_arr, facendo la put() per ognuno sul rispettivo campo nel file opportuno (LF_TAB1100A o LF_TAB1100B). Siccome i campi da trasferire sono piu' di 100 e per ora tale limite non puo' essere superato il trasferimento viene effettuato su 2 files, collegati tramite relazione. In realta' _iva11_arr e' un _BolgArray, derivato da TAssoc_array, dove sono definiti i metodi add() e sub(), per aggiungere o sottrarre importi all'elemento indicato. Gli elementi stessi di _iva11_arr in realta' non sono solamente real, ma classi derivate da TObject, che contengono un real ed un int identificante il numero logico del file al quale appartiene il campo. 20 Novembre 1996 AGGIUNTA STAMPA A36 NEI PROGRESSIVI =================================== Per stampare cio' si e' seguito l'esempio della stampa di AF (ex A35). Da rilevare, percio', la condizione di raggruppamento di tali progressivi e la memorizzazione in PIM, nel campo S0. Naturalmente, siccome S0 e' una stringa e siccome vanno memorizzati sia imponibile che imposta, il campo sara' una TToken_string i cui elementi (2 real) sono separati da un "!", e non da un "|" per non creare situazione spiacevoli in caso di scarico/carico da un file testo. 01 Dicembre 1996 CORRETTO TRASFERIMENTO DI PIU' ATTIVITA' SUL FILE TAB1100 ========================================================= La correzione riguarda lo spostamento della funzione iva11_write(): - iva11_write() viene ora chiamata dalla describe_liq(), per aver maggior controllo sull'azzeramento dei campi R1 ed R2 Ma la modifica principale riguarda la struttura dati utilizzata per memorizzare i dati trasferire. Ora si utilizza un assoc_array principale (_iva11_arr) la cui chiave e' il codice attivita' della ditta. Ogni elemento di _iva11_arr e' a sua volta un assoc_array, la cui chiave e' come nella versione precedente e' il nome del campo da trasferire. Per cui le modifiche fatte in iva11_set_arr(), iva11_set_arr_pim() e iva11_write() riguardano la diversa gestione per memorizzare e scorrere gli elementi dell'assoc_array _iva11_arr. 20 Ottobre 1997 IMPLEMENTAZIONE PIM13 ========================================================= Implementato il PIM 13, in modo tale da poter eliminare i precedenti errori relativi al calcolo ventilazione annuale/corrispettivi. Prima andava a sommare i risultati dei singoli mesi/trimestri: in realta' per la liquidazione annuale, i mesi vanno considerati come un tutt'uno. Le modifiche operate sono quindi relative al ciclo di scansione ed elaborazione del cursore sui movimenti IVA. Ora non scorre piu' un cursore prima sul mese 1 poi 2, 3, ecc. ma uno unico da 1 a 13, schiaffando i risultati nel relativo PIM del mese 13. Nella fase dei calcoli per ventilazione/scorporo scorrispettivi, non si dovranno piu' fare ripartizioni di importo sui vari mesi precedenti. Inoltre da ora in avanti per calcolare la liquidazione annuale non sara' piu' necessario ricalcolare anche i periodi precedenti. Tutto cio' velocizza un poco il calcolo liquidazione ed il trasferimento ad IVA11. 31 Ottobre 1997 NUOVO PROSPETTO REGIME AGRICOLO =============================== Queste modifiche valgono dal 1998 in poi. Aggiunto nuovo FLAG sulla tabella LIA (campo B2), per indicare se trattasi di agricoltore con volume d'affari minimo: sono stati quindi modificati programmi di impostazione parametri liquidazione, apertura anno IVA, oltre a calcolo/stampa. Il nuovo flag di agricoltore minimo serve per selezionare le ditte in calcolo liquidazione: se l'anno e' 1998 o successivi E la liquidazione da calcolare non e' annuale E tale flag e' settato, una determinata ditta non puo' essere inclusa nella lista dei calcoli da effettuare. Viene aggiunta una nuova tabella di progressivi (tabella PIA: Progressivi Iva compensazione Agricoli), il cui tracciato e' il seguente (riportato anche all'inizio) PIA: Tabella di ditta per memorizzare i Progressivi IVA compensazione Agricoli CODTAB = ANNO[0-3]+CODATT[4,8]+TIPOATT[9,9]+MESE[10,11]+IVAORD[12,15]+IVACOM[16,19] R0 = Totale imponibile R1 = Totale IVA secondo codice IVA di compensazione Memorizzazione dei progressivi: tutte le vendite in regime agricolo con "segnalino" a 1 (che termine di merda che usano su sistema..), vanno sommate distintamente per codice IVA principale + codice IVA compensato. L'imposta (PIA->R1) va calcolata sul totale imponibile (PIA->R0) per ogni record della tabella, una volta finita la sommatoria. Il codice IVA di compensazione, (udite udite!), viene memorizzato sul PIANO DEI CONTI (nel campo IVACOMP) per ogni SOTTOCONTO di RICAVO(campo INDBIL). Attenzione: per effettiva congruenza il campo INDBIL e' significativo solo sul relativo CONTO, indi si procedera' ad una ulteriore rottura/mazzata sui coglioni, in quanto per ogni movimento IVA si dovranno fare 2 accessi al file del PIANO DEI CONTI: uno per leggere il codice IVA di compensazione (campo IVACOMP) uno per leggere se il conto e' di ricavo (campo INDBIL). Una volta completata la tabella (fatta in recalc_att()), si procedera' alla descrizione di tali progressivi (describe_agricolo()). Il nuovo prospetto viene messo poco prima del prospetto agricolo, ma comunque nella stessa pagina. Nel prospetto agricolo viene aggiunta una riga in piu': IVA ammessa in detrazione I parte tabella A, il cui importo riguarda il totale dell'iva vendite compensata. Tale importo (PLM->R13) viene sommato al vecchio totale IVA ammessa in detrazione, per avere l'importo corretto. Attenzione, il nuovo calcolo viene applicato solo dal 1998 in poi!! 01 Dicembre 1997 IVA11 '97 ========= - cambiato A13 in VA7 - aggiunte aliquote 7,5% e 20% Variazioni ai campi di trasferimento rimossi : EC206, FBC* e FC117 aggiunti FC115 FC116 FC209 FC210 SBI07 SBI08 SBF12 SBF13 XC101...XC111 XC201...XC208 (al posto di FBC*) AGVE05 AGVE06 ABVE05 ABVE06 AGME05 AGME06 ABME05 ABME06 AGME*, AGVE*, ABME* ABVE* sono stati spostati su TAB1100B L2, L2BIS sono stati spostati su TAB1100B 05 Dicembre 1997 PRORATA dal 1998 ================ Dal 1998 sara' possibile registrare fatture in ritardo con anno data documento precedente all'anno di registrazione stesso. In questo caso ll'importo PRORATA del PERIODO (non annuale) deve essere calcolato applicando la percentuale corrispondente all'anno del documento. Tutti gli acquisti soggetti a pro-rata devono essere distinti in base all'anno della data documento e di conseguenza la detraibilita' deve essere evidenziata e calcolata con due possibili percentuali: una dell'anno attuale e una dell'anno precedente. Se in fase di liquidazione la tabella dell'anno precedente non esiste ma esistono acquisti con anno documento relativo all'anno precedente si calcola il pro-rata con la percentuale corrente, segnalando tuttavia la mancata presenza di tale tabella per l'anno precedente. Per far questo e' stato implementato un oggettino: _ProrataItem, cui vengono settate la percentuale attuale e la percentuale precedente. E' stato implementato anche un metodo calc_prorata() cui si passa il valore degli acquisti ed un flag per calcolare con percentuale attuale o precedente. Nella tabella PLM e' stato recuperato R4 per memorizzare la percentuale pro-rata precedente, inoltre viene memorizzato in R14 il prorata relativo agli acquisti con riferimento anno precedente. In B1, infine, viene settato il flag a TRUE se in stampa esistono documenti dell'anno precedente man non esiste la percentuale pro-rata ad essa relativi. Casistiche: (vedi _ProrataItem::set()) - il calcolo vale solo a partire dal 1998 - se le % sono uguali oppure non siamo ancora nel 1998 considera tutto sull'anno corrente - se non ha trovato la percentuale anno prec usa quella corrente, segnalando pero' l'errore. 10 Febbraio 1999 ================ Mannaja! Ecco quindi svelati i piu' reconditi misteri del programma di liquidazione. Auguro a chiunque buon divertimento.