К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

SQL -запрос под 7.7

Гость
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

Цитата:
Сообщение от Wanderer27 Посмотреть сообщение
Что за метод УложитьСписокЗначений? в 1С 7.7 такого точно нет. Запрос нормальный, я просто упростил вопрос, не стал писать полный его вид, чтобы не забивать голову. :)
1) Внимательно: Прямой доступ через ODBC. 2) Поиском примеры.. 3) В личку.
Гость
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 > пойдет


К списку вопросов






Copyright ©, Все права защищены