UBL_Writer HELP @customers.vbzs.nl

EULA (Nederlands)
Installatie
Bestanden
(Multi) users
Voorkeuren (preferences)
Verplichte KvK/CoC nummerinvoer
Nieuwe versie instellen
Facturen aan UBL_Writer aanbieden
Seller in JSON
Buyer in JSON
Invoiceheader in JSON
Invoiceline in JSON

Installatie:

  1. Download de zip van DemoVersion
  2. Na het uitpakken heb je 3 bestanden:
    • UBL_Writer (Huidige versie 1.256)
    • UBL_Data
    • Example_Invoicing

De bestanden

Het bestand Example_Invoicing bevat uitsluitend een voorbeeld dat laat zien hoe je jouw eigen systeem geschikt kunt maken en kunt koppelen aan UBL_Writer. In de scripts vind je toelichting op de werking, maar dit bestand maakt geen onderdeel uit van UBL_Writer. Je kunt het daarom zonder problemen negeren.

UBL_Writer gebruikt het bestand UBL_Data voor het opslaan van alle gegevens, inclusief de licentie-informatie. Dit databestand is volledig open, maar de veldnamen in de bestaande tabellen en de structuur daarvan worden door UBL_Writer gebruikt.

Je kunt naar wens tabellen, velden, relaties enzovoort toevoegen, zolang je de bestaande structuur intact laat. Bij toekomstige updates blijft dit bestand altijd behouden. In enkele tabellen zijn kolomnamen gereserveerd (zoals Spare_01, Spare_02, enzovoort). Tijdens een update kan het voorkomen dat je wordt gevraagd een dergelijke kolomnaam te wijzigen, omdat deze wordt gebruikt voor nieuwe functionaliteit.

Als alternatief kun je ervoor kiezen om de nieuwste versie van UBL_Data te gebruiken, maar in dat geval zul je je eigen aanpassingen daarin opnieuw moeten opnemen. Het is aan jou om te bepalen welke werkwijze het handigst is.

Multiuser/sharing en gebruikersbeheer

Zowel UBL_Writer als UBL_Data zijn klaar om te worden geshared. Beide bestanden bevatten de gebruikers: 'admin' en 'user', beiden hebben het wachtwoord: 'qwerty2025'.
Het is zeer raadzaam om voor deze wachtwoorden iets anders in te stellen (een must indien jouw server bereikbaar is vanaf internet).

Het bestand UBL_Data is voor de gebruiker admin volledig toegankelijk.
In UBL_Writer (waar "the magic" plaatsvindt) is de toegang met [Full Access] echter verwijderd. Je kunt hier de 'extended privileges' in security wijzigen.

In de 'Security/Beveiliging' van UBL_Writer kan je wachtwoorden niet wijzigen
gebruik daarvoor het menu 'Change Password.../Wijzig wachtwoord...' in het menu 'File/Bestand':

Het is zeer aanbevolen om ten minste voor de gebruiker 'admin' een eigen wachtwoord in te stellen (maar ook voor 'user'). Daarvoor moet je dan als 'admin' (resp. als 'user') inloggen en dan het wachtwoord aanpassen

Wanneer dit is gedaan, kun je UBL_Writer en UBL_Data uploaden naar je eigen FileMaker Server (FMServer). Bij iedere update zal je de beveiliging weer even voor jouw situatie moeten aanpassen.

Voorkeuren en licentie-instellingen (preferences)

De voorkeuren kunnen uitsluitend worden ingesteld met het 'admin'-account. In dit onderdeel leg je onder andere de voorkeuren vast van de organisatie waarvoor je UBL-facturen genereert.

Daarnaast vind je hier de instellingen van de licentie. Wanneer je gebruikmaakt van een proeflicentie, kun je vanuit dit scherm eenvoudig een definitieve licentie aanschaffen. Er is geen extra functionaliteit verborgen achter de koopfunctie: tijdens de proefperiode is alle functionaliteit volledig beschikbaar. Na afloop van de proefperiode kun je echter geen UBL-facturen meer produceren.

Voor het aanvragen van een proeflicentie moeten minimaal de volgende velden worden ingevuld: CompanyName, CoCnr, VATnr en Email. Gebruik hiervoor de werkelijke bedrijfsgegevens, omdat anders geen geldige UBL-facturen kunnen worden gegenereerd. De overige velden mogen voorlopig leeg blijven, maar voor het aanmaken van volledig geldige UBL-facturen en voor de aanschaf van een definitieve licentie zijn ook de adresgegevens vereist.

Verplichte invoer KvK nummer:

In Nederland is iedere ondernemer verplicht ingeschreven bij de KvK (Kamer van Koophandel).
In België is dat de KBO (Kruispuntbank van Ondernemingen, Belgische ondernemingen kunnen hier hun BTWnummer invullen, zonder BE er voor te plaatsen)
In UBL_Writer moet dat nummer worden ingevuld i.v.m. het aanmaken van de factuur als je de licentie besluit af te nemen.

Eerste keer instellen van een nieuwe versie

Na het downloaden open je UBL_Writer stand-alone met het account 'admin'. Stel vervolgens voor dit account en voor het account 'user' de gewenste wachtwoorden in.

Wanneer je UBL_Writer via FileMaker Server (FMServer) gebruikt, stel dan bij de privilegesets 'maintenance' en '[data entry]' in de extended privileges de waarde fmapp in.

Nadat je deze instellingen hebt uitgevoerd, kun je UBL_Writer vervangen op de locatie waar je het bestand normaal gebruikt.

Een factuur aan UBL_Writer aanbieden om te converteren

De werking van UBL_Writer is recht toe recht aan: de inhoud moet in JSON-formaat worden aangeboden, tegelijk met een PDF-weergave die in het uiteindelijke UBL-document wordt opgenomen (embedded).

Zo'n JSON ziet er uit zoals in het voorbeeld in dit document: example.json. In de root staat 4 objecten: buyer, seller, invoice en line. de namen van de objecten en hun inhoud zijn redelijk beschrijvend en hieronder vind je een aantal toelichtingen:

{} (root)object (*-verplicht)comment
Seller {} address *Straat/postbus plus nummer plus toevoeging (bus in BE)
city *woonplaats
cocName *Naam van inschrijving bij de KvK
creditorNumberIndien bekend, het leveranciernummer waaronder verkoper bij de koper bekend staat
email *E-mailadres van verkoper
iban *IBAN waar het factuurbedrag naartoe moet worden overgemakt
name *Handelsnaam van verkoper
phoneTelefoonnummer
zip *Postcode
buyer {} address *Straat/postbus plus nummer plus toevoeging (bus in BE)
city *woonplaats
cocName *Naam van inschrijving bij de KvK
cocNrNummer van inschrijving bij de KvK (voor België gebruik het BTWnr zonder BE er voor)
countryIso2 *Landcode van het land volgens ISO3166-2. Zie ook de 'Valuelist: Country Code' in UBL_Writer
debtorNumber *Het debiteurnummer waaronder koper in uw administratie of boekhouding staat
easId *Voor NL is dit 9944 (btwnr) of 0106 (kvknr),voor BE is dit atijd 9925. Zie de 'Valuelist: ElectronicAddressScheme' in UBL_Writer
email *E-mailadres van koper
ibanIndien bekend het IBAN van de koper, bij automatische incasso is dit verplicht
name *Handelsnaam van koper
phoneTelefoonnummer
vatNr *BTW nummer
zip *Postcode
invoice {} currency *Meestal staat hier EUR, zie ook de 'Valuelist: 'Currency Code' in UBL_Writer
date *De factuurdatum. Geef alle kalenderdata altijd op als YYYY+MM+DD, dan is de invoer ondubbelzinnig.
deliveryCountryIso2 *Ivm de BTW moet het land van levering worden opgegeven
deliveryDate *Datum van levering, geef hier de datum van de eerste levering of de factuurdatum op (YYYY+MM+DD)
dueDate *De vervaldatum van de factuur (YYYY+MM+DD)
number *Factuurnummer
paymentID (* BE)Het betalingskenmerk. In België is dit de daar verplichte OGM code. In UBL is deze verplicht maar voor NL bedrijven wordt er automatisch debnr / factuurnr ingevuld indien dit veld leeg is gebleven
paymentMeans *Voor een normale bankoverschrijving moet hier 30 staan, bij contante betaling kan je ZZZ gebruiken. Zie daarvoor de keuzelijst: 'PaymentMeans' in UBL_Writer
paymentTerms *De betaalvoorwaarden die je hanteert, bijvoorbeeld '15 dagen na factuurdatum'. De verplichte 'dueDate' neem dit eigenlijk al voor zijn rekening
poNumberEen purchaseOrder nummer dat door de klant is opgegeven
remarkEen opmerking die opde factuur kan zijn geplaatst
type *380, dit is het standaardtype UBL-factuur dat UBL_writer maakt. Er zijn andere waarden mogelijk (zie de keuzelijst: Incoice type), maar het kan zijn dat er dan voorwaarden en eisen gaan meespelen waarmee in UBL_Writer geen rekening is gehouden.
line [] amount *Het product van 'quantity' en 'price'
buyerProjectdit kan het poNummer zijn, maar ook eennummer dat de klant per artikel heeft opgegeven
desciption *De product omschrijving, een eventueel artikelnummer kan hier naar eigen inzicht worden toegevoegd
price *De prijs (exclusief BTW) per factuureenheid (unit) van het product
quantity *Aantal gefactureerde eenheden van het product
taxExempt (*)Dit blijft leeg wanneer 'vatScheme'='S', in alle andere gevallen moet hier een geldige waarde uit de keuzelijst 'TaxExemptReason' worden ingevuld
unit *Een waarde uit 'UnitCode' is hier verplicht. Veel gebruikt worden 'HUR' voor uren, 'H87' voor stuks etc. zi daarvoor de keuzelijst.
vatAmount *Het a.d.h.v. 'vatPercetage' berekende BTW bedrag over 'amount'. Afronden op 2 cijfers achter de komma
vatPercentage *Het gehanteerde BTW-percentage in procentpunten
vatScheme *Bij normale binnenlandse facturen wordt hier 'S' ingevuld. Voor anderwe schema's de keuzelijst: 'Duty Category' raadplegen

Voorbeeld van een functie om een JSON volgens de voorgaande specificatie op te bouwen

De veldnamen in deze formule zijn zoals die in 'Example_Invoicing.fmp12' worden gebruikt

Let ( [

$seller =
JSONSetElement ( "" ;
[ "address" ; Instelling::Adres ; JSONString ] ;
[ "city" ; Instelling::Plaats ; JSONString ] ;
[ "cocName" ; Instelling::Naam ; JSONString ] ;
[ "creditorNumber" ; Debiteur::Leverancier ; JSONString ] ;
[ "email" ; Instelling::Email ; JSONString ] ;
[ "iban" ; Instelling::IBAN ; JSONString ] ;
[ "name" ; Instelling::Naam ; JSONString ] ;
[ "phone" ; Instelling::Telefoon ; JSONString ] ;
[ "zip" ; Instelling::Postcode ; JSONString ]
) ;

$buyer =
JSONSetElement ( "" ;
[ "address" ; Debiteur::Adres ; JSONString ] ;
[ "city" ; Debiteur::Plaats ; JSONString ] ;
[ "cocName" ; Debiteur::Naam ; JSONString ] ;
[ "cocNr" ; Debiteur::KvKnr ; JSONString ] ;
[ "countryIso2" ; Debiteur::Landcode ; JSONString ] ;
[ "debtorNumber" ; Debiteur::Debiteurnr ; JSONString ] ;
[ "easId" ; Debiteur::EasID ; JSONString ] ;
[ "email" ; Debiteur::Email ; JSONString ] ;
[ "iban" ; Debiteur::IBAN ; JSONString ] ;
[ "name" ; Debiteur::Naam ; JSONString ] ;
[ "phone" ; Debiteur::Telefoon ; JSONString ] ;
[ "vatNr" ; Debiteur::BTWnr ; JSONString ] ;
[ "zip" ; Debiteur::Postcode ; JSONString ]
) ;

$invoice =
JSONSetElement ( "" ;
[ "currency" ; Factuur::Valuta ; JSONString ] ;
[ "date" ; Factuur::Datum ; JSONString ] ;
[ "deliveryCountryIso2" ; Factuur::LeverlandCode ; JSONString ] ;
[ "deliveryDate" ; Factuur::LeverDatum ; JSONString ] ;
[ "dueDate" ; Factuur::VervalDatum ; JSONString ] ;
[ "number" ; Factuur::Nummer ; JSONString ] ;
[ "paymentID" ; Factuur::Betalingskenmerk ; JSONString ] ;
[ "paymentMeans" ; Factuur::Betaalwijze ; JSONString ] ;
[ "paymentTerms" ; Factuur::Betaalvoorwaarden ; JSONString ] ;
[ "poNumber" ; Factuur::PoNummer ; JSONString ] ;
[ "remark" ; Factuur::Commentaar ; JSONString ] ;
[ "type" ; Factuur::TypeFactuur ; JSONString ]
) ;

$line =
While ( [
i = 0 ;
n = ValueCount ( List ( Regel::_UUID ) ) ;
l = "[]"
] ;
i $lt; n
; [
i = i + 1 ;
l =
JSONSetElement ( l ;
[ "[+]amount" ; GetNthRecord ( Regel::_cBedrag ; i ) ; JSONString ] ;
[ "[:]buyerProject" ; Factuur::PoNummer ; JSONString ] ;
[ "[:]description" ; GetNthRecord ( Regel::Omschrijving ; i ) ; JSONString ] ;
[ "[:]price" ; GetNthRecord ( Regel::Prijs ; i ) ; JSONNumber ] ;
[ "[:]quantity" ; GetNthRecord ( Regel::Aantal ; i ) ; JSONNumber ] ;
[ "[:]taxExempt" ; GetNthRecord ( Regel::BtwVrijstelling ; i ) ; JSONString ] ;
[ "[:]unit" ; GetNthRecord ( Regel::Eenheid ; i ) ; JSONString ] ;
[ "[:]vatAmount" ; GetNthRecord ( Regel::_cBtw ; i ) ; JSONNumber ] ;
[ "[:]vatPercentage"; GetNthRecord ( Regel::BtwPerc ; i ) ; JSONNumber ] ;
[ "[:]vatScheme" ; GetNthRecord ( Regel::BtwSchema ; i ) ; JSONString ]
)
] ; l )
] ;

JSONSetElement ( "" ;
[ "seller" ; $seller ; JSONObject ] ;
[ "buyer" ; $buyer ; JSONObject ] ;
[ "invoice" ; $invoice ; JSONObject ] ;
[ "line" ; $line ; JSONArray ]
)

)

Download Demo

EULA (Nederlands)
EULA (English)