Bruno Posted July 28, 2005 Posted July 28, 2005 Als nieuw lid van dit forum wil ik onmiddellijk uitpakken met een interessante custom function. Ik heb ze EEC_VAT(landcode,vat_number) gedoopt. Ik gebruik deze functie als volgt Ik heb in mijn customerDB 2 velden nl. cst_landcode (een lookuplist met al landcodes die dan onmiddellijk het land en de telefoonprefix weergeeft) en cst_VAT d.i. het veld waar de BTW-nr op correct wijze in moet verschijnen onder de vorm bvb AT-U12345678 of BE-403762597 In het veld cst_VAT gebruik ik onder auto-enter calculated value bovenstaande formule als volgt: EEC_VAT(cst_landcode,cst_VAT) zodat in cst_VAT de BTW-nr wordt gecontroleerd en in de juiste vorm wordt weergegeven. Is het nummer fout dan verschijnt er Invalid number, is het geen EG-land dan blijft het veld leeg. Hier de functie. Laat me weten indien er dingen eenvoudiger kunnen en of er andere en of betere controles kunnen uitgevoerd worden. ************************************************************* //Alle spaties en andere rommel filteren uit het ingegeven nummer Let([nummer=Upper(Filter(vat_number;"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")); land=Upper(landcode); controlegetal_BE=97 - Mod(Left(nummer;7);97); VAT=Upper(landcode)&"-"&nummer; alleen_getallen=Filter(vat_number;"0123456789"); nummer_IE=Upper(Filter(vat_number;"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789*+"))]; //Als de eerste 2 karakters = karakter 4 en 5 zoals in bvb AT-AT12345 dan gooien we //4 en 5 eruit Case( Left(land&"-"&nummer;2)=Middle(land&"-"&nummer;4;2); Left(land&"-"&nummer;3)&Middle(land&"-"&nummer;6;Length(land&"-"&nummer)-5); //Controle van de BTW identificatiestructuur //Oostenrijk 1e=U en dan 8 cijfers landcode="AT";Case(Length(Right(alleen_getallen;)=8 and Left(nummer;1)="U"; VAT;"Invalid Number"); //Belgie - 9 of 10 cijfers en controlegetal landcode="BE";Case(Length(alleen_getallen)=9 and GetAsNumber(Right(nummer;2))=controlegetal_BE or Length(alleen_getallen)=10 and GetAsNumber(Right(nummer;2))=controlegetal_BE; VAT;"Invalid Number"); //Cyprus 8 cijfers + laatste = letter landcode="CY";Case(Length(Left(alleen_getallen;)=8 and Length(Right(Filter(nummer;"ABCDEFGHIJKLMNOPQRTUVWXYZ");1))=1 ; VAT;"Invalid Number"); //Tsjechie 8,9 0f 10 cijfers landcode="CZ";Case(Length(alleen_getallen)<11 and Length(alleen_getallen)>7; VAT;"Invalid Number"); //Duitsland 9 cijfers landcode="DE";Case(Length(alleen_getallen)=9; VAT;"Invalid Number"); //Denemarken 8 cijfers landcode="DK";Case(Length(alleen_getallen)=8; VAT;"Invalid Number"); //Estland 9 cijfers landcode="EE";Case(Length(alleen_getallen)=9; VAT;"Invalid Number"); //Griekenland 9 cijfers en landcode wordt EL landcode="GR";Case(Length(alleen_getallen)=9; "EL-"&nummer;"Invalid Number"); //Spanje 9 karakters waarvan 1e en laatste ook alfanummeriek kunnen zijn //Beiden kunnen ze echter niet nummeriek zijn landcode="ES";Case(Length(alleen_getallen)=8 and Length(nummer)=9; VAT;"Invalid Number"); //Finland 8 cijfers landcode="FI";Case(Length(alleen_getallen)=8; VAT;"Invalid Number"); //Frankrijk 11 karakters waarvan eerste 2 ook letters kunnen zijn landcode="FR";Case(Length(nummer)=11 and Length(Right(alleen_getallen;9))=9; VAT;"Invalid Number"); //Verenigd Koninkrijk 4 mogelijkheden //mogelijkheid 1: 9 cijfers landcode="GB";Case(Length(alleen_getallen)=9 or //mogelijkheid 2: 12 cijfers voor "Branch traders" Length(alleen_getallen)=12 or //mogelijkheid 3: 5 karakters waarvan eerste 2 "GD" voor Government Departments Length(Right(alleen_getallen;3))=3 and Left(nummer;2)="GD" or //mogelijkheid 4: 5 karakters waarvan eerste 2 "HA" voor Health Authorities Length(Right(alleen_getallen;3))=3 and Left(nummer;2)="HA"; VAT;"Invalid Number"); //Hongarije 8 cijfers landcode="HU";Case(Length(alleen_getallen)=8; VAT;"Invalid Number"); //Ierland 8 karakters waarvan laatste een letter,geen volledige controle landcode="IE";Case(Length(nummer)=8 and Length(Left(alleen_getallen;1))=1 and Length(Right(Filter(nummer;"ABCDEFGHIJKLMNOPQRTUVWXYZ");1))=1 ; VAT;"Invalid Number"); //Italie 11 cijfers landcode="IT";Case(Length(alleen_getallen)=11; VAT;"Invalid Number"); //Litouwen 9 of 12 cijfers landcode="LT";Case(Length(alleen_getallen)=12 or Length(alleen_getallen)=9; VAT;"Invalid Number"); //Luxemburg 8 cijfers landcode="LU";Case(Length(alleen_getallen)=8; VAT;"Invalid Number"); //Letland 11 cijfers landcode="LV";Case(Length(alleen_getallen)=11; VAT;"Invalid Number"); //Malta 8 cijfers landcode="MT";Case(Length(alleen_getallen)=8; VAT;"Invalid Number"); //Nederland 12 karakters en positie 10=B landcode="NL";Case(Length(alleen_getallen)=11 and Middle(nummer;10;1)="B"; VAT;"Invalid Number"); //Polen 10 cijfers landcode="PL";Case(Length(alleen_getallen)=10; VAT;"Invalid Number"); //Portugal 9 cijfers landcode="PT";Case(Length(alleen_getallen)=9; VAT;"Invalid Number"); //Zweden 12 cijfers landcode="SE";Case(Length(alleen_getallen)=12; VAT;"Invalid Number"); //Slovenie 8 cijfers landcode="SL";Case(Length(alleen_getallen)=8; VAT;"Invalid Number"); //Slowakije 10 cijfers landcode="SK";Case(Length(alleen_getallen)=10; VAT;"Invalid Number"); //al de rest blijft leeg want niet in de EEG " " ) ) Quote
Question
Bruno
Als nieuw lid van dit forum wil ik onmiddellijk uitpakken met een interessante custom function.
Ik heb ze EEC_VAT(landcode,vat_number) gedoopt.
Ik gebruik deze functie als volgt
Ik heb in mijn customerDB 2 velden nl. cst_landcode (een lookuplist met al landcodes die dan onmiddellijk het land en de telefoonprefix weergeeft)
en cst_VAT d.i. het veld waar de BTW-nr op correct wijze in moet verschijnen onder de vorm bvb AT-U12345678 of BE-403762597
In het veld cst_VAT gebruik ik onder auto-enter calculated value
bovenstaande formule als volgt: EEC_VAT(cst_landcode,cst_VAT) zodat in
cst_VAT de BTW-nr wordt gecontroleerd en in de juiste vorm wordt weergegeven. Is het nummer fout dan verschijnt er Invalid number,
is het geen EG-land dan blijft het veld leeg.
Hier de functie. Laat me weten indien er dingen eenvoudiger kunnen en of er andere en of betere controles kunnen uitgevoerd worden.
*************************************************************
//Alle spaties en andere rommel filteren uit het ingegeven nummer
Let([nummer=Upper(Filter(vat_number;"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"));
land=Upper(landcode);
controlegetal_BE=97 - Mod(Left(nummer;7);97);
VAT=Upper(landcode)&"-"&nummer;
alleen_getallen=Filter(vat_number;"0123456789");
nummer_IE=Upper(Filter(vat_number;"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789*+"))];
//Als de eerste 2 karakters = karakter 4 en 5 zoals in bvb AT-AT12345 dan gooien we
//4 en 5 eruit
Case(
Left(land&"-"&nummer;2)=Middle(land&"-"&nummer;4;2);
Left(land&"-"&nummer;3)&Middle(land&"-"&nummer;6;Length(land&"-"&nummer)-5);
//Controle van de BTW identificatiestructuur
//Oostenrijk 1e=U en dan 8 cijfers
landcode="AT";Case(Length(Right(alleen_getallen;
)=8 and Left(nummer;1)="U";
VAT;"Invalid Number");
//Belgie - 9 of 10 cijfers en controlegetal
landcode="BE";Case(Length(alleen_getallen)=9
and GetAsNumber(Right(nummer;2))=controlegetal_BE or
Length(alleen_getallen)=10 and GetAsNumber(Right(nummer;2))=controlegetal_BE;
VAT;"Invalid Number");
//Cyprus 8 cijfers + laatste = letter
landcode="CY";Case(Length(Left(alleen_getallen;
)=8 and Length(Right(Filter(nummer;"ABCDEFGHIJKLMNOPQRTUVWXYZ");1))=1 ;
VAT;"Invalid Number");
//Tsjechie 8,9 0f 10 cijfers
landcode="CZ";Case(Length(alleen_getallen)<11 and Length(alleen_getallen)>7;
VAT;"Invalid Number");
//Duitsland 9 cijfers
landcode="DE";Case(Length(alleen_getallen)=9;
VAT;"Invalid Number");
//Denemarken 8 cijfers
landcode="DK";Case(Length(alleen_getallen)=8;
VAT;"Invalid Number");
//Estland 9 cijfers
landcode="EE";Case(Length(alleen_getallen)=9;
VAT;"Invalid Number");
//Griekenland 9 cijfers en landcode wordt EL
landcode="GR";Case(Length(alleen_getallen)=9;
"EL-"&nummer;"Invalid Number");
//Spanje 9 karakters waarvan 1e en laatste ook alfanummeriek kunnen zijn
//Beiden kunnen ze echter niet nummeriek zijn
landcode="ES";Case(Length(alleen_getallen)=8 and Length(nummer)=9;
VAT;"Invalid Number");
//Finland 8 cijfers
landcode="FI";Case(Length(alleen_getallen)=8;
VAT;"Invalid Number");
//Frankrijk 11 karakters waarvan eerste 2 ook letters kunnen zijn
landcode="FR";Case(Length(nummer)=11 and Length(Right(alleen_getallen;9))=9;
VAT;"Invalid Number");
//Verenigd Koninkrijk 4 mogelijkheden
//mogelijkheid 1: 9 cijfers
landcode="GB";Case(Length(alleen_getallen)=9 or
//mogelijkheid 2: 12 cijfers voor "Branch traders"
Length(alleen_getallen)=12 or
//mogelijkheid 3: 5 karakters waarvan eerste 2 "GD" voor Government Departments
Length(Right(alleen_getallen;3))=3 and Left(nummer;2)="GD" or
//mogelijkheid 4: 5 karakters waarvan eerste 2 "HA" voor Health Authorities
Length(Right(alleen_getallen;3))=3 and Left(nummer;2)="HA";
VAT;"Invalid Number");
//Hongarije 8 cijfers
landcode="HU";Case(Length(alleen_getallen)=8;
VAT;"Invalid Number");
//Ierland 8 karakters waarvan laatste een letter,geen volledige controle
landcode="IE";Case(Length(nummer)=8 and Length(Left(alleen_getallen;1))=1
and Length(Right(Filter(nummer;"ABCDEFGHIJKLMNOPQRTUVWXYZ");1))=1
;
VAT;"Invalid Number");
//Italie 11 cijfers
landcode="IT";Case(Length(alleen_getallen)=11;
VAT;"Invalid Number");
//Litouwen 9 of 12 cijfers
landcode="LT";Case(Length(alleen_getallen)=12 or Length(alleen_getallen)=9;
VAT;"Invalid Number");
//Luxemburg 8 cijfers
landcode="LU";Case(Length(alleen_getallen)=8;
VAT;"Invalid Number");
//Letland 11 cijfers
landcode="LV";Case(Length(alleen_getallen)=11;
VAT;"Invalid Number");
//Malta 8 cijfers
landcode="MT";Case(Length(alleen_getallen)=8;
VAT;"Invalid Number");
//Nederland 12 karakters en positie 10=B
landcode="NL";Case(Length(alleen_getallen)=11 and Middle(nummer;10;1)="B";
VAT;"Invalid Number");
//Polen 10 cijfers
landcode="PL";Case(Length(alleen_getallen)=10;
VAT;"Invalid Number");
//Portugal 9 cijfers
landcode="PT";Case(Length(alleen_getallen)=9;
VAT;"Invalid Number");
//Zweden 12 cijfers
landcode="SE";Case(Length(alleen_getallen)=12;
VAT;"Invalid Number");
//Slovenie 8 cijfers
landcode="SL";Case(Length(alleen_getallen)=8;
VAT;"Invalid Number");
//Slowakije 10 cijfers
landcode="SK";Case(Length(alleen_getallen)=10;
VAT;"Invalid Number");
//al de rest blijft leeg want niet in de EEG
" " )
)
0 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.