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


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

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

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

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