У кода может быть несколько дефисов. Находим последний разделитель и получаем основную часть и регион.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Все исходные строки заданы прямо в примере; товары, файлы и настройки рабочих конфигураций не нужны.
Выполняйте на сервере учебной базы. Особенно важно для встроенных функций регулярных выражений.
Код = "AMA-BOOK-001-RU";
Позиция = СтрНайти(Код, "-", НаправлениеПоиска.СКонца);
Если Позиция = 0 Или Позиция = СтрДлина(Код) Тогда
ВызватьИсключение "В коде нет непустого окончания после дефиса";
КонецЕсли;
ОсновнаяЧасть = Лев(Код, Позиция - 1);
Окончание = Сред(Код, Позиция + 1);
Сообщить(ОсновнаяЧасть);
Сообщить(Окончание);
Сообщить(Прав(Код, 2));
Сообщить(Найти(Код, "BOOK"));
Сообщить(СтрНайти(Код, "BOOK"));
Сообщить(СтрНайти(Код, "-", НаправлениеПоиска.СНачала, 1, 2));Разбор по шагам
СтрНайти с направлением СКонца выбирает последний дефис, а не первый.
Позиции в строках 1С начинаются с 1; 0 означает отсутствие совпадения.
Лев получает символы до разделителя, Сред — текст после него. Прав(2) здесь показывает последние два символа, но не заменяет разбор произвольного окончания.
Сравниваем простой Найти со СтрНайти и отдельно показываем второй дефис через НомерВхождения.
Как проверить результат
Основная часть AMA-BOOK-001, окончание RU; последний дефис на позиции 13.
Оба поиска BOOK возвращают 5; второй дефис находится на позиции 9.
Замените код на AMABOOK001 или AMA-BOOK-001-: сработает проверка до выделения окончания.
Ожидаемый результат
Составной код разобран по последнему разделителю без предположения о длине основной части.
На что обратить внимание
Поиск учитывает регистр: book не совпадает с BOOK.
Пустая подстрока поиска у СтрНайти возвращает 1 — это не проверка содержимого.
Если контракт допускает дефис внутри самого окончания, требуется другой способ разделения полей.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.