Wanneer u werkt met PSA timesheet.core facturatie vanaf release 252 van Exact Synergy Enterprise in combinatie met de add-on Solution Builder (geen standaard PSA-projecten) kan een probleem ontstaan bij de facturatie. Onderstaande oplossing is noodzakelijk als u een Solution Builder entiteit heeft gemaakt van project of als ook andere Solution Builder entiteiten worden gebruikt in de PSA-processen.

Achtergrond
Vanaf database model 403120709 en 403120726 (3-1-2013 laatst gewijzigd) is een script toegevoegd in de standaard programmatuur. In dit script wordt eenmalig de ‘PRProject.IDCustomer’ gevuld in de velden ‘PRProject.IDOrderAccount’ en ‘PRProject.IDInvoiceAccount’. Tevens wordt eenmalig de ‘cicmpy.cnt_ic’ gevuld in de velden ‘PRProject.IDOrderContact’, ‘PRProject.IDDeliveryContact’ en ‘PRProject.IDInvoiceContact’. Vanaf release 252 van Exact Synergy Enterprise zijn deze velden toegevoegd en verplicht gemaakt op PSA-projecten van de types ‘nacalculatie’ en ‘vaste prijs’. Meer informatie kunt u lezen op de Exact Customer Portal in document ‘25.291.673 – Product Update 252: Contactpersoon van de projectfactuur wordt gerepliceerd naar de factuur in Exact Globe Next’.
De niet-PSA-entiteiten van Solution Builder (met types ‘nacalculatie’ of ‘vaste prijs’) die zijn aangemaakt na de update van het databasemodel, zijn niet meer gevuld met deze scripts en geven bij de facturatie via timesheet.core de volgende foutmelding:

Factuurnummer: 14202007 Berichten: Er is een fout opgetreden bij het creëren verkoopfactuur kop.: Verzoek: 00.083.902 Bericht: Error in SQL statement ‘SELECT acc.cmp_name, cp.cnt_l_name, cp.predcode,cp.initials,cp.cnt_job_desc,addr.phone,addr.fax,cp.cnt_email, addr.addressline1,addr.addressline2,addr.addressline3,addr.postcode,addr.city,addr.statecode, addr.Country,l.oms60_0,ads.Name FROM cicntp cp INNER JOIN cicmpy acc ON cp.cmp_wwn=acc.cmp_wwn LEFT OUTER JOIN Addresses addr ON addr.account = acc.cmp_wwn AND addr.Type=N’INV’ LEFT OUTER JOIN Land l ON l.landcode = addr.country LEFT OUTER JOIN AddressStates ads ON addr.StateCode = ads.StateCode AND addr.Country = ads.CountryCode WHERE cp.cnt_id = @P1′ : Must declare the scalar variable “@P1”.

Oplossing
Om dit probleem op te lossen dient u de nieuwe PSA-velden toe te voegen aan de niet-PSA-entiteiten die gebruikt worden bij de facturatie. Hernoem daarvoor het label van het veld ‘IDCustomer’ naar ‘Levering aan’. Maak de volgende nieuwe referentievelden aan (<Naam> – <Label> – <Referentie> – <Relatie>):

  • IDOrderAccount – Besteld door – Relaties
  • IDInvoiceAccount – Factuur voor – Relaties
  • IDDeliveryContact – Contactpersoon – Contactpersonen – Levering aan
  • IDInvoiceContact – Contactpersoon – Contactpersonen – Factuur voor
  • IDOrderContact – Contactpersoon – Contactpersonen – Besteld door

Voeg de velden toe op het entiteittype waar vanuit gefactureerd wordt en controleer of het veld “Type project” al is toegevoegd. Alle nieuwe velden dienen verplicht te zijn in alle statussen.

LET OP: Wanneer het veld ‘IDCustomer’ al wordt gebruikt voor iets anders, dan moet de ‘Contactpersoon (Factuur voor)’ altijd afhankelijk zijn van deze relatie. Als dit niet wenselijk is, dient de inhoud van het veld ‘IDCustomer’ naar een nieuw veld te worden overgezet.

LET OP: Voer een deployment uit van Solution Builder!

Vul vervolgens eenmalig alle nieuwe PSA-velden die nog niet eerder zijn gevuld:

begin tran
update PRProject set
IDOrderAccount = pr.IDCustomer, -- Besteld door
IDInvoiceAccount = pr.IDCustomer, -- Factuur voor
IDInvoiceContact = ci.cnt_id, -- Contactpersoon: factuur voor
IDOrderContact = ci.cnt_id, -- Contactpersoon: besteld door
IDDeliveryContact = ci.cnt_id -- Contactpersoon: levering aan
from PRProject pr (nolock)
inner join cicmpy ci (nolock) on pr.IDCustomer = ci.cmp_wwn -- INNER JOIN: IDCustomer (Levering aan) moet dus gevuld zijn
where
pr.Type in ('H','F') -- Nacalculatie, Vaste prijs
and pr.IDDeliveryContact is null and pr.IDOrderAccount is null and pr.IDOrderContact is null and pr.IDInvoiceAccount is null and pr.IDInvoiceContact is null
--commit / rollback

Controleer nu of er geen andere entiteiten zijn waarvan de ‘IDCustomer (Levering aan)’ niet is gevuld:

select projectnr from PRProject pr (nolock)
where
pr.Type in ('H','F') -- Nacalculatie, Vaste prijs
and pr.IDCustomer is null

Voor nieuwe entiteiten dienen de velden handmatig te worden gevuld.
Wanneer u werkt met de add-on Trigger and Validation Manager (in combinatie met ITSM), houd er dan rekening mee dat de TVM-functionaliteit aangepast dient te worden voor entiteiten die vanuit een achtergrondproces worden aangemaakt. Er kan voor worden gekozen om de velden onder sectie ‘Contract’ verborgen te houden. Er dient in dat geval een nieuwe TVM-taak te worden aangemaakt die de overige velden automatisch vult. Laat alle velden (bevalve ‘IDCustomer’) niet verplicht. Maak per entiteit de volgende TVM-trigger:

Tussentabel vullen:

insert into _conn_tb_CSNob1799ITSM_CHA_C_Mode, _Task, _EventSessionID, ProjectNr, IDOrderAccount, IDInvoiceAccount, IDInvoiceContact, IDOrderContact, IDDeliveryContact)
(select 1, @_EventDescription, @_EventSessionID, @projectnr, pr.IDCustomer as IDOrderAccount, pr.IDCustomer as IDInvoiceAccount, ci.cnt_id as IDInvoiceContact, ci.cnt_id as IDOrderContact, ci.cnt_id as IDDeliveryContact
from PRProject pr (nolock)
inner join cicmpy ci (nolock) on pr.IDCustomer = ci.cmp_wwn
where pr.Type in ('H','F') and pr.projectnr=@ProjectNr)

Vergeet niet om de tussentabel bij te werken nadat de nieuwe velden zijn toegevoegd.
Voor meer informatie kunt u contact opnemen met Eddon Software: info@eddon.nl