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

Прочитать строку по словам из запроса

Автор Greiv, 19 фев 2015, 09:27

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

Greiv

Есть запрос Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СписокТеррористов.ФИО
|ИЗ
| Справочник.СписокТеррористов КАК СписокТеррористов
|ГДЕ
| СписокТеррористов.ФИО ПОДОБНО &Имя
| И СписокТеррористов.ФИО ПОДОБНО &Фамилия
| И СписокТеррористов.ФИО ПОДОБНО &Отчество";

Так вот строка ФИО в справочнике имеет в себе очень длинную строку, в этой же строке записано куча текста через пробел, мне из этой строки требуется только первые 3 слова это и есть Фамилия Имя и Отчество, по ним нужно провести сличение, только вот возникает вопрос, как прочитать первые 3 слова в виде 1оеСлово=Имя, 2оеСлово = Фамилия, 3иеСлово = Отчество?

vitasw

Боюсь запросом в таком варианте организации данных - не получится. Добавляйте 3 новых реквизита в справочник. заполняйте и ищите по ним.

Greiv

Невозможно, так как этот справочник с которым производится сличение заполняется загрузкой из dbf, там более 10000 записей, решение найдено следующее.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СписокТеррористов.ФИО,
| СписокТеррористов.Ссылка
|ИЗ
| Справочник.СписокТеррористов КАК СписокТеррористов
|ГДЕ
| СписокТеррористов.ФИО ПОДОБНО &Имя
| И СписокТеррористов.ФИО ПОДОБНО &Фамилия
| И СписокТеррористов.ФИО ПОДОБНО &Отчество";

Запрос.УстановитьПараметр("Имя", Запись.Имя+"%");
Запрос.УстановитьПараметр("Отчество", Запись.Отчество+"%");
Запрос.УстановитьПараметр("Фамилия", Запись.Фамилия+"%");

has

Тогда уж так лучше, вдруг строка не будет начинаться с ФИО, а ФИО будет в середине

    Запрос.УстановитьПараметр("Имя",         "%"+Запись.Имя+"%");
    Запрос.УстановитьПараметр("Отчество",     "%"+Запись.Отчество+"%");
    Запрос.УстановитьПараметр("Фамилия",  "%"+Запись.Фамилия+"%");

Greiv

Цитата: has от 19 фев 2015, 11:55
Тогда уж так лучше, вдруг строка не будет начинаться с ФИО, а ФИО будет в середине

    Запрос.УстановитьПараметр("Имя",         "%"+Запись.Имя+"%");
    Запрос.УстановитьПараметр("Отчество",     "%"+Запись.Отчество+"%");
    Запрос.УстановитьПараметр("Фамилия",  "%"+Запись.Фамилия+"%");


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

LexaK


|ГДЕ
        |    СписокТеррористов.ФИО ПОДОБНО &Имя
        |    И СписокТеррористов.ФИО ПОДОБНО &Фамилия
        |    И СписокТеррористов.ФИО ПОДОБНО &Отчество";

    Запрос.УстановитьПараметр("Имя",         Запись.Имя+"%");
    Запрос.УстановитьПараметр("Отчество",     Запись.Отчество+"%");
    Запрос.УстановитьПараметр("Фамилия",     Запись.Фамилия+"%");


Это условие не будет работать!
если только: Не (Имя "подобно" Отчество "подобно" Фамилия, в любых сочетаниях)

если у вас точно в начале строки: Фамилия Имя Отчество (через пробел),
тогда попробуйте так


|ГДЕ
        |    СписокТеррористов.ФИО ПОДОБНО &ФИО

Запрос.УстановитьПараметр("ФИО", Запись.Фамилия + " " + Запись.Имя + " " + Запись.Отчество+" %");


если помогло нажмите: Спасибо!

has

LexaK, ИОФ может же тоже быть.
Мне кажется тут через соединение делать надо.
Вот, попробовал на физ лицах, как-то так

ВЫБРАТЬ
ФизЛицаИмя.Ссылка,
ФизЛицаИмя.Представление,
ФизЛицаИмя.Наименование
ИЗ
Справочник.ФизическиеЛица КАК ФизЛицаИмя
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизЛицаФамилия
ПО ФизЛицаИмя.Ссылка = ФизЛицаФамилия.Ссылка
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизЛицаОтчество
ПО ФизЛицаИмя.Ссылка = ФизЛицаОтчество.Ссылка
ГДЕ
ФизЛицаИмя.Наименование ПОДОБНО "%" + &Имя + "%"
И ФизЛицаФамилия.Наименование ПОДОБНО "%" + &Фамилия + "%"
И ФизЛицаОтчество.Наименование ПОДОБНО "%" + &Отчество + "%"

LexaK

has,

если вы в запросе пишите

    ФизЛицаИмя.Наименование ПОДОБНО "%" + &Имя + "%"


два "%" то внутренние соединения не нужны, но здесь получается что части имени будут найдены в любом месте в любом сочетании, что не устраивает автора.
если помогло нажмите: Спасибо!

has

Цитата: LexaK от 19 фев 2015, 15:39два "%" то внутренние соединения не нужны, но здесь получается что части имени будут найдены в любом месте в любом сочетании, что не устраивает автора.
Это более универсальный вариант получается, в данном случае ищется ссылка, в наименовании которой могут присутствовать имя, фамилия и отчество в любом месте и порядке.

Теги:

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

Рейтинг@Mail.ru

Поиск