Приведенные ниже функции являются аналогами строковых методов, появившихся в платформе 8.3.6
Если у вас возникнет вопрос, ЗАЧЕМ нужно писать функции, которые и так есть в платформе, то просто закрывайте статью и не забивайте себе голову.
Думаю, что многие разработчики сталкивались с ситуацией, когда необходимо скопировать какой-нибудь кусок кода или модуль из, например, БСП или другой новой конфигурации в свою старенькую продуктовую конфигурацию, и при сохранении начинают сыпать ошибки, типа "Процедура или функция с указанным именем не определена (СтрНайти)".
Поэтому решил выложить эти методы сюда, чтобы были под рукой в нужную минуту.
СтрНачинаетсяС()
Функция _СтрНачинаетсяС(Строка, СтрокаПоиска) Экспорт
Возврат Найти(Строка, СтрокаПоиска) = 1;
КонецФункции
СтрЗаканчиваетсяНа()
Функция _СтрЗаканчиваетсяНа(Строка, СтрокаПоиска) Экспорт
Возврат Прав(Строка, СтрДлина(СтрокаПоиска)) = СтрокаПоиска;
КонецФункции
СтрРазделить()
Функция _СтрРазделить(знач Строка, Разделитель, ВключатьПустые = Истина) Экспорт
Результат = Новый Массив;
Если Строка = "" Тогда
Если ВключатьПустые Тогда
Результат.Добавить(Строка);
КонецЕсли;
Возврат Результат;
КонецЕсли;
Позиция = Найти(Строка, Разделитель);
Пока Позиция > 0 Цикл
Подстрока = Лев(Строка, Позиция - 1);
Если ВключатьПустые ИЛИ НЕ Подстрока = "" Тогда
Результат.Добавить(Подстрока);
КонецЕсли;
Строка = Сред(Строка, Позиция + СтрДлина(Разделитель));
Позиция = Найти(Строка, Разделитель);
КонецЦикла;
Если ВключатьПустые ИЛИ НЕ Строка = "" Тогда
Результат.Добавить(Строка);
КонецЕсли;
Возврат Результат;
КонецФункции
СтрСоединить()
Функция _СтрСоединить(Строки, знач Разделитель = Неопределено) Экспорт
Результат = "";
Если Разделитель = Неопределено Тогда
Разделитель = "";
КонецЕсли;
Если Строки.Количество() Тогда
Результат = Строки[0];
КонецЕсли;
Для сч = 1 По Строки.ВГраница() Цикл
Результат = Результат + Разделитель + Строки[сч];
КонецЦикла;
Возврат Результат;
КонецФункции
СтрНайти()
Функция _СтрНайти(Строка, ПодстрокаПоиска, НаправлениеПоиска = Неопределено, НачальнаяПозиция = Неопределено, НомерВхождения = 1) Экспорт
// НаправлениеПоиска: СКонца,СНачала. По умолчанию: СНачала
Если Строка = "" и ПодстрокаПоиска = "" Тогда
// чтобы отрабатывало как в платформе
Если НаправлениеПоиска = "СКонца" Тогда
Если НомерВхождения = 1 Тогда
Возврат 1;
Иначе
Возврат 0;
КонецЕсли;
Иначе
Возврат мин(НомерВхождения, ?(НачальнаяПозиция=Неопределено, 1, НачальнаяПозиция));
КонецЕсли;
КонецЕсли;
Если НачальнаяПозиция = Неопределено Тогда
Если НаправлениеПоиска = "СКонца" Тогда
лНачальнаяПозиция = СтрДлина(Строка);
Иначе
лНачальнаяПозиция = 1;
КонецЕсли;
Иначе
лНачальнаяПозиция = НачальнаяПозиция;
КонецЕсли;
Если НаправлениеПоиска = "СКонца" Тогда
лСтрока = "";
Для сч = 1 По СтрДлина(Строка) Цикл
лСтрока = Сред(Строка, сч, 1) + лСтрока;
КонецЦикла;
лПодстрокаПоиска = "";
Для сч = 1 По СтрДлина(ПодстрокаПоиска) Цикл
лПодстрокаПоиска = Сред(ПодстрокаПоиска, сч, 1) + лПодстрокаПоиска;
КонецЦикла;
лНачальнаяПозиция = макс(1, СтрДлина(Строка)-лНачальнаяПозиция-СтрДлина(ПодстрокаПоиска)+2);
Иначе
лСтрока = Строка;
лПодстрокаПоиска = ПодстрокаПоиска;
лНачальнаяПозиция = лНачальнаяПозиция;
КонецЕсли;
лНомерВхождения = 0;
Результат = Найти(Сред(лСтрока, лНачальнаяПозиция), лПодстрокаПоиска);
Пока Результат Цикл
лНачальнаяПозиция = Результат + лНачальнаяПозиция + СтрДлина(ПодстрокаПоиска)-1;
лНомерВхождения = лНомерВхождения + 1;
Если лНомерВхождения = НомерВхождения Тогда
Прервать;
КонецЕсли;
Результат = Найти(Сред(лСтрока, лНачальнаяПозиция), лПодстрокаПоиска);
КонецЦикла;
Если лНомерВхождения = НомерВхождения Тогда
Результат = лНачальнаяПозиция - СтрДлина(ПодстрокаПоиска);
Иначе
Результат = 0;
КонецЕсли;
Если НаправлениеПоиска = "СКонца" И Результат<>0 Тогда
Результат = СтрДлина(Строка) - Результат - СтрДлина(ПодстрокаПоиска) + 2;
КонецЕсли;
Возврат Результат;
КонецФункции
СтрШаблон()
Функция _СтрШаблон(Шаблон, Параметр1=Неопределено, Параметр2=Неопределено, Параметр3=Неопределено,Параметр4=Неопределено,Параметр5=Неопределено,Параметр6=Неопределено,Параметр7=Неопределено,Параметр8=Неопределено,Параметр9=Неопределено,Параметр10=Неопределено) Экспорт
Результат = Шаблон;
Для сч = -10 По -1 Цикл
Параметр = Вычислить("Параметр" + (-сч));
Если Параметр = Неопределено Тогда
Продолжить;
КонецЕсли;
Если Найти(Результат, "%("+(-сч)+")") = 0 И Найти(Результат, "%"+(-сч))=0 Тогда
ВызватьИсключение "Слишком много фактических параметров";
КонецЕсли;
Результат = СтрЗаменить(Результат, "%("+ (-сч) + ")", Параметр);
Результат = СтрЗаменить(Результат, "%"+ (-сч), Параметр);
КонецЦикла;
Возврат Результат;
КонецФункции
И да - в интернете можно найти такие функции, НО я не нашел решения в виде отдельной публикации.
Есть аналоги в комментарии к статье 6 новых функций, которые не следует использовать в режиме совместимости, но все варианты СтрНайти82() отрабатывают не так, как в платформе
Если обнаружатся недочеты - пишите в комментариях, будем исправлять
p.s. Текст, расположенный ниже "Причины купить" и др. - добавляется автоматически и нет возможности его отключить. Рекомендую не обращать на него внимания