Здравствуйте.Столкнулся с такой проблемой. При поиске по коду номенклатуры идет дублирование по первому введенному значению.
&НаСервере
Функция ПолучитьНазваниеБлюда(Блюдо)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Блюда.Ссылка КАК Ссылка,
| Блюда.Код КАК Код,
| Блюда.Наименование КАК Наименование
|ИЗ
| Справочник.Блюда КАК Блюда";
Запрос.УстановитьПараметр("Блюдо",Блюдо);
РезультатЗапроса = Запрос.Выполнить();
МассивДанных = Новый Массив(4);
Если Не РезультатЗапроса.Пустой()Тогда
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий()Тогда
МассивДанных.Вставить(0,Выборка.Ссылка);
МассивДанных.Вставить(1,Выборка.Код);
МассивДанных.Вставить(2,Выборка.Наименование);
Возврат МассивДанных;
КонецЕсли;
Иначе Возврат Неопределено;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ПоискПоКоду(Команда)
НовСтр = Объект.ЗаказКлиента.Добавить();
Если ПолучитьНазваниеБлюда(НазваниеБлюда) <> Неопределено Тогда
НовСтр.Блюдо = ПолучитьНазваниеБлюда(НазваниеБлюда)[0];
конецЕсли;
КонецПроцедуры
ПоказатьПо теме из базы знаний
- Проверка таблицы на дублирование строк (ТаблицаЗначений, ТабличнаяЧасть) и получение массива таких строк
- Поиск и замена значений V 8.3 (управляемые формы)
- Устранение ошибки при реализации товаров, при попытке выбора "Номер ГТД": "Обнаружено дублирование ключевых значений"
- Алгоритм нахождения причины ошибки "Обнаружено дублирование ключевых значений в колонках:..." в динамическом списке
- Дублирование значений в полях табличных частей (CTRL+D)
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) в запросе отбора по блюду нет...
Добавьте вот такое:
Запрос.УстановитьПараметр("Блюдо", "%"+Блюдо+"%");
Добавьте вот такое:
"ВЫБРАТЬ
| Блюда.Ссылка КАК Ссылка,
| Блюда.Код КАК Код,
| Блюда.Наименование КАК Наименование
|ИЗ
| Справочник.Блюда КАК Блюда
| Где Ссылка.Наименование = &Блюдо";
Запрос.УстановитьПараметр("Блюдо", "%"+Блюдо+"%");
(7)
Но и это не самое рабочее решение, по-крайней мере не для продакшена.
&НаКлиенте
Процедура ПоискПоКоду(Команда)
НовСтр = Объект.ЗаказКлиента.Добавить();
лБлюдо = ПолучитьНазваниеБлюда(НазваниеБлюда);
Если лБлюдо <> Неопределено Тогда
НовСтр.Блюдо = лБлюдо[0];
конецЕсли;
КонецПроцедуры
Но и это не самое рабочее решение, по-крайней мере не для продакшена.
(12)
&НаКлиенте
Процедура ПоискПоКоду(Команда)
НовСтр = Объект.ЗаказКлиента.Добавить();
лБлюдо = ПолучитьНазваниеБлюда(НазваниеБлюда);
Если лБлюдо<> Неопределено Тогда
НовСтр.Блюдо = лБлюдо[0];
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ПолучитьНазваниеБлюда(Блюдо)
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Блюда.Ссылка КАК Ссылка,
| Блюда.Код КАК Код,
| Блюда.Наименование КАК Наименование
|ИЗ
| Справочник.Блюда КАК Блюда";
Запрос.УстановитьПараметр("Блюдо", "%"+Блюдо+"%");
РезультатЗапроса = Запрос.Выполнить();
Массив = Новый Массив(4);
Если не РезультатЗапроса.Пустой()Тогда
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий()Тогда
Массив.Вставить(0,Выборка.Ссылка);
Массив.Вставить(1,Выборка.Код);
Возврат Массив;
КонецЕсли;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
Показать
(24) и не будет. Запрос выбирает из базы в данном случае только четкую последовательность в НАИМЕНОВАНИИ блюда:
Какие_То_Символы_АС_Какие_то_Символы
Тебе или параметр в запросе нужно по-другому строить, либо другой метод поиска (полнотекстовый, например) использовать.
Какие_То_Символы_АС_Какие_то_Символы
Тебе или параметр в запросе нужно по-другому строить, либо другой метод поиска (полнотекстовый, например) использовать.
(13) несколько раз уже указали:
Без конструкции " |ГДЕ Блюда.Ссылка = &Блюдо" будет выборка всего справочника.
Запрос.Текст =
"ВЫБРАТЬ
| Блюда.Ссылка КАК Ссылка,
| Блюда.Код КАК Код,
| Блюда.Наименование КАК Наименование
|ИЗ
| Справочник.Блюда КАК Блюда
|ГДЕ
| Блюда.Ссылка = &Блюдо";
Запрос.УстановитьПараметр("Блюдо", Блюдо");
ПоказатьБез конструкции " |ГДЕ Блюда.Ссылка = &Блюдо" будет выборка всего справочника.
(17) выборка идет всегда по первому элементу выборки.
Для вашего случая код должен быть следующий:
Для вашего случая код должен быть следующий:
Запрос.Текст =
"ВЫБРАТЬ
| Блюда.Ссылка КАК Ссылка,
| Блюда.Код КАК Код,
| Блюда.Наименование КАК Наименование
|ИЗ
| Справочник.Блюда КАК Блюда
|ГДЕ
| Блюда.Наименование Подобно &Блюдо";
Запрос.УстановитьПараметр("Блюдо", "%"+Блюдо+"%");
Показать
Даже так происходит повторное дублирование
&НаСервере
Функция Получить(Блюдо)
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Блюда.Ссылка КАК Ссылка
|ИЗ
| Справочник.Блюда КАК Блюда";
РезультатЗапроса = Запрос.Выполнить();
Запрос.УстановитьПараметр("Блюдо",Блюдо);
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Возврат ВыборкаДетальныеЗаписи.Ссылка;
КонецЦикла;
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
КонецФункции
ПоказатьПрикрепленные файлы:
(6)
Сейчас этот пример попробую
Сейчас этот пример попробую
&НаКлиенте
Процедура ПоискПоКоду(Команда)
НовСтр = Объект.ЗаказКлиента.Добавить();
НовСтр.Блюдо = Получить(НазваниеБлюда);
Сообщить(НовСтр.Блюдо);
КонецПроцедуры
&НаСервере
Функция Получить(Блюдо)
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Блюда.Ссылка КАК Ссылка
|ИЗ
| Справочник.Блюда КАК Блюда
|ГДЕ
| Блюда.Ссылка = &Блюдо";
РезультатЗапроса = Запрос.Выполнить();
Запрос.УстановитьПараметр("Блюдо", "%"+Блюдо+"%");
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Возврат ВыборкаДетальныеЗаписи.Ссылка;
КонецЦикла;
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
КонецФункции
Показать Запрос.Текст =
"ВЫБРАТЬ
| Блюда.Ссылка КАК Ссылка
|ИЗ
| Справочник.Блюда КАК Блюда
|ГДЕ
| Блюда.Ссылка = &Блюдо";
РезультатЗапроса = Запрос.Выполнить();
Запрос.УстановитьПараметр("Блюдо", "%"+Блюдо+"%");
ПоказатьЭто работать не будет т.к. в таком случае нужно передать ссылку а вы передадите строку с процентами
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот