Hoe combineer ik administratiecijfers uit meerdere Exact Online landen in Excel?

We hebben meerdere bedrijven in Nederland en Belgie, en we willen de controllers binnen 1 Excel rekenmodel zowel cijfers van de Nederlandse administratie als de Belgische administraties laten verwerken?

Kan dat? Zo ja, hoe regel ik dat in?

Met alle producten die gebaseerd zijn op Invantive SQL kun je binnen een gebruikssessie maximaal 1 (virtuele) database tegelijk open hebben.

Echter, die ene database kan gelijktijdig meerdere verbindingen hebben naar verschillende platformen, bijvoorbeeld naar een abonnement op Exact Online Nederland en een abonnement op Teamleader. Je kunt ook twee of honderd verbindingen open hebben binnen die database naar verschillende Exact Online abonnementen binnen een land. Elke verbinding binnen de database noemen we een “data container”.

In relatie tot jouw vraag kun je inderdaad ook een database hebben met daarin zowel een verbinding naar Exact Online Nederland als een verbinding naar Exact Online België.

Wat is %USERPROFILE%?

In deze uitleg wordt herhaaldelijk verwezen naar mappen die beginnen met %USERPROFILE%. De meeste Windows-gebruikers kunnen deze notatiewijze niet, daarom een korte uitleg.

De schrijfwijze %NAAM% verwijst naar zogenaamde omgevingsvariabelen.

Een omgevingsvariabele is een concept dat op vrijwel alle operating systems voorkomt. Een omgevingsvariabele heeft een naam en een waarde. Als de naam opgenomen wordt in statements, dan wordt die automatisch vervangen door de waarde. Dit maakt het mogelijk om een waarde eenmalig in te stellen voor een gebruiker of het hele systeem en daar telkens opnieuw gebruik van te maken. Mocht de waarde gewijzigd moeten worden, dan dient alleen de omgevingsvariabele aangepast te worden.

Operating systems hebben vaak een lijst van omgevingsvariabelen die automatisch een waarde krijgen of vrijwel altijd aanwezig zijn. Een bekende omgevingsvariabele op MacOS, Windows en Linux is PATH. PATH bevat een lijst van paden waarin gezocht wordt naar uitvoerbare programma’s.

Op Windows is er ook een omgevingsvariabele USERPROFILE. Deze wijst naar de map waar het profiel van de huidige Windows-gebruiker staat. In cmd.exe op Windows kan de waarde opgevraagd worden door de naam van een omgevingsvariabele in te voeren met een procent-teken (%) er voor en er achter:

opvragen %USERPROFILE%

In bovenstaande afdeling is te zien dat de gebruiker gle3 op het apparaat WS212 een profielmap heeft in c:\users\gle3.WS212.

Maar ook in de Windows Verkenner kunnen omgevingsvariabelen gebruikt worden. Door de naam in te voeren in de adresbalk en op Enter te drukken wordt genavigeerd naar de profielmap:

Invoeren

met als resultaat:

Profielmap met Invantive map

Duidelijk zichtbaar in de bovenstaande afbeelding is het Invantive-logo. Dit is de standaardmap waarin configuratiebestanden staan. De Invantive-map wordt in de rest van de tekst geschreven als %USERPROFILE%\invantive.

Niet-wijzigbare Lijst Databases uit Discovery

Standaard maakt Invantive Control for Excel een lijst van ongeveer 75 databases. De definities daarvan staan in het bestand %USERPROFILE%\invantive\settings-discovery-VERSIE.xml. Het opvoeren van deze databases gebeurt tijdens de “Discovery” of “Ontdekkingstocht”. De discovery draait tijdens het eerste gebruik en daarna na bij elke upgrade of elke drie maanden.

Het bestand %USERPROFILE%\invantive\settings-discovery-VERSIE.xml is niet bedoeld voor wijziging door gebruikers. Het bestand wordt automatisch vervangen bij een upgrade waarbij eventuele handmatige wijzigingen verdwijnen.

Eigen Database Definities

Maar niet alleen dit settings-discovery-VERSIE.xml bestand wordt gebruikt door Invantive SQL, maar alle bestanden in de map %USERPROFILE%\invantive met een naam die begint met settings en eindigt op xml worden gebruikt.

Daarom vind ik het het prettigst om per gebruikersgroep een bestand te maken met daarin alle databasedefinities, bijvoorbeeld %USERPROFILE%\invantive\settings-acmecorp.xml. Vervang hierbij acmecorp door je bedrijfsnaam.

<?xml version="1.0" encoding="utf-16"?>
<!-- Voorbeeld bestand Exact Online Nederland met Belgie
-->
<settings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  version="5"
  VersionUpdateDate="2020-11-27T12:09:59.0756754Z">
  <group
    iconResourceName32="exact_online_32.png"
    sortingOrder="0"
    name="ACME"
    id="a9a1a317-f173-4410-8447-298fa4344a9a">
    <connection
      IconResourceName16="exact_online_16.png"
      sortingOrder="10"
      id="c149becf-01d3-4a58-9ee7-7369f34bdff5"
      name="Exact Online NL plus BE"
      authentication="Default">
      <database
        order="10"
        alias="be"
        provider="ExactOnlineAll"
        connectionString="api-url=https://start.exactonline.be"
        AllowConnectionPooling="false" />
      <database
        order="20"
        alias="nl"
        provider="ExactOnlineAll"
        connectionString="api-url=https://start.exactonline.nl"
        AllowConnectionPooling="false" />
    </connection>
  </group>
</settings>

Ik zit met dezelfde vraag maar dan voor NL en UK. Bovenstaand voorbeeld gebruikt en iets aangepast maar dan gebeurt er helemaal niets meer. Hoe pak ik dat aan en hoe kan ik dan schakelen tussen twee landen?

Zou je wat je hebt qua instellingen in een nieuwe post willen zetten (geanonimiseerde instellingen) en daarbij vermelden wat de foutmelding is?

Qua instellingen is er niets veranderd. Ik heb in het XML voorbeeld de BE verwijzingen gewijzigd in uk en co.uk en los opgeslagen. Excel start op en na het inloggen lijkt het wel of er geen enkele connectie meer is met een database

@guido.leenders

Ik heb dit bestand aangemaakt zoals hierboven beschreven.
Na het ingeven van de verificatiecodes voor EOL BE en EOL NL krijg ik deze foutmelding met code itgengpr012: “Kan actieve partities niet wijzigen in …”:

Kan u mij hiermee verder helpen?

Waarschijnlijk komt dit doordat de app Invantive Control for Excel op Exact Online niet voldoende rechten op de administraties heeft gekregen.

Zie Itgeneor228 / itgenoda060: Forbidden - User division is not within division scope

Een vergelijkbaar probleem van andere gebruiker met vergelijkbaar aantal administraties is te lezen op Zie niet alle Exact Online administraties in Excel.

Anders biedt Foutmelding itgengpr012 bij het selecteren van Exact Online administraties waarschijnlijk hulp.

We adviseren met klem om in bedrijfsmatige omgevingen met veel administraties altijd rechten te geven op alle huidige en toekomstige administraties. Dit is securitytechnisch minder chique, maar gezien het grote aantal storingsmeldingen die we op deze nieuwe functionaliteit krijgen adviseren we dit voorlopig toch zo te doen totdat iedere Exact Online gebruiker de “division scoping” begrijpt qua mogelijkheden.

Voor zowel Exact Online BE als NL heb ik bij de appmachtiging ‘Toegang tot alle huidige en toekomstige administraties’ staan. Toch krijg ik een gelijkaardige melding als hierboven.

Ook heb ik de divisiecodes nagekeken en deze kloppen voor elke onderneming.

De divisiecode 2654043 in Nederland kan niet gevonden worden lijkt het. Is het mogelijk om via Teamviewer contact op te nemen met onze support? Er zijn nog een aantal minder vaak voorkomende issues, die helaas niet uit elkaar te houden zijn.

Waarschijnlijk is de XML incorrect. De makkelijkste manier om het te controleren is via een online XML validator. Controleer vooraf dat geen vertrouwelijke gegevens in de XML van settings-*.xml staan en plak dan de XML. Bij problemen komt een foutmelding terug.

Mocht dat niet lukken, plak (na vervangen gevoelige informatie) de XML dan als antwoord hierop.

Hi Guido,

Ik zit met hetzelfde probleem als hierboven. Binnen het Excel bestand moet ik tegelijkertijd een connectie hebben met zowel de Nederlandse Exact als de Belgische. Nu denk ik dat ik op deze pagina de oplossing voor mij staat, alleen kom ik nog niet helemaal uit. Ik begrijp dat ik het bestand hierboven moet hebben, alleen hoe kan ik dit bestand downloaden of is het een soort van instelling binnen Excel?

Ik hoor het graag.

Hi Guido,

Bedankt voor je aanvulling. Het is me inmiddels gelukt om het settings.xml bestand aan te passen en ik kan nu ook op EOL NL en BE tegelijk inloggen, alleen krijg ik nu een nieuwe foutmelding:

itgengpr012

itgengpr012: itgengpr012: Kan actieve partities niet wijzigen in 2670398@nl, 2670401@nl, 2670412@nl, 2670420@nl, 2670424@nl, 2670428@nl, 2...@nl, 2673022@nl, 2673645@nl, 2674274@nl, 2881568@nl, 2881571@nl, 464019@be omdat de partitie '2881568@nl' niet bestaat. Kies alleen geautoriseerde en gelicentieerde partities. Voorgestelde alternatieven: 2881568: xyz B.V. - 2019, 2881571: abc B.V.- 2020.

Bericht ID: a1b758f2-7ce0-4b46-80dd-10c131e257a6

Opgetreden (UTC): 15-Jun-21 8:05:37 AM

ValidationException
   at Invantive.Basics.ValidationException..ctor(GlobalState owner, ExecutionOptions executionOptions, String messageCode, String messageText, String kindRequest, String localStackTrace, String nk, Exception innerException, Boolean inheritMessageCodeWhenPresent, Nullable`1 uid, Boolean isRecoverable)
   at Invantive.Data.GenericProvider.SetSelectedPartitions(GlobalState owner, ExecutionOptions executionOptions, SetPartitionMode setPartitionMode, String[] partitionCodes)
   at Invantive.Data.Providers.ExactOnline.ExactOnlineProvider.SetSelectedPartitions(GlobalState owner, ExecutionOptions executionOptions, SetPartitionMode setPartitionMode, String[] partitions)
   at Invantive.Data.ConnectionManager.YD(GlobalState , ExecutionOptions , SetPartitionMode , String[] )
   at Invantive.Data.ConnectionManager.SetSelectedPartitions(GlobalState owner, ExecutionOptions executionOptions, SetPartitionMode setPartitionMode, String[] specificPartitions)
   at Invantive.Producer.UtilityBaseCore.LoadSavedSelectedPartitions(GlobalState owner, ExecutionOptions executionOptions)
   at Invantive.Producer.Control.ActionsRibbon.ConnectionManager_StatusChange(Object sender, StatusChangeEventArgs e)
   at Invantive.Data.StatusChangeEventHandler.Invoke(Object sender, StatusChangeEventArgs e)
   at Invantive.Data.ConnectionManager.FireEvent(GlobalState owner, ExecutionOptions executionOptions, String messageCode, EventType eventType, String naturalKey, Object data)
   at Invantive.Data.ConnectionManager.KE(GlobalState , ExecutionOptions , CredentialsContainer )
   at Invantive.Data.ConnectionManager.Open(GlobalState owner, ExecutionOptions executionOptions, CredentialsContainer credentialsContainer, Boolean ignoreDecryptionErrors, Boolean& decryptionErrorsOccurred)
   at Invantive.Producer.UtilityBaseCore.OpenDatabase(GlobalState owner, ExecutionOptions executionOptions, String databaseFullName, CredentialsContainer credentialsContainer, Boolean ignoreDecryptionErrors, Boolean& decryptionErrorsOccurred)
   at Invantive.Producer.Windows.Forms.LogOnViewModel.GK()
   at System.Threading.Tasks.Task.Execute()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot)
   at System.Threading.Tasks.Task.ExecuteEntry(Boolean bPreventDoubleExecution)
   at System.Threading.ThreadPoolWorkQueue.Dispatch()
   at Invantive.Data.Providers.ExactOnline.ExactOnlineProvider.VVD(GlobalState , ExecutionOptions , List`1 )
   at Invantive.Data.Providers.ExactOnline.ExactOnlineProvider.SetSelectedPartitions(GlobalState owner, ExecutionOptions executionOptions, SetPartitionMode setPartitionMode, String[] partitions)
   at Invantive.Data.ConnectionManager.YD(GlobalState , ExecutionOptions , SetPartitionMode , String[] )
   at Invantive.Data.ConnectionManager.SetSelectedPartitions(GlobalState owner, ExecutionOptions executionOptions, SetPartitionMode setPartitionMode, String[] specificPartitions)
   at Invantive.Producer.UtilityBaseCore.LoadSavedSelectedPartitions(GlobalState owner, ExecutionOptions executionOptions)
   at Invantive.Producer.Control.ActionsRibbon.ConnectionManager_StatusChange(Object sender, StatusChangeEventArgs e) in C:\Users\gle3.WS212\Documents\ws-20.0\Invantive.Control\src\Invantive.Producer.Control\ActionsRibbon.cs:line 909

Het gebruikte XML bestand is:

<?xml version="1.0" encoding="utf-16"?>
<!-- Voorbeeld bestand Exact Online Nederland met Belgie -->
<settings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  version="5"
  VersionUpdateDate="2020-11-27T12:09:59.0756754Z">
  <group
    iconResourceName32="exact_online_32.png"
    sortingOrder="0"
    name="xyz"
    id="c9a1a317-f173-4410-8447-298fa4344a9a">
    <connection
      IconResourceName16="exact_online_16.png"
      sortingOrder="10"
      id="c249becf-01d3-4a58-9ee7-7369f34bdff5"
      name="Exact Online NL plus BE"
      authentication="Default">
      <database
        order="10"
        alias="be"
        provider="ExactOnlineAll"
        connectionString="api-url=https://start.exactonline.be"
        AllowConnectionPooling="false" />
      <database
        order="20"
        alias="nl"
        provider="ExactOnlineAll"
        connectionString="api-url=https://start.exactonline.nl"
        AllowConnectionPooling="false" />
    </connection>
  </group>
</settings>

Het weghalen van PartitionSelections in het *.settings bestand van Control boedt geen soelaas. Het lijkt er op dat de alias nl of be telkens weer toegevoegd wordt, ook waar dat niet nodig is.