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