Базелюк Петр | Технический директор | КТС

«Бизнес-аналитика с помощью Power BI»

- Почему Power BI? - Выгрузка данных из 1С:Предприятие это плохо? - События это наше все - О нормализации замолвим слово - Что такое хранилище данных. Смещение сложности в сторону бизнес-аналитики или в сторону 1С:Предприятия - Поговорим об первичных и вторичных ключах. Эффективно связываем одну таблицу хранилища данных со множеством объектов конфигурации 1С - Как максимально точно обновлять данные в хранилище. Забываем об операциях Insert, Delete, Update - учимся делать MERGE. - Оптимизация MERGE с помощью Common Table Expression - Все-таки, полный онлайн возможен?

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

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

сейчас делаю вот таким образом:
Буквы = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		Результат = "";
		Для Сч=1 по СтрДлина(Артикул) Цикл
			Если СтрНайти(Буквы, Врег(Сред(Артикул,Сч,1))) = 0 Тогда
				Результат = Результат + Сред(Артикул,Сч,1);
			КонецЕсли;
		КонецЦикла;
Найденные решения
13. user614822_yanchenko.a 12 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 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 54 13.03.18 22:21 Сейчас в теме
(5) проще не ячейку, а всю колонку целиком
8. FesenkoA 24 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_yanchenko.a 12 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 руб. до 200 000 руб.
Полный день

Преподаватель 1С
Санкт-Петербург
Полный день

Удаленный ИТ-журналист
Санкт-Петербург
По совместительству

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