Как разделить строку и выделить из неё данные в 1С:Предприятие?

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

При разработке на 1С часто возникает задача обработки входящих текстовых данных, например, когда нужно извлечь номер документа и дату из строкового представления. Рассмотрим, как эффективно решить задачу парсинга строки вида Заказ № ZX11138165 от 03.08.2022.

Способ №1: Использование методов СтрЗаменить и СтрРазделить

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

Разберем алгоритм по шагам:

  1. Заменим фиксированные части строки на пустые строки или специальные разделители.
  2. Воспользуемся методом СтрРазделить для получения массива подстрок.

ИсходнаяСтрока = "Заказ № ZX11138165 от 03.08.2022";
ИсходнаяСтрока = СтрЗаменить(ИсходнаяСтрока, "Заказ № ", "");
ИсходнаяСтрока = СтрЗаменить(ИсходнаяСтрока, " от ", "|");
Массив = СтрРазделить(ИсходнаяСтрока, "|");
ЗаказНомер = Массив[0];
ЗаказДата = Массив[1];

Этот метод отлично работает, если структура строки строго регламентирована и не меняется.

Способ №2: Использование метода СтрРазделить по пробелу

Если строка состоит из слов, разделенных пробелами, мы можем разбить её на массив элементов. Это удобно, если позиции нужных данных всегда остаются неизменными.


// Параметр Ложь в СтрРазделить указывает на то, что пустые элементы не нужно включать в массив
Массив = СтрРазделить(ИсходнаяСтрока, " ", Ложь);
ЗаказНомер = Массив[2];
ЗаказДата = Массив[4];

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

Способ №3: Преобразование полученной строки в тип Дата

После того как мы извлекли дату в виде строки (например, "03.08.2022"), нам необходимо превратить её в тип Дата, чтобы с ней можно было работать в системе (сравнивать, складывать, использовать в отчетах).

Посмотрим, как правильно реализовать функцию преобразования:


&НаСервере
Функция СтрокаВДату(Знач ДатаСтрока) 
    // Удаляем лишние символы и приводим к каноническому виду
    ДатаСтрока = СокрЛП(СтрЗаменить(ДатаСтрока, ".", ""));
    // Переставляем элементы в формат ГГГГММДД
    ДатаСтрока = Сред(ДатаСтрока, 5) + Сред(ДатаСтрока, 3, 2) + Лев(ДатаСтрока, 2);
    
    // Добавляем век, если год указан в коротком формате
    Если СтрДлина(ДатаСтрока) = 6 Тогда
        ДатаСтрока = "20" + ДатаСтрока;
    КонецЕсли;
    
    ОписаниеТипа = Новый ОписаниеТипов("Дата");
    Результат = ОписаниеТипа.ПривестиЗначение(ДатаСтрока);
    
    Возврат Результат;
КонецФункции

Совет: Всегда используйте Попытка...Исключение при вызове функций преобразования типов, если данные поступают из внешнего источника. Это защитит программу от аварийного завершения при получении некорректного формата даты.

Современные подходы

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

Рассмотрим пример использования регулярных выражений:


РегВыражение = Новый РегулярноеВыражение("Заказ № (.*) от (.*)");
Результат = РегВыражение.Вычислить(ИсходнаяСтрока);
// Теперь в группах результата можно получить номер и дату без ручного перебора символов

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

← На главную