При разработке на 1С часто возникает задача обработки входящих текстовых данных, например, когда нужно извлечь номер документа и дату из строкового представления. Рассмотрим, как эффективно решить задачу парсинга строки вида Заказ № ZX11138165 от 03.08.2022.
Этот метод является одним из самых простых и понятных. Суть подхода заключается в приведении строки к удобному для разделения виду с помощью замены лишних символов на разделитель.
Разберем алгоритм по шагам:
СтрРазделить для получения массива подстрок.
ИсходнаяСтрока = "Заказ № ZX11138165 от 03.08.2022";
ИсходнаяСтрока = СтрЗаменить(ИсходнаяСтрока, "Заказ № ", "");
ИсходнаяСтрока = СтрЗаменить(ИсходнаяСтрока, " от ", "|");
Массив = СтрРазделить(ИсходнаяСтрока, "|");
ЗаказНомер = Массив[0];
ЗаказДата = Массив[1];
Этот метод отлично работает, если структура строки строго регламентирована и не меняется.
Если строка состоит из слов, разделенных пробелами, мы можем разбить её на массив элементов. Это удобно, если позиции нужных данных всегда остаются неизменными.
// Параметр Ложь в СтрРазделить указывает на то, что пустые элементы не нужно включать в массив
Массив = СтрРазделить(ИсходнаяСтрока, " ", Ложь);
ЗаказНомер = Массив[2];
ЗаказДата = Массив[4];
Важно: Данный метод требует проверки количества элементов в массиве, чтобы избежать ошибки выхода за границы массива, если исходная строка окажется пустой или поврежденной.
После того как мы извлекли дату в виде строки (например, "03.08.2022"), нам необходимо превратить её в тип Дата, чтобы с ней можно было работать в системе (сравнивать, складывать, использовать в отчетах).
Посмотрим, как правильно реализовать функцию преобразования:
&НаСервере
Функция СтрокаВДату(Знач ДатаСтрока)
// Удаляем лишние символы и приводим к каноническому виду
ДатаСтрока = СокрЛП(СтрЗаменить(ДатаСтрока, ".", ""));
// Переставляем элементы в формат ГГГГММДД
ДатаСтрока = Сред(ДатаСтрока, 5) + Сред(ДатаСтрока, 3, 2) + Лев(ДатаСтрока, 2);
// Добавляем век, если год указан в коротком формате
Если СтрДлина(ДатаСтрока) = 6 Тогда
ДатаСтрока = "20" + ДатаСтрока;
КонецЕсли;
ОписаниеТипа = Новый ОписаниеТипов("Дата");
Результат = ОписаниеТипа.ПривестиЗначение(ДатаСтрока);
Возврат Результат;
КонецФункции
Совет: Всегда используйте Попытка...Исключение при вызове функций преобразования типов, если данные поступают из внешнего источника. Это защитит программу от аварийного завершения при получении некорректного формата даты.
В актуальных версиях платформы 1С (начиная с 8.3.23) появилась встроенная поддержка регулярных выражений. Это наиболее профессиональный и гибкий способ парсинга строк, который не зависит от наличия пробелов или специфических символов, если вы можете описать паттерн (шаблон) вашей строки.
Рассмотрим пример использования регулярных выражений:
РегВыражение = Новый РегулярноеВыражение("Заказ № (.*) от (.*)");
Результат = РегВыражение.Вычислить(ИсходнаяСтрока);
// Теперь в группах результата можно получить номер и дату без ручного перебора символов
Используя данные методы в своей работе, вы сможете легко справляться с обработкой любых текстовых строк, делая ваш код более надежным и легкочитаемым для коллег.