Имя: Пароль:
1C
1C 7.7
v7: Проблемы с кавычками в sql
0 Fiasko
 
11.05.13
02:11
Братцы, помогите.
Если делаю фильтр по значению, содержащему два эпострофа ('') в конце строки - то запрос работает не корректно. Апострофы в справочнике убирать с конца - не вариант вообще. Можно же что-то предпринять еще?

   ТекстЗапроса = "
   |SELECT
   |    Номенклатура.ID [Ссылка $Справочник.Номенклатура],
   //|    $СвойстваНоменклатуры.ВидСвойства [ВидСвойства $Справочник.ВидыСвойств],
   |    $СвойстваНоменклатуры.ЗначениеСвойства [ЗначениеСвойства $Справочник.ЗначенияСвойств]
   |FROM $Справочник.Номенклатура AS Номенклатура With (NOLOCK)
   |    RIGHT JOIN $Справочник.СвойстваНоменклатуры AS СвойстваНоменклатуры With (NOLOCK) ON Номенклатура.ID = СвойстваНоменклатуры.PARENTEXT
   |WHERE
   |    ($СвойстваНоменклатуры.ВидСвойства = :ВидФильтра)
   |    AND ($СвойстваНоменклатуры.ЗначениеСвойства = :ЗначениеФильтра)
   //|ORDER BY
   //|    $Справочник.ЗначениеСвойства
   |";
1 ЧеловекДуши
 
11.05.13
04:59
(0)Вот как надо работать со свойствами :)


//Получаешь ВИД свойства, откуда угодно, по дефолту оно в константе. Без него работа со свойствами в 1С не имеет смыслу, т.е. туфтовый метод, это "Свойство"
ВидФильтра = Константа.СвоиствоНоменклатуры; //Или как там у вас :)
ЗапросSQL.УстановитьТекстовыйПараметр("ВидФильтра",ВидФильтра);

//И вот таким запросиком получаешь своё свойство, ибо свойство всегда одно для каждого нужного элемента справочника, в твоём случае это Номенклатура
ТекстЗапроса=ТекстЗапроса+"
|(Select Top 1 $СвойсТовара.ЗначениеСвойства From $Справочник.СвойстваНоменклатуры AS СвойсТовара(NOLOCK)
|  Where СвойсТовара.PARENTEXT = Номенклатура.ID and $СвойсТовара.ВидСвойства = :ВидФильтра) as НекоеСвойствоЧегоТо";


И не надо там всяких джойнов, со свойством только так, первое попавшее и усе :)
2 ЧеловекДуши
 
11.05.13
05:02
ТекстЗапроса = "
   |SELECT
   |    Номенклатура.ID [Ссылка $Справочник.Номенклатура],
   |    (Select Top 1 $СвойсТовара.ЗначениеСвойства From $Справочник.СвойстваНоменклатуры AS СвойсТовара(NOLOCK)
   |  Where СвойсТовара.PARENTEXT = Номенклатура.ID and $СвойсТовара.ВидСвойства = :ВидФильтра) [ЗначениеСвойства $Справочник.ЗначенияСвойств]
   |FROM $Справочник.Номенклатура AS Номенклатура With (NOLOCK)
   |Group By Номенклатура.ID
   |";
3 ЧеловекДуши
 
11.05.13
05:07
+ А если нужно фильтр по значению свойства, то делай это в другом запросе...


//Примерно так
ТекстЗапроса = "
Select ЗС.Ссылка [Ссылка $Справочник.Номенклатура],
ЗС.ЗначениеСвойства [ЗначениеСвойства $Справочник.ЗначенияСвойств]
From(
SELECT
   Номенклатура.ID as Ссылка,
   (Select Top 1 $СвойсТовара.ЗначениеСвойства From $Справочник.СвойстваНоменклатуры AS СвойсТовара(NOLOCK)
 Where СвойсТовара.PARENTEXT = Номенклатура.ID and $СвойсТовара.ВидСвойства = :ВидФильтра) as ЗначениеСвойства
  FROM $Справочник.Номенклатура AS Номенклатура With (NOLOCK)
  Group By Номенклатура.ID
) as ЗС
4 ЧеловекДуши
 
11.05.13
05:08
+ "Where" по "ЗС" и далее сам
5 Fiasko
 
11.05.13
12:35
не знаю, может я написал плохо... у меня нет проблем с текстом запроса, просто в этом реквизите -> $СвойстваНоменклатуры.ЗначениеСвойства в конце значения есть два апострофа и, похоже, из-за этого запрос выводит пустую тз, т.к. если убрать апострофы или переместить их, например, в центр строки - срабатывает нормально.
6 mikecool
 
11.05.13
12:52
(5) проверяй - если значение свойства текстовое, то добавляй парные ковычки в начало и конец значения
7 Fiasko
 
12.05.13
01:44
(6) а можно попросить синтаксис фильтра написать? Я пытался, у меня постоянно ошибки лезут в этом случае...
8 mikecool
 
12.05.13
08:53
(7) не, я уже забыл как делать, а рыться в справке за тебя лень...
9 Злой Бобр
 
12.05.13
12:42
(0) Уже б давно поубирал апострофы и забыл о "проблеме".
10 ЧеловекДуши
 
13.05.13
14:32
(7) Как вариант, уложи свое значение во Временную Таблицу и сверяй. Хотя отладчик запросов тебе более даст ответов.