1. alexie.j 13.03.18 18:31 Сейчас в теме

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

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

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

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

Буквы = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
// Отсекаем Префикс	
	Результат=Прав(Артикул,СтрДлина(Артикул)-СтрНайти(Артикул,"-"));
	
//Осекаем лидирующие нули		
	НулиВАртикуле = "";
	НомерАртикула=Результат;
	Пока Лев(НомерАртикула,1)="0"  Цикл 
		НулиВАртикуле=НулиВАртикуле+"0";
		НомерАртикула=Прав(НомерАртикула,СтрДлина(НомерАртикула)-1);
	КонецЦикла;
	Результат = Лев(Буквы, СтрДлина(НулиВАртикуле)) + НомерАртикула;
Показать
Остальные ответы
Избранное Подписка Сортировка: Древо
10. 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 3 14.03.18 05:53 Сейчас в теме
(10) по факту вашего ответа тоже можно сделать много умозаключений, или вообще не сделать, т.к. видна одна критика.
Я не говорю что она не обоснованная. Но и просто полить все говнокоды и не предоставить своего верного решения мало чем отличается от предложенных решений. Ведь Вы тоже не родились с жёлтой книжкой в руках. Я учусь и на форумах ищу примеры решений проблем пользователей, но видимо Вам "сверху" трудно наклониться и подсказать как правильно сделать.
alexie.j; AnnieCoder; +2 Ответить
2. Adilgeriy 19 13.03.18 18:35 Сейчас в теме
и в чем вопрос? и мне кажется в Буквы = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789"
3. 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.j 13.03.18 18:59 Сейчас в теме
(4) спасибо. Я сейчас попробую этот способ
5. Pixar0000 13.03.18 18:41 Сейчас в теме
а не проще или добавлять впереди букву или при экспорте в эксель прописывать что ячейка текстовая, а не число?
Fox-trot; +1 Ответить
6. alexie.j 13.03.18 18:59 Сейчас в теме
9. Fox-trot 91 13.03.18 22:21 Сейчас в теме
(5) проще не ячейку, а всю колонку целиком
8. FesenkoA 30 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. user614822 14.03.18 09:26 Сейчас в теме
Если внимательно читать задание , то префикс перед дефисом не должен быть заменен....
В артикуле могут быть кроме цифр и буквы , поэтому преобразование в число выдаст ошибку

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

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

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 100 000 руб.
Полный день

Руководитель группы сервисов ЭДО, ЭЦП и криптографии
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы интеграций (1С)
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы сервисов FRM на 1С
Москва
зарплата от 150 000 руб.
Полный день

Консультант-аналитик 1С (ЗУП)
Санкт-Петербург
Полный день