Доброго времени суток, возникла интересная задачка с которой с ходу не смог разобраться:

есть строковая переменная которую надо увеличить на 1 позицию т.е

например в переменной "ак-120000" надо что бы стало "ак-120001"
или
в переменной "абсд" должно стать "абсе"
а если в переменной "абдя" должно стать "абе1"

может есть какая встроена функция? например в БСП

PS длина строки может быть любой
PS пока вижу только одно решение: раскладывать строку на символы, увеличивать последний символ, с контролем что бы он не вышел из значений букв и цифр, и если он дошел до "я" то сбрасывать его на символ "1" и увеличивать следующий....
---
Предложу свой вариант:

```1c
    Строка = "ак-12009я";
    м=СтрРазделить("0,1,2,3,4,5,6,7,8,9,а,б,в,г,д,е,ё,ж,з,и,й,к,л,м,н,о,п,р,с,т,у,ф,х,ц,ч,ш,щ,ъ,ы,ь,э,ю,я",",");
    Основание = м.Количество(); // основание системы исчисления

    Позиция = СтрДлина(Строка);
    вУме=1;
    Пока вУме>0 Цикл
    Индекс = м.Найти(Сред(Строка,Позиция,1));
    Если НЕ Индекс=Неопределено Тогда // например "-" который не учавствует в формировании
    НовыйИндекс = Индекс + вУме;
    Индекс = НовыйИндекс % Основание;
    вУме = (НовыйИндекс-Индекс) / Основание;
    Строка = Лев(Строка,Позиция-1)+м[Индекс]+Сред(Строка,Позиция+1);
    КонецЕсли;
    Позиция = Позиция-1;
    КонецЦикла;

    Сообщить(Строка);
```

PS если немного доработать, можно будет складывать "хлеб" и "пиво"
---
Ну здесь все зависит от того, какая все-таки система счислений будет использоваться и как выделить номер. А далее уже алгоритм более-менее ясен: выделяем номер, переводим его в 10чную систему, прибавляем 1 и переводим обратно в используемую
---
"абдя" должно стать "абс1" - какая тут закономерность ? если после "я" идет "1" и увеличение предыдущего разряда, то как "д" стало "с" ?
---
ошибся поправил, Вы правильно поняли после я идет 1 потом 2.... и тд после 0 буквы а..я и потом увеличение следующего регистра
---
сделайте тз 2 колонки - границы интервалов (левая, правая)
заполните ее интервалами юникода в нужной последовательности
, дальше определяете код последнего символа строки и находите в вашей таблице интервалов
если код = правая граница то берете левый интервал из следующей строки , если нет то Символ(КодСимвола+1)

упс. с числами не прокатит
принцип тот же , только слегка изменить алгоритм для определения чисел
---
Вроде так работает

```1c
    Строка = "ак-1200аа";
    ВсегоСимволов = СтрДлина(строка);
    Сч = 1;
    Пока Сч < ВсегоСимволов Цикл
    Символ = НРЕГ(Сред(Строка,ВсегоСимволов - Сч+1, 1));
    Сообщить(Символ);
    ВерхнийРегистр = Символ = ВРЕГ(Сред(Строка,ВсегоСимволов - Сч, 1));
    Если Символ = "я" Тогда

    ИзмененныйСимвол = "1";

    ИначеЕсли Символ = "9" Тогда
    ИзмененныйСимвол = "0";
    ИначеЕсли Символ = "0" Тогда
    ИзмененныйСимвол = "а";
    Иначе
    КодСимвола = КодСимвола(Символ);
    ИзмененныйСимвол = Символ(КодСимвола+1);
    КонецЕсли;
    ИзмененныйСимвол = ?(ВерхнийРегистр,ВРЕГ(ИзмененныйСимвол),ИзмененныйСимвол);
    Строка = Лев(Строка,ВсегоСимволов - Сч) + ИзмененныйСимвол + Сред(Строка,ВсегоСимволов - Сч ,Сч-1);
    Сч = Сч + 1;

    Если Символ <> "я" и Символ <> "9" Тогда
    Прервать;
    КонецЕсли;
    КонецЦикла;
    Сообщить(Строка);
```
---
Предложу свой вариант:

```1c
    Строка = "ак-12009я";
    м=СтрРазделить("0,1,2,3,4,5,6,7,8,9,а,б,в,г,д,е,ё,ж,з,и,й,к,л,м,н,о,п,р,с,т,у,ф,х,ц,ч,ш,щ,ъ,ы,ь,э,ю,я",",");
    Основание = м.Количество(); // основание системы исчисления

    Позиция = СтрДлина(Строка);
    вУме=1;
    Пока вУме>0 Цикл
    Индекс = м.Найти(Сред(Строка,Позиция,1));
    Если НЕ Индекс=Неопределено Тогда // например "-" который не учавствует в формировании
    НовыйИндекс = Индекс + вУме;
    Индекс = НовыйИндекс % Основание;
    вУме = (НовыйИндекс-Индекс) / Основание;
    Строка = Лев(Строка,Позиция-1)+м[Индекс]+Сред(Строка,Позиция+1);
    КонецЕсли;
    Позиция = Позиция-1;
    КонецЦикла;

    Сообщить(Строка);
```

PS если немного доработать, можно будет складывать "хлеб" и "пиво"
---
немножко доработал, что бы не впадало в бесконечный цикл и что бы работало с верхним и нижним регистром:
Строка1 = входящая переменная
Строка2 = результат

```1c
    Строка = Строка1;
    Позиция = СтрДлина(Строка);
    ШаблонНР=СтрРазделить("0,1,2,3,4,5,6,7,8,9,а,б,в,г,д,е,ё,ж,з,и,й,к,л,м,н,о,п,р,с,т,у,ф,х,ц,ч,ш,щ,ъ,ы,ь,э,ю,я",",");
    ШаблонВР=СтрРазделить("0,1,2,3,4,5,6,7,8,9,А,Б,В,Г,Д,Е,Ё,Ж,З,И,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я",",");
    банк =";
    вУме=1;
    Символ = Сред(Строка,Позиция,1);
    Если символ = ВРег(Символ)
    тогда м = ШаблонВР;
    банк = "ВР";
    иначе м = ШаблонНР;
    банк = "НР";
    КонецЕсли;
    Пока вУме>0 и Позиция>0 Цикл
    Основание = м.Количество(); // основание системы исчисления
    Индекс = м.Найти(Сред(Строка,Позиция,1));
    Если НЕ Индекс= Неопределено
    Тогда // например "-" который не учавствует в формировании
    НовыйИндекс = Индекс + вУме;
    Индекс = НовыйИндекс % Основание;
    вУме = (НовыйИндекс-Индекс) / Основание;
    Строка = Лев(Строка,Позиция-1)+м[Индекс]+Сред(Строка,Позиция+1);
    КонецЕсли;
    Позиция = Позиция-1;
    КонецЦикла;

    Строка2=Строка;
    КонецПроцедуры
```