Подскажите пожалуйста, можно ли на страницу контрагента добавить новое поле - ИНН, ОГРН, КПП юридического лица с валидацией? Т.е. уже готовое поле ИНН, которое будет проверять правильность ввода ИНН (валидировать по правилам "ключевания"). Или придется писать собственную валидацию поля? 

Нравится

2 комментария

Добрый день.

 

Средствами платформы настроить валидацию нет возможности, такой функциональности пока нету, но в будущих версиях её добавят.

Для решения нужно прибегнуть к средствам разработки. При помощи поиска на 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;
			}

 

Показать все комментарии