Простой способ убрать префикс и лидирующие нули из номера.
Разработка - Универсальные функции
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Часто возникает необходимость вывести в печатную форму номер документа без префикса и лидирующих нулей.
Для этого можно воспользоватся маленькой обработкой прикрепленной к статьи или использовать ниже приведенный код.
Процедура ОбработатьНомерДокумента()
НомерБезПрефикса = Объект.ВходящийНомер;
Пока Найти(НомерБезПрефикса,"0") <> 1 Цикл
НомерБезПрефикса = Сред(НомерБезПрефикса,2); //удаляет лидирующие ненули
КонецЦикла;
НомерБезНулей = НомерБезПрефикса;
Пока Найти(НомерБезНулей,"0") = 1 Цикл
НомерБезНулей = Сред(НомерБезНулей,2); //удаляет лидирующие нули
КонецЦикла;
Объект.ОбработанныйНомер = НомерБезНулей;
КонецПроцедуры
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Универсальные функции 1С 8.3 1С:Документооборот Россия Платные (руб)
ДО+ — расширение конфигурации, в котором собран постоянно пополняемый набор из 33 востребованных доработок для 1С:Документооборот КОРП 3.0: согласование задач прямо из мессенджеров MAX и Telegram, отзыв согласования и исполнения, гибкие повторные круги, эскалация с точностью до минут, контроль исполнительской дисциплины, выгрузка вложений в ZIP и склейка PDF, реестр документов в Excel, проверка дублей контрагентов и регистрационных номеров. Каждая возможность активируется отдельным флажком в режиме предприятия — включается только то, что нужно конкретной организации. Список функций расширяется с каждым релизом — текущая версия 2.1.0. Режим AddOn: типовая конфигурация не модифицируется, обновления ДО ставятся штатно, дополнительные лицензии и внешние компоненты не требуются. Внедрение силами администратора — около часа.
30000 руб.
09.07.2026 1396 1 0
Загрузка и выгрузка в Excel Универсальные функции Разработчик 1С:Предприятие 8 Россия Бесплатно (free)
Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).
30.10.2025 8733 Abysswalker 11
Универсальные функции Работа с интерфейсом Разработчик 1С:Предприятие 8 Бесплатно (free)
Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.
14.05.2025 14459 DeerCven 16
Инструментарий разработчика Универсальные функции Запросы Разработчик 1С:Предприятие 8 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Бесплатно (free)
Внешняя обработка для создания запроса на основании табличных данных.
22.07.2024 11945 276 ixijixi 10
Универсальные функции Разработчик 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)
Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.
21.05.2024 68724 dimanich70 87
Универсальные функции Разработчик 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)
Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.
1 стартмани
18.03.2024 9280 7 John_d 13
Универсальные функции Разработчик Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)
Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.
12.02.2024 85764 atdonya 31
Универсальные функции Разработчик 1С:Предприятие 8 Бесплатно (free)
На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.
30.11.2023 13468 ke.92@mail.ru 18
Ну и вообще, кажется мне, что не самый это изящный и быстрый способ.
Тем не менее была просьба доработать такой механизм для печати, поскольку стандартный не отрабатывал...
Какая конфигурация и какой релиз уже не помню...
Мой способ не является эталоном, но как мне кажется имеет право на жизнь))
Функция ТолькоНомер(ВхНомер)
Рез = СокрЛП(ВхНомер);
Ном = СтрДлина(Рез);
Пока Ном > 0 Цикл
Если Найти("0123456789", Сред(Рез,Ном,1))=0 Тогда
прервать;
Иначе
Ном = Ном - 1;
КонецЕсли;
КонецЦикла;
Возврат ""+Число(Сред(Рез,Ном+1));
КонецФункции
ПоказатьПопробую расшифровать для тех, кому лень разбираться.
Первая функция: рекурсивно проверяются символы справа налево до первой не цифры,
затем происходит возврат правой части строки по накопленному значению К;
( КодСимвола() / 5 - 10.5 ) возвращает значение от -0,9 до 0,9 для символов с "0" до "9",
Цел() отсекает дробную часть, в результате для цифр получится 0, для остальных символов не ноль;
?(Цел(КодСимвола(Прав("!" + Стр, К + 1)) / 5 - 10.5),<не цифра>,<цифра>) базируется на особенности преобразования нуля в булево ложь, а "!" + Стр - подстраховка от пустой строки на входе.
Вторая функция: все числа заменяются пробелами "матрёшкой" вложенных функций
СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Номер
, "0", " "), "1", " "), "2", " "), "3", " "), "4", " "), "5", " "), "6", " "), "7", " "), "8", " "), "9", " ")
СокрП отсекает пробелы справа, остаток замереятся через СтрДлина и вырезается часть с середины до конца с позиции +1, где должны начинаться цифры.
Формат( , "ЧГ=") в обоих случаях убирает разделители разрядов при обратном преобразовании числа в текст, потом что через Строка() "формируется ... полное представление в стандартном виде, соответствующем национальным установкам". Или как у Ovrfox в (16) вместо Формат(, "ЧГ=") можно попробовать неявное преобразование в строку ""+Число(
Формат(Число(Прав(Номер,7)),"ЧГ=0")
Функция ЧислоСправа(Стр, К = 0)
Возврат ?(Цел(КодСимвола(Прав("!" + Стр, К + 1)) / 5 - 10.5), Формат(Число("0" + Прав(Стр, К)), "ЧГ="), ЧислоСправа(Стр, К + 1))
КонецФункцииФункция ЧислоСправа1(Номер)
Возврат Формат(Число("0" + Сред(Номер, СтрДлина(СокрП(
СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Номер
, "0", " "), "1", " "), "2", " "), "3", " "), "4", " "), "5", " "), "6", " "), "7", " "), "8", " "), "9", " "))) + 1)), "ЧГ=")
КонецФункцииБыло, да сплыло - нет больше этой ссылки. И вот что там было:
Функция ClearZero(PERNR) экспорт
Воз = PERNR;
апр=СтрДлина(Воз);
Для АНК = 1 По апр Цикл
аст = Сред(Воз, АНК);
Если Лев(аст, 1) <> "0" Тогда
Воз = Сред(Воз, АНК );
Возврат Воз;
КонецЕсли;
КонецЦикла;
КонецФункции
//В модуле формы ищем поля для которых нужно применить функцию.
//К примеру нужно чтобы поле НомерДокумента = Докум.НомерДок; печаталось без нулей,
//заменяем на НомерДокумента = ClearZero(Докум.НомерДок); ПоказатьТо есть убираются только ведущие нули, на номерах с префиксами не сработает.
НовыйНомер = "";
Начнем = Ложь;
Для Ном = 1 По СтрДлина(Номер) Цикл
тКод = КодСимвола(Номер,Ном);
ЭтоЧисло = тКод > 47 И тКод < 58; //цифры от 0 до 9
Начнем = Начнем ИЛИ ЭтоЧисло И НЕ тКод = 48;
Если Начнем И ЭтоЧисло Тогда
НовыйНомер = НовыйНомер + Сред(Номер,Ном,1);
КонецЕсли;
КонецЦикла;
Показать
Функция ОбработатьНомерДокумента(ВхНомер)
Номер = ВхНомер ;
НовыйНомер = "";
СтрДлина=СтрДлина(Номер);
Для Ном = 0 По СтрДлина-1 Цикл
тКод = КодСимвола(Номер, СтрДлина - Ном);
ЭтоЧисло = тКод > 47 И тКод < 58; //цифры от 0 до 9
Если ЭтоЧисло Тогда
НовыйНомер = Сред(Номер,СтрДлина - Ном,1) + НовыйНомер;
Иначе
Прервать;
КонецЕсли;
КонецЦикла;
Возврат СтрЗаменить(Формат(Число(НовыйНомер),"ЧРГ='-'"),"-","");
КонецФункции
ПоказатьПроцедура Команда1(Команда)
НомерНаПечать = ПолучитьНомерНаПечать(Объект.Номер);
Объект.Номер = НомерНаПечать;
КонецПроцедуры
Функция ПолучитьНомерНаПечать (Номер)
Пока СтрДлина(Номер)>0 Цикл
Попытка
НомерНаПечать = Строка(Число(Номер));
Возврат НомерНаПечать;
Исключение
//Если СтрДлина > 0 Тогда
Номер = Прав(номер,СтрДлина(Номер)-1);
// Иначе
// Возврат 0;
// конецЕсли;
// Продолжить;
КонецПопытки;
КонецЦикла;
Возврат "";
КонецФункции ПоказатьПроцедура Команда1(Команда)
НомерНаПечать = ПолучитьНомерНаПечать(Объект.Номер);
Объект.Номер = НомерНаПечать;
КонецПроцедуры
Функция ПолучитьНомерНаПечать (Номер)
Номер = СтрЗаменить(Номер,".","@");
Номер = СтрЗаменить(Номер,",","@");
Пока СтрДлина(Номер)>0 Цикл
Попытка
НомерНаПечать = Строка(Число(Номер));
Возврат НомерНаПечать;
Исключение
//Если СтрДлина > 0 Тогда
Номер = Прав(номер,СтрДлина(Номер)-1);
// Иначе
// Возврат 0;
// конецЕсли;
// Продолжить;
КонецПопытки;
КонецЦикла;
Возврат "______________";
КонецФункции ПоказатьOvrfox прав , нужно заменять "." и "," то есть знаки которые могу повлиять на формирование числа
Попытка
НомерНаПечать = Строка(Число(Номер));
Возврат НомерНаПечать;
Исключение
//Если СтрДлина > 0 Тогда
Номер = Прав(номер,СтрДлина(Номер)-1);
// Иначе
// Возврат 0;
// конецЕсли;
// Продолжить;
КонецПопытки;
КонецЦикла;
Возврат "";
Преобразовывать это 000036163 в это 36 163 не гуд. формат сохраняйте данных)
1. число справа
2. все нецифровые символы удаляются, оставшиеся цифровые склеиваются
И куча промежуточных вариантов, когда нецифровые последовательности символов в номере переносятся, объединяются, заменяются на точки-прочерки-тире и т.д.
Пока Найти(НомерБезПрефикса,"0") <> 1 Цикл
НомерБезПрефикса = Сред(НомерБезПрефикса,2); //удаляет лидирующие ненули
КонецЦикла;
Опасный код. Если в номере не будет нуля то попадаешь в вечный цикл.
Номер = Сред(Номер, 2);
КонецЦикла;
Функция УдалитьЛидирующиеНули(Знач Номер)
Пока Лев(Номер,1) = "0" Цикл
Длина = СтрДлина(Номер);
Номер = Прав(Номер,Длина-1);
КонецЦикла;
Возврат Номер;
КонецФункции
Функция УдалитьПрефикс(Знач Номер)
Длина = СтрДлина(Номер);
Номер = Прав(Номер,Длина-ДлинаПрефикса);
Возврат Номер;
КонецФункции
Номер = Объект.Номер;
Поз = Найти(Номер,"-");
Если Поз>0 Тогда Номер = Сред(Номер, Поз+1); КонецЕсли;
Пока Лев(Номер,1)<"1" ИЛИ Лев(Номер,1)>"9" Цикл
Номер = Сред(Номер,2);
КонецЦикла;
Функция ПолучитьНомерНаПечать (НомДок)
ДлСтр=СтрДлина(НомДок);
поз=1;
ПоследняПозицияБуквы=0;
пока поз <= длСтр Цикл
СимвИзНомДок=прав(Лев(НомДок,Поз),1);
ЭтоЦифра=СтрНайти("0123456789",СимвИзНомДок)>0;
поз=поз+1;
если не ЭтоЦифра Тогда
ПоследняПозицияБуквы=Поз;
КонецЕсли;
КонецЦикла;
СтрокаТолькоЧисла=Прав(НомДок,ДлСтр-ПоследняПозицияБуквы+1);
Пока Лев(СтрокаТолькоЧисла, 1) = "0" Цикл
СтрокаТолькоЧисла = Сред(СтрокаТолькоЧисла, 2);
КонецЦикла;
возврат СтрокаТолькоЧисла ;
КонецФункции
Показать
Функция УбратьЛидирующиеНулиСлева(НомерСтрокой)
ПорядокНомера = СтрЗаменить(НомерСтрокой,"1","0");
ПорядокНомера = СтрЗаменить(ПорядокНомера ,"2","0");
ПорядокНомера = СтрЗаменить(ПорядокНомера ,"3","0");
ПорядокНомера = СтрЗаменить(ПорядокНомера ,"4","0");
ПорядокНомера = СтрЗаменить(ПорядокНомера ,"5","0");
ПорядокНомера = СтрЗаменить(ПорядокНомера ,"6","0");
ПорядокНомера = СтрЗаменить(ПорядокНомера ,"7","0");
ПорядокНомера = СтрЗаменить(ПорядокНомера ,"8","0");
ПорядокНомера = СтрЗаменить(ПорядокНомера ,"9","0");
ПорядокНомера = ЧИСЛО("1" + ПорядокНомера );
НомерЧисло = ЧИСЛО("1" + НомерСтрокой);
НомерБезЛидирующихНулей = СтрЗаменить(Строка(НомерЧисло - ПорядокНомера),Символы.НПП,"");
Возврат НомерБезЛидирующихНулей;
КонецФункции ПоказатьПодход очень простой. Комбинация методов работы со строкой и с числом.
1. входящая строка приводится к числу:
- конкатенация входящий строки и символа "1" слева;
- преобразование результата конкатенации в число.
2. вычисление порядка:
- все числовые символы входящей строки заменяются символом "0";
- конкатенация результата замены и символа "1" слева.
- преобразование результата конкатенации в число.
3. вычисление разницы между первым и вторым.
4. преобразование разницы строку. Искомый результат.
Более комментировать вроде нечего. Может кому-то поможет.
Пока Лев(Номер, 1) = "0" Цикл
Номер = Прав(Номер, СтрДлина(Номер) - 1);
КонецЦикла; // убирает 0 до префикса
Пока Лев(Номер, 1) = "-" Цикл
Номер = Прав(Номер, СтрДлина(Номер) - 1);
КонецЦикла; //убирает дефис
Пока Лев(Номер, 1) = "0" Цикл
Номер = Прав(Номер, СтрДлина(Номер) - 1);
КонецЦикла; убирает нули до номера после дефиса
Рейтинг: 18
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 532581
Создание 22.06.16 20:44
Обновление 22.06.16 20:44
Просмотры 100479
Загрузки 30
Рейтинг
15
Комментарии 52
Код открыт Не указано
Рубрики Универсальные функции
Кому Разработчик
Тип файла Внешняя обработка (ert,epf)
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Windows
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)