Я задаю через функцию проверку поля Фамилия (это реквизит справочника) на то чтобы оно было не пустым и содержало бы только буквы. Но мне 1с сообщает что фактических параметров слишком много.
И функция (пока тестовая, так как я пытаюсь разобраться) :
Сообщение об ошибках:
{Справочник.Пользователи.Форма.Регистрация.Форма(31,28)}: Слишком много фактических параметров (ПроверитьФамилию)
ИначеЕсли ПроверитьФамилию(<<?>>Объект.Фамилия) = Ложь Тогда (Проверка: Тонкий клиент)
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Если ПустаяСтрока(Объект.Фамилия) Тогда
СообщитьПользователю("Объект.Фамилия", "Заполните поле Фамилия", Отказ)
ИначеЕсли ПроверитьФамилию(Отказ, Объект.Фамилия) = Ложь Тогда
Сообщить("ерундааа!");
Отказ = Истина;
КонецЕсли;
И функция (пока тестовая, так как я пытаюсь разобраться) :
&НаКлиенте
Функция ПроверитьФамилию()
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
RegExp.IgnoreCase = Истина;
ИсходнаяСтрока = объект.Фамилия; //ПолеФамилия - строка
RegExp.Pattern = ""+ИсходнаяСтрока+"" + "[а-яА-Я]";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count;
КонецФункции // ПроверитьПолеФамилия()
ПоказатьСообщение об ошибках:
{Справочник.Пользователи.Форма.Регистрация.Форма(31,28)}: Слишком много фактических параметров (ПроверитьФамилию)
ИначеЕсли ПроверитьФамилию(<<?>>Объект.Фамилия) = Ложь Тогда (Проверка: Тонкий клиент)
По теме из базы знаний
Найденные решения
(8) Посмотрите мою. логику. Если Вам так подойдёт. Что я исправила -
RegExp.Pattern = ""+ИсходнаяСтрока+"" + "[а-яА-Я]" на
RegExp.Pattern = "[а-яА-Я]";
По логике, Вам надо проверить на соответствие буквам. Значит, мы находит, сколько букв и сколько символов. Если нет равенства, то есть какие-то дополнительные символы - знаки, цифры и т.д.
RegExp.Pattern = ""+ИсходнаяСтрока+"" + "[а-яА-Я]" на
RegExp.Pattern = "[а-яА-Я]";
По логике, Вам надо проверить на соответствие буквам. Значит, мы находит, сколько букв и сколько символов. Если нет равенства, то есть какие-то дополнительные символы - знаки, цифры и т.д.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2)эти же самые параметры должны быть и здесь ? Тип чтобы вышло так.
Поправил, но не срабатывает.
&НаКлиенте
Функция ПроверитьФамилию()
Поправил, но не срабатывает.
&НаКлиенте
Функция ПроверитьФамилию(Отказ, Фамилия)
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
RegExp.IgnoreCase = Истина;
ИсходнаяСтрока = объект.Фамилия; //ПолеНаименование - строка
RegExp.Pattern = ""+ИсходнаяСтрока+"" + "[а-яА-Я]";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count;
КонецФункции // ПроверитьПолеФамилия()
Показать
(5)Я щас как ёжик в тумане. Туплю чутка поэтому и код постоянно меняется, пока я всё доконца не пойму.
Сейчас я исправил код и пока что если в реквизите что угодно, но не буквы, то выдается ошибка.
Не хватает ошибки теперь в случае когда есть буквы и цифры.
Т.е. реквизит Фамилия содержать должен только буквы.
Пока что работает так:
Сейчас я исправил код и пока что если в реквизите что угодно, но не буквы, то выдается ошибка.
Не хватает ошибки теперь в случае когда есть буквы и цифры.
Т.е. реквизит Фамилия содержать должен только буквы.
&НаКлиенте
Функция ПроверитьФамилию(Отказ, Фамилия)
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
RegExp.IgnoreCase = Истина;
ИсходнаяСтрока = ""+ИсходнаяСтрока+"" +объект.Фамилия; //ПолеФамилия - строка
RegExp.Pattern = "[а-яА-Я]";
Если RegExp.Test(Фамилия) Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции // ПроверитьПолеФамилия()
ПоказатьПока что работает так:
Прикрепленные файлы:
(5) Я сейчас посмотрела, получается, Matches.Count выводит количество символов, соответствующих шаблону.
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Если ПустаяСтрока(Объект.Фамилия) Тогда
СообщитьПользователю("Объект.Фамилия", "Заполните поле Фамилия", Отказ)
ИначеЕсли ПроверитьФамилию(Объект) = Ложь Тогда
Сообщить("ерундааа!");
Отказ = Истина;
КонецЕсли;
&НаКлиенте
Функция ПроверитьФамилию(Объект)
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
RegExp.IgnoreCase = Истина;
Фамилия = Объект.Фамилия;
RegExp.Pattern = "[а-яА-Я]";
Matches = RegExp.Execute(Фамилия);
КоличествоБукв = Matches.Count;
КоличествоСимволов = СтрДлина(Фамилия);
Если КоличествоБукв<>КоличествоСимволов Тогда
Результат = Ложь;
Иначе
Результат = Истина;
КонецЕсли;
КонецФункции // ПроверитьПолеФамилия()
Показать
(8) Посмотрите мою. логику. Если Вам так подойдёт. Что я исправила -
RegExp.Pattern = ""+ИсходнаяСтрока+"" + "[а-яА-Я]" на
RegExp.Pattern = "[а-яА-Я]";
По логике, Вам надо проверить на соответствие буквам. Значит, мы находит, сколько букв и сколько символов. Если нет равенства, то есть какие-то дополнительные символы - знаки, цифры и т.д.
RegExp.Pattern = ""+ИсходнаяСтрока+"" + "[а-яА-Я]" на
RegExp.Pattern = "[а-яА-Я]";
По логике, Вам надо проверить на соответствие буквам. Значит, мы находит, сколько букв и сколько символов. Если нет равенства, то есть какие-то дополнительные символы - знаки, цифры и т.д.
(14) Функция не работает если вместе с буквами есть спец символы или цифры.
У меня работает всё. Поправил снова.
Но вашу логику я понял. Поэтому объединил всё лучшее)
У меня работает всё. Поправил снова.
&НаКлиенте
Функция ПроверитьФамилию(Отказ, Фамилия)
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
RegExp.IgnoreCase = Истина;
Фамилия = Объект.Фамилия; //ПолеФамилия - строка
RegExp.Pattern = "[а-яА-Я]";
Matches = RegExp.Execute(Фамилия);
КоличествоБукв = Matches.Count;
КоличествоСимволов = СтрДлина(Фамилия);
Если КоличествоБукв<>КоличествоСимволов Тогда
Результат = Ложь;
Иначе
Результат = Истина;
КонецЕсли;
Если RegExp.Test(Результат) Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции // ПроверитьПолеФамилия()
ПоказатьНо вашу логику я понял. Поэтому объединил всё лучшее)
(15) Да, надо добавить
Возврат Результат;
Упустила
Возврат Результат;
Упустила
&НаКлиенте
Функция ПроверитьФамилию(Объект)
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
RegExp.IgnoreCase = Истина;
Фамилия = Объект.Фамилия;
RegExp.Pattern = "[а-яА-Я]";
Matches = RegExp.Execute(Фамилия);
КоличествоБукв = Matches.Count;
КоличествоСимволов = СтрДлина(Фамилия);
Если КоличествоБукв<>КоличествоСимволов Тогда
Результат = Ложь;
Иначе
Результат = Истина;
КонецЕсли;
Возврат Результат;
КонецФункции
Показать
(20) Я пока представляю себе это вот так:
&НаКлиенте
Функция ПроверитьФамилиюИмяОтчество(Отказ, Фамилия, Имя, Отчество)
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
RegExp.IgnoreCase = Истина;
Фамилия = Объект.Фамилия; //ПолеФамилия - строка
RegExp.Pattern = "[а-яА-Я]"; //Проверяем на соответвствие буквам, т.е. должны быть только и только буквы
Matches = RegExp.Execute(Фамилия); //если есть цифры, спец символы вместе/раздельно букв
КоличествоБукв = Matches.Count; //то сообщим пользователю об ошибке.
КоличествоСимволов = СтрДлина(Фамилия); //Сначала находим, сколько букв и сколько символов.
Имя = Объект.Имя; //ПолеФамилия - строка
RegExp.Pattern = "[а-яА-Я]"; //Проверяем на соответвствие буквам, т.е. должны быть только и только буквы
Matches = RegExp.Execute(Имя); //если есть цифры, спец символы вместе/раздельно букв
КоличествоБукв = Matches.Count; //то сообщим пользователю об ошибке.
КоличествоСимволов = СтрДлина(Имя); //Сначала находим, сколько букв и сколько символов.
Фамилия = Объект.Отчество; //ПолеФамилия - строка
RegExp.Pattern = "[а-яА-Я]"; //Проверяем на соответвствие буквам, т.е. должны быть только и только буквы
Matches = RegExp.Execute(Отчество); //если есть цифры, спец символы вместе/раздельно букв
КоличествоБукв = Matches.Count; //то сообщим пользователю об ошибке.
КоличествоСимволов = СтрДлина(Отчество); //Сначала находим, сколько букв и сколько символов.
Если КоличествоБукв<>КоличествоСимволов Тогда //Если нет равенства, то есть какие-то дополнительные символы - знаки, цифры и т.д.
Результат = Ложь;
Иначе
Результат = Истина;
КонецЕсли;
Если RegExp.Test(Результат) Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
Показать
(13) Вы можете в функцию добавить проверку имени и отчества:
Как-то так. Ну или можно еще предусмотреть, вдруг лишний пробел стоит)).
&НаКлиенте
Функция ПроверитьФИО(Объект)
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
RegExp.IgnoreCase = Истина;
Фамилия = Объект.Фамилия;
Имя = Объект.Имя;
Отчество = Объект.Отчество;
ФИО = Фамилия + Имя + Отчество;
RegExp.Pattern = "[а-яА-Я]";
Matches = RegExp.Execute(ФИО);
КоличествоБукв = Matches.Count;
КоличествоСимволов = СтрДлина(ФИО);
Если КоличествоБукв<>КоличествоСимволов Тогда
Результат = Ложь;
Иначе
Результат = Истина;
КонецЕсли;
Возврат Результат;
КонецФункции
ПоказатьКак-то так. Ну или можно еще предусмотреть, вдруг лишний пробел стоит)).
(22)
Тогда мне говорят будто не хватает параметров:
Тогда мне говорят будто не хватает параметров:
{Справочник.Пользователи.Форма.Регистрация.Форма(31,11)}: Недостаточно фактических параметров (ПроверитьФамилиюИмяОтчество)
ИначеЕсли <<?>>ПроверитьФамилиюИмяОтчество(Отказ, Объект.Фамилия) = Ложь Тогда (Проверка: Тонкий клиент)
{Справочник.Пользователи.Форма.Регистрация.Форма(37,11)}: Недостаточно фактических параметров (ПроверитьФамилиюИмяОтчество)
ИначеЕсли <<?>>ПроверитьФамилиюИмяОтчество(Отказ, Объект.Имя) = Ложь Тогда (Проверка: Тонкий клиент)
{Справочник.Пользователи.Форма.Регистрация.Форма(43,11)}: Недостаточно фактических параметров (ПроверитьФамилиюИмяОтчество)
ИначеЕсли <<?>>ПроверитьФамилиюИмяОтчество(Отказ, Объект.Отчество) = Ложь Тогда (Проверка: Тонкий клиент)
Если ПустаяСтрока(Объект.Фамилия) Тогда
СообщитьПользователю("Объект.Фамилия", "Заполните поле Фамилия", Отказ)
ИначеЕсли ПроверитьФамилиюИмяОтчество(Отказ, Объект.Фамилия) = Ложь Тогда
Сообщить("В поле Фамилия недопустимы цифры и специальные символы!");
Отказ = Истина;
КонецЕсли;
Если ПустаяСтрока(Объект.Имя) Тогда
СообщитьПользователю("Объект.Имя", "Заполните поле Имя", Отказ)
ИначеЕсли ПроверитьФамилиюИмяОтчество(Отказ, Объект.Имя) = Ложь Тогда
Сообщить("В поле Имя недопустимы цифры и специальные символы!");
Отказ = Истина;
КонецЕсли;
Если ПустаяСтрока(Объект.Отчество) Тогда
СообщитьПользователю("Объект.Отчество", "Заполните поле Отчество", Отказ)
ИначеЕсли ПроверитьФамилиюИмяОтчество(Отказ, Объект.Отчество) = Ложь Тогда
Сообщить("В поле Отчество недопустимы цифры и специальные символы!");
Отказ = Истина;
КонецЕсли;
Показать
(25) Пожалуйста:
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Если ПустаяСтрока(Объект.Фамилия) Тогда
СообщитьПользователю("Объект.Фамилия", "Заполните поле Фамилия", Отказ)
ИначеЕсли ПроверитьФамилиюИмяОтчество(Отказ, Объект.Фамилия) = Ложь Тогда
Сообщить("В поле Фамилия недопустимы цифры и специальные символы!");
Отказ = Истина;
КонецЕсли;
Если ПустаяСтрока(Объект.Имя) Тогда
СообщитьПользователю("Объект.Имя", "Заполните поле Имя", Отказ)
ИначеЕсли ПроверитьФамилиюИмяОтчество(Отказ, Объект.Имя) = Ложь Тогда
Сообщить("В поле Имя недопустимы цифры и специальные символы!");
Отказ = Истина;
КонецЕсли;
Если ПустаяСтрока(Объект.Отчество) Тогда
СообщитьПользователю("Объект.Отчество", "Заполните поле Отчество", Отказ)
ИначеЕсли ПроверитьФамилиюИмяОтчество(Отказ, Объект.Отчество) = Ложь Тогда
Сообщить("В поле Отчество недопустимы цифры и специальные символы!");
Отказ = Истина;
КонецЕсли;
Если ПустаяСтрока(Объект.Почта) Тогда
СообщитьПользователю("Объект.Почта", "Заполните поле Почта", Отказ)
ИначеЕсли
ПроверкаПочты(Отказ, Объект.Почта) = Ложь Тогда
Сообщить("Некорректный адрес почты!");
Отказ = Истина;
КонецЕсли;
Если ПустаяСтрока(Объект.Пароль) Тогда
СообщитьПользователю("Объект.Пароль", "Заполните поле Пароль", Отказ)
КонецЕсли;
Если ПустаяСтрока(Объект.Телефон) Тогда
СообщитьПользователю("Объект.Телефон", "Заполните поле Телефон", Отказ)
КонецЕсли;
Объект.Фамилия = Объект.Фамилия+Объект.ОкончанияФамилий;
Объект.Отчество = Объект.Отчество+Объект.ОкончаниеОтчества;
Объект.Наименование = Объект.Фамилия+Объект.ОкончанияФамилий+" "+Объект.Имя+" "+Объект.Отчество+Объект.ОкончаниеОтчества;
КонецПроцедуры
&НаКлиенте
Функция ПроверитьФамилиюИмяОтчество(Отказ, Фамилия, Имя, Отчество)
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
RegExp.IgnoreCase = Истина;
Фамилия = Объект.Фамилия; //ПолеФамилия - строка
RegExp.Pattern = "[а-яА-Я]"; //Проверяем на соответвствие буквам, т.е. должны быть только и только буквы
Matches = RegExp.Execute(Фамилия); //если есть цифры, спец символы вместе/раздельно букв
КоличествоБукв = Matches.Count; //то сообщим пользователю об ошибке.
КоличествоСимволов = СтрДлина(Фамилия); //Сначала находим, сколько букв и сколько символов.
Имя = Объект.Имя; //ПолеФамилия - строка
RegExp.Pattern = "[а-яА-Я]"; //Проверяем на соответвствие буквам, т.е. должны быть только и только буквы
Matches = RegExp.Execute(Имя); //если есть цифры, спец символы вместе/раздельно букв
КоличествоБукв = Matches.Count; //то сообщим пользователю об ошибке.
КоличествоСимволов = СтрДлина(Имя); //Сначала находим, сколько букв и сколько символов.
Фамилия = Объект.Отчество; //ПолеФамилия - строка
RegExp.Pattern = "[а-яА-Я]"; //Проверяем на соответвствие буквам, т.е. должны быть только и только буквы
Matches = RegExp.Execute(Отчество); //если есть цифры, спец символы вместе/раздельно букв
КоличествоБукв = Matches.Count; //то сообщим пользователю об ошибке.
КоличествоСимволов = СтрДлина(Отчество); //Сначала находим, сколько букв и сколько символов.
Если КоличествоБукв<>КоличествоСимволов Тогда //Если нет равенства, то есть какие-то дополнительные символы - знаки, цифры и т.д.
Результат = Ложь;
Иначе
Результат = Истина;
КонецЕсли;
Если RegExp.Test(Результат) Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции // ПроверитьПолеФамилиюИмяОтчество()
Показать
(26)
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Фамилия = Объект.Фамилия;
Имя = Объект.Имя;
Отчество = Объект.Отчество;
Если ПустаяСтрока(Фамилия) Тогда
СообщитьПользователю("Объект.Фамилия", "Заполните поле Фамилия", Отказ)
ИначеЕсли ПроверитьФамилиюИмяОтчество(Фамилия) = Ложь Тогда
Сообщить("В поле Фамилия недопустимы цифры и специальные символы!");
Отказ = Истина;
КонецЕсли;
Если ПустаяСтрока(Имя) Тогда
СообщитьПользователю("Объект.Имя", "Заполните поле Имя", Отказ)
ИначеЕсли ПроверитьФамилиюИмяОтчество(Имя) = Ложь Тогда
Сообщить("В поле Имя недопустимы цифры и специальные символы!");
Отказ = Истина;
КонецЕсли;
Если ПустаяСтрока(Отчество) Тогда
СообщитьПользователю("Объект.Отчество", "Заполните поле Отчество", Отказ)
ИначеЕсли ПроверитьФамилиюИмяОтчество(Отчество) = Ложь Тогда
Сообщить("В поле Отчество недопустимы цифры и специальные символы!");
Отказ = Истина;
КонецЕсли;
Если ПустаяСтрока(Объект.Почта) Тогда
СообщитьПользователю("Объект.Почта", "Заполните поле Почта", Отказ)
ИначеЕсли
ПроверкаПочты(Отказ, Объект.Почта) = Ложь Тогда
Сообщить("Некорректный адрес почты!");
Отказ = Истина;
КонецЕсли;
Если ПустаяСтрока(Объект.Пароль) Тогда
СообщитьПользователю("Объект.Пароль", "Заполните поле Пароль", Отказ)
КонецЕсли;
Если ПустаяСтрока(Объект.Телефон) Тогда
СообщитьПользователю("Объект.Телефон", "Заполните поле Телефон", Отказ)
КонецЕсли;
Объект.Фамилия = Объект.Фамилия+Объект.ОкончанияФамилий;
Объект.Отчество = Объект.Отчество+Объект.ОкончаниеОтчества;
Объект.Наименование = Объект.Фамилия+Объект.ОкончанияФамилий+" "+Объект.Имя+" "+Объект.Отчество+Объект.ОкончаниеОтчества;
КонецПроцедуры
&НаКлиенте
Функция ПроверитьФамилиюИмяОтчество(СтрокаАнализа)
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
RegExp.IgnoreCase = Истина;
RegExp.Pattern = "[а-яА-Я]"; //Проверяем на соответвствие буквам, т.е. должны быть только и только буквы
Matches = RegExp.Execute(СтрокаАнализа); //если есть цифры, спец символы вместе/раздельно букв
КоличествоБукв = Matches.Count; //то сообщим пользователю об ошибке.
КоличествоСимволов = СтрДлина(СтрокаАнализа); //Сначала находим, сколько букв и сколько символов.
Если КоличествоБукв<>КоличествоСимволов Тогда //Если нет равенства, то есть какие-то дополнительные символы - знаки, цифры и т.д.
Результат = Ложь;
Иначе
Результат = Истина;
КонецЕсли;
Возврат Результат;
КонецФункции // ПроверитьПолеФамилиюИмяОтчество()
Показать
(26) А что за конфигурация? Для чего эти строки?
Объект.Фамилия = Объект.Фамилия+Объект.ОкончанияФамилий;
Объект.Отчество = Объект.Отчество+Объект.ОкончаниеОтчества;
Объект.Наименование = Объект.Фамилия+Объект.ОкончанияФамилий+" "+Объект.Имя+" "+Объект.Отчество+Объект.ОкончаниеОтчества;
(30) Ок, не буду вдаваться в детали!) "Облегчите" тогда функцию, чтоб анализировала одну строку и обращайтесь к ней три раза, для проверки фамилии, имени и отчества, как в комментарии 27. Тем более Вы в функции, получается, сравниваете только для отчества соответствие количества символов количеству букв, и в зависимости от этого получаете результат.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот