Замена нулей в артикуле на буквы

1. Alexie Mitina (alexie.j) 13.03.18 18:31 Сейчас в теме
Здравствуйте!
Подскажите пожалуйста как быть в такой ситуации: нужно у всех артикулов номенклатуры, для выгрузки в эксель, заменить лидирующие нули на буквы алфавита.
Пример: 00-00015 станет ABC15.

сейчас делаю вот таким образом:
Буквы = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		Результат = "";
		Для Сч=1 по СтрДлина(Артикул) Цикл
			Если СтрНайти(Буквы, Врег(Сред(Артикул,Сч,1))) = 0 Тогда
				Результат = Результат + Сред(Артикул,Сч,1);
			КонецЕсли;
		КонецЦикла;
Найденные решения
13. Alex Yan (user614822_yanchenko.a) 9 14.03.18 09:26 Сейчас в теме
Если внимательно читать задание , то префикс перед дефисом не должен быть заменен....
В артикуле могут быть кроме цифр и буквы , поэтому преобразование в число выдаст ошибку

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

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

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

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

Ответ - вот он, как на ладони: если в 1С нет готовой функции для чего-то, то 1Сник превращается в неразумное существо, наугад пробующее все, что взбредет в голову.
ipoloskov; +1 Ответить
12. Николай Копышков (akim2040) 14.03.18 05:53 Сейчас в теме
(10) по факту вашего ответа тоже можно сделать много умозаключений, или вообще не сделать, т.к. видна одна критика.
Я не говорю что она не обоснованная. Но и просто полить все говнокоды и не предоставить своего верного решения мало чем отличается от предложенных решений. Ведь Вы тоже не родились с жёлтой книжкой в руках. Я учусь и на форумах ищу примеры решений проблем пользователей, но видимо Вам "сверху" трудно наклониться и подсказать как правильно сделать.
alexie.j; AnnieCoder; +2 Ответить
2. Существо Человек (Adilgeriy) 19 13.03.18 18:35 Сейчас в теме
и в чем вопрос? и мне кажется в Буквы = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789"
3. Alexie Mitina (alexie.j) 13.03.18 18:38 Сейчас в теме
(2)Сейчас результат у меня остаётся 00-00015..Мне кажется что что-то не учла.
Цифры точно стоит использовать?
4. Аня А. (AnnieCoder) 13.03.18 18:40 Сейчас в теме
Действительно, определить переменную Буквы, как подсказали в (2), ну и как-то так
//на коленке
ТекущаяПозицияБуквы = 1;
Для Сч=1 по СтрДлина(Артикул) Цикл
            Если СтрНайти(Буквы, Врег(Сред(Артикул,Сч,1))) = 0 Тогда
                Результат = Результат + Сред(Буквы,ТекущаяПозицияБуквы ,1);
                ТекущаяПозицияБуквы = ТекущаяПозицияБуквы + 1;
            Иначе
                Результат = Результат + Сред(Артикул,Сч,1);
            КонецЕсли;
        КонецЦикла;
Показать
alexie.j; +1 Ответить
7. Alexie Mitina (alexie.j) 13.03.18 18:59 Сейчас в теме
(4) спасибо. Я сейчас попробую этот способ
5. Сергей Афонкин (Pixar0000) 13.03.18 18:41 Сейчас в теме
а не проще или добавлять впереди букву или при экспорте в эксель прописывать что ячейка текстовая, а не число?
Fox-trot; +1 Ответить
6. Alexie Mitina (alexie.j) 13.03.18 18:59 Сейчас в теме
9. Канат Джумадылов (Fox-trot) 54 13.03.18 22:21 Сейчас в теме
(5) проще не ячейку, а всю колонку целиком
8. Alex Fesenko (FesenkoA) 23 13.03.18 19:11 Сейчас в теме
1) получить НомерНаПечать (есть в БСП)
2) от длинны артикула (от 6 например) отнять длинну строки номераНаПечать = длинаБкув
3) Артикул = Лев("абсцеф",длинаБкув)+""+НомерНаПечать
alexie.j; +1 Ответить
11. Рашида Равильевна Калеева (uk09) 14.03.18 04:57 Сейчас в теме
Alexie Mitina, добрый день!

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

Буквы = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
НомерАртикула = Формат(Число(СтрЗаменить(Артикул,"-","")),"ЧГ=0");
Результат = Лев(Буквы, СтрДлина(Артикул) - СтрДлина(НомерАртикула)) + НомерАртикула;
alexie.j; +1 Ответить
13. Alex Yan (user614822_yanchenko.a) 9 14.03.18 09:26 Сейчас в теме
Если внимательно читать задание , то префикс перед дефисом не должен быть заменен....
В артикуле могут быть кроме цифр и буквы , поэтому преобразование в число выдаст ошибку

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

Буквы = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
// Отсекаем Префикс	
	Результат=Прав(Артикул,СтрДлина(Артикул)-СтрНайти(Артикул,"-"));
	
//Осекаем лидирующие нули		
	НулиВАртикуле = "";
	НомерАртикула=Результат;
	Пока Лев(НомерАртикула,1)="0"  Цикл 
		НулиВАртикуле=НулиВАртикуле+"0";
		НомерАртикула=Прав(НомерАртикула,СтрДлина(НомерАртикула)-1);
	КонецЦикла;
	Результат = Лев(Буквы, СтрДлина(НулиВАртикуле)) + НомерАртикула;
Показать
15. Alexie Mitina (alexie.j) 14.03.18 11:38 Сейчас в теме
14. Руслан Фасхутдинов (Octopus) 337 14.03.18 09:30 Сейчас в теме
Я бы все же поработал с выгрузкой в Excel. Поменять в одном месте обработку выгрузки быстрее и имхо правильнее. В данном случае алгоритмы должны подстраиваться под данные, а не наоборот.
Оставьте свое сообщение