PurchaseRequest (Bestelaanvraag)
De PurchaseRequest-entiteit beheert bestelaanvragen in Ultimo. Een bestelaanvraag is het voorstadium van een bestelling en doorloopt een fiattering/goedkeuringsproces voordat er daadwerkelijk wordt besteld. Bestelaanvragen kunnen handmatig worden aangemaakt of automatisch vanuit jobs.
Entiteitsnaam: PurchaseRequest
Databasetabel: PurchaseRequest
Primaire sleutel: PCHRID (nvarchar 11)
Contextsbewerken
| Value | Naam | Beschrijving |
|---|---|---|
| 0 | PurchaseRequestContext.None | Bestelaanvraag |
| 1 | PurchaseRequestContext.Standard | Bestelaanvraag |
| 2 | PurchaseRequestContext.Tender | Offertetraject |
| 4 | PurchaseRequestContext.OrderRequest | Bestelaanvraag |
Statussenbewerken
| Value | Naam | Beschrijving |
|---|---|---|
| -1 | PurchaseRequestStatus.Trash | Trash |
| 0 | PurchaseRequestStatus.None | None |
| 1 | PurchaseRequestStatus.Created | Aangemaakt |
| 2 | PurchaseRequestStatus.Requested | Aanvraag |
| 4 | PurchaseRequestStatus.Concept | Concept |
| 8 | PurchaseRequestStatus.Approved | Goedgekeurd |
| 16 | PurchaseRequestStatus.PurchaseCreated | Bestelling aangemaakt |
| 32 | PurchaseRequestStatus.Rejected | Afgewezen |
| 64 | PurchaseRequestStatus.Active | Actief |
| 128 | PurchaseRequestStatus.Closed | Gesloten |
| 256 | PurchaseRequestStatus.PartiallyDelivered | Deels geleverd |
| 512 | PurchaseRequestStatus.Delivered | Geleverd |
| 2048 | PurchaseRequestStatus.PurchaseAdvice | Besteladvies |
Belangrijkste propertiesbewerken
| Property | Type | Kolom | Nullable | Omschrijving |
|---|---|---|---|---|
| Id | UltimoString(11) | PCHRID | Nee | Bestelaanvraag-ID |
| Description | UltimoString(200) | PCHRDESCR | Ja | Omschrijving |
| Date | Date? | PCHRDATE | Ja | Datum (default: vandaag) |
| RequestedDeliveryDate | Date? | PCHRREQUESTEDDLVDATE | Ja | Gewenste leverdatum |
| Currency | Currency | PCHRCURID | Nee | Valuta |
| StandardTotalPrice | CompanyMoney | PCHRSTDTOTALPRICE | Nee | Standaard totaalprijs (readonly) |
| TotalPrice | TransactionMoney | PCHRTOTPRICE | Nee | Totaalprijs |
| Text | UltimoString | PCHRTEXT | Ja | Tekst |
| Charge | Boolean | PCHRCHARGE | Nee | Doorbelasten |
| CreatedFromJob | Boolean | PCHRCREATEDFROMJOB | Nee | Aangemaakt vanuit job |
| FinalReplyDate | DateTime? | PCHRFINALREPLYDATE | Ja | Uiterste reactiedatum |
Functionaliteit & property-gedragbewerken
Veel PurchaseRequest- en PurchaseRequestLine-properties worden niet handmatig gevuld maar door workflows berekend of overgenomen. Onderstaande paragrafen beschrijven het gedrag van de belangrijkste velden; gebruik lookup_property_usage("PurchaseRequest", "<property>") voor de volledige, actuele lijst workflows per property en lookup_workflow("<naam>") voor de XML.
Statusverloop & initialisatie (
Status) — De levenscyclus van een bestelaanvraag wordt volledig door workflows beheerd.PurchaseRequest_Conceptzet de aanvraag op de Concept-status en vult tegelijkSite,CostCenter,Department,RequestEmployee,Account,ChargeenCostTypevanuit de aanvrager of de gekoppelde job.PurchaseRequest_ApproveAndActivateschakelt door naar Goedgekeurd (8), enPurchaseRequest_Delivermarkeert de aanvraag als Geleverd (512).PurchaseRequest_PostCloseleestStatusDeliveredEmployeeom de afrondende medewerker vast te leggen. Consultanttip: negen workflows schrijvenStatus; filter erop met de statusmatrix in reference/properties/PurchaseRequest voordat je een aangepaste statusovergang bouwt.Goedkeuring & drempelwaarden (
StandardTotalPrice,CostCenter,Department) — De fiatteerketen start metPurchaseRequest_GenerateApprovals, dieStandardTotalPrice,CostCenterenDepartmentleest om het juiste goedkeuringsniveau te bepalen.PurchaseRequest_PreRequestedvalideert diezelfde velden en blokkeert de overgang als kostenzuil of bedrag ontbreekt.PurchaseRequest_PreApprovevoert een laatste controle uit opCostCenter,Department,AccountenCharge. Bedragen worden niet op de PurchaseRequest zelf gezet, maar worden via triggers opgehaald uit de totalen van de onderliggende PurchaseRequestLines (PchrStdTotalPrice).Omzetten naar bestelling via besteladvies (
PurchaseAdvice) — De route van bestelaanvraag naar bestelling loopt in veel gevallen via een besteladvies.PurchaseAdvice_CreatePurchaseLineleest op de PurchaseRequestLine de veldenArticle,PurchaseQuantity,Site,Vendor,CostCenter,Department,Warehouse,GrossPrice,CurrencyenLeadTimeom de corresponderende bestelregel samen te stellen.PurchaseAdvice_CreatePurchaseWithPurchaseLinecombineert header- en regelaanmaak in één stap.Artikeldata op aanvraagregels (
Article,GrossPrice,Currency,LeadTime,Vendor) — Zodra een artikel op een PurchaseRequestLine wordt gekozen, vultPurchaseRequestLine_CopyArticleDataalle handelsgegevens in: eenheidsprijs (GrossPrice), valuta (Currency), levertijd (LeadTime) en de preferente leverancier.PurchaseRequestLine_GetPreferredVendorbepaalt de leverancier op basis van artikel + vestiging.PurchaseRequestLine_CopyStandByContractDataoverschrijft prijs en leverancier wanneer er een standby-contract actief is. Bij een prijsmutatie updatePriceMutationLine_UpdatePurchaseRequestLinerechtstreeksGrossPriceop openstaande aanvraagregels.Bezorgdatum & levertijd (
RequestedDeliveryDate,LeadTime,CalculateDeliveryDateMethod) —PurchaseRequestLine_CalculateRequestedDeliveryDateberekentRequestedDeliveryDateop basis van de methode inCalculateDeliveryDateMethod(bijv. levertijd van leverancier, of vaste datum), gecombineerd metLeadTimeenVendor.Job_ValidatePurchaseRequestDeliveryDatescontroleert achteraf of de berekende datum nog aansluit bij de jobplanning. Consultanttip: de berekeningswijze wordt gezet doorPurchaseRequestLine_SetValuesDependingOnJobenJob_CreatePurchaseRequestLine; wijzig die workflows als de berekeningslogica niet voldoet.Reservering & magazijn (
ReservedQuantity,Warehouse) — Bij de pre-Reserved-transitie zetPurchaseRequestLine_PreReservedWarehouseenReservedQuantity.PurchaseRequestLine_UpdateArticleQuantityactualiseert daarna de beschikbare artikelvoorraad in het magazijn. Bij annulering van de reservering resetPurchaseRequestLine_PreReservedToApprovedde gereserveerde hoeveelheid. Webshop-aanvragen synchroniseren voorraad viaArticleWarehouse_UpdateWebShopWarehouse.Offertetraject (
Tender, context 2) — Aanvraagregels kunnen worden doorgezet naar een offerte-traject. DeTender-property (verwijst naar een tweede PurchaseRequest met context Tender) wordt gezet doorActionField590,ActionField591,ActionField603enActionField608. De workflowsPurchaseRequestLine_PreConceptToTender,PurchaseRequestLine_PreApprovedToTender,PurchaseRequestLine_PreNoneToTenderenPurchaseRequestLine_PrePurchaseAdviceToTendersturen de statustransitie van de regel naar het offertetraject.RequestForQuotation_PreSentleestFinalReplyDatevan de bestelaanvraag om de uiterste reactiedatum op de offerte-aanvraag door te zetten.JobSelected(Boolean op PurchaseRequestLine) wordt gezet zodra een aanvraagregel is gekoppeld aan een bestelling; negen overgangsworkflows schrijven dit veld alstrueom dubbelbestelling te voorkomen.
Het volledige overzicht van álle PurchaseRequest-properties met hun schrijvende/lezende/filterende workflows staat in reference/properties/PurchaseRequest (en reference/properties/PurchaseRequestLine).
Relaties met andere entiteitenbewerken
| Property | Verwijst naar | Omschrijving |
|---|---|---|
| Job | job | Gekoppelde job |
| RequestEmployee | employee | Aanvrager |
| Account | Account | Grootboekrekening |
| CostCenter | CostCenter | Kostenplaats |
| CostType | CostType | Kostensoort |
| Department | Department | Afdeling |
| Site | Site | Vestiging |
| RequestedDeliverySpace | Space | Afleverruimte |
| Lines | List[PurchaseRequestLine] | Aanvraagregels |
Tips voor consultantsbewerken
- Statusflow: Aangemaakt (1) -> Aanvraag (2) -> Goedgekeurd (8) -> Bestelling aangemaakt (16) -> Actief (64) -> Deels geleverd (256) -> Geleverd (512) -> Gesloten (128).
- Fiattering: De fiattering werkt op basis van het
ApprovalLevelvan de medewerker en bedragen op de aanvraagregels. - Offertetraject: Context
Tender(2) wordt gebruikt voor offerteaanvragen waarbij leveranciers offertes kunnen uitbrengen. - Vanuit job: Als
CreatedFromJob = true, is de aanvraag automatisch aangemaakt vanuit een werkorder. - Regels: De daadwerkelijke artikelen en bedragen staan op de
PurchaseRequestLine-entiteit.
Database Detailsbewerken
De tabel dba.PurchaseRequest bevat 49 kolommen. PurchaseRequest heeft geen computed columns.
Kolommen gezet door triggersbewerken
| Kolom | Type | Toelichting |
|---|---|---|
PchrStdTotalPrice |
decimal(21,5) | Standaard totaalprijs -- automatisch berekend uit aanvraagregels |
PchrStdVatPrice |
decimal(21,5) | Standaard BTW-bedrag -- automatisch berekend |
PchrStdTotPriceInclVat |
decimal(21,5) | Totaalprijs inclusief BTW -- automatisch berekend |
Belangrijke defaultsbewerken
| Kolom | Default | Toelichting |
|---|---|---|
PchrContext |
0 (Bestelaanvraag) |
Standaard context |
PchrRecStatus |
0 (None) |
Standaard status |
PchrCharge |
0 (false) |
Niet doorbelasten standaard |
PchrCreatedFromJob |
0 (false) |
Niet vanuit job aangemaakt |
PchrTotPrice |
0 |
Begintotaal nul |
PchrRecCreateDate |
sysdatetimeoffset() |
Aanmaakdatum automatisch |
Triggers en externe triggersbewerken
PurchaseRequest heeft geen eigen triggers en wordt beinvloed door 2 externe triggers:
- PurchaseRequestLine-triggers: Bij INSERT/UPDATE/DELETE van aanvraagregels worden
PchrStdTotalPrice,PchrStdVatPriceenPchrStdTotPriceInclVatherberekend
Consultanttip: Alle prijsberekeningen op de PurchaseRequest worden gestuurd vanuit de PurchaseRequestLine-tabel. De PurchaseRequest zelf heeft geen eigen triggers, wat het een relatief eenvoudige entiteit maakt qua database-gedrag. Het fiattering/goedkeuringsproces wordt afgehandeld via workflows, niet via triggers.
Brondatabewerken
Let op: De wiki-samenvatting hierboven toont een curated subset van properties en praktische consultant-tips. Voor ground truth (exacte kolomnamen, alle properties, defaults, triggers) gebruik de onderstaande tools.
- Entity-definitie —
lookup_entity("PurchaseRequest")· reference/entities/PurchaseRequest Alle properties, contexts en statussen. Bron:Entities.xml. - DB-schema —
lookup_table_schema("PurchaseRequest")· reference/tables/PurchaseRequest Alle DB-kolommen, triggers, computed columns en defaults. Bron:database-schema.json. - Gerelateerde workflows —
find_workflows("", entity="PurchaseRequest")Alle Before/After Save events en andere workflow-ActionFields voor PurchaseRequest. Bron:workflows.xml. - Property-gebruik —
lookup_property_usage("PurchaseRequest", "Status")· reference/properties/PurchaseRequest Welke workflows een specifieke PurchaseRequest-property (of die van reference/properties/PurchaseRequestLine) lezen/schrijven/filteren. Bron:workflows.xml. - Workflow-XML van een vuller —
lookup_workflow("PurchaseRequest_Concept")De volledige initialisatielogica: hoeSite,CostCenter,Department,RequestEmployeeen statusovergangen worden gevuld bij het aanmaken van een bestelaanvraag. Bron:workflows.xml.