Платформа 1С 8.2 для контакт центра дабы исключить написания телефонов абонентов "как Бог на душу послал", была введена маска: +999(99)-9-999-999, однако к сожалению не учел, что человек разрабатывавший документ - "Заявка" указал тип поля "Телефон" - Строка и в результате при передачи номера на АТС для исходящего звонка система его так и передает: +999(99)-9-999-999, естественно звонка не происходит, возможно, ли передавать эту строку в виде 999999999999?
(18) Luchik, а еще лучше это код наваять на жаваскрипте и воткнуть в поле хтмл документа.
В другой базе, которую опубликовать на виртуалке, понятой на домашнем компьютере.
И обращаться туда с помощью веб-сервиса.
А вызов веб-сервиса сделать не средствами 1С, а спомощью ком-объектов.
И наваять это все на жаваскрипте...
(20) Luchik, решение в (3) вполне удобоворимо. В рамках поставленной задачи не вижу смысла что-то другое предлагать.
А ваше предложение действительно напомнило промелькнувшее не так давно на форуме: "не смог запустить ком-объект в 1С 77, поэтому подключился по ком к 1С 83 и вызвал функцию оттуда".
(21) ditp, согласен - если нужно преобразовать только один раз, то, конечно решение (3) оптимально.
А если, необходимо преобразовать большое количество записей, то метод, предложенный мной работает быстрее (если, сначала, создать COMОбъект и инициализировать его свойства, а затем, в цикле использовать
(2) Еще пробелы надо убирать, наверняка ведь для сотовых в номере окажется "( )".
И вообще, я бы применил более надежное решение, а то мало ли как потом надумают шаблон поменять:
Функция ТолькоЦифры(ВхСтрока)
ВыхСтрока="";
Для п=1 По СтрДлина(ВхСтрока) Цикл
Симв=Сред(ВхСтрока,п,1);
Если Симв>="0" И Симв<="9" Тогда
ВыхСтрока=ВыхСтрока+Симв;
КонецЕсли;
КонецЦикла;
Возврат ВыхСтрока;
КонецФункции
Ваше сообщение даже спустя 2 года чрезвычайно актуально и интересно! Особенно с учетом, что "убирать пробелы" уже тогда требовалось в неизвестной конфигурации и вообще это нужно было не мне.
Разумеется, это очевидно, что приведенный ею результат не может быть получен ни вашим, ни моим кодом. Правда, я как раз догадался, откуда такой результат мог вылезти, подсказка тут:
с номером счета
Вангую: она пыталась "удалить символы" из какого-то представления документа "Счет № 103 от 19.08.2016", посмотрите сами по цифрам.
Ну, а то, как она сумела это изложить, лишь подтвердило поговорку о сравнении женщин-программистов с морскими свинками.
(32) Cooler, для более предметного общения, предлагаю вспомнить правила форума
Запрещено:
Публиковать заведомо ложнyю инфоpмацию.
Использовать мат и/или грубые выражения (в том числе в замаскированной форме).
Оскорблять кого-либо в прямой или косвенной форме, высказывать неуважение и/или хамить участникам форума.
ВыхСтрока="";
Для п=1 По СтрДлина(ВхСтрока) Цикл
Симв=Сред(ВхСтрока,п,1);
Если Симв>="0" И Симв<="9" Тогда
ВыхСтрока=ВыхСтрока+Симв;
КонецЕсли;
КонецЦикла;
Возврат ВыхСтрока;
Функция ТолькоЦифры(ВхСтрока)
ВыхСтрока="";
Для п=1 По СтрДлина(ВхСтрока) Цикл
Симв=Сред(ВхСтрока,п,1);
Если Симв>="0" И Симв<="9" Тогда
ВыхСтрока=ВыхСтрока+Симв;
КонецЕсли;
КонецЦикла;
Возврат ВыхСтрока;
КонецФункции
&НаСервере
Функция ОпределениеЧисла(Цифра)
СТРОЧКА="0123456789" ;
если цифра = "" тогда возврат 0 конецесли;
Если СтрНайти(Строчка,Цифра)>0 Тогда
возврат СтрНайти(Строчка,Цифра)
Иначе
возврат 0
КонецЕсли;
КонецФункции
можно попробовать убить все не числа
(31) Нет, не для поднятия. два года назад понадобилась такая функция и сейчас снова - эта тема в десятке гугла по вопросу "1с убрать символы из строки оставить только цифры". В моём случае было важно обрабатывать пустую строку, поэтому добавил в Вашу функцию
Если ТипЗнч(пстрДанные) <> Тип("Строка") Тогда
Возврат "";
КонецЕсли;
Если НЕ ЗначениеЗаполнено(пстрДанные) Тогда
Возврат "";
КонецЕсли;
Функция ФорматироватьНомер(Номер)
Результат = "";
ДопустимыеСимволы = "1234567890";
Для Позиция = 1 По СтрДлина(Номер) Цикл
Символ = Сред(Номер,Позиция,1);
Если СтрНайти(ДопустимыеСимволы, Символ) > 0 Тогда
Результат = Результат + Символ;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ОставитьТолькоЦифрыВСтроке(РазбираемаяСтрока, ПропускаемыеСимволы = "")
Цифры = "1234567890";
ЦифроваяЧасть = "";
Для НомерСимвола = 1 По СтрДлина(РазбираемаяСтрока) Цикл
ТекущийСимвол = Сред(РазбираемаяСтрока, НомерСимвола, 1);
Если Найти(Цифры, ТекущийСимвол) Тогда
ЦифроваяЧасть = ЦифроваяЧасть + ТекущийСимвол;
Иначе
Если Найти(ПропускаемыеСимволы, ТекущийСимвол) = Неопределено Тогда
Прервать;
Иначе
Продолжить;
КонецЕсли;
КонецЕсли;
КонецЦикла;
// Если пустую строку попробовать преобразовать в число - то будет ошибка,
// поэтому в данном случае вместо пустой строки возвращаем строку с нулем.
Если ЦифроваяЧасть = "" Тогда
ЦифроваяЧасть = "0";
КонецЕсли;
Возврат ЦифроваяЧасть;
КонецФункции