При работе с данными в 1С часто возникает задача обработки строковых значений, которые содержат составную информацию. Например, в одной колонке таблицы может храниться артикул и наименование товара, разделенные специальным символом, таким как #. Давайте разберем, как корректно разделить такую строку на две части, чтобы записать их в разные реквизиты.
Если вы используете современную версию платформы, разработчики 1С уже позаботились о том, чтобы эта задача решалась максимально просто и элегантно. Для этих целей идеально подходит встроенная функция СтрРазделить. Этот метод автоматически разбивает строку на массив элементов, используя указанный вами разделитель.
Рассмотрим, как это реализовать на практике:
// Исходная строка
ИсходнаяСтрока = "2202#Квас Тарас 2л";
Разделитель = "#";
// Получаем массив строк
МассивЧастей = СтрРазделить(ИсходнаяСтрока, Разделитель);
// Проверяем, что в массиве достаточно элементов
Если МассивЧастей.Количество() >= 2 Тогда
КодТовара = МассивЧастей[0]; // Результат: 2202
Наименование = МассивЧастей[1]; // Результат: Квас Тарас 2л
КонецЕсли;
Использование СтрРазделить — это наиболее предпочтительный вариант. Он работает быстро, код получается лаконичным, а вы получаете массив, из которого легко обратиться к любому сегменту строки по индексу.
Если вы поддерживаете базу на устаревшей версии 1С, где функция СтрРазделить еще не была реализована, мы можем воспользоваться альтернативным подходом. Суть его заключается в замене разделителя на символ переноса строки Символы.ПС, после чего каждая часть становится отдельной строкой.
Давайте посмотрим, как это сделать с помощью метода СтрЗаменить:
// Подготавливаем строку, заменяя разделитель на символ переноса строки
СтрокаДляРазбора = СтрЗаменить(Название, "#", Символы.ПС);
// Извлекаем нужные части с помощью метода СтрПолучитьСтроку
Код = СтрПолучитьСтроку(СтрокаДляРазбора, 1);
Наименование = СтрПолучитьСтроку(СтрокаДляРазбора, 2);
Этот метод был очень популярен в «старой школе» программирования на 1С. Он достаточно надежен для простых задач, где разделитель встречается в строке один раз.
Иногда возникают ситуации, когда требуется более гибкий подход или нужно учитывать сложные разделители. В таких случаях можно написать собственную функцию, которая будет перебирать символы строки, пока не найдет нужный разделитель.
Проанализируем пример такой функции:
Функция РазложитьСтроку(Знач Стр, Разделитель = ",") Экспорт
МассивСтрок = Новый Массив;
// Логика обработки разделителя
Пока Истина Цикл
Поз = Найти(Стр, Разделитель);
Если Поз = 0 Тогда
МассивСтрок.Добавить(Стр);
Возврат МассивСтрок;
КонецЕсли;
МассивСтрок.Добавить(Лев(Стр, Поз - 1));
Стр = Сред(Стр, Поз + 1);
КонецЦикла;
КонецФункции
Данная функция позволяет программно управлять процессом парсинга. Использование методов Найти, Лев и Сред дает полный контроль над тем, как именно мы извлекаем данные из строки.
При обработке строк важно помнить о нескольких правилах, которые помогут избежать ошибок:
СокрЛП (сократить слева и справа) или СокрЛ, чтобы привести результат к чистому виду.СтрПолучитьСтроку. Если разделитель в строке отсутствует, попытка обратиться к несуществующему элементу приведет к ошибке выполнения.НайтиПоНаименованию, будьте осторожны: если в базе есть дубли или нечеткие совпадения, метод может вернуть не тот элемент. По возможности старайтесь использовать уникальные ключи (GUID) или дополнительные реквизиты.СтрРазделить) работают значительно быстрее, чем ручной перебор символов в коде.Надеемся, что эти советы помогут вам быстрее и эффективнее решать задачи по обработке строк в 1С. Выбирайте метод в зависимости от версии вашей платформы, и ваш код будет работать стабильно!