Gerealiseerde omzet per artikel op Exact Online abonnementen met uitgestelde omzet

Abonnementen en Transitorische Posten

Veel abonnementen op maandbasis worden in Exact Online gefactureerd op een datum buiten de periode waar de omzet op betrekking heeft. Met uitgestelde omzetboekingen (“transitoria” of “transitorische posten”) wordt de omzet dan gealloceerd in de verslagperiode.

Het is momenteel niet mogelijk om in de Exact Online administraties te zien hoeveel omzet op welk artikel is gemaakt na allocatie. De volgende query is een eenvoudig voorbeeld hoe je voor meerdere administraties in 1x grofstoffelijk de omzet kunt bepalen per artikel, gebruik makend van uitgestelde omzet.

Randvoorwaarden Instelling Uitgestelde Omzet

Randvoorwaarden zijn dat:

  • De uitgestelde omzet wordt per periode verdeeld en niet per aantal dagen van de periode; dit kun je instellen bij de administratie-instellingen via het menu linksboven.
  • De uitgestelde omzet valt binnen 1 periode (dus bijvoorbeeld geen jaarfacturen); dit doe je door aparte facturen te maken per periode of de jaarfacturen op artikelniveau handmatig uit te splitsen.

Het is helaas voor zover bekend niet makkelijk om via de Exact Online tabellen de oorspronkelijke boeking te relateren aan de uitgestelde omzetboeking op regelniveau, anders dan via bedrag en boekstuknummer.

Query Uitgestelde Omzet voor Artikelen in Exact Online

De volgende query is geschikt voor gebruik met Invantive Query Tool en werkt zowel voor 1 Exact Online administratie als voor meerdere administraties tegelijk. De query kan gemakkelijk omgezet worden in een Get My Report rapport of een kleine web-app met Invantive Cloud.

local define FINANCIAL_YEAR "2020"

local define FINANCIAL_PERIOD "3"

local define JOURNAL_CODE_REV "80"

local define JOURNAL_CODE_MEMO "92"

select tleinv.divisionlabel
,      tleinv.type
,      tleinv.itemcode
,      tleinv.itemdescription
,      tleinv.amountdc
,      tleinv.accountname
,      tleinv.financialyear
,      tleinv.financialperiod
,      tleinv.date
,      tleinv.journalcode
,      tleinv.glaccountcode
,      tleinv.glaccountdescription
,      tleinv.description
,      tleinv.glaccounttype
,      tledef.date
,      tledef.description
,      tleinvrel.date
,      tleinvrel.description
,      coalesce(tleinvrel.amountdc, tleinv.amountdc) 
       amountdc_allocated
from   transactionlinesbulk tleinv
left
outer
join   transactionlinesbulk tledef
on     tledef.division        = tleinv.division
and    tledef.invoicenumber   = tleinv.invoicenumber
and    tledef.financialyear   = ${FINANCIAL_YEAR}
and    tledef.financialperiod = ${FINANCIAL_PERIOD}
and    tledef.glaccounttype   = 110
and    tledef.item is null
and    round(tledef.amountdc, 2) = -round(tleinv.amountdc, 2)
and    tledef.date            = tleinv.date
and    tledef.type            = 84
and    tledef.journalcode     = '${JOURNAL_CODE_MEMO}'
left
outer
join   transactionlinesbulk tleinvrel
on     tleinvrel.division = tleinv.division
and    tleinvrel.invoicenumber = tleinv.invoicenumber
and    tleinvrel.glaccounttype = 110
and    tleinvrel.item          is null
and    tleinvrel.type          = 84
and    round(tleinvrel.amountdc, 2) = -round(tledef.amountdc, 2)
and    tleinvrel.journalcode   = '${JOURNAL_CODE_MEMO}'
where  1=1
and    tleinv.financialyear   = ${FINANCIAL_YEAR}
and    tleinv.financialperiod = ${FINANCIAL_PERIOD}
and    tleinv.glaccounttype   = 110
--
-- Article is optional, some invoices are made without article.
--
--and    tleinv.item is not null
and    tleinv.journalcode = '${JOURNAL_CODE_REV}'
order
by     tleinv.divisionlabel
,      tleinv.financialyear
,      tleinv.financialperiod
,      tleinv.date