Почему не работает условие "ГДЕ" в запросе ?

1. Terabaytus 10.04.20 19:24 Сейчас в теме
Добрый вечер, не срабатывает условие ГДЕ в данной процедуре когда пытаюсь задать параметр для условия через переменную
ЗначениеНомерЗакупки = "123456789";


&НаСервере
Процедура ЗапросКонтракта()
     
    ЗначениеНомерЗакупки = "123456789";

    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки
        |ИЗ
        |    РегистрСведений.СпецификацияКонтракта КАК СпецификацияКонтракта 
        |ГДЕ
        |    СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = ""+ЗначениеНомерЗакупки+""";
                      
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    
    Пока Выборка.Следующий() Цикл
                
        НоваяСтрока = Спецификация.Добавить();
        НоваяСтрока.НомерЗакупки = Выборка.СпецификацияКонтрактаНомерЗакупки;
            
    КонецЦикла;
    
КонецПроцедуры
Показать


в РегСвед тип строка, предаю в переменную для условия тоже строку, что не так то ?
Если написать так
    ГДЕ
        |    СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = ""123456789""
то запрос отрабатывает.
По теме из базы знаний
Найденные решения
32. nomad_irk 72 10.04.20 20:55 Сейчас в теме
(29)Прошу пардону, т.к. значение строковое, то правильно делать конкатенацию нужно так, как указано в (23)
Т.е.

|ГДЕ
|    СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = """ + ЗначениеНомерЗакупки + """";
Terabaytus; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 72 10.04.20 19:29 Сейчас в теме
(1)Не правильно выполняете конкатенацию строк.
Используйте параметры запроса.

|ГДЕ
|    СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки =  &ЗначениеНомерЗакупки"

Запрос.УстановитьПараметр("ЗначениеНомерЗакупки", ЗначениеНомерЗакупки);
dj_tol; AlexandrSmith; Dream_kz; +3 Ответить
3. Terabaytus 10.04.20 19:34 Сейчас в теме
(2) Так мне их не объединить надо, а по заданному номеру строчного типа отыскать в РегСвед все записи.
4. nomad_irk 72 10.04.20 19:38 Сейчас в теме
(3) в любом случае - не правильно выполняете конкатенацию строк.
Если до сих пор не понятно, то

|ГДЕ
|    СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = ""+ЗначениеНомерЗакупки+"""


Выполняет поиск по значению "+ЗначениеНомерЗакупки+".
5. Terabaytus 10.04.20 19:42 Сейчас в теме
(4) Почему тогда подобная конструкция работает с перемененной в этой теме Почему возникает ошибка при сравнение с результатом запросам. только с условием ""Да"" не чего же не поменялось только в место Да перемененная содержит строку с цифрами ?
6. nomad_irk 72 10.04.20 19:46 Сейчас в теме
(5)Вы ж сами пишите в своем сообщении

Если написать так

|ГДЕ
|    СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = ""123456789""


то запрос отрабатывает.


Почувствуйте разницу с:

|ГДЕ
|    СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = ""+ЗначениеНомерЗакупки+"""


Если вы хотите, чтобы у вас сам текст запроса менялся в зависимости от строковой переменной, то выполните конкатенацию текста запроса и строковой переменной правильно и будет вам счастье.

|ГДЕ
|    СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = " + ЗначениеНомерЗакупки;


Но такой подход к составлению запроса ведет к невозможности использовать конструктор запроса к текущему запросу в дальнешем.
7. Terabaytus 10.04.20 19:49 Сейчас в теме
(6) Возможно Вы не заметили, что я строку убираю в переменную
 ЗначениеНомерЗакупки = "123456789";
. Возможно не понятно описал.
8. nomad_irk 72 10.04.20 19:52 Сейчас в теме
(7)Я заметил и указал вам на то, что вы не правильно выполняете конкатенацию строковых значений.
см. (6) еще раз, я добавил вариант с правильной конкатенацией.
10. Terabaytus 10.04.20 20:02 Сейчас в теме
(8) Извините, но я всё ещё не догоняю если не разбираться во всё то так
|ГДЕ
|    СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = " + ЗначениеНомерЗакупки;
не работает, а если рассуждать то конкатенация это объединение строк, а я их сравниваю не сколько не спорю просто хочу понять весь день на это убил. Как я писал выше в другой теме подобный алгоритм работает.
15. nomad_irk 72 10.04.20 20:06 Сейчас в теме
(10)Показывайте код полностью, как в первом сообщении.
16. Terabaytus 10.04.20 20:08 Сейчас в теме
(15)
&НаСервере
Процедура ЗапросКонтракта()
     
    ЗначениеНомерЗакупки = "123456789";

    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки
        |ИЗ
        |    РегистрСведений.СпецификацияКонтракта КАК СпецификацияКонтракта 
        |ГДЕ
        |    СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = "+ЗначениеНомерЗакупки";
                      
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    
    Пока Выборка.Следующий() Цикл
                
        НоваяСтрока = Спецификация.Добавить();
        НоваяСтрока.НомерЗакупки = Выборка.СпецификацияКонтрактаНомерЗакупки;
            
    КонецЦикла;
    
КонецПроцедуры
Показать
17. nomad_irk 72 10.04.20 20:09 Сейчас в теме
(16)Да вы прикалываете что ли?

Где вот этот участок текста запроса

|ГДЕ
|    СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = " + ЗначениеНомерЗакупки;


???
18. Terabaytus 10.04.20 20:10 Сейчас в теме
(17)
Ошибка в выражении
		|	СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = "+<<?>>ЗначениеНомерЗакупки"; (Проверка: Сервер)
 Ошибка в выражении
		|	СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = "+<<?>>ЗначениеНомерЗакупки"; (Проверка: Тонкий клиент)

19. nomad_irk 72 10.04.20 20:12 Сейчас в теме
(18)Внимательно посмотрите на мой вариант и на ваш.
Прямо каждый символ сравните.
20. Terabaytus 10.04.20 20:17 Сейчас в теме
(19) Если так то без ошибок но и результата нет

&НаСервере
Процедура ЗапросКонтракта()
     
    ЗначениеНомерЗакупки = "123456789";

    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки
        |ИЗ
        |    РегистрСведений.СпецификацияКонтракта КАК СпецификацияКонтракта 
        |ГДЕ
        |    СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = "+ЗначениеНомерЗакупки;
                      
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    
    Пока Выборка.Следующий() Цикл
                
        НоваяСтрока = Спецификация.Добавить();
        НоваяСтрока.НомерЗакупки = Выборка.СпецификацияКонтрактаНомерЗакупки;
            
    КонецЦикла;
    
КонецПроцедуры
Показать
22. nomad_irk 72 10.04.20 20:18 Сейчас в теме
(20) Запись в РС с таким значением есть? Показывайте.
25. Terabaytus 10.04.20 20:24 Сейчас в теме
(22)
Прикрепленные файлы:
27. nomad_irk 72 10.04.20 20:32 Сейчас в теме
(25)Хорошо. Если в консоли запросов выполнить запрос

Выбрать * Из РегистрСведений.СпецификацияКонтракта


Тип значения у колонки "СпецификацияКонтрактаНомерЗакупки" какой?
28. Terabaytus 10.04.20 20:45 Сейчас в теме
30. nomad_irk 72 10.04.20 20:49 Сейчас в теме
(28) фиксированная или нет?
31. Terabaytus 10.04.20 20:51 Сейчас в теме
29. Terabaytus 10.04.20 20:49 Сейчас в теме
(27) В консоле
 Выбрать * Из РегистрСведений.СпецификацияКонтракта
отрабатывает
32. nomad_irk 72 10.04.20 20:55 Сейчас в теме
(29)Прошу пардону, т.к. значение строковое, то правильно делать конкатенацию нужно так, как указано в (23)
Т.е.

|ГДЕ
|    СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = """ + ЗначениеНомерЗакупки + """";
Terabaytus; +1 Ответить
33. AlexandrSmith 69 10.04.20 21:07 Сейчас в теме
(32) да я сразу увидел ошибку но автор сказал, что делал по вашему примеру и у него все получилось, но вероятно не делал. Я ему подсказал как попытаться покопаться и понять почему у него неравноценны левая и правая сторона уравнения. Спасибо что дополнительно указали автору на ошибку я думал уже проехали. Не стал поднимать тему.
Terabaytus; +1 Ответить
9. Dream_kz 129 10.04.20 19:52 Сейчас в теме
(7) Товарищ, вы на форум спорить приходите? Вам русским языком написали как сделать надо в (2)
12. Terabaytus 10.04.20 20:03 Сейчас в теме
(9)Не в коем разе прост понять хочу.
11. AlexandrSmith 69 10.04.20 20:03 Сейчас в теме
(2)(1) Ну да я согласен с ответом всегда правильнее передавать параметром, чем городить динамически формируемый запрос.
13. AlexandrSmith 69 10.04.20 20:04 Сейчас в теме
(1) У вас СпецификацияКонтрактаНомерЗакупки число или строка? Возможно нужно непосредственное приведение типов.
14. Terabaytus 10.04.20 20:06 Сейчас в теме
(13) Строки везде я уже сбился их проверять, непосредственное приведение это = явное приведение так ?
21. AlexandrSmith 69 10.04.20 20:17 Сейчас в теме
(14) СокрЛП посмотрите, может управляющие символы где-то вылазят. Вместо равно поробуйте конструкцию " ПОДОБНО ""%""" + ваше выражение+ """%"""
23. AlexandrSmith 69 10.04.20 20:20 Сейчас в теме
(1)
&НаСервере
Процедура ЗапросКонтракта()
     
    ЗначениеНомерЗакупки = "123456789";

    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки
        |ИЗ
        |    РегистрСведений.СпецификацияКонтракта КАК СпецификацияКонтракта 
        |ГДЕ
        |    СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки = """+ЗначениеНомерЗакупки+"""";
                      
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    
    Пока Выборка.Следующий() Цикл
                
        НоваяСтрока = Спецификация.Добавить();
        НоваяСтрока.НомерЗакупки = Выборка.СпецификацияКонтрактаНомерЗакупки;
            
    КонецЦикла;
    
КонецПроцедуры
Показать
Попробуйте так.
24. AlexandrSmith 69 10.04.20 20:22 Сейчас в теме
(1) Но я бы сделал так:
&НаСервере
Процедура ЗапросКонтракта()
     
    ЗначениеНомерЗакупки = "123456789";

    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки
        |ИЗ
        |    РегистрСведений.СпецификацияКонтракта КАК СпецификацияКонтракта 
        |ГДЕ
        |    СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки ПОДОБНО ""%"""+ЗначениеНомерЗакупки+"""%""";
                      
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    
    Пока Выборка.Следующий() Цикл
                
        НоваяСтрока = Спецификация.Добавить();
        НоваяСтрока.НомерЗакупки = Выборка.СпецификацияКонтрактаНомерЗакупки;
            
    КонецЦикла;
    
КонецПроцедуры
Показать
Попробуйте так.
26. AlexandrSmith 69 10.04.20 20:24 Сейчас в теме
(1) Вернее так:
&НаСервере
Процедура ЗапросКонтракта()
     
    ЗначениеНомерЗакупки = "123456789";

    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки
        |ИЗ
        |    РегистрСведений.СпецификацияКонтракта КАК СпецификацияКонтракта 
        |ГДЕ
        |    СпецификацияКонтракта.СпецификацияКонтрактаНомерЗакупки ПОДОБНО ""%"""+СокрЛП(ЗначениеНомерЗакупки)+"""%""";
                      
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    
    Пока Выборка.Следующий() Цикл
                
        НоваяСтрока = Спецификация.Добавить();
        НоваяСтрока.НомерЗакупки = Выборка.СпецификацияКонтрактаНомерЗакупки;
            
    КонецЦикла;
    
КонецПроцедуры
Показать
Попробуйте так.
Оставьте свое сообщение

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