Учимся работать с маской телефона
В справочнике «Информационные карты» хранятся карты покупателей разных видов, в том числе дисконтные карты. Изначально в справочнике нет возможности хранить номер телефона клиента. Такую возможность нужно реализовать. Также нужна возможность удобного поиска по информационным картам по номеру телефона. При этом нужно добавить маску номера 994 (xx) xxx-xx-xx.
Исходные данные:
1. Бухгалтерия предприятия 3.0.71.83
2. Платформа 8.3.16.1224
Решение задачи:
Часть 1. Хранение номера телефона в базе данных и отображение на форме:
Если мы сохраним маску на уровне реквизита справочника, то в базе данных телефон будет храниться с маской:
и нам будет не удобно делать поиск, так как маски могут использоваться разные. Оператор запросто может запутаться, в каком формате вводить номер телефона для поиска.
Для решения данной задачи лучше всего хранить номер телефона без маски, а телефон с маской формировать и отображать непосредственно в форме. Добавим маску телефон на уровне элемента формы справочника:
Разберем саму маску. «\9\9\4» означает, что мы хотим, чтобы маска начиналась с цифр 994. Круглые скобки нужны для удобства восприятия, а цифра «9» в маске означает, что можно ввести произвольный символ цифры.
Для того, чтобы номер телефона в базе данных хранился только в виде цифр, в модуле объекта в процедуре ПередЗаписью() сделаем вызов метода ОставитьВСтрокеТолькоЦифры(), который разместим в модуле менеджера, так как он будет вызываться как из модуля объекта, так и из модуля формы.
Модуль менеджера:
Телефон на форме с маской выглядит так:
В базе данных хранится в виде:
Таким образом первая часть задачи решена.
Часть 2. Вывод телефона с маской на форму:
Что получилось на данный момент:
1. Мы добавили маску для телефона на уровне элемента формы;
2. Мы научились сохранять телефон в базу в виде цифр.
Если мы протестируем работу формы на данном этапе, то обнаружим, что телефон, который вводился пользователем как:
после сохранения информации будет отображаться как:
Почему так происходит?
Дело в том, что на момент написания статьи Платформа, к сожалению, еще не умеет корректно преобразовывать телефон в виде цифр в телефон по маске. Поэтому нам потребуется написать функцию, которая будет преобразовывать телефон, который мы храним в базе данных, в телефон, который будет отображаться на форме, с учетом маски. Функция не претендует на универсальность, она лишь является примером, как можно реализовать подобный функционал для решения текущей задачи:
В функцию ПреобразоватьСтрокуПоМаске() передаем телефон, содержащий только цифры, и маску. В цикле проходим по каждому символу маски:
Если текущий символ маски равен «\», то пропускаем его. Если текущий символ — цифра, выводим цифру из номера телефона по порядку. Для всех остальных символов — выводим символ «как есть».
Далее в модуле формы элемента справочника в процедуре ПриСозданииНаСервере() прописываем код, который преобразует телефон из базы данных в телефон по маске:
Далее чтобы телефон по маске корректно отображался при всех событиях формы в модуле формы элемента справочника прописываем:
Таким образом задача решена. С одной стороны оператору удобно делать поиск карты по номеру телефон без маски:
С другой стороны номер телефона хранится в базе в удобном для поиска виде. При этом на форме номер телефона выводится в виде, удобном для пользователя.
Как задать формат номера телефона в табличной части 1с?
На форме есть табличная часть (ПутьКДанным — Динамический список). В колонке «Контакт» выводятся контакты контрагента (Телефон, Адрес, Мыло и т.д). Так вот на данный момент номер телефона выводится так же как и записан в базу: 79998887766, хотелось бы изменить отображение на +7 (999) 888-77-77. Знаю, что для обычных полей ввода можно задать маску, а как быть с таблицей? Смотрел в сторону условного оформления — ничего не нашёл.
P.S 1С Предприятие 8.3.8
- Вопрос задан более трёх лет назад
- 4937 просмотров
- Вконтакте
У полей таблицы тоже можно задавать маску.
Поле «Маска ввода»
В данной статье будет описано, что такое поле «Маска ввода» в 1С. Также будут приведены все форматы и ограничители, которые доступны в поле «Маска ввода».
Когда в системе 1С есть поле ввода, которое имеет тип «строка», то в таком случае к нему есть возможность применить маску ввода данных. Данная функция отвечает за форматирование внешнего вида информации и за её количество. Маска ввода может находить практическое применение: маска ввода даты, маска ввода номера телефона, кода из сообщения.
Сама маска ввода может быть задана и при помощи конфигуратора, и текстом программы.
2. Ограничения в масках ввода в 1С
Рассмотрим, какие существуют форматы и ограничители свойств масок ввода в системе 1С.
Форматы-ограничители для поля «Маска ввода»:
· 9 – вводиться могут только цифры;
· # — вводиться могут все цифры, пробел и знаки «+» и «-»;
· h – вводиться могут только шестеричные цифры;
· @ — вводиться могут буквенные символы, при этом все они будут становиться верхним регистром;
· N – вводиться могут любые буквенные символы, регистр при этом не меняется;
· U – аналогично «@» — можно вводить буквенные символы, и они будут преобразованы в верхний регистр;
· I – можно вводить любые символы, но все они будут преобразованы в верхний регистр;
· X – вводиться могут любые символы латиницы.
Чтобы запретить вводить какой-либо конкретный знак, это нужно прописать до того, как сделать маску ввода.
Символы «.», «(», «)», «-» и «,» также могут быть прописаны в маске ввода, с их помощью происходит форматирование строки. Рассмотрим примеры заданий масок ввода:
Пример №1: пусть нужно сделать маску ввода телефона, при этом, в нём должен присутствовать код города. В таком случае в системе 1С нужно написать маску ввода «9 (999) 999 99 99».
Пример №2: пусть нужно вводить в поле информацию кода накладной, вида «код.подразделение.месяц.год», в этом случае маска ввода будет выглядеть следующим образом – «UUUU.99.9999».
Замечание: при задании маски ввода её длина должна соответствовать длине строки. В случае, когда в строке может быть несколько форматов, потребуется написать несколько масок ввода — через точку с запятой.
Пример №3: пусть нужно ввести либо мобильный номер телефона, либо домашний (городской), тогда маска ввода номера будет выглядеть следующим образом – «9 (999) 999 99 99;999-99-99».
Если поместить значение из маски ввода в текст, который имеет привязку к данному полю, то значения преобразуются следующим образом: если в маске ввода символ «@», при этом в строке находится пробел, то пробел будет удалён.
Если в маске ввода есть только символы «@», то из текста все значения (которые не специальные символы) будут удалены после крайнего блока, заполненного символами «@».
Пример №4: пусть есть маска ввода следующего вида – «@@.@@.@@», а текст ввели «35. 3. .», данный текст будет преобразован в «35.3».
Чтобы прописать в маске ввода один из символов, который является специальным, необходимо перед данным символом поставить «\».
В данной статье было описано, что такое маска ввода в 1С, а также описаны все критерии, параметры и форматирование масок ввода с примерами того, как они работают на практике.
Форма элемента
Поставка программы осуществляется c предопределенными полями контактной информации для некоторых документов и списков. У предопределенных полей контактной информации можно только поменять настройки, остальные реквизиты заполнены по умолчанию и защищены от редактирования.
Виды контактной информации
Программа позволяет хранить следующие виды контактной информации:
Добавление поля контактной информации в список или документ
Заполните необходимую информацию:
Настройки полей контактной информации
- В диалоге — позволяет ограничить ввод нового и редактирование существующего адреса, телефона или факса шаблоном ввода, а также выбором адреса из адресного классификатора. При выбранном значении предусмотрена возможность ввести адрес в свободной форме. Это может понадобиться в исключительных случаях, например, если данные адреса в каких либо документах приводятся с ошибкой, но для печати необходимо их проставить. При этом такой адрес будет храниться в программе с пометкой, что он введен в свободной форме, и использоваться с ограничениями. После уточнения адрес можно будет исправить, заполнив по шаблону.
- В поле ввода — если для адресов и телефонов не требуется ввод по шаблону (например, для иностранных адресов), то можно отключить ввод в диалоге;
- В диалоге и в поле ввода — позволяет использовать оба способа ввода. Если правильный ввод адреса не вызывает затруднений, можно будет ввести адрес прямо в поле ввода не открывая диалога, в случае затруднений можно будет открыть шаблон и ввести адрес с помощью шаблона.
Особенности настройки поля Адрес
- Включать страну в представление — включите флажок, для того чтобы страна указывалась при автоматическом составлении программой полного адреса в поле Адрес.
- Хранить историю изменений — включите флажок, для того чтобы хранить историю изменений, используется не для всех объектов программы, зависит от настроек разработчика.
Международный формат адреса
- Для создания международного адреса (например, для валютных платежей), включите флажок Международный формат адреса, в этом случае ссылка Дополнительные настройки адреса становится недоступной.
Дополнительные настройки поля Адрес
С помощью соответствующей ссылки можно перейти к дополнительным настройкам адреса: