Запрос в цикле не работает.

1. Intercititude 29.12.20 09:32 Сейчас в теме
Есть процедура вида:

Для каждого Колонка Из Колонки Цикл

 Запрос = Новый Запрос;
Запрос.текст = "..."
Запрос.установитьпараметр("Колнка",Колонка.имя):

Выборка = Запрос.Выполнить.Выбрать();

Пока Выборка.Следующий() цикл

  Совпадение = Выборка.Наименование;

конеццикла;

Если Совпадение <> Неопределено Тогда

  КопияТЗ  = Тз.Скопировать();
  КопияТЗ.Свернуть(Колонка.имя);

   Для каждого Стр Из КопияТз Цикл

     Запрос = Новый Запрос;
Запрос.текст = "..."
Запрос.установитьпараметр("Значение",Стр[0]):

Выборка2 = Запрос.Выполнить.Выбрать();

Пока Выборка2.Следующий() цикл

  Идентификатор = Выборка2.ИД;

конеццикла;

Конеццикла;

конецесли;

конеццикла;
Показать


Не закидайте пожалуйста яйцами. Как это оптимизировать можно ?
И проблема в том, что во второй запрос не попадаю в Выборку2. Хотя если точно такой же запрос взять в консоли запросов или отдельно во внешней обработке, то всё ок, где подвох ?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
20. Intercititude 29.12.20 10:46 Сейчас в теме +0.35 $m
(19) Нашёл в чем дело.
Строка длинная, а у справочника стоит длина 100, искомое значение 140
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Diagnostiks 17 29.12.20 09:42 Сейчас в теме
"Это очень интересно, но ничего не понятно, но интересно".
У Вас даже код (синтаксис) неправильно написан или так и должно быть?
4. Intercititude 29.12.20 09:48 Сейчас в теме
(2) Я вот тоже голову уже сломал почему не попадает выборка,хотя значение 100% есть

Код писал в спешке, главное чтобы суть была понятна . Там все отрабатывает ок кроме единственного значения,А именно когда стр[0] = "длинный текст".
3. user633533_encantado 11 29.12.20 09:48 Сейчас в теме
Исправьте для начала ошибки в коде, который выложили синтаксис-помощником.
5. Intercititude 29.12.20 09:51 Сейчас в теме
6. PowerBoy 3379 29.12.20 09:53 Сейчас в теме
8. Intercititude 29.12.20 09:54 Сейчас в теме
(6) Нету у Стр Имя. Там сразу значение.
10. PowerBoy 3379 29.12.20 09:57 Сейчас в теме
(8) Там у тебя строка ТЗ, Для колонки добавь имя.
11. Intercititude 29.12.20 10:00 Сейчас в теме
(10) Так я же отладчиком смотрел, в Стр[0] содержит прям точное такое же значение которое мне нужно.
12. PowerBoy 3379 29.12.20 10:02 Сейчас в теме
(11) Надо писать конкретно имя колонки ТЗ: стр[0].ИмяКолонкиТЗ
15. Intercititude 29.12.20 10:10 Сейчас в теме
(12) Так а другие значения почему то же отрабатывают корректно.
16. PowerBoy 3379 29.12.20 10:12 Сейчас в теме
(15) Тип значения который ты передаешь в запрос будет строка ТЗ, как у тебя колонка в ТЗ называется? если "Значение", то пиши стр[0].Значение
Intercititude; +1 Ответить
7. ab_initio 95 29.12.20 09:54 Сейчас в теме
Суть совсем не понятна.
Запрос в цикле - это всегда плохо и у сообщества от этого разрыв шаблона, т.к. каждый кодер знает, что так делать нельзя.

И, почти всегда, такую конструкцию, как ваша, можно привести к виду, когда запрос всего один, один раз выполняется и один раз обходится..

Вы бы сами запросы привели.
И, в целом, сам текст, который может работать.
Intercititude; +1 Ответить
9. Intercititude 29.12.20 09:56 Сейчас в теме
(7) 1 запрос ищет совпадение колонки по идентификатору в справочнике и выдаёт его.
Если ид есть то второй запрос:
2 запрос ищет совпадения в другом справочнике, есть ли такие значения. собственно в этом и проблема, так как значение есть, но выборка не отрабатывает
Так же если значения не нашлось то создаётся новый элемент справочника.

Думал может это всё сделать через массив и потом уже обходить в запросе один раз, но как всё-таки оптимальнее и правильнее будет?
13. spec8s 838 29.12.20 10:06 Сейчас в теме
Запрос.УстановитьПараметр("Значение",Стр[0]):

попробовать удалить пробелы
Запрос.УстановитьПараметр("Значение",СокрЛП(Стр[0])):
14. PowerBoy 3379 29.12.20 10:10 Сейчас в теме
(13) стр у него строка ТЗ, не то пишешь.
22. spec8s 838 29.12.20 11:02 Сейчас в теме
(14) И ?
Если Стр - это строка ТЗ, тогда Стр[0] - обращение к первому реквизиту строки.
Даже в синтакс-помощнике об этом сказано:
"Возможно обращение к значению колонки данной строки посредством оператора [...]"
17. Intercititude 29.12.20 10:15 Сейчас в теме
18. PowerBoy 3379 29.12.20 10:17 Сейчас в теме
19. rintik 19 29.12.20 10:39 Сейчас в теме
Слезы из глаз, но кажется Вы получаете всегда только одно последнее значение в выборке и только оно проверяется на совпадение.
Пока Выборка.Следующий() цикл

  Совпадение = Выборка.Наименование;

конеццикла;
Если Совпадение <> Неопределено Тогда

Показать
20. Intercititude 29.12.20 10:46 Сейчас в теме +0.35 $m
(19) Нашёл в чем дело.
Строка длинная, а у справочника стоит длина 100, искомое значение 140
23. spec8s 838 29.12.20 11:05 Сейчас в теме
(20)Одно не понятно, через консоль запросов проверялось значение с длиной 140 или нет?
21. starik-2005 3062 29.12.20 10:51 Сейчас в теме
1. Вместо "Пока Выборка.Следующий()" можно написать "Если НЕ Результат.Пустой()".
2. А еще лучше в первом запросе все колонки засунуть в запрос, на выходе получить только те, которые есть в результате. Тогда уже Пока Выбрать.Следующий() - в выборке должно быть имя колонки.
3. Ну и да, длинна...
Intercititude; +1 Ответить
Оставьте свое сообщение

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