Relatiecode in Exact Online in bulk wijzigen

Het vernummeren van relaties in één of meerdere Exact Online administraties is mogelijk met Invantive SQL.

Enkele Exact Online relaties vernummeren

Het vernummeren van een specifieke relatie kan heel eenvoudig met het volgende statement:

set use-http-disk-cache false

set use-http-memory-cache false

update exactonlinerest..accounts
set    code = '1'
where  name = 'Belastingdienst'

De eerste twee statements schakelen de caches uit, zodat niet per abuis met oude gegevens gewerkt wordt. Het update statement werkt de relatiecode van de Belastingdienst bij.

Het is uiteraard verstandig om dit soort wijzigingen eerst te proberen op een testomgeving.

Meerdere Exact Online Relaties een nieuw nummer geven

Als het gaat om veel relaties, dan kan eerst een download gemaakt worden van de relaties in een selectie en opgeslagen in een tijdelijke tabel:

set use-http-disk-cache false

set use-http-memory-cache false

create or replace table accounts@inmemorystorage
as
select division
,      id
,      code 
       code_ist
       label 'Code (ist)'
,      code 
       code_soll
       label 'Code (soll)'
,      name
from   exactonlinerest..accounts
--
-- Kies een aantal organisaties waarvan de naam begint met 'Belasting'.
--
where  name like 'Belasting%'

select * 
from   accounts@inmemorystorage

Het resultaat van de laatste query is dan een tabel met relaties en ruimte voor het nieuwe nummer in het veld code_soll zoals hieronder:

Relaties vernummeren Exact Online

Pas in de tijdelijke tabel de nummers aan in de kolom code_soll. Dat kan met update statements als er een logica in zit, of gewoon met een platte download.

Het topic Massaal bijwerken relatiecodes in Exact Online naar specifieke nieuwe relatiecodes bevat een voorbeeld via een CSV-bestand.

Automatisch relatienummer bepalen op basis van Salesforce

Het is ook mogelijk een tweede datacontainer naar Salesforce toe te voegen en dan bijvoorbeeld de juiste nummers op te zoeken via een query op Salesforce op bijvoorbeeld een sterk gelijkende naam.

Kloppen de namen niet helemaal? Gebruik dan bijvoorbeeld de levenshtein SQL-functie van Invantive SQL; die geeft een numerieke waarde aan het verschil door tekens weg te halen en toe te voegen:

select levenshtein('water', 'wetend')

met als resultaat 3. Invantive SQL biedt naast levenshtein meer SQL-functies uit de literatuur om op klank of verschil twee namen te vergelijken:

  • metaphone
  • metaphone3
  • metaphone3_alt
  • double_metaphone
  • double_metaphone_alt

De uitleg van deze functies is te vinden in de Invantive SQL grammatica.

Teruglezen nieuwe nummers

Om de verwerking niet onnodig te belasten met relaties waar de nummers niet van wijzigen, kunnen daarna de relaties die geen nieuw nummer krijgen weggehaald worden:

delete accounts@inmemorystorage 
where  code_ist = code_soll

Tenslotte kunnen de nieuwe relatiecodes massaal geladen worden met statement:

synchronize ExactOnlineREST..Accounts
from        accounts@InMemoryStorage
with        update
identified
by          division
,           id

Deze statements zijn voor gebruik met bijvoorbeeld Invantive Office for Entrepreneurs of Invantive Premium Finance, maar niet met Invantive Office for Accountants. Indien er veel behoefte is aan een grafische schil, dan kan een module hiervoor toegevoegd worden aan Invantive Runtime, Invantive Control for Excel of Get My Report.

Andere relatievelden in bulk veranderen

Dit voorbeeld wijzigt het relatienummer. Het is net zo gemakkelijk om andere velden te wijzigen, zoals de naam van de relatie in Exact Online, de BTW-code of het KvK-nummer. Dit gaat ook massaal met het synchronize-statement.

We gebruiken bijvoorbeeld zelf dagelijks een statement om de facturatiemethode voor alle relaties om te zetten in alle administraties naar PDF+XML:

use all
update /*+ http_memory_cache(false) http_disk_cache(false) */
       exactonlinerest..accounts
set    invoiceattachmenttype = 3
where  invoiceattachmenttype != 3

Dit duurt circa 300 ms per relatie waar een wijziging op nodig is.