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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с данными в 1С часто возникает задача обработки строковых значений, которые содержат составную информацию. Например, в одной колонке таблицы может храниться артикул и наименование товара, разделенные специальным символом, таким как #. Давайте разберем, как корректно разделить такую строку на две части, чтобы записать их в разные реквизиты.

Метод для современных версий 1С (начиная с 8.3.6)

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

Рассмотрим, как это реализовать на практике:


// Исходная строка
ИсходнаяСтрока = "2202#Квас Тарас 2л";
Разделитель = "#";

// Получаем массив строк
МассивЧастей = СтрРазделить(ИсходнаяСтрока, Разделитель);

// Проверяем, что в массиве достаточно элементов
Если МассивЧастей.Количество() >= 2 Тогда
    КодТовара = МассивЧастей[0];       // Результат: 2202
    Наименование = МассивЧастей[1];    // Результат: Квас Тарас 2л
КонецЕсли;

Использование СтрРазделить — это наиболее предпочтительный вариант. Он работает быстро, код получается лаконичным, а вы получаете массив, из которого легко обратиться к любому сегменту строки по индексу.

Решение для старых версий платформы

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

Давайте посмотрим, как это сделать с помощью метода СтрЗаменить:


// Подготавливаем строку, заменяя разделитель на символ переноса строки
СтрокаДляРазбора = СтрЗаменить(Название, "#", Символы.ПС);

// Извлекаем нужные части с помощью метода СтрПолучитьСтроку
Код = СтрПолучитьСтроку(СтрокаДляРазбора, 1);
Наименование = СтрПолучитьСтроку(СтрокаДляРазбора, 2);

Этот метод был очень популярен в «старой школе» программирования на 1С. Он достаточно надежен для простых задач, где разделитель встречается в строке один раз.

Создание универсальной функции для сложных случаев

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

Проанализируем пример такой функции:


Функция РазложитьСтроку(Знач Стр, Разделитель = ",") Экспорт
    МассивСтрок = Новый Массив;
    // Логика обработки разделителя
    Пока Истина Цикл
        Поз = Найти(Стр, Разделитель);
        Если Поз = 0 Тогда
            МассивСтрок.Добавить(Стр);
            Возврат МассивСтрок;
        КонецЕсли;
        МассивСтрок.Добавить(Лев(Стр, Поз - 1));
        Стр = Сред(Стр, Поз + 1);
    КонецЦикла;
КонецФункции

Данная функция позволяет программно управлять процессом парсинга. Использование методов Найти, Лев и Сред дает полный контроль над тем, как именно мы извлекаем данные из строки.

Важные рекомендации при работе с данными

При обработке строк важно помнить о нескольких правилах, которые помогут избежать ошибок:

  1. Очистка лишних пробелов: Часто после разделения строки по краям могут остаться пробелы. Используйте функции СокрЛП (сократить слева и справа) или СокрЛ, чтобы привести результат к чистому виду.
  2. Проверка массива: Всегда проверяйте количество элементов в массиве или количество строк после СтрПолучитьСтроку. Если разделитель в строке отсутствует, попытка обратиться к несуществующему элементу приведет к ошибке выполнения.
  3. Поиск объектов: Если вы планируете использовать полученные данные для поиска в справочниках через НайтиПоНаименованию, будьте осторожны: если в базе есть дубли или нечеткие совпадения, метод может вернуть не тот элемент. По возможности старайтесь использовать уникальные ключи (GUID) или дополнительные реквизиты.
  4. Производительность: Старайтесь избегать циклов при обработке больших объемов данных. Встроенные функции платформы (такие как СтрРазделить) работают значительно быстрее, чем ручной перебор символов в коде.

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

← На главную