Разделить код по последнему дефису

Учебные задачи

У кода может быть несколько дефисов. Находим последний разделитель и получаем основную часть и регион.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

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

  2. Выполняйте на сервере учебной базы. Особенно важно для встроенных функций регулярных выражений.


Код = "AMA-BOOK-001-RU";
Позиция = СтрНайти(Код, "-", НаправлениеПоиска.СКонца);
Если Позиция = 0 Или Позиция = СтрДлина(Код) Тогда
    ВызватьИсключение "В коде нет непустого окончания после дефиса";
КонецЕсли;
ОсновнаяЧасть = Лев(Код, Позиция - 1);
Окончание = Сред(Код, Позиция + 1);
Сообщить(ОсновнаяЧасть);
Сообщить(Окончание);
Сообщить(Прав(Код, 2));
Сообщить(Найти(Код, "BOOK"));
Сообщить(СтрНайти(Код, "BOOK"));
Сообщить(СтрНайти(Код, "-", НаправлениеПоиска.СНачала, 1, 2));

Разбор по шагам

  1. СтрНайти с направлением СКонца выбирает последний дефис, а не первый.

  2. Позиции в строках 1С начинаются с 1; 0 означает отсутствие совпадения.

  3. Лев получает символы до разделителя, Сред — текст после него. Прав(2) здесь показывает последние два символа, но не заменяет разбор произвольного окончания.

  4. Сравниваем простой Найти со СтрНайти и отдельно показываем второй дефис через НомерВхождения.

Как проверить результат

  1. Основная часть AMA-BOOK-001, окончание RU; последний дефис на позиции 13.

  2. Оба поиска BOOK возвращают 5; второй дефис находится на позиции 9.

  3. Замените код на AMABOOK001 или AMA-BOOK-001-: сработает проверка до выделения окончания.

Ожидаемый результат

Составной код разобран по последнему разделителю без предположения о длине основной части.

На что обратить внимание

  1. Поиск учитывает регистр: book не совпадает с BOOK.

  2. Пустая подстрока поиска у СтрНайти возвращает 1 — это не проверка содержимого.

  3. Если контракт допускает дефис внутри самого окончания, требуется другой способ разделения полей.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.