Здравствуйте!
Подскажите пожалуйста как быть в такой ситуации: нужно у всех артикулов номенклатуры, для выгрузки в эксель, заменить лидирующие нули на буквы алфавита.
Пример: 00-00015 станет ABC15.

сейчас делаю вот таким образом:

```1c
    Буквы = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    Результат = ";
    Для Сч=1 по СтрДлина(Артикул) Цикл
    Если СтрНайти(Буквы, Врег(Сред(Артикул,Сч,1))) = 0 Тогда
    Результат = Результат + Сред(Артикул,Сч,1);
    КонецЕсли;
    КонецЦикла;
```
---
Если внимательно читать задание , то префикс перед дефисом не должен быть заменен....
В артикуле могут быть кроме цифр и буквы , поэтому преобразование в число выдаст ошибку

Вот рабочий код

```1c
    Буквы = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    // Отсекаем Префикс
    Результат=Прав(Артикул,СтрДлина(Артикул)-СтрНайти(Артикул,"-"));

    //Осекаем лидирующие нули
    НулиВАртикуле = ";
    НомерАртикула=Результат;
    Пока Лев(НомерАртикула,1)="0" Цикл
    НулиВАртикуле=НулиВАртикуле+"0";
    НомерАртикула=Прав(НомерАртикула,СтрДлина(НомерАртикула)-1);
    КонецЦикла;
    Результат = Лев(Буквы, СтрДлина(НулиВАртикуле)) + НомерАртикула;
```
---
Генитальная ветка! Такое ощущение, что ни автор, ни советчики не понимают, что делает предложенный ими говнокод.

1. Образец из (1) удалит все буквы из строки, останутся все цифры и знаки - этого хочет автор? Непохоже.
2. Поправка из (2) кроме букв, удалит еще и все цифры, кроме нулей, т.е. и от "00-00015", и от "00-00105" останется "00-000". Ура?
3. Код из (4) преобразует "00-00015" в "ABCDEF15", а "00-00105" в "ABCDE1F5" - может быть, это устроит автора? Не знаю.

В-общем, опять получилась иллюстрация на тему: "Почему 1Сников не считают настоящими программистами?"

Ответ - вот он, как на ладони: если в 1С нет готовой функции для чего-то, то 1Сник превращается в неразумное существо, наугад пробующее все, что взбредет в голову.
---
по факту вашего ответа тоже можно сделать много умозаключений, или вообще не сделать, т.к. видна одна критика.
Я не говорю что она не обоснованная. Но и просто полить все говнокоды и не предоставить своего верного решения мало чем отличается от предложенных решений. Ведь Вы тоже не родились с жёлтой книжкой в руках. Я учусь и на форумах ищу примеры решений проблем пользователей, но видимо Вам "сверху" трудно наклониться и подсказать как правильно сделать.
---
и в чем вопрос? и мне кажется в Буквы = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789"
---
Сейчас результат у меня остаётся 00-00015..Мне кажется что что-то не учла.
Цифры точно стоит использовать?
---
Действительно, определить переменную Буквы, как подсказали в (2), ну и как-то так

```1c
    //на коленке
    ТекущаяПозицияБуквы = 1;
    Для Сч=1 по СтрДлина(Артикул) Цикл
    Если СтрНайти(Буквы, Врег(Сред(Артикул,Сч,1))) = 0 Тогда
    Результат = Результат + Сред(Буквы,ТекущаяПозицияБуквы ,1);
    ТекущаяПозицияБуквы = ТекущаяПозицияБуквы + 1;
    Иначе
    Результат = Результат + Сред(Артикул,Сч,1);
    КонецЕсли;
    КонецЦикла;
```
---
спасибо. Я сейчас попробую этот способ
---
а не проще или добавлять впереди букву или при экспорте в эксель прописывать что ячейка текстовая, а не число?
---
Да, ячейка текстовая
---
проще не ячейку, а всю колонку целиком
---
1) получить НомерНаПечать (есть в БСП)
2) от длинны артикула (от 6 например) отнять длинну строки номераНаПечать = длинаБкув
3) Артикул = Лев("абсцеф",длинаБкув)+""+НомерНаПечать
---
Alexie Mitina, добрый день!

Если дефис в разделителе засчитывается при формировании буквенной части:

Буквы = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
НомерАртикула = Формат(Число(СтрЗаменить(Артикул,"-","")),"ЧГ=0");
Результат = Лев(Буквы, СтрДлина(Артикул) - СтрДлина(НомерАртикула)) + НомерАртикула;
---
Если внимательно читать задание , то префикс перед дефисом не должен быть заменен....
В артикуле могут быть кроме цифр и буквы , поэтому преобразование в число выдаст ошибку

Вот рабочий код

```1c
    Буквы = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    // Отсекаем Префикс
    Результат=Прав(Артикул,СтрДлина(Артикул)-СтрНайти(Артикул,"-"));

    //Осекаем лидирующие нули
    НулиВАртикуле = ";
    НомерАртикула=Результат;
    Пока Лев(НомерАртикула,1)="0" Цикл
    НулиВАртикуле=НулиВАртикуле+"0";
    НомерАртикула=Прав(НомерАртикула,СтрДлина(НомерАртикула)-1);
    КонецЦикла;
    Результат = Лев(Буквы, СтрДлина(НулиВАртикуле)) + НомерАртикула;
```
---
Спасибо большое!
---
Я бы все же поработал с выгрузкой в Excel. Поменять в одном месте обработку выгрузки быстрее и имхо правильнее. В данном случае алгоритмы должны подстраиваться под данные, а не наоборот.