0
- 19.03.2014 - 16:59
|
Есть запрос ТекстЗапроса = " |select | pos.idmanufactdoc |from | manufactdocpyramidpos pos |where | pos.idmanufactdoc IN " + сзПП + " |"; А = СоздатьОбъект("OLEDBData"); Ф = А.Соединение(ConnectionString); ЗапросА = А.СоздатьКоманду(); ТаблицаРезультата = ЗапросА.ВыполнитьИнструкцию(ТекстЗапроса); Вопрос, как правильно написать условие в конструкции "where", чтобы выбирал записи, у которых значение поля pos.idmanufactdoc есть в СпискеЗначений "сзПП"? Конструкция, указанная в запросе, не работает. | | |
1
- 19.03.2014 - 17:00
|
Ругается "ТаблицаРезультата = ЗапросА.ВыполнитьИнструкцию(ТекстЗапроса); {D:\BASE1C\COPY\PUB_POZ_2012\EXTFORMS\ПРОГРАММИСТ\ РАЗВЕРНУТЫЙОТЧЕТПОЗАКАЗУ.ERT(135)**: FAILED! ICommandText::Execute(): Неправильный синтаксис около конструкции "СписокЗначений"." | | |
2
- 19.03.2014 - 17:31
|
Как то так: ТекстЗапроса = " |select | pos.idmanufactdoc |from | manufactdocpyramidpos pos |where | pos.idmanufactdoc IN ("; Для сч=1 По сзПП.РазмерСписка() Цикл ТекстЗапроса=ТекстЗапроса+СокрЛП(сзПП.ПолучитьЗнач ение(сч))+","; КонецЦикла; ТекстЗапроса=ТекстЗапроса+")"; | | |
3
- 19.03.2014 - 18:27
|
+(2) Сори, забыл избавиться от последней запятой. В самый конец добавь строку кода: ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ",)", ")"); | | |
4
- 19.03.2014 - 19:05
|
а проще использовать метод - УложитьСписокЗначений А что за запрос несколько странный, он не к 1с-ным данным ? | | |
5
- 19.03.2014 - 21:15
|
3-Billi >Спасибо! Я догадался ;) 4-USSR >Что за метод УложитьСписокЗначений? в 1С 7.7 такого точно нет. Запрос нормальный, я просто упростил вопрос, не стал писать полный его вид, чтобы не забивать голову. :) | | |
6
- 20.03.2014 - 02:56
| Цитата:
| | |
7
- 20.03.2014 - 08:18
| ВСтрокуСРазделителями | | |
8
- 20.03.2014 - 10:19
|
7-smaharbA > не пройдет Т.к. на выходе будет ""значение1","значение2",....."значениеК"" А надо "значение1,значение2,.....значениеК" | | |
9
- 20.03.2014 - 15:46
|
Функция УсловиеНаРеквизит (Запрос, ТекстЗапроса, Значение, ИмяПараметра, ИмяРеквизита, БазаSQL = 0) Экспорт Если ПустоеЗначение(Значение) = 1 Тогда Возврат ТекстЗапроса; КонецЕсли; ИмяТекстПараметра = ИмяПараметра; Если ТипЗначенияСтр(Значение) = "Справочник" Тогда Если Значение.ЭтоГруппа() = 0 Тогда Запрос.SetTextParam (ИмяТекстПараметра, Значение); Условие = " AND (" + ИмяРеквизита + "=:" + ИмяТекстПараметра + ")"; Иначе Если БазаSQL = 0 Тогда ВремЗначение = ""; Запрос.УложитьСписокОбъектов (Значение, ВремЗначение, Значение.Вид()); Запрос.SetTextParam (ИмяТекстПараметра, ВремЗначение); ИмяТекстПараметра = ":" + ИмяТекстПараметра; ТекстЗапроса = ТекстЗапроса + " AND " + РазделительСтрок + ИмяРеквизита + " IN (SELECT Val FROM " + ИмяТекстПараметра + ")"; Иначе ИмяТекстПараметра = "#" + ИмяТекстПараметра; Запрос.УложитьСписокОбъектов (Значение, ИмяТекстПараметра, Значение.Вид()); ТекстЗапроса = ТекстЗапроса + " AND " + РазделительСтрок + ИмяРеквизита + " IN (SELECT Val FROM " + ИмяТекстПараметра + ")"; КонецЕсли; КонецЕсли; ИначеЕсли ТипЗначенияСтр(Значение) = "СписокЗначений" Тогда Если БазаSQL = 0 Тогда ВремЗначение = ""; ИмяПараметра = ":" + ИмяТекстПараметра; Запрос.УложитьСписокОбъектов (Значение, ВремЗначение); Запрос.SetTextParam (ИмяТекстПараметра, ВремЗначение); Иначе ИмяПараметра = "#" + ИмяТекстПараметра; Запрос.УложитьСписокОбъектов (Значение, ИмяПараметра); КонецЕсли; Условие = " AND (" + ИмяРеквизита + " IN (SELECT Val FROM " + ИмяПараметра + "))"; Иначе Запрос.SetTextParam (ИмяТекстПараметра, Значение); Условие = " AND (" + ИмяРеквизита + "=:" + ИмяТекстПараметра + ")"; КонецЕсли; Возврат ТекстЗапроса + Условие; КонецФункции //УсловиеНаРеквизит() | | |
10
- 20.03.2014 - 19:48
| 8-Wanderer27 > пойдет | |
| Интернет-форум Краснодарского края и Краснодара |