Загрузка данных


// --- ШАГ 1: ТИП БИЛЕТА ---
Функция ИзвлечьТипБилета(ОстатокСтроки, ШаблонТип)
    ТипБилета = "";
    
    РезультатПоиска = СтрНайтиПоРегулярномуВыражению(ОстатокСтроки, ШаблонТип);
    Если РезультатПоиска <> Неопределено Тогда
        Блок = РезультатПоиска.Значение;
        // Извлекаем первую группу с помощью замены найденного блока на $1
        ТипБилета = СокрЛП(СтрЗаменитьПоРегулярномуВыражению(Блок, ШаблонТип, "$1"));
        ОстатокСтроки = СокрЛП(Сред(ОстатокСтроки, РезультатПоиска.Длина + 1));
    КонецЕсли;
    
    Возврат ТипБилета;
КонецФункции

// --- ШАГ 2: ПЕРЕВОЗЧИК И ИНН ---
Функция ИзвлечьПеревозчикаИИнн(ОстатокСтроки, ШаблонПеревозчик)
    Результат = Новый Структура("Перевозчик, ИНН", "", "");
    
    РезультатПоиска = СтрНайтиПоРегулярномуВыражению(ОстатокСтроки, ШаблонПеревозчик);
    Если РезультатПоиска <> Неопределено Тогда
        Блок = РезультатПоиска.Значение;
        
        // Перевозчик находится в первой группе ($1)
        Результат.Перевозчик = СокрЛП(СтрЗаменитьПоРегулярномуВыражению(Блок, ШаблонПеревозчик, "$1"));
        
        // ИНН находится во второй группе ($2). Очищаем от литерала "$2", если группа пустая.
        ТекстИНН = СокрЛП(СтрЗаменитьПоРегулярномуВыражению(Блок, ШаблонПеревозчик, "$2"));
        Результат.ИНН = СтрЗаменить(ТекстИНН, "$2", ""); 
        
        ОстатокСтроки = СокрЛП(СтрЗаменить(ОстатокСтроки, Блок, ""));
    КонецЕсли;
    
    Возврат Результат;
КонецФункции

// --- ШАГ 3: КЛАСС ОБСЛУЖИВАНИЯ ---
Функция ИзвлечьКлассБилета(ОстатокСтроки, ШаблонКласс)
    КлассБилета = "";
    
    РезультатПоиска = СтрНайтиПоРегулярномуВыражению(ОстатокСтроки, ШаблонКласс);
    Если РезультатПоиска <> Неопределено Тогда
        Блок = РезультатПоиска.Значение;
        КлассБилета = СокрЛП(СтрЗаменитьПоРегулярномуВыражению(Блок, ШаблонКласс, "$1"));
        ОстатокСтроки = СокрЛП(СтрЗаменить(ОстатокСтроки, Блок, ""));
    КонецЕсли;
    
    Возврат КлассБилета;
КонецФункции

// --- ШАГ 4: ДАТА, ПАССАЖИР, ДОП. ИНФО ---
Функция ИзвлечьДатуПассажираДопИнфо(ОстатокСтроки, ШаблонДата, ШаблонПассажир)
    Результат = Новый Структура("Дата, Пассажир, ДопИнфо", "", "", "");
    
    РезультатПоиска = СтрНайтиПоРегулярномуВыражению(ОстатокСтроки, ШаблонДата);
    Если РезультатПоиска <> Неопределено Тогда
        Результат.Дата = РезультатПоиска.Значение;
        
        ПозицияДаты = СтрНайти(ОстатокСтроки, Результат.Дата);
        Хвост = СокрЛП(Сред(ОстатокСтроки, ПозицияДаты + СтрДлина(Результат.Дата)));
        ОстатокСтроки = СокрЛП(Лев(ОстатокСтроки, ПозицияДаты - 1)); 
        
        ПозЗапятой = СтрНайти(Хвост, ",");
        Если ПозЗапятой > 0 Тогда
            Результат.Пассажир = СокрЛП(Лев(Хвост, ПозЗапятой - 1));
            Результат.ДопИнфо  = СокрЛП(Сред(Хвост, ПозЗапятой + 1));
        Иначе
            Результат.Пассажир = Хвост;
        КонецЕсли;
    Иначе
        // Бездатные билеты - ищем ФИО с конца строки
        РезультатПоиска = СтрНайтиПоРегулярномуВыражению(ОстатокСтроки, ШаблонПассажир);
        Если РезультатПоиска <> Неопределено Тогда
            Блок = РезультатПоиска.Значение;
            Результат.Пассажир = СокрЛП(СтрЗаменитьПоРегулярномуВыражению(Блок, ШаблонПассажир, "$1"));
            ОстатокСтроки = СокрЛП(Лев(ОстатокСтроки, СтрДлина(ОстатокСтроки) - РезультатПоиска.Длина));
        КонецЕсли;
    КонецЕсли;
    
    Возврат Результат;
КонецФункции

// --- ШАГ 5: НОМЕР БИЛЕТА И МАРШРУТ ---
Функция ИзвлечьНомерИМаршрут(ОстатокСтроки, ШаблонНомерМаршрут, ШаблонМусорСлеш, ШаблонМусорУдалить)
    Результат = Новый Структура("НомерБилета, Маршрут", "", "");
    
    // Глобальная функция для очистки от лишних слов
    ОстатокСтроки = СтрЗаменитьПоРегулярномуВыражению(ОстатокСтроки, ШаблонМусорСлеш, "/ ");
    ОстатокСтроки = СтрЗаменитьПоРегулярномуВыражению(ОстатокСтроки, ШаблонМусорУдалить, "");
    ОстатокСтроки = СокрЛП(ОстатокСтроки);
    
    РезультатПоиска = СтрНайтиПоРегулярномуВыражению(ОстатокСтроки, ШаблонНомерМаршрут);
    Если РезультатПоиска <> Неопределено Тогда
        Блок = РезультатПоиска.Значение;
        
        Результат.НомерБилета = СокрЛП(СтрЗаменитьПоРегулярномуВыражению(Блок, ШаблонНомерМаршрут, "$1"));
        
        ТекстМаршрута = СокрЛП(СтрЗаменитьПоРегулярномуВыражению(Блок, ШаблонНомерМаршрут, "$2"));
        Результат.Маршрут = СтрЗаменить(ТекстМаршрута, "$2", "");
    Иначе
        Результат.НомерБилета = ОстатокСтроки;
    КонецЕсли;
    
    Возврат Результат;
КонецФункции