Почему не работает условие "ГДЕ" в запросе ?
Добрый вечер, не срабатывает условие ГДЕ в данной процедуре когда пытаюсь задать параметр для условия через переменную
в РегСвед тип строка, предаю в переменную для условия тоже строку, что не так то ?
Если написать так
то запрос отрабатывает.
ЗначениеНомерЗакупки = "123456789";
&НаСервере
Процедура ЗапросКонтракта()
ЗначениеНомерЗакупки = "123456789";
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки
|ИЗ
| РегистрСведений.СпецификацияКонтракта КАК СпецификацияКонтракта
|ГДЕ
| СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = ""+ЗначениеНомерЗакупки+""";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = Спецификация.Добавить();
НоваяСтрока.НомерЗакупки = Выборка.СпецификацияКонтрактаНомерЗакупки;
КонецЦикла;
КонецПроцедуры
Показатьв РегСвед тип строка, предаю в переменную для условия тоже строку, что не так то ?
Если написать так
ГДЕ
| СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = ""123456789""
По теме из базы знаний
- Одна из причин медленной работы табеля (ЗУП 2.5, клиент-сервер, MS SQL Server)
- Автоматизация для "полевых" сотрудников (тех, кто не работает в офисе)
- Разные хм... неожиданности при работе с УТ 11 и платформой
- Почему вообще работает мой запрос? или Ещё раз о планах запросов
- Приемы быстрой работы в EDT/Git
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)Не правильно выполняете конкатенацию строк.
Используйте параметры запроса.
Используйте параметры запроса.
|ГДЕ
| СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = &ЗначениеНомерЗакупки"
Запрос.УстановитьПараметр("ЗначениеНомерЗакупки", ЗначениеНомерЗакупки);
(4) Почему тогда подобная конструкция работает с перемененной в этой теме Почему возникает ошибка при сравнение с результатом запросам. только с условием ""Да"" не чего же не поменялось только в место Да перемененная содержит строку с цифрами ?
(5)Вы ж сами пишите в своем сообщении
Почувствуйте разницу с:
Если вы хотите, чтобы у вас сам текст запроса менялся в зависимости от строковой переменной, то выполните конкатенацию текста запроса и строковой переменной правильно и будет вам счастье.
Но такой подход к составлению запроса ведет к невозможности использовать конструктор запроса к текущему запросу в дальнешем.
Если написать так
то запрос отрабатывает.
|ГДЕ
| СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = ""123456789""
то запрос отрабатывает.
Почувствуйте разницу с:
|ГДЕ
| СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = ""+ЗначениеНомерЗакупки+"""
Если вы хотите, чтобы у вас сам текст запроса менялся в зависимости от строковой переменной, то выполните конкатенацию текста запроса и строковой переменной правильно и будет вам счастье.
|ГДЕ
| СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = " + ЗначениеНомерЗакупки;
Но такой подход к составлению запроса ведет к невозможности использовать конструктор запроса к текущему запросу в дальнешем.
(8) Извините, но я всё ещё не догоняю если не разбираться во всё то так не работает, а если рассуждать то конкатенация это объединение строк, а я их сравниваю не сколько не спорю просто хочу понять весь день на это убил. Как я писал выше в другой теме подобный алгоритм работает.
|ГДЕ
| СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = " + ЗначениеНомерЗакупки;
(15)
&НаСервере
Процедура ЗапросКонтракта()
ЗначениеНомерЗакупки = "123456789";
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки
|ИЗ
| РегистрСведений.СпецификацияКонтракта КАК СпецификацияКонтракта
|ГДЕ
| СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = "+ЗначениеНомерЗакупки";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = Спецификация.Добавить();
НоваяСтрока.НомерЗакупки = Выборка.СпецификацияКонтрактаНомерЗакупки;
КонецЦикла;
КонецПроцедуры
Показать
(17)
Ошибка в выражении
| СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = "+<<?>>ЗначениеНомерЗакупки"; (Проверка: Сервер)
Ошибка в выражении
| СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = "+<<?>>ЗначениеНомерЗакупки"; (Проверка: Тонкий клиент)
(19) Если так то без ошибок но и результата нет
&НаСервере
Процедура ЗапросКонтракта()
ЗначениеНомерЗакупки = "123456789";
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки
|ИЗ
| РегистрСведений.СпецификацияКонтракта КАК СпецификацияКонтракта
|ГДЕ
| СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = "+ЗначениеНомерЗакупки;
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = Спецификация.Добавить();
НоваяСтрока.НомерЗакупки = Выборка.СпецификацияКонтрактаНомерЗакупки;
КонецЦикла;
КонецПроцедуры
Показать
(32) да я сразу увидел ошибку но автор сказал, что делал по вашему примеру и у него все получилось, но вероятно не делал. Я ему подсказал как попытаться покопаться и понять почему у него неравноценны левая и правая сторона уравнения. Спасибо что дополнительно указали автору на ошибку я думал уже проехали. Не стал поднимать тему.
(1) Попробуйте так.
&НаСервере
Процедура ЗапросКонтракта()
ЗначениеНомерЗакупки = "123456789";
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки
|ИЗ
| РегистрСведений.СпецификацияКонтракта КАК СпецификацияКонтракта
|ГДЕ
| СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = """+ЗначениеНомерЗакупки+"""";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = Спецификация.Добавить();
НоваяСтрока.НомерЗакупки = Выборка.СпецификацияКонтрактаНомерЗакупки;
КонецЦикла;
КонецПроцедуры
Показать
(1) Но я бы сделал так: Попробуйте так.
&НаСервере
Процедура ЗапросКонтракта()
ЗначениеНомерЗакупки = "123456789";
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки
|ИЗ
| РегистрСведений.СпецификацияКонтракта КАК СпецификацияКонтракта
|ГДЕ
| СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки ПОДОБНО ""%"""+ЗначениеНомерЗакупки+"""%""";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = Спецификация.Добавить();
НоваяСтрока.НомерЗакупки = Выборка.СпецификацияКонтрактаНомерЗакупки;
КонецЦикла;
КонецПроцедуры
Показать
(1) Вернее так: Попробуйте так.
&НаСервере
Процедура ЗапросКонтракта()
ЗначениеНомерЗакупки = "123456789";
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки
|ИЗ
| РегистрСведений.СпецификацияКонтракта КАК СпецификацияКонтракта
|ГДЕ
| СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки ПОДОБНО ""%"""+СокрЛП(ЗначениеНомерЗакупки)+"""%""";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = Спецификация.Добавить();
НоваяСтрока.НомерЗакупки = Выборка.СпецификацияКонтрактаНомерЗакупки;
КонецЦикла;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот