Eenvoudige samengestelde artikelen maken inclusief arbeidskosten

Soms is het gebruik van samengestelde artikelen (BOM, productie, etc.) te veel van het goede in Exact Online en wil je alleen voor elk artikel een merkgebonden prijs inclusief montage presenteren. Hierbij is de montageprijs gelijk aan het merkspecifieke uurtarief maal de artikelspecifieke uurprijs.

Het volgende Invantive SQL script genereert een lijst van eenvoudige samengestelde artikelen per merk:

--
-- Per merk het uurtarief, het achtervoegsel achter de oorspronkelijke
-- artikelcode en de artikelgroep waar de samengestelde artikelen
-- in moeten landen.
--
create or replace table merken@inmemorystorage
as
select 'brand1' brand
,      105 hour_tariff
,      'b1' postfix
,      'B1-DUMMY' itemgroupcode
union all
select 'brand2' brand
,      130 hour_tariff
,      'b2' postfix
,      'B2-DUMMY' itemgroupcode

--
-- Het aantal minuten per artikel voor de montagetijd, zoals
-- vastgelegd in Exact Online met een numeriek extra veld op het artikel.
-- In dit voorbeeld wordt extra veld #2 gebruikt.
--
create or replace table itemextrafieldvalues@inmemorystorage
as
select efd.* 
from   systemdivisions sdn
join   itemextrafields(sdn.code, null, sdn.created) efd
on     efd.number   = 2

--
-- De nieuwe artikelen bestaande uit:
-- - Afgeleide artikelcode
-- - Omschrijving
-- - Nieuwe verkoopprijs.
--
create or replace table itemsnew@inmemorystorage
as
select itm.code || mrk.postfix codenew
,      itm.description
,      mrk.itemgroupcode itemgroupcode
,      sim.Price + round(efd2.value / 60 * mrk.hour_tariff, 2) price_combined
from   exactonlinerest..itemsbulk itm
join   merken@inmemorystorage mrk
join   itemextrafieldvalues@inmemorystorage efd2
on     efd2.division = itm.division
and    efd2.itemid   = itm.id
join   salesitemprices sim
on     sim.division = itm.division
and    sysdateutc >= sim.startdate
and    sysdateutc <= coalesce(sim.enddate, sysdateutc)
and    sim.item = itm.id
--
-- Gebruik als bron alle artikelen behalve de artikelgroepen gebruikt
-- voor afgeleide artikelen.
--
where  itm.itemgroupcode not in (select itemgroupcode from merken@inmemorystorage)

--
-- Schrijf de nieuwe artikelen weg naar een spreadsheet.
--
select *
from   itemsnew@inmemorystorage
order
by     codenew

local export results as "${system:userdocumentsdirectory}\items-new.xlsx" format xlsx

Indien nodig kunnen direct na de prijsbepaling de artikelen in Exact Online geladen worden via UploadXMLTopics of synchronize.