Вопрос по поводу запросов (как искать подстроку в строковом поле справочника).

1. Artemovsky 24.05.14 17:33 Сейчас в теме
Доброе время суток.

Прошу прошения за тупо-примитивный вопрос по поводу запросов.

Задача:
- Дано: Справочники.Номенклатура - в нем есть поле Аналоги куда записывается артикулы других номенклатур через запятую.
- Надо: осуществить поиск и вывести его в ТабЗначений.
- Примечание: артикул это буквенно-цыфровой код. запысывается он менеджером при добавлении новой номенклатуры. И каждый раз по разному т.е. когда прописными а когда заглавными.

Как реализовано сейчас у меня:

- Пробегаю перебором по справочнику, загоняю все в строго в верхний ренистр и сраниваю.

СпрНоменклатура = Справочники.Номенклатура.Выбрать();

Пока СпрНоменклатура.Следующий() Цикл
	Если Найти(ВРег(СпрНоменклатура.Аналоги), ВРег(ЭтаФорма.СтрокаПоиска)) > 0 Тогда
		Таб = ЭтаФорма.ТаблицаЗначений.Добавить();
		Таб.Наименование = СпрНоменклатура.Наименование;
		Таб.Артикул = СпрНоменклатура.Артикул;
		Таб.Аналоги = СпрНоменклатура.Аналоги;
	КонецЕсли;
КонецЦикла;
Показать


А как реализовать подобное через запрос.

т.е. как решить вопрос с регистрами и возможно ли такое?

Заранее благодарен.
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. agrustny 19 24.05.14 20:17 Сейчас в теме
(1) Artemovsky,
Справочники.Номенклатура - в нем есть поле Аналоги куда записывается артикулы других номенклатур через запятую.

Так не делают. Правильное решение - табличная часть со списком ссылок на другие номенклатуры. Учитесь думать в терминах баз данных. Да и правописанию поучиться Вам стоит
цыфровой
Artemovsky; +1 Ответить
5. Artemovsky 24.05.14 22:16 Сейчас в теме
(2) agrustny, С правописание в курсе. Исправляю не не все сразу.


(2) agrustny,
(3) byuf_in,
А по поводу зачем мне это?!

Ответ: Лично мне не зачем! И не я это изобретал. А вот передали мне базу на поддержку а вней такой зоопарк. И исправить будет трудновато, так как на эту строчку уж много чего наверчено из обработок. А я все голишь получил "это" уже в измененном виде. Исправлю но позже. сейчас же нужно доделать что бы мне мозг не трогали. а переделаю чуть позже, когда с меня все слузут со своими хотелками. При том что это доработка от Конторы которая является партнером 1С, и им платили по договору не малые деньги. А после того как эта кантора решила соскочить так как стали хотелки озвучивать уж совсем не тривиальные, базу принесли мне. А я теперь с этим разбираюсь.
6. agrustny 19 24.05.14 22:54 Сейчас в теме
(5) Понимаю, если работа того стоит - разбирайтесь. Просто стоит ли городить запрос ради временного решения, если уже написан цикл? Потом же это еще раз переписывать...Ну, в общем Вам там виднее. Удачи с авгиевыми конюшнями!
Artemovsky; +1 Ответить
7. byuf_in 25.05.14 11:11 Сейчас в теме
(5) Artemovsky, тогда самое простое: 1) в существующих данных привести всё к одному регистру, 2) перед записью в БД приводить к тому же регистру.

А так удачи)
Artemovsky; +1 Ответить
8. dimalf 25.05.14 13:59 Сейчас в теме
(2) agrustny,
Согласен. Табличная часть с ссылкой на Номенклатуру. А потом в запросе использовать эту табличную часть.
Artemovsky; +1 Ответить
3. byuf_in 24.05.14 20:50 Сейчас в теме
(1) Artemovsky, зачем Вам этот промежуточный этап хранения строкой? Менеджер аналог должен подбирать из справочника, хранить сразу ссылки в том же регистре, если Вам так нравится (мне регистр тоже больше нравится) или в табличной части как предложено выше.
4. byuf_in 24.05.14 20:55 Сейчас в теме
(1) Artemovsky, А вообще по поводу поиска, то используйте
подобно "%ВВЕРХНЕМ РЕГИСТРЕ%" ИЛИ подобно "%в нижнем регистре%" ИЛИ подобно "%Как ПоЛуЧилось%"
, но опять таки если у вас вводят зоопарк, то приводить его к стандарту нужно сразу при записи в базу, т.е. хранить надо в одном регистре и всё.
Artemovsky; +1 Ответить
9. infostart777 25.05.14 18:37 Сейчас в теме
"ВЫБРАТЬ
Номенклатура.Наименование,
Номенклатура.Артикул,
Номенклатура.Аналоги
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Аналоги ПОДОБНО &СтрокаПоиска"

Метод ПОДОБНО не различает регистры.
Artemovsky; +1 Ответить
10. Artemovsky 25.05.14 21:05 Сейчас в теме
(9) infostart777, Видимо различает так как не находит.
11. infostart777 25.05.14 22:22 Сейчас в теме
Возможно, дело в левых пробелах.Тогда после текста запроса:
Запрос.УстановитьПараметр("СтрокаПоиска”, Врег(СокрЛП(СтрокаПоиска)));
Artemovsky; +1 Ответить
12. infostart777 25.05.14 22:33 Сейчас в теме
Запрос = Новый Запрос;
СтрокаПоиска = " 1ff1 "; //указать свое значение

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

Запрос.УстановитьПараметр("СтрокаПоиска", Врег(СокрЛП(СтрокаПоиска)));
Показать
Artemovsky; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот