In order to develop a validation within extended fields that do not exist as standard as the TaxNumber in SAP CRM related to TaxType "BR1" in Brazil, follows the algorithm model that is possible used to perform validation tax document CNPJ.
This procedure can be improved and optimized by reusing libraries and loops
The following coding is only an initial reference
Create the follow objects
![]()
Put in the Validation "OnSave" the follow code
importABSL;
varcnpj = this.CurrentCommon.CNPJ;
cnpj = cnpj.Trim();
cnpj = cnpj.Replace(".", "").Replace("-", "").Replace("/", "");
varcnpjLength = cnpj.Length();
if (cnpjLength != 14){
raiseCX_INVALIDTAX.Create("E");
posicao = false;
}
else{
vartempCnpj = cnpj.Substring(0, 12);
varsoma;
varcalc;
varcalcCnpj;
varresto;
vardigito;
// Valida primeiro Digito
soma = 0;
calcCnpj = cnpj.Substring(0, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*5;
calcCnpj = cnpj.Substring(1, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*4;
calcCnpj = cnpj.Substring(2, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*3;
calcCnpj = cnpj.Substring(3, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*2;
calcCnpj = cnpj.Substring(4, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*9;
calcCnpj = cnpj.Substring(5, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*8;
calcCnpj = cnpj.Substring(6, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*7;
calcCnpj = cnpj.Substring(7, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*6;
calcCnpj = cnpj.Substring(8, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*5;
calcCnpj = cnpj.Substring(9, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*4;
calcCnpj = cnpj.Substring(10, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*3;
calcCnpj = cnpj.Substring(11, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*2;
resto = (soma % 11);
if (resto< 2)
resto = 0;
else
resto = 11 - resto;
digito = resto.ToString();
tempCnpj = tempCnpj + digito;
if (digito != cnpj.Substring(12, 1)){
raiseCX_INVALIDTAX.Create("E");
posicao = false;
}
// Valida segundo Digito
soma = 0;
calcCnpj = cnpj.Substring(0, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*6;
calcCnpj = cnpj.Substring(1, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*5;
calcCnpj = cnpj.Substring(2, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*4;
calcCnpj = cnpj.Substring(3, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*3;
calcCnpj = cnpj.Substring(4, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*2;
calcCnpj = cnpj.Substring(5, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*9;
calcCnpj = cnpj.Substring(6, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*8;
calcCnpj = cnpj.Substring(7, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*7;
calcCnpj = cnpj.Substring(8, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*6;
calcCnpj = cnpj.Substring(9, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*5;
calcCnpj = cnpj.Substring(10, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*4;
calcCnpj = cnpj.Substring(11, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*3;
calcCnpj = cnpj.Substring(12, 1);
calc = Numeric.ParseFromString(calcCnpj);
soma = soma + calc*2;
resto = (soma % 11);
if (resto< 2)
resto = 0;
else
resto = 11 - resto;
digito.Clear();
digito = digito + resto.ToString();
tempCnpj = tempCnpj + digito;
if (digito != cnpj.Substring(13, 1)){
raiseCX_INVALIDTAX.Create("E");
posicao = false;
}
}
returnposicao;
Remember to create the following object to use of the extended field for use principally on screen
![]()
![]()