# Importar dados da empresa

## Importar facturas

Esta funcionalidade só está disponível para versões posteriores à 2.6

Para a 2.4.13 o importador de clientes e fornecedores é um módulo opcional e tem de ser activado editando o ficheiro `$HOME/.gnucash/config.user`, adicionando a linha:

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

Em sistemas &lin;, este ficheiro encontra-se em `$HOME/.gnucash/config.user` e em&mac; em `~/Library/Application Support/Gnucash/config.user`. Se o ficheiro ainda não existir, terá de o criar. Após reiniciar o &app;, o item aparecerá ao fundo do menu Negócios.

Para que o importador funcione, os dados devem estar numa linha com um comprimento de campo fixo separados por vírgulas. Abaixo é mostrado um exemplo de programa Python para converter uma ordem transferida.

    import sys
    import csv

    VENDOR_ID="000013"
    INFILE=sys.argv[1]
    INV_ID=sys.argv[2]
    try:
      ACCOUNT=sys.argv[3]
    except:
      ACCOUNT="Despesas:Materiais Geral"

    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

Exemplo de uma encomenda de fornecedor de 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

Um ficheiro similar após processamento com o programa 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,,,,,,,

Como se pode ver, há campos ausentes e alguns que não são necessários à importação. A primeira linha não é necessária e a última é supérflua, o &app; totaliza a ordem. Só é necessário obter o que desejamos e produzir um ficheiro em formato correcto para importar para o &app;. Caso em que juntamos o número da peça e a descrição, convertendo-os em descrição da factura para o &app;. Precisamos da quantidade e preço. Contrariamente à linha de cabeçalho, em que o IVA não está incluído por linha e é sempre zero, o IVA é calculado na última linha como IVA do total da encomenda.

Isto causará problemas mais tarde.

Neste exemplo atribuiu-se a conta Despesas:Materiais Gerais como conta-alvo. Esta pode ser alterada após a importação, da forma habitual, juntamente com qualquer outra conta de dados. Se não existir tal conta Despesas:Materiais Gerais, esse campo será deixado em branco na importação e terá de ser definido manualmente. As linhas que começam com um # são consideradas como linhas de comentário e ignoradas.

O programa inicia-se com o seguinte comando:

`python importer.py `ficheiro_a_importar`, `id_factura` > `ficheiro_a_gravar.csv``

Este pequeno programa pode ser facilmente alterado para se adequar a qualquer formato transferido. A única restrição é que o número final do campo é fixo, pelo menos de momento. O importador ignora as linhas com o número errado de campos. Isto será corrigido na versão futura. A ID do fornecedor é simplesmente a identificação atribuída ao fornecedor, ou cliente específico. Os itens da linha[N] referem-se à posição na linha onde se encontram os dados correctos. Note-se que o primeiro campo é a linha[0] NÃO a linha[1].

Uma vez convertido o ficheiro, navegue até Negócios Importação de facturas para abrir uma nova janela de importação. Seleccione o ficheiro que acabou de criar, seleccione Pagamento ou Factura e formato Separado por vírgulas. Nesta altura, os dados devem aparecer na janela de antevisão. Verifique se os dados do campo estão nas colunas correctas antes de clicar em Aceitar. Uma vez importada, a factura pode ser aberta para edição e emissão da forma habitual.

A note on VAT, or any purchase tax. As previously mentioned Rapid Electronics calculate the VAT on the bill total not line by line. &app; calculated the VAT per line then totals the VAT. This can lead to inaccuracies in the VAT of the region of a few pennies and is enough to cause problems when reconciling the purchase with your bank or credit card account used to make the purchase. As to how you overcome that, for the moment, is a problem for you to use whatever method suits your conscience or accountant best. Personally I add the VAT as a separate line along with delivery charges manually. So some work is left to the user but the tedium of entering each item eliminated.

Future: Currently the import format is quite strict and many users may have problems with the conversion process. Adding a template for every possible vendor CSV format would be mammoth and likely impossible task notwithstanding the fact the vendors are likely to change the format without informing the &app; team. Future import enhancements will be based on user feedback and hopefully the process can be made simpler or more flexible. Note that often simple is incompatible with flexible.

Se o Python não lhe agrada(other languages are avaialble) is not your thing then post a request to &appname; user list, with an example of your downloaded CSV, and someone may write you a Python script to do the translation.

### Notes for Python authors

In order for the import to succeed the number of fields must be adhered to, so the trailing commas are important.

A complete list of the required fields is:

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,

Mind the trailing comma.

### A brief description of each field

- id - The invoice number. All lines must contain this or the line will be rejected.

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

- owner_id - ID number of the vendor or customer. All lines must contain this or the line will be rejected.

- billingid - Billing ID.

- notes - Invoice notes.

- date - The date of the item line. Can be left blank for todays date.

- desc - Description as per normal invoice or bill.

- action - For bills usually ea.

- account - Account to which the item is attributed.

- quantity - Quantity of each item. Must contain a value or the line will be rejected.

- price - Price of each item. Must contain a value or the line will be rejected.

- disc_type - Type of discount, either % or TODO, only applies to invoices. Some experimentation may be required here as may be currency dependent.

- disc_how - Only applies to invoices.

- discount - Amount of discount to be applied. only applies to invoices.

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

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

- tax_table - Tax table to apply to item.

- 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 - Posted to what account.

- memo_posted - If posted insert memo here.

- accu_splits - Accumulate splits? yes or blank.

## Importing Customers and Vendors

This functionality is only available in the 2.6 versions of GnuCash and is only loaded by default for versions greater than 2.6.

For versions lower than 2.6 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/customer_import" 0)`

On &lin; systems this file is found at `$HOME/.gnucash/config.user` and on &mac; it is `~/Library/Application Support/Gnucash/config.user`. If the file doesn’t already exist you will have to create it. After restarting &app; the item will appear at the bottom of the business menu.

In order for the importer to work each line in the input file must have the following structure.

`id, company, name, addr1, addr2, addr3, addr4, phone, fax, email, notes, shipname, shipaddr1, shipaddr2, shipaddr3, shipaddr4, shiphone, shipfax, shipmail`

Fields can be separated with commas or semicolons and each field can be in quotes. These options are selectable in the import dialog. Vendors don’t have shipping information so even though the fields have to exist, leave them empty. The id field is optional and if it is empty a new id will be chosen. If the id field has a value this will UPDATE any vendor/customer with the same id. This may not be what you want. Note that in your input file the data must be a single line for each customer/vendor.

O importador não importa actualmente informações de facturação para clientes ou vendedores, estes terão de ser editados individualmente após a importação.