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

Вопрос по запросам 1с

Автор Apocalipso, 05 июн 2017, 22:49

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

Apocalipso

Здравствуйте, уважаемые господа! Никак не могу осилить запросы 1с,вроде базово понятно, но когда необходимо выполнить более сложную задачу не знаю, где почитать и взять информацию ,как сделать.
Суть задачи проста нужно сделать поиск сотрудников по словам введенным в поисковое поле, то есть в справочнике есть наименование сотрудника ФИО и нам нужно найти есть ли такой сотрудник и вывести ссылку на него в поле вывода. Делать без запроса у меня получается, но написать для этого запрос, чтобы в запросе сразу по всем введенным словам находились сотрудники не знаю как, а запрос я как понимаю самое оптимальное решение(рациональное).
Сначала я введенные слова переношу в таблицу значений и сортирую по длине ,и поиск правильно, как мне кажется, начинать с самого длинного слова. Код ,что пока сделал ,прикрепляю. И большая просьба дать совет, где почитать более сложные или как научиться. Сейчас читаю книжку язык запросов 1с 8.3.
   Вывод.Очистить();
   //Введенные данные разделить на слова
   Разделитель = " ";
   Разделение = СтрРазделить(НРег(ФИО),Разделитель);
   //создать таблицу для разделленных слов \Слова\Длина
   
   ВведенныеСлова = Новый ТаблицаЗначений;
   ОписаниеСтрока = Новый ОписаниеТипов("Строка");
   ВведенныеСлова.Колонки.Добавить("Элемент1",ОписаниеСтрока,"Элемент1");
   ОписаниеДлина = Новый ОписаниеТипов("Число");
   ВведенныеСлова.Колонки.Добавить("Длина",ОписаниеДлина,"Длина");
   Для эл = 0 по Разделение.Количество()-1 Цикл
      Если Разделение[эл] = "" Тогда
         Продолжить;
      КонецЕсли;
      ТекущийЭлементМассива = Разделение[эл];
      НоваяСтрока = ВведенныеСлова.Добавить();
      НоваяСтрока.Элемент1 = Разделение[эл];
      НоваяСтрока.Длина = СтрДлина(Разделение[эл]);         
   КонецЦикла;
   //Сортируем ТаблицуЗнач "ВведенныеСлова" по колонке "Длина",чтобы поиск первоначально велся по самому длин слову
   ВведенныеСлова.Сортировать("Длина УБЫВ");
   
   //Запрос с поиском сотрудников
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |   Сотрудники.Наименование,
   |   Сотрудники.Ссылка
   |ИЗ
   |   Справочник.Сотрудники КАК Сотрудники
   |ГДЕ
   |   Сотрудники.Наименование %Подобно% &Наименование";
   Для СчетВведСлов = 0 ПО ВведенныеСлова.Количество() Цикл
   Запрос.УстановитьПараметр("Наименование",ВведенныеСлова[СчетВведСлов].Элемент1);
   РезультатЗапроса = Запрос.Выполнить();
   ТабЗнач = РезультатЗапроса.Выгрузить();
   КонецЦикла;

LexaK

похоже что ваша конструкция вообще не работает.
попробуйте начать изучение программирования с простеньких задач и алгоритмов,
;)
ответ Понравился? (в смысле пригодился?)

alex0402

Цитата: Apocalipso от 05 июн 2017, 22:49|   Сотрудники.Наименование %Подобно% &Наименование";

Нужно

//в запросе
Сотрудники.Наименование Подобно &Наименование";

//в коде
Запрос.УстановитьПараметр("Наименование","%текст%");

Спасибо за Сказать спасибо

Apocalipso

Цитата: LexaK от 06 июн 2017, 09:34
похоже что ваша конструкция вообще не работает.
попробуйте начать изучение программирования с простеньких задач и алгоритмов,
;)

Так я понимаю как сделать без языка запросов это. Язык запросов мне не понятен полностью, изучаю его сейчас. И спрашиваю: "где почитать или как освоить?".


Теги: запрос1с 

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

Рейтинг@Mail.ru Rambler's Top100

Поиск