Подскажите пожалуйста, можно ли на страницу контрагента добавить новое поле - ИНН, ОГРН, КПП юридического лица с валидацией? Т.е. уже готовое поле ИНН, которое будет проверять правильность ввода ИНН (валидировать по правилам "ключевания"). Или придется писать собственную валидацию поля?
Средствами платформы настроить валидацию нет возможности, такой функциональности пока нету, но в будущих версиях её добавят.
Для решения нужно прибегнуть к средствам разработки. При помощи поиска на Community можно найти ряд релевантных статей по данному вопросу.
Похожее обсуждали тут и тут. Также см. статью. Похожий вопрос и разные подходы к его решению обсуждались тут. Также валидация детали описана в статье SDK в п. 2.
Как-то приходилось делать валидацию ИНН. Вот готовый код.
setValidationConfig: function(){// Вызывает инициализацию валидаторов родительской модели представления.this.callParent(arguments);this.addColumnValidator("UsrINN", this.innValidator);},
innValidator: function(){// Переменная для хранения сообщения об ошибке валидации.
var inn =this.$UsrINN;
var invalidMessage =this.validateInn(inn);// Если валидация прошла успешна, в объекте возвращаются пустые строки.return{// Сообщение об ошибке валидации, которое отображается в информационном окне// при сохранении страницы.
fullInvalidMessage: invalidMessage,
// Сообщение об ошибке валидации, которое отображается под элементом управления.
invalidMessage: invalidMessage
};},
validateInn: function(inn){
var error ="";
var result =false;if(typeof inn ==="number"){
inn = inn.toString();}elseif(typeof inn !=="string"){
inn ="";}if(!inn.length){
error ="необходимо заполнить";}elseif(/[^0-9]/.test(inn)){
error ="ИНН может состоять только из цифр";}elseif([10, 12].indexOf(inn.length)===-1){
error ="ИНН может состоять только из 10 или 12 цифр";}else{
var checkDigit = function (inn, coefficients){
var n =0;for(var i in coefficients){
n += coefficients[i]* inn[i];}return parseInt(n %11%10);};switch(inn.length){case10:
var n10 = checkDigit(inn, [2, 4, 10, 3, 5, 9, 4, 6, 8]);if(n10 === parseInt(inn[9])){
result =true;}break;case12:
var n11 = checkDigit(inn, [7, 2, 4, 10, 3, 5, 9, 4, 6, 8]);
var n12 = checkDigit(inn, [3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8]);if((n11 === parseInt(inn[10]))&&(n12 === parseInt(inn[11]))){
result =true;}break;}if(!result){
error ="Неправильное контрольное число";}}return error;}