Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
12 дек 2024, 23:42

Найти БИН в строке

Автор Asset.ast, 16 фев 2023, 15:36

0 Пользователей и 1 гость просматривают эту тему.

Asset.ast

Здравствуйте! Задача проверить определенный текст на наличие Двенадцатизначного числа (БИН Организации), загвозка в том что помимо этого числа есть и другие числа но уже Восми или Десятизначные

LexaK

Asset.ast, подойдите к задаче с другого края!
просто создайте нормальную выгрузку (например с использованием механизмов ХДТО) или каких других структур
да таже выгрузка в csv, где в третьей колонке ИНН, в четвертой КПП, в пятой БИН и т.д.
а при загрузке просто получаете данные из нужной колонки 
и точно знаете что в пятой колонке именно БИН а не почтовый индекс.

(первый раз с таким сталкиваюсь что назначение данных пытаются определить по их длине!)
если помогло нажмите: Спасибо!

antoneus

Регулярки помогут.

Asset.ast

LexaK, Увы, но так не получается) Я пищу обработку по обмену Банкинга с Нашей Базой через загрузку файла. Бывает что пришли деньги но в назначение платежа они пишут что Мы оплачиваем за ТОО "Улыбка" БИН - 123123123123. И я решил сделать так, если БИН плательщика в базе не найден то попробовать найти его в тексте назначение платежа и если есть что то похожее на БИН то искать Контрагента по этому БИН-у

Asset.ast

antoneus, Не подскажите по подробней, если можно с примером) Никогда с ними не работал 

LexaK

Asset.ast, понятно, тогда так и ищите сначала по ключевым словам (БИН и др), затем по ограничителям (,; и др)

позицияБин = СтрНайти(Назначение,"Бин -");
Если позицияБин > 0 Тогда
//есть Бин в назначении,
//получаем остаток строки после Бин
СтрокаСНомеромБин = Сред(Назначение, позицияБин  + 6);//6 = (длина "Бин - "
и так далее
если помогло нажмите: Спасибо!

antoneus

Ну, например, так

re = Новый COMОбъект("VBScript.RegExp");
re.Pattern = "/(?<!\d)\d{12}(?!\d)";
Match = re.Execute(НазначениеПлатежа);
Если Match.Count <> 0 Тогда
Для сч = 0 По Match.Count - 1 Цикл
ТекущийБИН = Match.Item(сч).Value;
//тут ищем или добавляем в массив, который потом засунем в запрос
КонецЦикла;
КонецЕсли;
КонецЕсли;

Asset.ast

antoneus, Здравствуйте! Прошу Вашей помощи)
Есть текст : ""Референс 2760433593 Плательщик: ПОСОЛЬСТВО ОАЭ В РЕСПУБЛИКЕ Получатель: ИП Улыбка Назначение: За замену обгонной муфты и датчика давления шин согл счету на оплату №0000009132 от 16.02.2023, без НДС""
Как получить все точно идет Между Плательщик: и Получатель:
Мне Нужна получить наименование Плательщика



antoneus

re.Pattern = "(?<=Плательщик:).+?(?=Получатель)";
...
Наименование = СокрЛП(Match.Item(сч).Value);

Asset.ast

antoneus,

re = Новый COMОбъект("VBScript.RegExp");   
   re.Pattern = "(?<=Плательщик:).+?(?=Получатель)";   
   Match = re.Execute(Назначение);


    Если Match.Count <> 0 Тогда
        Для сч = 0 По Match.Count - 1 Цикл
            Наименование = СокрЛП(Match.Item(сч).Value);

           
        КонецЦикла;               
    КонецЕсли;


Дает Ошибку

{Документ.КонвертацияДС.Форма.ФормаСписка.Форма(333)}: Ошибка при вызове метода контекста (Execute)
Match = re.Execute(Назначение);
по причине:
Произошла исключительная ситуация (0x800a1399)


Похожие темы (5)

Рейтинг@Mail.ru

Поиск