Загрузка данных
// --- ШАГ 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].Значение);
КонецЕсли;
Иначе
Результат.НомерБилета = ОстатокСтроки;
КонецЕсли;
// Здесь ОстатокСтроки уже не нужно возвращать, т.к. это последний шаг
Возврат Результат;
КонецФункции