De volgende code kan gebruikt worden om facturen uit Easyflex te uploaden in Exact Online in het eigen gewenste formaat:
--
-- Verzamel de basisdata uit Easyflex voor de facturen in Exact Online.
--
create or replace table InvoiceLineData@InMemoryStorage
as
select drl.RlBedrijfsnaam EolAccountName
, drl.RlRegistratienummer
--
-- Vertaal (indien nodig) de relatienummers uit EasyFlex
-- naar Exact Online.
-- Het handigste is beiden gelijkhouden.
--
, case
when drl.RlRegistratienummer = 93101210 then '00000004'
when drl.RlRegistratienummer = 91 then 'A1'
when drl.RlRegistratienummer = 92 then 'A2'
when drl.RlRegistratienummer = 93 then 'A3'
else drl.RlRegistratienummer
end
EolAccountCode
, drl.FactuurNummer EolInvoiceNumber
--
-- De factuuromschrijving.
--
, 'Gewerkte uren ' || drl.Jaar || '-' || drl.Maand
EolDescription
, case
when drl.Type = 1
then '2'
else '0'
end
EolVATCode
--
-- De gewenste artikelcode.
--
, 'Gewerkte uren' EolItemCode
, drl.RlTarief EolUnitPrice
, drl.LcNaam
|| ': '
|| drl.FwVoornaam
|| ' '
|| drl.FwAchternaam
|| ' ('
|| drl.Functie
|| ')'
EolLineDescription
, drl.RlUren EolQuantity
, drl.Omzet EolAmountDC
from Views.DeclaratieRegels@efx drl
--
-- Filter factuurperiode/jaar.
--
where drl.Jaar = 2023
and drl.Maand = 10
--
-- Filter specifieke klant.
--
--and drl.RlRegistratienummer = 93101210
--
-- Vervolgens worden de regels getotaliseerd per combinatie.
-- Hierbij worden meerdere registraties van een medewerker
-- op een aantal dagen samengevoegd op een combinatie
-- van tarief, naam en rol.
--
create or replace table InvoiceDataCompressed@InMemoryStorage
as
select EolAccountCode
, EolInvoiceNumber
, EolDescription
, EolVATCode
, EolItemCode
, EolUnitPrice
, EolLineDescription
, sum(EolQuantity) EolQuantity
, sum(EolAmountDC) EolAmountDC
from InvoiceLineData@InMemoryStorage
group
by EolAccountCode
, EolInvoiceNumber
, EolDescription
, EolVATCode
, EolItemCode
, EolUnitPrice
, EolLineDescription
--
-- De gecomprimeerde faactuurdata wordt nu omgezet naar
-- factuurregelinformatie voor Exact Online in het XML-formaat.
-- Het XML-formaat levert de hoogste snelheid en is
-- eenvoudiger aanpasbaar mocht een deel van de facturen niet
-- lukken.
--
create or replace table InvoiceLinesXml@InMemoryStorage
as
select EolAccountCode
, EolInvoiceNumber
, EolDescription
, '<InvoiceLine>'
|| '<Item code="' || t.EolItemCode || '"/>'
|| xmlelement('Quantity', t.EolQuantity)
|| '<UnitPrice><Currency code="EUR" />'
|| xmlelement('Value', t.EolUnitPrice)
|| '<VAT code="' || t.EoLVatCode || '"/>'
|| '</UnitPrice>'
|| xmlelement('Description', t.EolLineDescription)
--
-- Eventueel: Total Amount niet automatisch berekenen
-- Eventueel: StartDate en EndDate vullen t.b.v. juiste periode voor
-- omzetbijdrage.
--
|| '</InvoiceLine>'
LineXml
from InvoiceDataCompressed@InMemoryStorage t
--
-- Voeg alle regels van 1 factuur samen tot een XML-bericht
-- per factuur.
--
create or replace table InvoicesXml@InMemoryStorage
as
select EolInvoiceNumber
, '<Invoice>'
-- Eventueel: EolInvoiceNumber opvoeren als vereist factuurnummer.
-- Kies een dagboek naar keuze zoals 95.
|| '<Journal code="95"/>'
|| xmlelement('Description', t.EolDescription)
|| '<OrderedBy code="' || to_char(t.EolAccountCode) || '"/>'
|| '<InvoiceTo code="' || to_char(t.EolAccountCode) || '"/>'
|| t.xml
|| '</Invoice>'
xml
from ( select EolAccountCode
, EolInvoiceNumber
, EolDescription
, listagg(Linexml, '') xml
from InvoiceLinesXml@inmemorystorage
group
by EolAccountCode
, EolInvoiceNumber
, EolDescription
) t
--
-- Upload de facturen in Exact Online, waarbij
-- Invantive automatisch de facturen-XML opknipt
-- voor maximale snelheid en geen storingen
-- door beperkingen gesteld aan de XML door Exact Online.
--
insert into UploadXMLTopics@eol
( orig_system_reference
, topic
, payload
, division_code
, orig_system_group
, fragment_payload_flag
, fragment_max_size_characters
)
select null
orig_system_reference
, 'Invoices'
topic
, xmlformat
( '<?xml version="1.0" encoding="UTF-8"?>'
|| '<eExact xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="eExact-XML.xsd">'
|| '<Invoices>'
|| xml
|| '</Invoices>'
|| '</eExact>'
)
payload
, to_char(DIVISIONCODE)
division_code
, null
orig_system_group
, true
fragment_payload_flag
, 250000
fragment_max_size_characters /* Try to split into pieces of 250 KB at most. */
from ( select listagg(xml, '') xml
from InvoicesXml@InMemoryStorage
)
--
-- Controleer de resultaten.
--
select *
from uploadxmltopicfragments@eol