Как удалить или заменить несколько запрещенных символов в строке 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При обмене данными между 1С и внешними системами (например, WMS-системами, использующими SQL-запросы или XML-файлы) часто возникает проблема некорректной обработки спецсимволов в наименованиях товаров. Символы типа &, <, >, @ или различные виды кавычек могут приводить к сбоям при записи в базу данных или нарушению структуры передаваемых файлов. Рассмотрим, как эффективно решить эту задачу средствами 1С.

Метод 1: Использование функций СтрРазделить и СтрСоединить

Этот способ является наиболее лаконичным и рекомендуемым, так как не требует использования внешних COM-объектов. Суть метода заключается в разделении строки на массив по списку запрещенных символов с последующим слиянием частей обратно в одну строку без них.

Давайте разберем по шагам реализацию этого подхода:

  1. Определяем строку, содержащую все запрещенные символы.
  2. Используем метод СтрРазделить для разбиения исходной строки.
  3. Используем метод СтрСоединить для сборки результата.

Посмотрим на пример кода:


// Определяем строку, которую нужно очистить
ИсходнаяСтрока = Выборка.Наименование;

// Список всех символов, которые нужно удалить
Разделители = "&<>`“‘|%/\@()";

// Разбиваем строку по каждому из символов и соединяем обратно без них
Результат = СтрСоединить(СтрРазделить(ИсходнаяСтрока, Разделители), "");

Важное примечание: Если вы столкнулись с ситуацией, когда символы не удаляются, проверьте, не являются ли они невидимыми спецсимволами Unicode. Иногда визуально похожие кавычки имеют разные коды в таблице символов. В таких случаях рекомендуем использовать функцию КодСимвола() для идентификации реального содержимого строки.

Метод 2: Использование регулярных выражений (RegExp)

Если задача требует более сложных манипуляций (например, замена группы символов на один конкретный или поиск по шаблону), отлично подойдет использование VBScript.RegExp. Этот подход позволяет гибко настраивать правила фильтрации.

Разберем пример реализации через COMОбъект:


// Создаем объект для работы с регулярными выражениями
RegExp = Новый COMОбъект("VBScript.RegExp");

// Указываем шаблон для поиска
RegExp.Pattern = "[&<>|%/\@()]"; 

// Устанавливаем флаг Global для поиска всех вхождений, а не только первого
RegExp.Global = Истина;

// Выполняем замену на пустую строку
Результат = RegExp.Replace(ИсходнаяСтрока, "");

Этот метод удобен тем, что позволяет одной командой Replace обрабатывать множество правил поиска, заданных в параметре Pattern.

Рекомендации по оптимизации интеграции

Проанализируем ситуацию, когда данные передаются в WMS напрямую запросом к SQL. Чтобы не нагружать систему вычислениями при каждой выгрузке, рекомендуем следовать лучшим практикам:

Выбирая между СтрРазделить и регулярными выражениями, ориентируйтесь на производительность. Для большинства повседневных задач достаточно штатных функций платформы, так как они работают быстрее и не требуют обращения к COM-технологиям.

← На главную