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

подобно в запросе

Автор ef0din, 02 июл 2020, 12:26

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

ef0din

Добрый день!
Делаю загрузку из Excel. В процессе загружаю 2 поля, которые отвечают за пункт получения груза и пункт транзита. Важно тут то, что по наименованию ищу элемент справочника "География". Это по сути страны, города, районы, поселки и тп. Помимо наименования, необходимо использовать отбор по определенному "типу объекта"(что б это был условный тип объекта = город). Потому СправочникМенеджер.НайтиПоНаименованию - не устроит. Сначала считываю данные из файла в ТЗ в цикле. Далее копирую(оставляя лишь нужны строки для запроса), сворачиваю и запросом по нужному отбору ищу.
Столкнулся с такой проблемой: например, в файле может быть "Симферополь", а в наименовании "Симферополь г.". Поэтому решил в тестовом запросе добавить поиск с помощью "Подобно". Текст запроса ниже приведу. И либо я дурак, либо второй вариант: я ведь строковое значение из вр. таблицы преобразую методом "Выразить КАК Строка(150). Получается, что там много лишних пробелов. Впечатление, что из-за этого с "ПОДОБНО" ничего и не находит запрос. Была идея в тз считать длину для каждой строки, а потом передавать как параметр оператора "Строка" (ВЫРАЗИТЬ КАК Строка(ВрТаб.МояДлина)). Но на практике ошибка. Я так понимаю ,что так не катит, а нужно именно конкретное число, либо параметр из вне(&Параметр).  Вообщем, прошу совета, запрос ниже привожу.



ВЫБРАТЬ
ТабТранзитов.Офис КАК Офис,
ВЫРАЗИТЬ(ТабТранзитов.Номер071 КАК СТРОКА(150)) КАК ПунктТранзитаСтрокой,
ВЫРАЗИТЬ(ТабТранзитов.Номер086 КАК СТРОКА(150)) КАК ПунктПолученияСтрокой
ПОМЕСТИТЬ Исход
ИЗ
&ТабТранзитов КАК ТабТранзитов
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЕСТЬNULL(География.Ссылка, ЗНАЧЕНИЕ(Справочник.География.ПустаяСсылка)) КАК ПунктТранзита,
Исход.Офис КАК Офис,
ЕСТЬNULL(География1.Ссылка, ЗНАЧЕНИЕ(Справочник.География.ПустаяСсылка)) КАК ПунктПолучения,
Исход.ПунктТранзитаСтрокой КАК ПунктТранзитаСтрокой,
Исход.ПунктПолученияСтрокой КАК ПунктПолученияСтрокой
ПОМЕСТИТЬ НП
ИЗ
Исход КАК Исход
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.География КАК География
ПО Исход.ПунктТранзитаСтрокой = География.Наименование
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.География КАК География1
ПО Исход.ПунктПолученияСтрокой = География1.Наименование

СГРУППИРОВАТЬ ПО
Исход.Офис,
Исход.ПунктТранзитаСтрокой,
Исход.ПунктПолученияСтрокой,
ЕСТЬNULL(География.Ссылка, ЗНАЧЕНИЕ(Справочник.География.ПустаяСсылка)),
ЕСТЬNULL(География1.Ссылка, ЗНАЧЕНИЕ(Справочник.География.ПустаяСсылка))
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Исход.Офис КАК Офис,
Исход.ПунктТранзитаСтрокой КАК ПунктТранзитаСтрокой,
Исход.ПунктПолученияСтрокой КАК ПунктПолученияСтрокой,
ЕСТЬNULL(География.Ссылка, ЗНАЧЕНИЕ(Справочник.География.ПустаяСсылка)) КАК ПТранз,
ЕСТЬNULL(География1.Ссылка, ЗНАЧЕНИЕ(Справочник.География.ПустаяСсылка)) КАК ППолуч
ИЗ
Исход КАК Исход
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.География КАК География
ПО (География.Наименование ПОДОБНО Исход.ПунктТранзитаСтрокой)
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.География КАК География1
ПО (География1.Наименование ПОДОБНО Исход.ПунктПолученияСтрокой)

АлександрВладимирович

Вкратце:
"Симферополь г." ПОДОБНО "Симферополь" - Ложь;
"Симферополь г." ПОДОБНО "Симферополь%" - Истина;

Подробно про "ПОДОБНО" в справке: Встроенный язык - Работа с запросами - Синтаксис текста запросов - Ключевые слова и функции - Операторы - Логические операторы - ПОДОБНО

А насчет "Выразить КАК Строка(150)", не понимаю, зачем оно?

LexaK

ef0din, попробуйте использовать эти рекомендации
1.когда создаете колонки с наименованиями в таблице ТабТранзитов, используйте Тип Строка с квалификатором 1000
2.когда заполняете свою таблицу ТабТранзитов, обрезайте пробелы в названиях
НоваяСтрока.Номер071  = СокрЛП(НаименованиеИзЕкселя);
2.тогда запрос будет выглядеть так

ВЫБРАТЬ
    Таб.Офис КАК Офис,
    Таб.Номер071 КАК ПунктТранзитаСтрокой,
    Таб.Номер086 КАК ПунктПолученияСтрокой
ПОМЕСТИТЬ Исход
ИЗ
    &ТабТранзитов КАК Таб
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Исход.Офис КАК Офис,
    ЕСТЬNULL(ГеографияТ.Ссылка, "<Пункт транзита не найден>") КАК ПунктТранзита,
    Исход.ПунктТранзитаСтрокой,
    ЕСТЬNULL(ГеографияП.Ссылка, "<Пункт получения не найден>") КАК ПунктПолучения,
    Исход.ПунктПолученияСтрокой
//ПОМЕСТИТЬ НП
ИЗ
    Исход
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.География КАК ГеографияТ
ПО ГеографияТ.Наименование Подобно Исход.ПунктТранзитаСтрокой + "%"
//сюда можно добавить отбор по типу Географии
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.География КАК ГеографияП
    ПО ГеографияП.Наименование Подобно Исход.ПунктПолученияСтрокой + "%"
//сюда можно добавить отбор по типу Географии
если помогло нажмите: Спасибо!

ef0din


Теги:

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

Рейтинг@Mail.ru

Поиск