Архив метки: 1С 7.7

1C Выделене подстрок с помощью регулярного выражения

Пример тестировался на 1С 7.7, в 1С 8.х нужно только вместо «СоздатьОбъект» писать «Новый», ну и учитывать тот факт, что в восьмерке есть булев тип данных.

К примеру, перед нами задача, получить номер документа для вывода на печать налоговой накладной. Но в базе документы имеют примерно такие номера «FGT-00072», «AR-00120» и т.д. Если бы до тире было фиксированное число символов, можно было бы брать подстроку по знак «-«, затем брать из строки ту часть, которая стоит за минусом и применять чункцию Число(). В результате получим то, что нужно, то есть «FGT-00072» превратится в 72, а если вместо фиксированной части поиском найти позицию «-«, то и второй номер можно легко преобразовать. Но случаи бывают разные, я предлагаю создать универсальную функцию, с помощью которой вы можете находить любые подстроки, используя регулярное выражение.

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

Пример:

НомДокБН = регВырИгнорРегистр(Строка(«FGT-00072″),»([a-zA-Z]*)-?(0*?)([^0]\d*)»,2); //вернет «72»
ПостфиксБН = регВырИгнорРегистр(Строка(«03″),»(0*?)([^0]\d*)»,1);//Вернет «3» (универсальный убиратель ведущих нулей)

Мне такой подход понравился из-за универсальности, не нужно писать новые циклы и поиски с проверками под разные ситуации. Используем регулярное выражение и всё.

Собственно сама функция

//Выполняет поиск в строке по регулярному выражению
//номер позиции с нуля
//
функция регВырИгнорРегистр (текст, выражение, номерПозиции)
Если (ПустоеЗначение(текст)=1) ИЛИ (ПустоеЗначение(выражение) =1) ИЛИ (ПустоеЗначение(номерПозиции)=1) Тогда
возврат текст;
КонецЕсли;
Истина=-1;
Ложь=0;
RegExp = CreateObject(«VBScript.RegExp»);

RegExp.IgnoreCase = Истина; //Игнорировать регистр
RegExp.Global = Истина; //Поиск всех вхождений шаблона
RegExp.MultiLine = Ложь; //Многострочный режим

RegExp.Pattern = выражение; //Ищем вхождение
Matches=RegExp.Execute(текст);
ЧислоВхождений=Matches.Count();
Если ЧислоВхождений>0 Тогда
Match = Matches.Item(0);
SubMatches = Match.SubMatches;
SubMatch=SubMatches.Item(номерПозиции);
возврат (SubMatch);
Иначе
возврат «»;
КонецЕсли;
Возврат «»;
КонецФункции

1С 7.7 функция распознавания типа значения

Гениальное просто
Гениальное просто

Эта функция использует регулярные выражения vbscript и может делить любое переданное значение на: целое число, число вообще, дату и строку. Изначально нужно передавать строковой параметр, к примету «12,5», функция вернет «Число», а если передать «12», тогда вернет «ЧислоЦелое»

Возвращает: Определяемый тип, возвращаемый тип — строка. Возможные варианты: «Число», «ЧислоЦелое», «Строка», «Дата».

Обратите внимание, что если передать в качестве параметра строку «12.0», будет возвращен параметр «Число», а не «ЧислоЦелое».

Применение: Я использую для определения типа при чтении данных из различных файлов типа excel, csv или ADO таблиц.

Текст функции: