Добавить в корзинуПозвонить
Найти в Дзене

Как убрать все символы кроме цифр в 1с

Удаление всех символов, кроме цифр, в 1С – распространенная задача при обработке данных, например, при приведении телефонных номеров или артикулов к единому формату. Существует несколько способов решения этой задачи с использованием встроенных функций 1С. Рассмотрим основные методы. Этот способ предполагает перебор каждого символа в строке и проверку, является ли он цифрой. Если символ не является цифрой, он удаляется. Функция УдалитьНецифровыеСимволы(СтрокаИсточник) Результат = ""; Для Счетчик = 1 По СтрДлина(СтрокаИсточник) Цикл Символ = Сред(СтрокаИсточник, Счетчик, 1); Если Найти("0123456789", Символ) > 0 Тогда Результат = Результат + Символ; КонецЕсли; КонецЦикла; Возврат Результат; КонецФункции // Пример использования: ИсходнаяСтрока = "+7 (916) 123-45-67"; ОчищеннаяСтрока = УдалитьНецифровыеСимволы(ИсходнаяСтрока); Сообщить(ОчищеннаяСтрока); // Выведет "79161234567" Преимущества: Недостатки: Начиная с версии 8.3.10, в 1С появилась поддержка регулярных выражений. Этот способ явля
Оглавление

Удаление всех символов, кроме цифр, в 1С – распространенная задача при обработке данных, например, при приведении телефонных номеров или артикулов к единому формату. Существует несколько способов решения этой задачи с использованием встроенных функций 1С. Рассмотрим основные методы.

Удаление нецифровых символов в 1С

1. Использование цикла и функции Сред()

Этот способ предполагает перебор каждого символа в строке и проверку, является ли он цифрой. Если символ не является цифрой, он удаляется.

Функция УдалитьНецифровыеСимволы(СтрокаИсточник)

Результат = "";

Для Счетчик = 1 По СтрДлина(СтрокаИсточник) Цикл

Символ = Сред(СтрокаИсточник, Счетчик, 1);

Если Найти("0123456789", Символ) > 0 Тогда

Результат = Результат + Символ;

КонецЕсли;

КонецЦикла;

Возврат Результат;

КонецФункции

// Пример использования:

ИсходнаяСтрока = "+7 (916) 123-45-67";

ОчищеннаяСтрока = УдалитьНецифровыеСимволы(ИсходнаяСтрока);

Сообщить(ОчищеннаяСтрока); // Выведет "79161234567"

Преимущества:

  • Простота и понятность кода.
  • Не требует использования регулярных выражений или других сложных инструментов.

Недостатки:

  • Может быть относительно медленным при обработке очень длинных строк.
  • Требует написания цикла.

2. Использование регулярных выражений (если поддерживается в вашей версии 1С)

Начиная с версии 8.3.10, в 1С появилась поддержка регулярных выражений. Этот способ является более эффективным и лаконичным, особенно для сложных задач.

Функция УдалитьНецифровыеСимволыRegExp(СтрокаИсточник)

РегулярноеВыражение = Новый COMОбъект("VBScript.RegExp");

РегулярноеВыражение.Pattern = "[^0-9]"; // Все, кроме цифр

РегулярноеВыражение.Global = Истина;

Результат = РегулярноеВыражение.Replace(СтрокаИсточник, "");

Возврат Результат;

КонецФункции

// Пример использования:

ИсходнаяСтрока = "+7 (916) 123-45-67";

ОчищеннаяСтрока = УдалитьНецифровыеСимволыRegExp(ИсходнаяСтрока);

Сообщить(ОчищеннаяСтрока); // Выведет "79161234567"

Преимущества:

  • Более эффективный код (особенно для длинных строк).
  • Более лаконичный код.
  • Возможность использования сложных шаблонов поиска и замены.

Недостатки:

  • Требует понимания регулярных выражений.
  • Работает только в версиях 1С, поддерживающих COM-объект "VBScript.RegExp" (начиная с 8.3.10).
  • Зависимость от COM-объекта, что может потребовать дополнительных настроек на сервере 1С.

3. Использование СтрЗаменить() в цикле (альтернативный способ без RegExp)

Этот способ является альтернативой регулярным выражениям и подходит для версий 1С, не поддерживающих COM-объект VBScript.RegExp. Он предполагает замену каждого нецифрового символа на пустую строку с помощью функции СтрЗаменить().Функция УдалитьНецифровыеСимволыСтрЗаменить(СтрокаИсточник)

СимволыДляУдаления = "";

Для КодСимвола = 0 По 255 Цикл // Проходим по всем возможным символам

Символ = Символ(КодСимвола);

Если Найти("0123456789", Символ) = 0 Тогда // Если символ не цифра

СимволыДляУдаления = СимволыДляУдаления + Символ;

КонецЕсли;

КонецЦикла;

Результат = СтрокаИсточник;

Для Счетчик = 1 По СтрДлина(СимволыДляУдаления) Цикл

Символ = Сред(СимволыДляУдаления, Счетчик, 1);

Результат = СтрЗаменить(Результат, Символ, "");

КонецЦикла;

Возврат Результат;

КонецФункции

// Пример использования:

ИсходнаяСтрока = "+7 (916) 123-45-67";

ОчищеннаяСтрока = УдалитьНецифровыеСимволыСтрЗаменить(ИсходнаяСтрока);

Сообщить(ОчищеннаяСтрока); // Выведет "79161234567"

Преимущества:

  • Работает в любой версии 1С.
  • Не требует использования COM-объектов.

Недостатки:

  • Может быть медленнее, чем использование регулярных выражений.
  • Код более сложный, чем при использовании цикла и функции Сред().
  • Создает строку СимволыДляУдаления, что может быть не оптимально для больших объемов данных.

4. Использование StringFunctionsClientServer (только для клиент-серверного варианта)

Если вы работаете в клиент-серверном варианте 1С, можно использовать библиотеку StringFunctionsClientServer, которая предоставляет функцию Substitute. Она позволяет удалить все символы, указанные в качестве второго аргумента.

//Внимание! Этот код будет работать только в клиент-серверном варианте 1С!

Функция УдалитьНецифровыеСимволыStringFunctions(СтрокаИсточник) Экспорт

Возврат StringFunctionsClientServer.Substitute(СтрокаИсточник, " ", Символы.ПС, Символы.ВК, "-", "(", ")", "+", ".");

КонецФункции

Преимущества:

  • Простота использования.
  • Оптимизированная работа на сервере.

Недостатки:

  • Работает только в клиент-серверном варианте 1С.
  • Ограниченная гибкость (нужно перечислять все символы для удаления).
  • Если нужно удалять символы динамически, этот метод не подходит.

Выбор способа

Рекомендации:

  • Если вы работаете в версии 1С 8.3.10 или выше, используйте регулярные выражения (способ 2). Это наиболее эффективный и лаконичный способ.
  • Если вы работаете в более ранней версии 1С или не хотите использовать COM-объекты, используйте цикл и функцию Сред() (способ 1).
  • Если вам нужно оптимизировать производительность и вы работаете в клиент-серверном варианте, используйте StringFunctionsClientServer (способ 4), но учитывайте ограниченную гибкость.
  • Перед использованием любого способа протестируйте его на копии базы данных, чтобы убедиться, что он работает правильно и не приводит к нежелательным последствиям.

Важно! При выборе способа учитывайте версию вашей 1С, требования к производительности и ваши навыки программирования.