Замена i-го токена

Как-то в процессе реализации задачи по подарочным сертификатам столкнулся с необходимостью поменять 58-й токен в строке, разделенной запятыми для выгрузки на Фронтол.

Для подарочных сертификатов нужно было «2» заменить на «1»:

Можно было по рабоче-крестьянски сделать изменения в типовой код, но мне претит такая насильственная модификация кода.

Поэтому я не менял типовой код, а сделал пост-обработку. Уже полученную строку я обработал следующим кодом:

Вот код функции, которую пришлось набросать для этого незатейливого дела:

Функция ЗаменитьВПозиции(Знач Строка, Разделитель, Позиция, Замена) Экспорт
   
//Осипов ПодарочныеСертификаты 2020-11-23
    //Ищет в строке позицию, считая разделители
   
ТекСтрока = Строка;
   
РезСтрока = «»;
   
ТекПозиция = 1;
   
Последний = ложь;

    Пока Истина Цикл
       
ПозицияРазделителя = Найти(ТекСтрока, Разделитель);
        Если
ПозицияРазделителя = 0 Тогда
           
ТекАтом = ТекСтрока;
           
Последний = истина;
        Иначе
           
ТекАтом = Сред(ТекСтрока, 1, ПозицияРазделителя 1);
           
ТекСтрока = Сред(ТекСтрока, ПозицияРазделителя + 1);
        КонецЕсли;

        Если Позиция = ТекПозиция Тогда
           
ТекАтом = Замена;
        КонецЕсли;

        ТекПозиция = ТекПозиция + 1;

        РезСтрока = РезСтрока + ТекАтом + ?(Последний, «», Разделитель);

        Если Последний Тогда
            Прервать;
        КонецЕсли;

    КонецЦикла;

    Возврат РезСтрока;

КонецФункции