18.1. Importare fatture e ricevute

This functionality is only available by default for versions greater than 2.6

For 2.4.13 the Customers and Vendors importer is an optional module and needs to enabled by editing the file $HOME/.gnucash/config.user, adding the line:

(gnc:module-load "gnucash/plugins/bi_import" 0)

Su sistemi Linux questo file è $HOME/.gnucash/config.user e su macOS ~/Library/Application Support/GnuCash/config.user. Se il file non esiste già, lo si dovrà creare. Dopo aver riavviato GnuCash l’elemento comparirà alla fine del menu Impresa.

Perchè l’importatore funzioni correttamente, i dati devono essere in formato a lunghezza fissa di campo, o separati da virgole. Uno script di Python è fornito di seguito come esempio.

import sys
import csv

VENDOR_ID="000013"
INFILE=sys.argv[1]
INV_ID=sys.argv[2]
try:
  ACCOUNT=sys.argv[3]
except:
  ACCOUNT="Expenses:Materials General"

Reader = csv.reader(open(INFILE), delimiter=',')

# Need to ignore 1st and last rows

for row in Reader:
  if row[0].isdigit(): # We only use numbered lines
    outline=(INV_ID + ",," + VENDOR_ID + ",,,," + row[1] + " > " + row[4] + ",ea," +
      ACCOUNT + "," + row[2] + "," + row[5].replace("GBP", "") + ",,,,no,,,,,,,")
  print outline
      

Esempio di un file d’ordine del fornitore scaricato da Rapid Electronics (UK).

line number,product code,quantity,availability,product description,unit price,discounts,line total,delivery,sub total,vat,grand total
1,47-3524,100,100 Available,BC848C SOT-23 NPN TRANSISTOR (INF) (RC),GBP0.03,GBP0.00,GBP0.03
2,47-3278,30,30 Available,L78L05ACZ 0.1A +5V VOLTAGE REG (ST) (RC),GBP0.18,GBP0.00,GBP0.18
3,22-0120,1,1 Available,Tube 34 14pin DIL socket, narrow7.62mm, without central support,GBP1.05,GBP0.00,GBP1.05
4,22-0127,1,0 Available<br />1 on Back Order,Tube 17 28pin DIL socket, wide15.24mm, without central support,GBP1.22,GBP0.00,GBP1.22
5,62-0368,1,1 Available,820R CR25 0.25W CF Resistor Pk 100,GBP0.50,GBP0.00,GBP0.50
6,47-3130,100,100 Available,1N4001 1A 50V SILICON RECTIFIER DIODE RC,GBP0.01,GBP0.00,GBP0.01
7,17-0310,1,1 Available,PROFESSIONAL MINATURE PROBE HOOK RED RC,GBP0.90,GBP0.00,GBP0.90
8,17-0312,1,1 Available,PROFESSIONAL MINATURE PROBE HOOK BLACKRC,GBP0.90,GBP0.00,GBP0.90
9,34-0655,1,1 Available,PROTOBLOC 2 BREADBOARD,GBP4.39,GBP0.00,GBP4.39
10,18-0200,1,1 Available,PP3 9V ALKALINE BATTERY "Not For Retail Sale",GBP1.37,GBP0.00,GBP1.37
,,,,,,,,GBP4.95,GBP24.93,GBP4.35,GBP29.28
      

Un file simile dopo essere stato processato con lo script di Python.

MEC-0071,,000013,,,,34-0655 > PROTOBLOC 2 BREADBOARD,ea,Expenses:Materials General,1,4.39,,,,no,,,,,,,
MEC-0071,,000013,,,,18-0105 > PP3 / PP6 BATTERY CLIP 150MM (RC),ea,Expenses:Materials General,10,0.06,,,,no,,,,,,,
MEC-0071,,000013,,,,62-0370 > 1k CR25 0.25W CF Resistor Pk 100,ea,Expenses:Materials General,1,0.50,,,,no,,,,,,,
MEC-0071,,000013,,,,62-0354 > 220R CR25 0.25W CF Resistor Pk 100,ea,Expenses:Materials General,1,0.50,,,,no,,,,,,,
MEC-0071,,000013,,,,34-5548 > PLAIN DOCUMENT WALLET ASSORTED PK 50 RE,ea,Expenses:Materials General,1,6.95,,,,no,,,,,,,
MEC-0071,,000013,,,,62-0386 > 4k7 CR25 0.25W CF Resistor Pk 100,ea,Expenses:Materials General,1,0.50,,,,no,,,,,,,
MEC-0071,,000013,,,,34-0860 > COPPER CLAD SRBP SS 100 X 160 (RC),ea,Expenses:Materials General,5,0.50,,,,no,,,,,,,
MEC-0071,,000013,,,,18-0163 > PP3 BATTERY HOLDER WITH FLYING LEADS RC,ea,Expenses:Materials General,5,0.23,,,,no,,,,,,,
MEC-0071,,000013,,,,73-4290 > ATMEGA8-16PU 8-BIT MICRO 8K DIL-28 (RC),ea,Expenses:Materials General,3,1.99,,,,no,,,,,,,
MEC-0071,,000013,,,,81-0014 > BC108 NPN GP TRANSISTOR RC,ea,Expenses:Materials General,20,0.16,,,,no,,,,,,,
MEC-0071,,000013,,,,DELIVERY,ea,Expenses:Postage,1,4.95,,,,no,,,,,,,
MEC-0071,,000013,,,,VAT,tax,Expenses:VAT,1,4.35,,,,no,,,,,,,
        

Come si può vedere mancano alcuni campi mentre altri non sono necessari per l’importazione. La prima riga e l’ultima sono superflue dato che GnuCash si prenderà cura di calcolare il totale. Tutto ciò che serve è di prelevare ciò che è necessario e produrre un file di output con il formato corretto per essere importato in GnuCash. In questo caso i campi del numero dell’elemento (part number) e della descrizione (description) verranno uniti per comporre la descrizione della fattura (o ricevuta) in GnuCash. Sono necessari il campo della quantità (quantity) e del prezzo (price). Contrariamente alla dicitura dell’intestazione, la VAT non è riportata per ogni riga dato che è sempre 0, ma è calcolata nell’ultima riga sul totale dell’ordine.

Nota

Questo causerà problemi in seguito.

In questo esempio il conto Uscite:Materiali generici è stato impostato come conto di destinazione. Questo può essere cambiato dopo l’importazione nel modo usuale, così come qualsiasi altro dato. Se questo conto non esiste, verrà lasciato vuoto durante l’importazione e dovrà essere impostato manualmente. Le righe che iniziano con il simbolo «#» sono considerate come commenti e quindi tralasciate.

Lo script è invocato con il seguente comando:

python importer.py file_da_importare, invoice_id > file_in_cui_salvare.csv

Questo breve script può facilmente essere modificato per adattarlo a qualsiasi formato scaricato. L’unica restrizione riguarda il numero di campi che deve essere fisso, almeno al momento. L’importatore ignorerà le righe con un numero errato di campi (questo potrebbe essere corretto nelle versioni future). L’ID venditore è semplicemente il numero identificativo assegnato a quello specifico venditore. Gli elementi row[N] si riferiscono alla posizione dove sono presenti i dati. È importante notare come il primo campo sia row[0] e non row[1].

Una volta che il file è stato convertito, selezionare ImpresaImporta fatture e ricevute per aprire una nuova finestra di importazione. Selezionare il file appena creato, selezionare poi fattura o ricevuta e il formato separato da virgole. Controllare che i dati dei campi siano nelle colonne corrette prima di selezionare OK. Una volta importata la fattura può essere aperta per modificarla o per emetterla nel modo usuale.

Una nota sulla VAT o qualsiasi altra imposta sugli acquisti. Come già detto, Rapid Electronics calcola la VAT sul totale della ricevuta e non per ogni riga. GnuCash calcola la VAT per ogni riga e ne fai poi il totale. Questa differenza può comportare delle inaccuratezze nell’importo della VAT di alcuni centesimi che sono sufficienti a causare problemi in fase di riconciliazione del conto usato per l’acquisto. Al momento il superamento del problema dipende solamente dal proprio modo preferito; ad esempio la VAT può essere aggiunta manualmente in una riga separata come i costi di spedizione. QUindi parte del lavoro è lasciata all’utente ma la parte più noiosa di inserimento di ogni elemento è eliminata.

Per il fututro: attualmente il formato di importazione è ristertto e diversi utenti potrebbero andare incontro a dei problemi durante il processo di conversione. Aggiungere un modello per ogni possibile formato CSV dei fornitori sarebbe un lavoro enorme e probabilmente infruttuoso dato che molti fornitori spesso cambiano formato senza avvertire gli sviluppatori di GnuCash. I miglioramenti futuri del processo di importazione saranno basati sui consigli degli utenti e probabilemente verrà reso più semplice o flessibile (spesso «semplice» non è compatibile con «flessibile»).

Nota

Se non si ha dimestichezza con Python (esistono altri linguaggi), è possibile inviare una richiesta alla lista dell’utente di GnuCash, con un esempio del proprio file CSV scaricato, e probabilmente qualcuno si preoccuperà di scrivere uno script di Python per la sua traduzione.

18.1.1. Note per gli autori Python

Per poter completare con successo il processo di importazione, il numero di campi deve essere rispettato, quindi le virgole sono importanti.

Di seguito è riportato un elenco completo dei campi necessari:

id, date_opened, owner_id, billingid, notes, date, desc, action, account, quantity, price, disc_type, disc_how, discount, taxable, taxincluded, tax_table, date_posted, due_date, account_posted, memo_posted, accu_splits,

Nota

Si noti la virgola finale

18.1.2. Una breve descrizione di ogni campo

  • id - il numero della fattura. Tutte le righe devono contenerlo o la riga verrà rifiutata.

  • date_opened - Use the same date format as setup in Preferences. Today's date is inserted if this is blank.

  • owner_id - numero ID del venditore o del cliente. Tutte le righe devono contenere questo valore altrimenti verranno rifiutate.

  • billingid — ID ricevuta.

  • notes — note della fattura.

  • date - la dta dell’elemento sulla riga. Può essere lasciata vuota per considerarla in data odierna.

  • desc - descrizione della fattura o della ricevuta

  • action - per le ricevute normalmente è «ea».

  • account - il conto a cui è attribuito l’elemento.

  • quantity - quantità di ogni elemento. Deve contenere un valore o la riga verrà rifiutata.

  • price - prezzo di ogni elemento. Deve contenere un valore o la riga verrà rifiutata.

  • disc_type - tipo di sconto; può essere «%» o «TODO». Si applica solo alle fatture. È necessario fare qualche prova in questo caso dato che può essere funzione della valuta.

  • disc_how - si applica solamente alle fatture.

  • discount - importo dello sconto applicato. Si applica solamente alle fatture.

  • taxable - Will tax be applied to the item? «yes» or blank.

  • taxincluded - Is tax included in the item price? «yes» or blank.

  • tax_table — tabella delle imposte da applicare all’elemento.

  • date_posted - If posted, what date. Normally left blank for manual posting after editing the invoice. Use the same date format as setup in Preferences.

  • due_date - Date payment is due. Use the same date format as setup in Preferences.

  • account_posted — conto di emissione.

  • memo_posted - If posted insert memo here.

  • accu_splits - Accumulate splits? «yes» or blank.