Mijn Communities
Help
Anonymous
Niet van toepassing

Javascript nummers in woorden converteren (HCB4-I-170)

door Anonymous
Status: Afgewezen

In Selfservice wil ik een formulier bouwen waarin je een voorschotformulier kunt vullen. Dit formulier komt na goedkeuring in de workflow uiteindelijk terecht bij onze Financiele afdeling (template via e-mail verzonden) die het voorschot aan de medewerker verstrekt.

De laatste stap in de workflow is 'fiatteren SA' zodat het voorschot ook direct wordt verwerkt in BO4.

Ik wil in het formulier dat het bedrag in woorden wordt geconverteerd. Dit moet op de template met het voorschotformulier terecht komen.

Is het mogelijk om onderstaand javascript in aan selfservice toe te voegen (nederlandse woorden)? Dit wordt namelijk veel in Financiele administraties gebruikt.

https://www.thoughtco.com/how-to-convert-numbers-to-words-with-javascript-4072535

6 Opmerkingen
Former Member
CHAMPION ***
door Former Member
Hartelijk dank voor je idee. Het toegekende nummer is: HCB4-I-170
door Frank JHM Poell
Status changed to: Status: Afgewezen

Wij realiseren ons dat het weer even geleden is dat er een update op dit idee is geweest.
Omdat er in de tussentijd geen extra kudo's van andere klanten zijn toegevoegd, gaan we er van uit dat dit idee op dit moment niet (meer) relevant is.
Om die reden wordt dit idee afgewezen en gesloten.

Arjan vR
CONTRIBUTOR ***
door Arjan vR

Ik weet niet of de vraag nog relevant is, De code achter de url is specifiek voor de Engelse taal. In Nederland gebruiken we andere regels om getallen in woorden uit te drukken. Daarvoor heb ik een stukje Javascript geschreven voor op de POST (of PRE) bewerking van een rubriek. Dit moet een A00001 of FS rubriek zijn van het type tekstblok omdat deze code al snel meer dan 50 karakters oplevert.

Om het te gebruiken, zet dan in de eerste regel achter bedrag = de rubriek met het bedrag of getal dat je in woorden wil omzetten. In het voorbeeld is het de rubriek BPGSAL.

Op dit moment wordt een streepje gebruikt als scheidingsteken tussen de woorden. Dit kan ook een spatie zijn. Vervang daarvoor het streepje met een spatie in de regel met s = '-';

Het script is geschikt voor bedragen met centen tot 10 biljoen en voor bedragen zonder centen tot 1000 biljoen (vanwege beperking in Javascript). Het schrijft getallen onder de 10000 geschreven als veelvouden van 1000. Dit kan ook als veelvoud van 100. Verander dan (n < 1e3) in (n < 1e4). Het accepteert een bedrag als type string als number. Decimaalteken kan zowel komma als punt zijn. Let op verwijder zelf de cijfergroepingssymbolen voor dat je deze functie aanroept (de punt in € 1.234,56).

De volgende post bevat het script zonder commentaar. Gebruik deze in HRSS. De post daarna is met commentaar om de code beter te begrijpen.

Arjan vR
CONTRIBUTOR ***
door Arjan vR

 

bedrag = v_BPGSAL#;
b = parseFloat(bedrag.toString().replace(',','.'));
if (isNaN(b)) { return(''); }
s = '-';
eg = s + 'euro';
eh = s + 'cent';
wg = ['','een','twee','drie','vier','vijf','zes','zeven','acht','negen','tien','elf','twaalf','dertien','veertien'];
wt = ['','tien','twintig','dertig','veertig','vijftig','zestig','zeventig','tachtig','negentig'];
if (b === 0) { return('nul' + eg); }
if (b < 0) {
t = 'min' + s;
b *= -1;
} else { t = ''; }
function onw(n) {
if (n < 15) { return(wg[n]); }
if (n < 100) {
r = n % 10;
q = wg[r];
if ((n > 20) && (r !== 0)) {
q = q + (((r === 2) || (r === 3)) ? 'ën' : 'en');
}
return(q + wt[(n - r) / 10]);
}
if (n < 1e3) {
r = parseInt(n / 1e2, 10);
return(((r === 1) ? '' : onw(r)) + 'honderd' + onw(n % 1e2));
}
if (n < 1e6) {
r = parseInt(n / 1e3, 10);
return(((r === 1) ? '' : onw(r)) + 'duizend' + (((n % 1e3) !== 0) ? s + onw(n % 1e3) : ''));
}
if (n < 1e9) { return(onw(parseInt(n / 1e6, 10)) + s + 'miljoen' + (((n % 1e6) !== 0) ? s + onw(n % 1e6) : '')); }
if (n < 1e12) { return(onw(parseInt(n / 1e9, 10)) + s + 'miljard' + (((n % 1e9) !== 0) ? s + onw(n % 1e9) : '')); }
return(onw(parseInt(n / 1e12, 10)) + s + 'biljoen' + (((n % 1e12) !== 0) ? s + onw(n % 1e12) : ''));
}
g = parseInt(b, 10);
h = parseInt(Math.round((parseFloat(b) - parseFloat(g)) * 100), 10);
if (g !== 0) { t = t + onw(g) + eg; }
if (h !== 0) { t = t + ((g !== 0) ? s + 'en' + s : '') + onw(h) + eh; }
return(t);
Arjan vR
CONTRIBUTOR ***
door Arjan vR
bedrag = v_BPGSAL# //Vervang BPGSAL door je eigen rubriek met getal of bedrag
//function bedrag_naar_woorden(bedrag){
b = parseFloat(bedrag.toString().replace(',','.')); //bedrag

//Controle of het een getal is
if (isNaN(b)) { return(''); }

//Initialisatie
s = '-'; //separator
eg = s + 'euro'; //eenheid gehele getal
eh = s + 'cent'; //eenheid hondersten
wg = ['','een','twee','drie','vier','vijf','zes','zeven','acht','negen','tien','elf','twaalf','dertien','veertien']; //getal in woorden
wt = ['','tien','twintig','dertig','veertig','vijftig','zestig','zeventig','tachtig','negentig']; //tiental in woorden

//Is het nul?
if (b === 0) { return('nul' + eg); }

//Is het getal negatief?
//Variabele t is voor het opbouwen van het getal in woorden
if (b < 0) { //Negatieve bedragen
t = 'min' + s; //tekst
b *= -1;
} else { t = ''; }

function onw(n) { //omzetten naar woorden
//onw(n) alleen aanroepen met positieve gehele getallen (0 of groter)

//Als getal tussen 0-14 direct het juiste woord teruggeven
if (n < 15) { return(wg[n]); }

if (n < 100) {
//Als getal tussen 15-99 dan bestaat het uit twee delen: de eenheden en tientallen. Deze apart van elkaar omzetten in woorden.
//Tussenvoegsel tussen eenheid en tiental: bij 15-19 en eenheid = 0 geen, 21-99 *en* waarbij de e een trema krijgt bij eenheid twee en drie.
r = n % 10;
q = wg[r];
if ((n > 20) && (r !== 0)) {
q = q + (((r === 2) || (r === 3)) ? 'ën' : 'en');
}
return(q + wt[(n - r) / 10]);
}

if (n < 1e3) { //Maak hier 1e4 van, dan schrijfwijze getallen onder de 10000 als veelvoud van 100 (2700 -> zeventwintighonderd)
//Als getal tussen 100-999 dan bestaat het uit twee delen: het honderdtal en de rest. Deze apart van elkaar omzetten in woorden.
//Als het honderdtal een(1) is, dan dat niet weergeven.
r = parseInt(n / 1e2, 10);
//EENhonderd te onderdrukken
return(((r === 1) ? '' : onw(r)) + 'honderd' + onw(n % 1e2));
}

if (n < 1e6) {
//Als getal tussen 1000-999999 dan bestaat het uit twee delen: het duizendtal en de rest. Deze apart van elkaar omzetten in woorden.
//Als het duizendtal een(1) is, dan dat niet weergeven. Als de rest nul is, dan geen separator weergeven.
r = parseInt(n / 1e3, 10);
//EENduizend onderdrukken + duizend + restant maar leeg (ook geen spatie) als restant 0 is.
return(((r === 1) ? '' : onw(r)) + 'duizend' + (((n % 1e3) !== 0) ? s + onw(n % 1e3) : ''));
}

//Als getal tussen 1 miljoen-1 miljard dan bestaat het uit twee delen: het miljoental en de rest. Deze apart van elkaar omzetten in woorden.
//Als de rest nul is, dan geen separator weergeven.
if (n < 1e9) { return(onw(parseInt(n / 1e6, 10)) + s + 'miljoen' + (((n % 1e6) !== 0) ? s + onw(n % 1e6) : '')); }

//Als getal tussen 1 miljard-1 biljard dan bestaat het uit twee delen: het miljardtal en de rest. Deze apart van elkaar omzetten in woorden.
//Als de rest nul is, dan geen separator weergeven.
if (n < 1e12) { return(onw(parseInt(n / 1e9, 10)) + s + 'miljard' + (((n % 1e9) !== 0) ? s + onw(n % 1e9) : '')); }

//Als getal 1 biljoen of hogers is, dan bestaat het uit twee delen: het biljardtal en de rest. Deze apart van elkaar omzetten in woorden.
//Als de rest nul is, dan geen separator weergeven.
return(onw(parseInt(n / 1e12, 10)) + s + 'biljoen' + (((n % 1e12) !== 0) ? s + onw(n % 1e12) : ''));
}
g = parseInt(b, 10); //gehele getal (zonder decimalen)
h = parseInt(Math.round((parseFloat(b) - parseFloat(g)) * 100), 10); //honderdsten
if (g !== 0) { t = t + onw(g) + eg; }
if (h !== 0) { t = t + ((g !== 0) ? s + 'en' + s : '') + onw(h) + eh; }
return(t);
Arjan vR
CONTRIBUTOR ***
door Arjan vR

Ik zie dat in het commentaar een klein foutje is geslopen. Waar biljard staat, moet je biljoen lezen. Idem voor biljardtal en biljoental. Dit heeft alleen uitwerking op het commentaar en niet op de JavaScript voor HRSS zelf.

Overigens hebben wij deze code inmiddels meer dan een jaar op een formulier in HRSS zonder problemen in gebruik.