СтрНайти языка запросов ищет без учёта регистра и возвращает позицию от 1 либо 0. СтрЗаменить применяем к двум заранее заданным совпадающим фрагментам.
Где и как запускать
Полный серверный общий модуль учебной базы. Собственные значения в памяти, без чтения или записи рабочих данных.
Подготовка
В отдельной учебной базе 8.5.1.1343 создайте общий модуль УчебныйЯзык: Сервер=Истина, Глобальный=Ложь, ВызовСервера=Ложь, Привилегированный=Ложь. Клиентские и внешнее соединение отключены; ПовторноеИспользованиеВозвращаемыхЗначений=НеИспользовать.
Вставьте весь приведённый текст в этот общий модуль. ВыполнитьПример — экспортная точка входа; остальные процедуры и функции располагаются рядом, а не внутри неё.
В своей внешней учебной обработке создайте управляемую форму, команду Выполнить и кнопку. Клиентский обработчик Выполнить(Команда) вызывает свою процедуру ВыполнитьНаСервере(); она имеет директиву &НаСервереБезКонтекста и одну строку УчебныйЯзык.ВыполнитьПример();. Это серверный вызов общего модуля, а не разрешение клиенту прямо обращаться к серверной библиотеке.
Все товары, количества и строки придуманы в этом модуле. Запись документов, подключение к чужой базе, файлы, сеть и печать не используются. В рабочие общие модули текст не вставляйте.
HTML только показывает BSL. Код в 1С не запускался; перечисленные результаты и отрицательные опыты проверяйте самостоятельно в собственном стенде.
Этот запрос без ИЗ получает одну строку только из явно заданных своих параметров. Справочники, документы, регистры, временные таблицы и рабочие сведения не читаются.
В модуле BSL запрос — многострочная строка: кавычки его текстовых констант удвоены, продолжения начинаются с |. Не добавляйте значение параметра склейкой в текст запроса.
Речь о функциях внутри языка запросов, не о внешне похожих функциях BSL. Их правила и доступность сверены с shquery_ru.hbk установленной 8.5.1.1343, но запросы здесь в 1С не выполнялись.
Процедура ВыполнитьПример() Экспорт
Исходная = "Код: ama-01; ama-02";
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| &Исходная КАК Исходная,
| СТРНАЙТИ(&Исходная, &Искомое) КАК ПерваяПозиция,
| СТРНАЙТИ(&Исходная, ""ZZZ"") КАК НетСовпадений,
| СТРЗАМЕНИТЬ(&Исходная, ""ama"", ""SKU"") КАК Заменённая";
Запрос.УстановитьПараметр("Исходная", Исходная);
Запрос.УстановитьПараметр("Искомое", "AMA");
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если НЕ Выборка.Следующий() Тогда
ВызватьИсключение "Запрос из собственных параметров должен вернуть одну строку";
КонецЕсли;
Сообщить(Выборка.ПерваяПозиция = 6);
Сообщить(Выборка.НетСовпадений = 0);
Сообщить(Выборка.Заменённая = "Код: SKU-01; SKU-02");
Сообщить(Выборка.Исходная = Исходная);
Сообщить("Исходная: " + Выборка.Исходная);
Сообщить("Два вхождения заменены: " + Выборка.Заменённая);
Если Выборка.Следующий() Тогда
ВызватьИсключение "У запроса без источников ожидалась ровно одна строка";
КонецЕсли;
КонецПроцедурыРазбор по шагам
Задать собственную строку Код: ama-01; ama-02 и отдельный параметр поиска AMA.
Поиск AMA находит первое ama в позиции 6, несмотря на разный регистр. Это правило функции в запросе, не заимствованное правило BSL.
Отдельно поиск ZZZ даёт 0: не найдено, а не первый символ.
Замена точного фрагмента ama на SKU меняет оба заранее заданных вхождения; исходный параметр не записывается обратно.
Вывести исходную и новую строки отдельно и сравнить четыре поля результата с ожидаемыми.
Проверить единственность строки; не переносить произвольное правило чувствительности замены к регистру из поведения поиска.
Как проверить результат
Четыре проверки Истина, затем исходная и Код: SKU-01; SKU-02.
ПерваяПозиция=6, НетСовпадений=0; сравнение позиций с 0 обязательно до использования результата как индекса.
В новой строке заменены обе части, в исходном параметре всё осталось прежним.
Ожидаемый результат
На одной собственной строке отделены первое найденное вхождение, отсутствие и замена всех совпадающих фрагментов.
На что обратить внимание
0 от СтрНайти нельзя выдавать за найденный первый символ.
Две функции выполняют разные операции: поиск сам по себе ничего не заменяет.
Свойство поиска без учёта регистра прямо описано в shquery_ru.hbk; не переносите его автоматически на функцию BSL с похожим именем.
У этих функций справка предупреждает об отсутствии передачи в Дата акселератор. У длинных/переменных замен также меняется оценка длины результирующей строки.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.