Ср Сен 26, 2012 06:58  Маска ввода (InputMask) для поля типа Строка
Полезность: Нет оценки
Здавствуйте все,
Проблема такая:
В структуре "Контакты для связи" нужно в операции ввода контакта сделать ввод по маске для телефонных номеров.
В зависимости от "Типа связи" маска ввода может меняться, или ее может вообще не быть.
Что сделано:
Создал подтип типа Строка с указанием маски "&(&&&) &&&-&&&", и на форме конструктора разместил переменную этого типа. На смену "Типа связи" повесил валидатор, и при изменении типа связи и принадлежности через клиент-скрипт меняю маску, примерно так:
Код:
txtNumber.InputMask = "0(&&&&) &&-&&&"
' или
txtNumber.InputMask = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
Проблема в том, что при маске "aaa" могут быть введены только цифры и буквы, а мне нужно чтобы можно было ввести любой символ и спец.символы тоже. Установка InputMask в пустую строку "" не помогла.
И еще, можно ли не указывая такую длинную маску, использовать квадратные(или фигурные) скобки наподобие "[a&]" где можно указать какие символы должны быть в вводимой строке, не ограничивая длинну? Если можно, то как(синтаксис, пример)
Ср Сен 26, 2012 07:41  Re: Маска ввода (InputMask) для поля типа Строка
Полезность: Нет оценки
samsonbek пишет:
Проблема такая:
В структуре "Контакты для связи" нужно в операции ввода контакта сделать ввод по маске для телефонных номеров.
В зависимости от "Типа связи" маска ввода может меняться, или ее может вообще не быть.
...
Проблема в том, что при маске "aaa" могут быть введены только цифры и буквы, а мне нужно чтобы можно было ввести любой символ и спец.символы тоже. Установка InputMask в пустую строку "" не помогла.
А не проще тупо обработать OnKeyDown на поле ввода?
Ср Сен 26, 2012 07:48  Re: Маска ввода (InputMask) для поля типа Строка
Полезность: Нет оценки
Random пишет:
samsonbek пишет:
Проблема такая:
В структуре "Контакты для связи" нужно в операции ввода контакта сделать ввод по маске для телефонных номеров.
В зависимости от "Типа связи" маска ввода может меняться, или ее может вообще не быть.
...
Проблема в том, что при маске "aaa" могут быть введены только цифры и буквы, а мне нужно чтобы можно было ввести любой символ и спец.символы тоже. Установка InputMask в пустую строку "" не помогла.
А не проще тупо обработать OnKeyDown на поле ввода?
Не хотелось бы в коде клиент-скрипта весь код обработки писать, зачем писать кучу vbscript кода если все можно решить простой маской?
К тому же при смене "Типа связи" или "Принадлежности" маска меняется и фокус не на поле ввода находится.
А не пробовали для формирования нужной маски вместо символа "а" (строчная латинская) использовать символ & ("амперсанд"), значение которого трактуется как "Любой символ (буква, цифра, знак) или пробел. В эту позицию можно ввести один символ или пробел, но необязательно."
Информация взята из документации по следующему пути:
Администратор словаря данных > Глава 2. Типы Базовых Понятий > Создание и редактирование Типов Базовых Понятий > Технология создания (редактирования) типа данных > Простые типыпараграф"Значения – Маска ввода"
А не пробовали для формирования нужной маски вместо символа "а" (строчная латинская) использовать символ & ("амперсанд"), значение которого трактуется как "Любой символ (буква, цифра, знак) или пробел. В эту позицию можно ввести один символ или пробел, но необязательно."
Информация взята из документации по следующему пути:
Администратор словаря данных > Глава 2. Типы Базовых Понятий > Создание и редактирование Типов Базовых Понятий > Технология создания (редактирования) типа данных > Простые типыпараграф"Значения – Маска ввода"
Дааа, верно, что-то я этот вариант не рассматривал, наверно потому что у меня в документашке написано "любой символ, ОБЯЗАТЕЛЬНО присутствующий" (в приложенном архиве).
Ср Сен 26, 2012 15:49  Re: Маска ввода (InputMask) для поля типа Строка
Полезность: Нет оценки
samsonbek пишет:
Код:
txtNumber.InputMask = "0(&&&&) &&-&&&"
' или
txtNumber.InputMask = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
Проблема в том, что при маске "aaa" могут быть введены только цифры и буквы, а мне нужно чтобы можно было ввести любой символ и спец.символы тоже. Установка InputMask в пустую строку "" не помогла.
И еще, можно ли не указывая такую длинную маску, использовать квадратные(или фигурные) скобки наподобие "[a&]" где можно указать какие символы должны быть в вводимой строке, не ограничивая длинну? Если можно, то как(синтаксис, пример)
0 Digit (0 to 9, entry required, plus [+] and minus [–] signs not allowed).
9 Digit or space (entry not required, plus and minus signs not allowed).
# Digit or space (entry not required; spaces are displayed as blanks while in Edit mode, but blanks are removed when data is saved; plus and minus signs allowed).
L Letter (A to Z, entry required).
? Letter (A to Z, entry optional).
A Letter or digit (entry required).
a Letter or digit (entry optional).
& Any character or a space (entry required).
C Any character or a space (entry optional).
. , : ; - / Decimal placeholder and thousand, date, and time separators. (The actual character used depends on the settings in the Regional Settings Properties dialog box in Windows Control Panel).
< Causes all characters to be converted to lowercase.
> Causes all characters to be converted to uppercase.
! Causes the input mask to display from right to left, rather than from left to right. Characters typed into the mask always fill it from left to right. You can include the exclamation point anywhere in the input mask.
\ Causes the character that follows to be displayed as the literal character (for example, \A is displayed as just A).
0 Digit (0 to 9, entry required, plus [+] and minus [–] signs not allowed).
9 Digit or space (entry not required, plus and minus signs not allowed).
# Digit or space (entry not required; spaces are displayed as blanks while in Edit mode, but blanks are removed when data is saved; plus and minus signs allowed).
L Letter (A to Z, entry required).
? Letter (A to Z, entry optional).
A Letter or digit (entry required).
a Letter or digit (entry optional).
& Any character or a space (entry required).
Тут тоже написано что значение должно быть введено обязательно. Это собственно и смутило меня...
samsonbek, по скриншоту я заметил, что я привёл выдержку из последней версии документации...
Однако, тут с маской возникла другая проблема, в маску оказывается можно ввести максимум 40 символов(при максимуме в 64), и получается, что даже если текстовый тип должен иметь длинну 100 символов, он будет ограничен до 64, потому что маска не позволит ввести больше.
Кто-нибудь знает как выйти из этой ситуации?
Это баг ЦФТ?
Однако, тут с маской возникла другая проблема, в маску оказывается можно ввести максимум 40 символов(при максимуме в 64), и получается, что даже если текстовый тип должен иметь длинну 100 символов, он будет ограничен до 64, потому что маска не позволит ввести больше.
Кто-нибудь знает как выйти из этой ситуации?
Это баг ЦФТ?
Это не баг (и не "фича"). Это ограничение на длину хранения значения маски. В типе словаря для строки можно сохранить маску длиной 40 символов. В клиент-скрипте можно увеличить до 64. Значит никто не закладывал в реализацию использование маскированного поля более 64 символов. Кстати, для чего нужно-то?
"как выйти из этой ситуации"? Разбить, например, на 2 поля. Или поставить задачу по-другому.
Это не баг (и не "фича"). Это ограничение на длину хранения значения маски. В типе словаря для строки можно сохранить маску длиной 40 символов. В клиент-скрипте можно увеличить до 64. Значит никто не закладывал в реализацию использование маскированного поля более 64 символов. Кстати, для чего нужно-то?
"как выйти из этой ситуации"? Разбить, например, на 2 поля. Или поставить задачу по-другому.
Нужна маска длиннее чем 64 символа, потому что длинна самого типа равна 100 символам.
PS. По какой причине в ЦФТ длинна маски ограничена?
Нужна маска длиннее чем 64 символа, потому что длинна самого типа равна 100 символам.
да понятно, что нужно, не понятно, кто принял такое решение, что нужно? А главное, на основании чего, какая задача при этом решается?
Задачу я объяснял в начале. Поясняю еще раз. В это поле, в зависимости от "Типа" контакта, может быть вписан и номер телефона, и адрес почты, и еще какая-нибудь контактная белиберда типа "почта: sombody@somesite.com, но лучше писать на othermail@mail.ru".
Все данные вводятся через одно поле(один параметр). Тип у этого параметра "Строка (100)".
Так вот, когда "Тип" связи указан как "Телефон" маска должна быть #(###) ###-###.
Когда "Тип" меняется на другой, то маска сбрасывается на "&&&&&&&&&&&&&&&&&&&&&&&&&&&&" длинною в 100 символов.
А тут получается что при длине поля в 100, маска позволяет ввести всего лишь 64 символа, и то, при сохранении и обратном редактировании урезает до 40 символов.
Выход вижу только один - использовать две переменные, одна с маской для телефонного номера, а другая без маски. Расположить их на форме поверх друг друга, при смене "Типа" связи, скрывать одну и показывать другую. Для пользователя создастся иллюзия что он всегда вводит данные в одно поле...
Просто в коде тут придется погеморроится с синхронизацией этих переменных и данных в них.
постановку задачи я понял так: есть два режима ввода данных пользователем, определяемые по параметру "Тип": Маскированный текст; 2. НеМаскированный текст.
Не понятно следующее:
1. Где будет храниться введённая информация ? В нескольких полях или нет?
2. Маскированние требуется только при вводе? Редактирование ранее введённой информации планируется или нет? При редактировании маскированная информация должна будет, насколько я понимаю, отображаться маскированной ?
В итоге, хотелось бы понять: что останавливает для ввода данных от использования нескольких полей, своё для каждой единицы информации? Даже если части её храниться будут в одном большом текстовом поле, параметров-то можно сделать сколько нужно?
В целом, я с Вашим выводом об использовании для разных типов разных полей согласен.
А если от выполнения задуманного останавливает только нежелание обрабатывать в клиент-скрипте несколько полей (для отображения и скрытия), то рекомендую использовать вспомогательный параметр типа "Выбор из двух". С помощью него в валидаторе эту задачу можно решить, практически, одной строкой:
Код:
case P_MESSAGE of
:'VALIDATE':
case P_INFO of
:'P_TYPE':
P_CASE.[0] := bool_num(P_TYPE,1,2,2);
End;
End;
Как это будет выглядеть, можно посмотреть в отчёте [MAIN_DOCUM]::[CJ2481U]. Оконтовки областей и выбор сделаны невидимыми. переключение происходит по крыжу "Задать условие выбора нескольких счетов".
Не понятно следующее:
1. Где будет храниться введённая информация ? В нескольких полях или нет?
2. Маскированние требуется только при вводе? Редактирование ранее введённой информации планируется или нет? При редактировании маскированная информация должна будет, насколько я понимаю, отображаться маскированной ?
В итоге, хотелось бы понять: что останавливает для ввода данных от использования нескольких полей, своё для каждой единицы информации? Даже если части её храниться будут в одном большом текстовом поле, параметров-то можно сделать сколько нужно?
В целом, я с Вашим выводом об использовании для разных типов разных полей согласен.
Отвечаю:
1. любая введенная информация, будь то номер телефона или адрес почты или т.п., хранится в одном поле(в одном реквизите типа СТРОКА(100) ).
2. маскировка требуется также и при редактировании. Если был введен номер телефона, при редактировании отображаться он должен тоже по маске(это нужно чтобы при редактировании не перебили формат, думаю это логично).
При использовании нескольких полей(отдельное поле для каждого типа связи) как я уже говорил, много операций придется делать дабы синхронизировать эти поля. Нужно учитывать следующие ньюансы:
- В каждый момент времени видимым должно быть только одно поле(соответсвтующее типу контакта)
- Пользователь может сначала внести данные в поле, а потом уже выбрать "Тип связи", и если он поменял "тип связи", поле, в которое он вводил данные должно скрыться, а другое стать видимым, и данные которые он вводил в старое поле, должны отобразится в новом(если подходят по маске ввода). Поэтому при любом вводе данных значение поля нужно будет копировать на все поля.
Вобщем вот такой вот геморрой .
Ну, видимо все таки придется остановится на этом варианте...
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
Домен cftclub.ru не связан с ЗАО "Центр Финансовых Технологий" и ни в коей мере не нарушает авторских и иных прав
Владелец может не разделять мнения Участников и не несет ответственности за их публикации
Powered by phpBB