Добавить лидирующие нули к произвольному значению

Программирование - Практика программирования

     Решал задачу переноса элементов справочника из 1с 7.7 в 1с 8.1. Почти все справочнике в 8.1 имели коды с большей длиной чем в 1с 7.7. Захотел при переносе увеличивать длину кода до необходимой длины добавляя лидирующие нули. В итоге родилась функция, которая справляется с поставленной задачей с любым типом данных, будь то текст или число.

 

 

 

Функция ДобавитьНули(Значение, НужнаяДлинаЗначения)
       
    Значение = СтрЗаменить(Формат(Значение, "ЧГ="), " ", "");
    НадоНулей = НужнаяДлинаЗначения - СтрДлина(Значение);
    ВедущиеНули = Формат(0,"ЧЦ="+НадоНулей+";ЧН=; ЧВН=; ЧГ=0");
    Возврат ВедущиеНули + Значение;
   
КонецФункции

См. также

Комментарии
1. Armando Armando (Armando) 1380 04.06.10 20:28 Сейчас в теме
А в чем ценность, собственно :?: :?: :?:
2. Алексей Коробов (WiseSnake) 1735 04.06.10 20:38 Сейчас в теме
Эти функции давно до Вас написаны, можно было использовать уже готовые. Так же написаны обработки и методики переноса между базами.
3. Аркадий Кучер (Abadonna) 3687 04.06.10 23:50 Сейчас в теме
Ну, прям сходу скажу, в чем порок этой функции (в том виде, как она есть).
Берем ТиС или Комплексную 7.7, там учет многофирменный и есть такая примочка (как и в 8х) под названием префикс.
На
Сообщить(ДобавитьНули("Н-004",7));
получим 00Н-004
Вроде не то, что хотелось, а? ;)
4. Аркадий Кучер (Abadonna) 3687 05.06.10 00:02 Сейчас в теме
+(3) А, вообще-то, еще и в дремучей 7.7 есть
Функция ДополнитьСтроку(Стр, Символ, Длина, Режим = 1)
	
	КолСимволов = Длина - СтрДлина(Стр);
	Если КолСимволов > 0  Тогда
		Приращ = "";
		Для Сч = 1 По КолСимволов  Цикл
			Приращ = Приращ + Символ;
		КонецЦикла;           
		
		Возврат ?(Режим = 0, Приращ + Стр, Стр + Приращ);
	Иначе     
		
		Возврат	Стр;
	КонецЕсли;      
	
КонецФункции
...Показать Скрыть

Дополняет чем угодно, да еще с любой строны: и слева, и справа.
И код на 8х ложится без всяких вопросов
5. Ярослав Радкевич (WKBAPKA) 202 05.06.10 09:10 Сейчас в теме
А мне понравилось. Нестандартно, через формат. Когда я реализовывал функцию по добавлению нулей, я делал это через цикл. Мне кажется предложенный вариант по скорости будет работать быстрее чем в (4)
6. Ярослав Радкевич (WKBAPKA) 202 05.06.10 09:31 Сейчас в теме
а вот другой вопрос, если элементы справочников имеют коды с префиксом ;)
7. Аркадий Кучер (Abadonna) 3687 05.06.10 10:31 Сейчас в теме
(5) А оно тебе надо шибко быстрее? ;)
Если один - разницы не заметишь, если много - львиный кусок перезапись элементов сожрет, тоже не заметишь
8. Александр Гладких (yku) 264 05.06.10 14:38 Сейчас в теме
еще бы дополнить чтоб параметр значение мог иметь тип "Число".
Типа того:
Если ТипЗнч(пЗначение) = Тип("Число") тогда
Значение = Формат(Значние,"ЧГ=0"); // убираем пробелы в больших числах "1 234" -> "1234"
// За верность не отвечаю, под рукой 1Ски нет.
Иначе
Значение = СокрЛП(Значение);
КонецЕсли;
ApocalypseNTC; +1 Ответить 1
9. Никита Уколов (zzerro) 270 05.06.10 14:59 Сейчас в теме
А добавть нули в начало можно еще и примерно так:
НужноеЗначение = Прав("0000000000000000000000000000" + Формат(НашеЗначение,"ЧГ=0"),СколькоЗнаковНужно);
mudrak; dobryak@bk.ru; ogre2007; +3 Ответить 2
10. Аркадий Кучер (Abadonna) 3687 05.06.10 16:00 Сейчас в теме
В 4 тем хороша, что она дополняет чем угодно. Знаю одну базу, где в справочнике Номенклатура стоят ведущие пробелы. Манагерам так удобнее искать, как они сказали.
11. Андрей Чунихин (ApocalypseNTC) 784 07.06.10 19:45 Сейчас в теме
Параметр может быть строкой или числом, проверено - работает. Если есть префиксы, то это уже частный случай и дополнить функцию не сложно, тоже самое касается добавления нулей с правой стороны. Обработка показывает нестандартное решение, подобного я не видел, поэтому решил опубликовать.
12. Алексей Северянин (Ledokol-alt) 127 16.06.10 07:57 Сейчас в теме
(7) Скорость как раз важна! Из мелочей складывается общая производительность!
Автору плюс, через Формат однозначно интереснее чем через Цикл.
13. anry mc (AnryMc) 714 29.11.11 07:51 Сейчас в теме
Нестадартно.
Сам делал через цикл или похоже на (9)
14. Anneta86 (Leannet) 29.11.11 08:10 Сейчас в теме
15. Александр Крынецкий (echo77) 742 18.07.13 07:12 Сейчас в теме
(0) Если уж говорить про КД2, то там есть экспортная функция:

// Приводит номер (код) к требуемой длине. При этом выделяется префикс
// и числовая часть номера, остальное пространство между префиксом и
// номером заполняется нулями.
// Функция может быть использована в обработчиках событий, программный код
// которых хранится в правила обмена данными. Вызывается методом Выполнить()
// Сообщение "Не обнаружено ссылок на функцию" при проверке конфигурации
// не является ошибкой проверки конфигурации
//
// Параметры:
// Стр - преобразовываемая строка;
// Длина - требуемая длина строки.
//
// Возвращаемое значение:
// Строка - код или номер, приведенная к требуемой длине.
//
Функция ПривестиНомерКДлине(Знач Стр, Длина, ДобавлятьНулиЕслиДлинаНеМеньшеТекущейДлиныНомера = Истина, Префикс = "") Экспорт
16. Алексей Комаров (q4a) 09.09.13 12:25 Сейчас в теме
А почему бы не использовать Формат с ЧВН=1 (выводить лидирующие нули)?
Код:
Для Инд=1 По 15 Цикл
Сообщить("Номер="+Формат(Инд, "ЧЦ=2; ЧВН=1"));
КонецЦикла;

Выдаст: 01, 02, 03...
Прикрепленные файлы:
17. Sergei Karpushev (brrart) 19 11.12.14 05:54 Сейчас в теме
(9) zzerro, Пригодилось, спасибо!
18. Vladimir Ru (9322304@gmail.com) 3 03.08.16 12:47 Сейчас в теме
Функция ДобавитьНулиВперед(Знач Значение, НужнаяДлинаЗначения) Экспорт
иначе Значение внутри Вашей функции меняется
19. Екатерина Перетокина (katavyjob) 19.04.17 13:38 Сейчас в теме
(8) Мне было необходимо использовать перенос документов из Фолио в 1С, предложенную функцию лишь немного "под себя", добавив "Символы.НПП" , т.к. из фолио номера идут с пробелами "283 435".Вот так она выглядит:

Функция ПолучитьКорректныйНомер(Значение, НужнаяДлинаЗначения)
       
    Значение = СтрЗаменить(Формат(Значение, "ЧГ=0"), Символы.НПП,"");
    НадоНулей = НужнаяДлинаЗначения - СтрДлина(Значение);
    ВедущиеНули = Формат(0,"ЧЦ="+НадоНулей+";ЧН=; ЧВН=; ЧГ=0");
    Возврат ВедущиеНули + Значение;
   
КонецФункции
...Показать Скрыть


Данная функция оказалась в таком варианте мне очень удобной (у нашей орг-ции нет префикса, а если бы и был, то "внедрить" его несложно было бы), спасибо!
Оставьте свое сообщение