Не в первый раз сталкиваюсь с тем, что пользователи вводят номера телефонов "как придется".
Также бывают ситуации, когда при обмене с сайтом, например, приходит некорректный формат номера телефона (неправильные значения полей, записано только представление), и нужно массово все исправить.
Как удалось навести порядок в номерах телефонов:
1) чтобы пользователи вводили так, как нужно, на форме ввода номера телефона - установить маску для номера (в нужном виде: "9999999" или "999-99-99").Если конфигурация типовая, то это лучше сделать в расширении.
2) предыдущие номера привести в порядок с помощью обработки. Пользоваться ей достаточно просто. При необходимости можно дописать "под себя" - код открыт.
Открыть обработку, выбрать вид контактной информации - телефон (справочника Партнеры). Если нужно править телефоны для контрагентов - то надо немного поправить обработку.
Далее Заполнить номера. Таблица на форме будет заполнена всеми телефонами.
У меня номер телефона должен соответствовать шаблону: +7(999)9999999. Для приведения всех номеров к шаблону - нажать "Преобразовать телефоны по представлению". Эта процедура убирает пробелы, дефисы и скобочки из представления номера телефона, раскладывает его на: код страны, код города и номер телефона. Но нужно проверить, чтоб не было ошибок, особенно с добавочными номерами и с номерами, где изначально некорректное представление.
Дальше - Обработать строки". Для всех выделенных строк будет изменена контактная информация и сформированы корректные значения полей.
В общем-то, все достаточно быстро - у меня на несколько тысяч партнеров ушло пару часов - с проверкой на тестовой базе.
Проверена и протестирована мной на УТ 11.4.11.88.
На более старой версии: 11.3.3.178 в таком формате не будет работать, нужно поменять несколько строк кода, которые касаются формирования значений полей
с такого:
Функция РезультатВыбора(ТекСтрока)
Результат = Новый Структура();
КонтактнаяИнформация = КонтактнаяИнформацияПоЗначениюРеквизитов(ТекСтрока);
ДанныеВыбора = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(КонтактнаяИнформация);
Результат.Вставить("Вид", ВидКонтактнойИнформации);
Результат.Вставить("Тип", ВидКонтактнойИнформации.Тип);
Результат.Вставить("КонтактнаяИнформация", УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(ДанныеВыбора,
КонтактнаяИнформация.Value,
ВидКонтактнойИнформации.Тип));
Результат.Вставить("Значение", ДанныеВыбора);
Результат.Вставить("Представление", КонтактнаяИнформация.Value);
Результат.Вставить("Комментарий", КонтактнаяИнформация.Comment);
//Результат.Вставить("КонтактнаяИнформацияОписаниеДополнительныхРеквизитов",
// КонтактнаяИнформацияОписаниеДополнительныхРеквизитов);
Возврат Результат
КонецФункции
&НаСервере
Функция КонтактнаяИнформацияПоЗначениюРеквизитов(ТекСтрока)
Результат = УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации(ВидКонтактнойИнформации.Тип);
Результат.CountryCode = ТекСтрока.КодСтраны;
Результат.AreaCode = ТекСтрока.КодГорода;
Результат.Number = ТекСтрока.НомерТелефона;
Результат.ExtNumber = ТекСтрока.Добавочный;
Результат.Value = УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПредставлениеТелефона(
ТекСтрока.КодСтраны,
ТекСтрока.КодГорода,
ТекСтрока.НомерТелефона,
ТекСтрока.Добавочный, "");
Результат.Comment = ТекСтрока.Комментарий;
Возврат Результат;
КонецФункции
на такой
Функция РезультатВыбора(ТекСтрока)
Результат = Новый Структура("КонтактнаяИнформация, Представление, Комментарий, Вид, Тип, КонтактнаяИнформацияОписаниеДополнительныхРеквизитов");
XDTOИнформация = КонтактнаяИнформацияПоЗначениюРеквизитов(ТекСтрока);
ДанныеВыбора = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(XDTOИнформация);
Результат.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонКонтактногоЛица;
Результат.Тип = Результат.Вид.Тип;
Результат.КонтактнаяИнформация = ДанныеВыбора;
Результат.Представление = XDTOИнформация.Представление;
Результат.Комментарий = XDTOИнформация.Комментарий;
Возврат Результат
КонецФункции
Функция КонтактнаяИнформацияПоЗначениюРеквизитов(ТекСтрока)
ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен();
Результат = ФабрикаXDTO.Создать( ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация") );
Данные = ФабрикаXDTO.Создать( ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона") );
Данные.КодСтраны = ТекСтрока.КодСтраны;
Данные.КодГорода = ТекСтрока.КодГорода;
Данные.Номер = ТекСтрока.НомерТелефона;
Данные.Добавочный = ТекСтрока.Добавочный;
Результат.Представление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеТелефона(Данные);
Результат.Состав = Данные;
Возврат Результат;
КонецФункции
На УТ 11.1.6.26 - не работает.
В архиве - две версии обработки. Одна - для УТ 11.3.3.178, другая - для УТ 11.4.11.88.