Имя: Пароль:
1C
 
Есть в 1С функция сравнения строки по маске
0 Zlodey1С
 
16.12.08
08:25
Допустим необходимо ввести номер автомобиля но юзер тупой и не знает что надо вводить так Н666НН38 ну или накрайняк упростим ему задачу и пусть вводит так ННН66638. Но он тупой и он вводит так Н38ННН666.
Пришлось писать свои функции хотя вроде и задача простая.
1 Zlodey1С
 
16.12.08
08:26
Выкладываю свой вариант реализации. если у кого есть свой делитесь:

Процедура НаименованиеОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
   
   Если СтрДлина(Текст) > 0 Тогда
       
       ПроверкаСоответствияНомера(Текст);
       
   Иначе
       
       ГосНомер="";
       Регион="";
       
   КонецЕсли;
   
КонецПроцедуры

Процедура ПроверкаСоответствияНомера(СтрокаНомера)
   
   Маска_1=Строка("10001100");
   Маска_2=Строка("11100000");
   
   ПроверяемаяСтрока="";
   ЧислоИтераций=СтрДлина(СтрокаНомера);
   Итерация=0;
   
   Пока Итерация < ЧислоИтераций Цикл
       
       Итерация=Итерация+1;
       ПроверяемыйСимвол=Сред(строкаНомера,Итерация,1);
       ПроверяемаяСтрока=ПроверяемаяСтрока+УзнатьТипСимвола(ПроверяемыйСимвол);
       
   КонецЦикла;
   
   Если ПроверяемаяСтрока=Маска_1 Тогда
       
       Регион=Прав(СтрокаНомера,2);
       ГосНомер=ВРег(Лев(СтрокаНомера,6));
       
   ИначеЕсли ПроверяемаяСтрока=Маска_2 Тогда
       
       врСтрока = СтрокаНомера;
       врРегион=Прав(врСтрока,2);
       врНомер=Сред(врСтрока,4,3);
       врНомерБуквы_1=Лев(врСтрока,1);
       врНомерБуквы_2=Сред(врСтрока,2,2);
       
       Регион=врРегион;
       ГосНомер=ВРег(врНомерБуквы_1+врНомер+врНомерБуквы_2);
       
   Иначе
       
       Предупреждение("Неверный формат номера, необходимо ввести номер автомобиля как указано в документах. "+Символы.ПС+"Гос. номер вводится в таком виде: ХaaaХХAA или ХХХaaaAA,"+Символы.ПС+"где Х и ХХ или ХХХ - буквенные символы номера, aaa - числовые символы номера, AA - номер региона.");
       
   КонецЕсли;
   
КонецПроцедуры

Функция УзнатьТипСимвола(Символ);
   
   СтрокаАлфавита="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя";
   
   Результат=Найти(СтрокаАлфавита,Символ);
   
   Если Результат > 0 Тогда
       
       Возврат 1;
       
   Иначе
       
       Возврат 0;
       
   КонецЕсли;
   
КонецФункции
2 smaharbA
 
16.12.08
08:26
Чего хотел то ?
3 Zlodey1С
 
16.12.08
08:30
(2) Ты как так быстро отвечаешь?
4 ASU_Diamond
 
16.12.08
08:37
а маска в поле ввода не подходит?
5 Stepa86
 
16.12.08
10:17
Есть маска в поле ввода, есть выражение ПОДОБНО в запросе и есть RegExpы - всяко лучше ручного парсанья строки
6 Armando
 
16.12.08
10:23
7 Zlodey1С
 
16.12.08
10:56
Маска в поле ввода не канает т.к там только латинский алфавит

В строке маски допустимо использование следующих специальных символов:
! - любой введенный символ преобразуется в верхний регистр;
9 - допустимо ввести произвольный символ цифры;
# - допустимо ввести произвольный символ цифры или - (знак минус) или + (знак плюс) или пробел;
N - допустимо ввести любые алфавитно-цифровые символы (буквы или цифры);
U - допустимо ввести любые алфавитно-цифровые символы (буквы или цифры) и любой введенный символ преобразуется в верхний регистр;
X (латинского алфавита) - допустимо ввести произвольный символ;
^ - не допустимо вводить этот символ интерактивно пользователем, он может устанавливаться только из языка;
h - допустим ввод символов обозначения шестнадцатеричных цифр;
@ – допустимо ввести любые алфавитно-цифровые символы (буквы или цифры) в верхнем регистре или пробел.
8 Zlodey1С
 
16.12.08
10:57
Запрос по строке не понимаю как использывать. А про RegExpы можно подумать.
9 Defender aka LINN
 
16.12.08
11:08
(7) А что, у нас остались номера с кириллицей? 0_о
10 Zlodey1С
 
16.12.08
11:19
(9) А вдруг