![]() |
SQL -запрос под 7.7 Есть запрос ТекстЗапроса = " |select | pos.idmanufactdoc |from | manufactdocpyramidpos pos |where | pos.idmanufactdoc IN " + сзПП + " |"; А = СоздатьОбъект("OLEDBData"); Ф = А.Соединение(ConnectionString); ЗапросА = А.СоздатьКоманду(); ТаблицаРезультата = ЗапросА.ВыполнитьИнструкцию(ТекстЗапроса); Вопрос, как правильно написать условие в конструкции "where", чтобы выбирал записи, у которых значение поля pos.idmanufactdoc есть в СпискеЗначений "сзПП"? Конструкция, указанная в запросе, не работает. |
Ругается "ТаблицаРезультата = ЗапросА.ВыполнитьИнструкцию(ТекстЗапроса); {D:\BASE1C\COPY\PUB_POZ_2012\EXTFORMS\ПРОГРАММИСТ\РАЗВЕРНУТЫЙОТЧЕТПОЗАКАЗУ.ERT(135)**: FAILED! ICommandText::Execute(): Неправильный синтаксис около конструкции "СписокЗначений"." |
Как то так: ТекстЗапроса = " |select | pos.idmanufactdoc |from | manufactdocpyramidpos pos |where | pos.idmanufactdoc IN ("; Для сч=1 По сзПП.РазмерСписка() Цикл ТекстЗапроса=ТекстЗапроса+СокрЛП(сзПП.ПолучитьЗначение(сч))+","; КонецЦикла; ТекстЗапроса=ТекстЗапроса+")"; |
+(2) Сори, забыл избавиться от последней запятой. В самый конец добавь строку кода: ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ",)", ")"); |
а проще использовать метод - УложитьСписокЗначений А что за запрос несколько странный, он не к 1с-ным данным ? |
3-Billi >Спасибо! Я догадался ;) 4-USSR >Что за метод УложитьСписокЗначений? в 1С 7.7 такого точно нет. Запрос нормальный, я просто упростил вопрос, не стал писать полный его вид, чтобы не забивать голову. :) |
[url][/url] [quote=Wanderer27;34580569]Что за метод УложитьСписокЗначений? в 1С 7.7 такого точно нет. Запрос нормальный, я просто упростил вопрос, не стал писать полный его вид, чтобы не забивать голову. :)[/quote]1) Внимательно: [url=http://j.mp/1drkg29]Прямой доступ через ODBC[/url]. 2) Поиском примеры.. 3) В личку. |
ВСтрокуСРазделителями |
7-smaharbA > не пройдет Т.к. на выходе будет ""значение1","значение2",....."значениеК"" А надо "значение1,значение2,.....значениеК" |
Функция УсловиеНаРеквизит (Запрос, ТекстЗапроса, Значение, ИмяПараметра, ИмяРеквизита, База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 (" + ИмяРеквизита + "=:" + ИмяТекстПараметра + ")"; КонецЕсли; Возврат ТекстЗапроса + Условие; КонецФункции //УсловиеНаРеквизит() |
8-Wanderer27 > пойдет |
Текущее время: 23:18. Часовой пояс GMT +3. |