Получение номера без префикса и лидирующих нулей

28.04.18

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

Получение номера без префикса и лидирующих нулей с помощью регулярных выражений.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Получение номера без префикса и лидирующих нулей:
.epf 6,72Kb
1 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

P.S. Тестирование проводилось на сервере 1С:Предприятие 8.3 (8.3.10.2561)

Обработка демонстрирует работу кода. При нажатии на кнопку в служебном сообщении будет выведен искомый номер. Под номером понимается максимально правое числовое значение строки, не начинающееся с нуля.

Функция размещается в модуле документа или любом общем модуле и вызывается просто.

НомерБезПрефиксаИНулей = ЧисловойНомер(НомерСПрефиксом)
Функция ЧисловойНомер (НомерСПрефиксом, Шаблон="[1-9]\d*", ИскатьДоПервогоСовпадения = Истина, МногоСтрок = Истина, ИгнорироватьРегистр = Истина) Экспорт

    RegExp = Новый COMОбъект("VBScript.RegExp");    // создаем объект для работы с регулярными выражениями

    //Заполняем данные
    RegExp.MultiLine = МногоСтрок;                  // истина — текст многострочный, ложь — одна строка
    RegExp.Global = Не ИскатьДоПервогоСовпадения;   // истина — поиск по всей строке, ложь — до первого совпадения
    RegExp.IgnoreCase = ИгнорироватьРегистр;        // истина — игнорировать регистр строки при поиске
    RegExp.Pattern = Шаблон;                        // шаблон (регулярное выражение)

    РезультатАнализаСтроки = RegExp.Execute(НомерСПрефиксом);


	Для Каждого Выражение Из РезультатАнализаСтроки Цикл
		Возврат Выражение.Value;
	КонецЦикла;


КонецФункции

 

Вступайте в нашу телеграмм-группу Инфостарт

Номер префикс нули

См. также

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    5529    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    46691    dimanich70    83    

165

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

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

1 стартмани

18.03.2024    6895    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

12.02.2024    57915    atdonya    31    

68

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

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

30.11.2023    8673    ke.92@mail.ru    17    

68

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

28.08.2023    22899    YA_418728146    8    

174
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Naposaram 202 28.04.18 11:42 Сейчас в теме
А, что там за такая "таблица префиксов". Чего я не знаю?
4. kraspila 132 02.05.18 10:31 Сейчас в теме
(1) Регистр сведений "ПрефиксыИнформационныхБаз"
2. V.Stavinsky 273 28.04.18 12:05 Сейчас в теме
а просто проверить вхождения каждого символа в "123456789"? и когда первый символ найдется далее искать в "0123456789". так не вариант?
3. CheBurator 3232 28.04.18 22:13 Сейчас в теме
с хвоста строки посимвольно проверяем вхождение в "0123456789".
нашли первый нецифровой символ - начиная со следующего за ним отрезали строку и применили Число() - так не пойдет? или я что-то не понял? смысл усложнять такую простую задачу регэкспами?
5. DrAku1a 1783 02.05.18 17:03 Сейчас в теме
Пока Номер<>"" и Найти("123456789", Лев(Номер, 1))=0 Цикл
Номер =Сред(Номер, 2);
КонецЦикла;
Номер = ?(Номер="", "0", Номер);
Если нужно быстрее, то заменить на
Ответ = "0";
Для НомерСимвола=1 по СтрДлина(Номер) Цикл
Если Найти("123456789", Сред(Номер, НомерСимвола, 1))>0 Тогда
Ответ = Сред(Номер, НомерСимвола);
Прервать;
КонецЕсли;
КонецЦикла;
Номер = Ответ;
Показать
Кода немного, при этом тягать регулярные выражения - нужды нет.
zmiulan03; +1 Ответить
6. пользователь 02.05.18 20:05
Сообщение было скрыто модератором.
...
Для отправки сообщения требуется регистрация/авторизация