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

14.06.10

Разработка - Универсальные функции

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

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

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    2669    0    John_d    8    

54

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    4603    atdonya    22    

45

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    3960    ke.92@mail.ru    16    

61

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8816    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2071    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16143    133    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7242    quazare    8    

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

Дополняет чем угодно, да еще с любой строны: и слева, и справа.
И код на 8х ложится без всяких вопросов
vano-ekt; simgo83; vladir; +3 Ответить
5. WKBAPKA 214 05.06.10 09:10 Сейчас в теме
А мне понравилось. Нестандартно, через формат. Когда я реализовывал функцию по добавлению нулей, я делал это через цикл. Мне кажется предложенный вариант по скорости будет работать быстрее чем в (4)
7. Abadonna 3958 05.06.10 10:31 Сейчас в теме
(5) А оно тебе надо шибко быстрее? ;)
Если один - разницы не заметишь, если много - львиный кусок перезапись элементов сожрет, тоже не заметишь
12. Tokiy 131 16.06.10 07:57 Сейчас в теме
(7) Скорость как раз важна! Из мелочей складывается общая производительность!
Автору плюс, через Формат однозначно интереснее чем через Цикл.
6. WKBAPKA 214 05.06.10 09:31 Сейчас в теме
а вот другой вопрос, если элементы справочников имеют коды с префиксом ;)
8. yku 372 05.06.10 14:38 Сейчас в теме
еще бы дополнить чтоб параметр значение мог иметь тип "Число".
Типа того:
Если ТипЗнч(пЗначение) = Тип("Число") тогда
Значение = Формат(Значние,"ЧГ=0"); // убираем пробелы в больших числах "1 234" -> "1234"
// За верность не отвечаю, под рукой 1Ски нет.
Иначе
Значение = СокрЛП(Значение);
КонецЕсли;
79044970523; +1 Ответить
19. katavy 19.04.17 13:38 Сейчас в теме
(8) Мне было необходимо использовать перенос документов из Фолио в 1С, предложенную функцию лишь немного "под себя", добавив "Символы.НПП" , т.к. из фолио номера идут с пробелами "283 435".Вот так она выглядит:

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


Данная функция оказалась в таком варианте мне очень удобной (у нашей орг-ции нет префикса, а если бы и был, то "внедрить" его несложно было бы), спасибо!
9. zzerro 277 05.06.10 14:59 Сейчас в теме
А добавть нули в начало можно еще и примерно так:
НужноеЗначение = Прав("0000000000000000000000000000" + Формат(НашеЗначение,"ЧГ=0"),СколькоЗнаковНужно);
Cujoko; dammit666; ybatiaev; alsegor; Andrekaa; provost_ua; Desnyanka; wau8824ru; Wersia; scanner1980; eruil; Capitullo; egorcheg1; dbachinsky; wowik; YoungHero; user901542; deevil; edyardg; mudrak; dobryak@bk.ru; ogre2007; +22 Ответить
13. AnryMc 849 29.11.11 07:51 Сейчас в теме
Нестадартно.
Сам делал через цикл или похоже на (9)
17. brrart 26 11.12.14 05:54 Сейчас в теме
(9) zzerro, Пригодилось, спасибо!
20. edyardg 22 09.11.17 12:58 Сейчас в теме
22. shoy 19 19.03.19 14:17 Сейчас в теме
(9)
Прав("0000000000000000000000000000" + Формат(НашеЗначение,"ЧГ=0"),СколькоЗнаковНужно);


СтранаКод "36" Строка
Формат(СтранаКод,"ЧЦ=3; ЧВН=; ЧГ=0") "36" Строка
Прав("000" + Формат(СтранаКод,"ЧГ=0"), 3) "036" Строка

и вааще, это как так бывает?
10. Abadonna 3958 05.06.10 16:00 Сейчас в теме
В 4 тем хороша, что она дополняет чем угодно. Знаю одну базу, где в справочнике Номенклатура стоят ведущие пробелы. Манагерам так удобнее искать, как они сказали.
11. 79044970523 929 07.06.10 19:45 Сейчас в теме
Параметр может быть строкой или числом, проверено - работает. Если есть префиксы, то это уже частный случай и дополнить функцию не сложно, тоже самое касается добавления нулей с правой стороны. Обработка показывает нестандартное решение, подобного я не видел, поэтому решил опубликовать.
14. Leannet 5 29.11.11 08:10 Сейчас в теме
15. echo77 1868 18.07.13 07:12 Сейчас в теме
(0) Если уж говорить про КД2, то там есть экспортная функция:

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

Выдаст: 01, 02, 03...
Прикрепленные файлы:
18. 9322304@gmail.com 8 03.08.16 12:47 Сейчас в теме
Функция ДобавитьНулиВперед(Знач Значение, НужнаяДлинаЗначения) Экспорт
иначе Значение внутри Вашей функции меняется
21. user723770 12.09.18 12:55 Сейчас в теме
Если Значение длиннее НужнойДлинны... то на управляемых на тонком клиенте дописывает лишний ведущий ноль.
Нужна проверка

Функция ДобавитьНули(Значение, НужнаяДлинаЗначения)
       
    Значение = СтрЗаменить(Формат(Значение, "ЧГ="), " ", "");
    НадоНулей = НужнаяДлинаЗначения - СтрДлина(Значение);
	Если НадоНулей > 0 Тогда
    	ВедущиеНули = Формат(0,"ЧЦ="+НадоНулей+";ЧН=; ЧВН=; ЧГ=0");
	Иначе
		ВедущиеНули="";
	КонецЕсли;	
    Возврат ВедущиеНули + Значение;
   
КонецФункции
Показать
23. Eugen-S 385 28.08.19 22:03 Сейчас в теме
Вот мой вариант:

Функция ДобавитьНули(Значение, НужнаяДлинаЗначения)
	
	Если Значение = 0 Тогда
		Возврат Лев(Формат(1, "ЧЦ=" + НужнаяДлинаЗначения + ";ЧГ=0; ЧВН="), НужнаяДлинаЗначения - 1) + "0";	
	Иначе
		Возврат Формат(Значение, "ЧЦ=" + НужнаяДлинаЗначения + ";ЧГ=0; ЧВН=");
	КонецЕсли;
	
КонецФункции
Показать
24. vkozak 23.12.19 09:14 Сейчас в теме
Интересная тема периодически такая задача возникает. Спасибо за примеры. Особенно понравился 23. Eugen-S
25. wau8824ru 22 03.02.20 15:48 Сейчас в теме
Мой вариант с префиксами УТ10.3 (РИБ + БП) для отбора через модуль
УниверсальныеМеханизмы.УстановитьБыстрыйОтборДанных(ОбъектДанных, Знач ЗначениеОтбора = "", Знач ИмяОтбораДанных = Неопределено) Экспорт

Для облегчения поиска по коду контрагентов с учётом ВсеПрефиксы = РегистрыСведений.ПрефиксыИнформационныхБаз
	Если ОбъектДанных.Отбор[ИмяОтбораДанных].Использование Тогда
		
		ОбъектДанных.Отбор[ИмяОтбораДанных].ВидСравнения  = ВидСравнения.Содержит;
		ОбъектДанных.Отбор[ИмяОтбораДанных].Значение = ЗначениеОтбора;
		//88(
		Если ТипЗнч(ОбъектДанных) = Тип("СправочникСписок.Контрагенты")
			И ИмяОтбораДанных = "Код"
			И Лев(ЗначениеОтбора, 1) = "0"
			И СтрДлина(ЗначениеОтбора) > 1
			Тогда
			// Убираем лидирующие нули у ЗначениеОтбора
			Пока Лев(ЗначениеОтбора, 1) = "0" Цикл
				ЗначениеОтбора = Прав(ЗначениеОтбора, СтрДлина(ЗначениеОтбора) - 1);
			КонецЦикла;
			ДлинаСтрЗначениеОтбора = СтрДлина(ЗначениеОтбора);
			ДлинаСтрКодКонтрагента = Метаданные.Справочники.Контрагенты.ДлинаКода;
			ТаблицаЗначенийЗначениеОтбора = Новый ТаблицаЗначений;
			ТаблицаЗначенийЗначениеОтбора.Колонки.Добавить("Значение");
			ВсеПрефиксы = РегистрыСведений.ПрефиксыИнформационныхБаз.СоздатьНаборЗаписей();
			ВсеПрефиксы.Прочитать();
			Для Каждого Запись Из ВсеПрефиксы Цикл
				ДлинаСтрПрефикса = СтрДлина(Запись.Префикс);
				НужноНулей = ДлинаСтрКодКонтрагента - ДлинаСтрПрефикса - ДлинаСтрЗначениеОтбора;
				Если НужноНулей > 0 Тогда// Префикс+Нули+ЗначениеОтбора - Значение с Префиксом и с Нулями
					ВедущиеНули = Формат(0,"ЧЦ="+НужноНулей+"; ЧН=; ЧВН=; ЧГ=0");
					Стр = ТаблицаЗначенийЗначениеОтбора.Добавить();
					Стр.Значение = Запись.Префикс+ВедущиеНули+Формат(ЗначениеОтбора, "ЧГ=0");
				ИначеЕсли НужноНулей = 0 Тогда// Префикс+ЗначениеОтбора - Значение с Префиксом, без Нулей
					Стр = ТаблицаЗначенийЗначениеОтбора.Добавить();
					Стр.Значение = Запись.Префикс+Формат(ЗначениеОтбора, "ЧГ=0");
				Иначе// Нули+ЗначениеОтбора - Значение с Нулями, без Префиксов
					НужноНулей = ДлинаСтрКодКонтрагента - ДлинаСтрЗначениеОтбора;
					ВедущиеНули = Формат(0,"ЧЦ="+НужноНулей+"; ЧН=; ЧВН=; ЧГ=0");
					Стр = ТаблицаЗначенийЗначениеОтбора.Добавить();
					Стр.Значение = ВедущиеНули+Формат(ЗначениеОтбора, "ЧГ=0");
				КонецЕсли;
			КонецЦикла;
				// + Не уверен что нужный код???
				// Если отсутствует Префикс = "000", тогда добавим значение, после чего свернём таблицу
				НужноНулей = ДлинаСтрКодКонтрагента - ДлинаСтрЗначениеОтбора;
				ВедущиеНули = Формат(0,"ЧЦ="+НужноНулей+"; ЧН=; ЧВН=; ЧГ=0");
				Стр = ТаблицаЗначенийЗначениеОтбора.Добавить();
				Стр.Значение = ВедущиеНули+Формат(ЗначениеОтбора, "ЧГ=0");
				///
				// - Не уверен что нужный код???
			ТаблицаЗначенийЗначениеОтбора.Свернуть("Значение");
			СписокЗначенийЗначениеОтбора = Новый СписокЗначений;
			СписокЗначенийЗначениеОтбора.ЗагрузитьЗначения(ТаблицаЗначенийЗначениеОтбора.ВыгрузитьКолонку("Значение"));
			Если ТаблицаЗначенийЗначениеОтбора.Количество() > 1 Тогда
				ОбъектДанных.Отбор[ИмяОтбораДанных].ВидСравнения  = ВидСравнения.ВСписке;
				ОбъектДанных.Отбор[ИмяОтбораДанных].Значение = СписокЗначенийЗначениеОтбора;
			Иначе
				ОбъектДанных.Отбор[ИмяОтбораДанных].ВидСравнения  = ВидСравнения.Содержит;
				ОбъектДанных.Отбор[ИмяОтбораДанных].Значение = ЗначениеОтбора;
			КонецЕсли;
		КонецЕсли;
		//88)
Показать
26. wau8824ru 22 05.02.20 12:22 Сейчас в теме
(25)
Формат(ЗначениеОтбора, "ЧГ=0");

Т.К ЗначениеОтбора - строка то Формат делать не нужно - просто заменить на
ЗначениеОтбора
27. SHiCK 11.02.20 22:10 Сейчас в теме
для 77 просто Формат(значение, "Ч(0)18"), где 18 нужная длина строки, и все... зачем огород?
28. wau8824ru 22 14.02.20 11:47 Сейчас в теме
(27)
и все... зачем огород?

ещё счёты вспомни, там всё гораздо проще...
29. kurator1C 09.07.20 05:01 Сейчас в теме
БСП

СтроковыеФункцииКлиентСервер.ДополнитьСтроку(Значение, ДлинаСтроки, Символ, "Слева")
e9504100606; InJey; dammit666; slige; KirinaAS; temdj; Jesdva; +7 Ответить
30. lemist 17 11.08.20 17:19 Сейчас в теме
Добавить вначале кучу нулей и обрезать справа по нужной длине строки

Прав("00000000000000000000000000000000" + Значение, ДлинаСтроки)
dammit666; Yasasha; KolBbl4; Highlander1981; +4 Ответить
Оставьте свое сообщение