Имя: Пароль:
1C
 
Как проверить на соответствие маске не через запрос, встроенными средствами?
,
0 Гений 1С
 
гуру
02.12.22
15:57
А то пришлось по-быстрому так написать:


&НаСервере
Функция ПроверитьНаМаску(С, Маска)
    З = Новый Запрос(
    "ВЫБРАТЬ 1 ГДЕ
    |    ВЫБОР
    |        КОГДА &С ПОДОБНО &Маска
    |            ТОГДА ИСТИНА
    |        ИНАЧЕ ЛОЖЬ
    |    КОНЕЦ ");
    З.УстановитьПараметр("С", С);
    З.УстановитьПараметр("Маска", Маска);
    Выборка = З.Выполнить().Выбрать();
    Возврат Выборка.Следующий()
КонецФункции

&НаСервере
Процедура дор_ПриЗаписиНаСервереПеред(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    //Тут важно брать не из объекта формы, а из объекта базы
    Для Каждого Строка ИЗ ТекущийОбъект.КонтактнаяИнформация Цикл
        
        Если Строка.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Тогда
            Если Не ПроверитьНаМаску(Строка.Представление, "+7([0-9][0-9][0-9])[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]") Тогда
                Сообщить("Телефон: " + Строка.Представление + " не соответствует формату +7(999)999-99-99, исправьте перед записью !");
                Отказ = истина;
            КонецЕсли;
        КонецЕсли;
        
    КонецЦикла;
КонецПроцедуры

1 vicof
 
02.12.22
16:07
Можно маску задать в поле и не писать код.
2 Волшебник
 
модератор
02.12.22
16:08
Лучше маску не задавать вообще, а то бывают всякие "добавочные"
3 Гений 1С
 
гуру
02.12.22
16:10
(1) спасибо, КЭП. Я в курсе. Но маска не работает в УТ 11.4
4 программистище
 
02.12.22
16:10
Сейчас популярны нейросети, стоит посмотреть в эту сторону, а то как то простенько код смотрится в 22 году
5 vicof
 
02.12.22
16:11
Ждем, когда в платформу добавят регулярки.
6 Гений 1С
 
гуру
02.12.22
16:12
(5) DLL-ки может еще? ггг
7 vicof
 
02.12.22
16:13
(3) Расширение поля формы для поля ввода (Form field extension for a text box)
Маска (Mask)
......
Использование в версии:
Доступен, начиная с версии 8.2.

Что-то я тут ни слова про УТ не вижу.
8 программистище
 
02.12.22
16:14
(7) Гению видней, не понимаешь
9 Волшебник
 
модератор
02.12.22
16:16
А ведь ещё бывают иностранные номера, без +7. Маски — прошлый век. Сейчас надо принимать как есть и распознавать нейросетями. Правильно говорит (4)
10 KJlag
 
02.12.22
16:17
(9) Получается ждем нейросеть от Гения?
11 vicof
 
02.12.22
16:19
Пора вообще от телефонов отказываться, прошлый век.
12 Гений 1С
 
гуру
02.12.22
16:29
(11) предлагаешь телепатию?
13 kittystark
 
02.12.22
21:20
надо Илона ибн Как Тебе Такое, призвать
см. регулярки
14 kittystark
 
02.12.22
21:30
(\+7)?\(?\d{3}\)?\d{3}\-?\d{2}\-?\d{2}
15 NorthWind
 
03.12.22
10:29
(0) для этого лет 60 назад придумали регэкспы
16 TormozIT
 
гуру
03.12.22
11:29
Ну если прям очень надо без внешних компонент, то через схему XML можно https://infostart.ru/1c/articles/464971/
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший