При работе с табличными частями в 1С часто возникают задачи, где в одной ячейке хранится несколько значений, разделенных специальным символом (например, точкой с запятой). Сравнение таких строк между собой требует аккуратного подхода, чтобы избежать ошибок «ложных вхождений» и обеспечить высокую производительность при обработке больших объемов данных.
Для корректного сравнения слов в двух строках мы должны убедиться, что ищем именно целое слово, а не его часть. Например, при поиске имени «Ан» мы не должны найти совпадение в имени «Антон». Рассмотрим два наиболее эффективных способа реализации этой задачи.
Этот метод основан на использовании функции СтрРазделить. Мы разбиваем первую строку на массив слов, а затем для каждого слова проверяем его наличие во второй строке. Чтобы исключить частичное совпадение, мы добавляем разделитель ; к каждому слову и к самой строке поиска.
Давайте разберем, как это выглядит в коде:
Для Каждого Слово Из СтрРазделить(ПерваяСтрока, ";") Цикл
// Добавляем символ разделителя к слову и к строке, чтобы поиск был точным
Если Найти(";" + ВтораяСтрока + ";", ";" + Слово + ";") > 0 Тогда
// Совпадение найдено, выполняем необходимые действия
Прервать;
КонецЕсли;
КонецЦикла;
Преимущества данного метода:
Если количество строк в табличной части исчисляется тысячами, стандартный перебор может работать медленно. В таких случаях мы рекомендуем использовать объект Соответствие. Это позволяет свести задачу поиска к поиску по ключу, что работает практически мгновенно (сложность O(1)).
Рассмотрим алгоритм действий:
Соответствие.Соответствии методом Получить() или Свойство().Этот подход позволяет избежать вложенных циклов и значительно сэкономить время при обработке больших массивов данных.
Как показывает практика, попытка хранить перечисления в одной строке — это вынужденная мера, которая усложняет дальнейшую аналитику. Если у вас есть возможность изменить структуру конфигурации, придерживайтесь следующих правил:
Замер производительности в Конфигураторе при работе с большими объемами. Это поможет выявить, является ли узким местом сам парсинг строк или логика сравнения.Мы проанализировали основные варианты решения задачи. Выбор между простым перебором через СтрРазделить и использованием Соответствия зависит от объема ваших данных. Для небольших таблиц (до 1000 строк) первый способ будет достаточно быстрым и лаконичным, в то время как для высоконагруженных систем лучше сразу переходить к Соответствию или нормализации структуры хранения.