Bij verschillende toepassingen komt het voor dat bestelregels in Exact Online na het aanmaken aangepast moeten worden. Dit artikel illustreert een scenario en de beperkingen die momenteel gelden voor het aanpassen.
Aanpassen Kostenplaats
Een scenario is dat de kostenplaats van een bestelregel gelijk moet worden aan het nummer van de verkooporder waar de bestelling voor geplaatst is. Informatie over de artikelen, artikelen, de omschrijving, etc. moet hetzelfde blijven
De volgende SQL-query haalt uit Exact Online de regels van open verkooporders met de regels van bestellingen die er aan gekoppeld zijn:
set use-http-memory-cache false
create or replace table ple_soll@inmemorystorage
as
select to_char(sle.ordernumber) costcenter_soll
, sle.ordernumber
sle_ordernumber
, por.ordernumber
por_ordernumber
, ple.costcenter
ple_costcenter
, ple.* prefix with 'ple_'
, sle.* prefix with 'sle_'
from exactonlinerest..salesorderlines sle
join exactonlinerest..purchaseorderlines ple
on ple.division = sle.division
and ple.id = sle.PurchaseOrderLine
and coalesce(ple.costcenter, '###') != coalesce(to_char(sle.ordernumber), '###')
join exactonlinerest..purchaseorders por
on por.division = ple.division
and por.purchaseorderid = ple.PurchaseOrderID
--
-- Only consider incomplete sales orders for improved performance.
--
where sle.orderstatus in (12,20)
De lijst kan ook gebruikt worden als een controlelijst: de uitvoer van de volgende query zal alleen regels van bestellingen in Exact Online laten zien waarvan de kostenplaats afwijkt van de gewenste kostenplaats op basis van de verkooporder:
select *
from ple_soll@inmemorystorage
Deze lijst kun je exporteren via de knop “Exporteren” in bijvoorbeeld het Invantive Query Tool of met
local export results as "c:\temp\aan-te-passen.xlsx" format xlsx include technical headers
Massaal Wijzigen Bestelregels
Exact Online heeft op een aantal tabellen zoals offertes en verkopen geen mogelijkheid om die te wijzigen achteraf. Verwijderen en toevoegen kan wel. Voor bijvoorbeeld ecotaksen of bovengenoemde scenario kunnen daarom wel de gewenste nieuwe rijen toegevoegd worden en de oude verwijderd.
Dat gaat met code zoals:
declare
l_ple_id_new guid;
begin
for r in
( select *
from PLE_SOLL@InMemoryStorage
order
by por_ordernumber
, ple_linenumber
)
loop
insert into exactonlinerest..purchaseorderlines
( AmountDC
, AmountFC
, CostCenter
, CostUnit
, Description
, Discount
, Division
, Expense
, InStock
, Item
, LineNumber
, NetPrice
, Notes
, Project
, PurchaseOrderID
, Quantity
, QuantityInPurchaseUnits
, Rebill
, ReceiptDate
, ReceivedQuantity
, Unit
, UnitPrice
, VATAmount
, VATCode
, VATDescription
, VATPercentage
)
values
( r.ple_AmountDC
, r.ple_AmountFC
, r.costcenter_soll
, r.ple_CostUnit
, r.ple_Description
, r.ple_Discount
, r.ple_Division
, r.ple_Expense
, r.ple_InStock
, r.ple_Item
, r.ple_LineNumber
, r.ple_NetPrice
, r.ple_Notes
, r.ple_Project
, r.ple_PurchaseOrderID
, r.ple_Quantity
, r.ple_QuantityInPurchaseUnits
, r.ple_Rebill
, r.ple_ReceiptDate
, r.ple_ReceivedQuantity
, r.ple_Unit
, r.ple_UnitPrice
, r.ple_VATAmount
, r.ple_VATCode
, r.ple_VATDescription
, r.ple_VATPercentage
);
delete
from exactonlinerest..purchaseorderlines
where division = r.ple_division
and id = r.ple_id
;
end loop;
end;
Alle velden worden gekopieerd. Een risicofactor is dat Exact Online op de API’s geen transacties kent: er zal logica nodig zijn - al is het maar een werkinstructie voor de gebruiker - om indien Exact Online na het toevoegen maar voor het verwijderen vastloopt een correctie uit te voeren om dubbele bestellingen te vermijden.
Verdwenen Koppeling met Verkooporder
Echter, alle relaties die de oude bestelregel had verdwijnen door het verwijderen. Het insert
-statement herstelt alle relaties zoals naar artikel, maar helaas gaat dit niet overal voor op: de koppeling tussen verkoopregel en inkoopregel vervalt.
Een poging om deze relatie te herstellen via:
update exactonlinerest..salesorderlines
set PurchaseOrderLine = <<NEW PURCHASE LINE ID>>
where division = r.sle_division
and id = r.sle_id
leert dat de tabel met verkooporderregels geen mutatie toestaat via de Exact Online API’s op de relatie naar de nieuwe bestelregel.
In dit geval zal dus gekozen moeten worden voor handmatige invoer als de relatie behouden dient te blijven, of voor automatische toevoeging van het nummer van de verkooporder als men bereid is alle logistieke en rapportage consequenties van het vervallen van de relatie tussen die twee te accepteren.