Подскажите пожалуйста, можно ли на страницу контрагента добавить новое поле - ИНН, ОГРН, КПП юридического лица с валидацией? Т.е. уже готовое поле ИНН, которое будет проверять правильность ввода ИНН (валидировать по правилам "ключевания"). Или придется писать собственную валидацию поля?
Нравится
Добрый день.
Средствами платформы настроить валидацию нет возможности, такой функциональности пока нету, но в будущих версиях её добавят.
Для решения нужно прибегнуть к средствам разработки. При помощи поиска на 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(); } else if (typeof inn !== "string") { inn = ""; } if (!inn.length) { error = "необходимо заполнить"; } else if (/[^0-9]/.test(inn)) { error = "ИНН может состоять только из цифр"; } else if ([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) { case 10: var n10 = checkDigit(inn, [2, 4, 10, 3, 5, 9, 4, 6, 8]); if (n10 === parseInt(inn[9])) { result = true; } break; case 12: 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; }