Имя: Пароль:
1C
1C 7.7
v7: проблемы с прямым запросом
0 Fiasko
 
20.05.13
00:20
Господа, я провозился с одним запросом несколько часов.. все заработало, но так и не понял в чем дело. Вопрос: Отличается ли чем-то способ получения данных, типа: тз=Запрос.ВыполнитьИнструкцию(ТекстЗапроса) или Запрос.ВыполнитьИнструкцию(ТекстЗапроса,тз) ???
1 Попытка1С
 
20.05.13
01:02
Вообще-то нет..
2 Злопчинский
 
20.05.13
01:03
первый вариант - слева не обязательно будет тип данных таблица, может быть скаляр
????
3 Попытка1С
 
20.05.13
01:03
"На самом деле ВыполнитьИнструкцию имеет три параметра
ВыполнитьИнструкцию(ТекстЗапроса, ТЗ, ФлагОчищитьТЗ);

ТЗ - Таблица значений или ее наследник.
ФлагОчищитьТЗ по умолчанию 1 очистит и создаст заново ТЗ по запросу.
0 не очищать.

ТЗ = ВыполнитьИнструкцию(ТекстЗапроса);     краткая более удобная форма
при этом ТЗ всегда создается."

http://www.1cpp.ru/forum/YaBB.pl?num=1206686989
4 Злопчинский
 
20.05.13
01:03
хотя я не спец - прислушаюсь к мнению других...
5 Ёпрст
 
20.05.13
09:03
(3) >>>при этом ТЗ всегда создается

какая наивность.

http://www.1cpp.ru/docum/icpp/html/ODBC.html#executestatement
6 Fiasko
 
20.05.13
18:56
мне кажется у меня чудеса творились... вот текст запроса:

Для сч=1 По ЗначенияФильтра.РазмерСписка() Цикл
   
   ЗначениеФильтра = ЗначенияФильтра.ПолучитьЗначение(сч);
   
   Запрос.УстановитьТекстовыйПараметр("ЗначениеФильтра", ЗначениеФильтра);
           
   ТекСписокТоваров = СоздатьОбъект("СписокЗначений");
   тзБуфер.Выгрузить(ТекСписокТоваров,,,"Товар");
   
   Если ТекСписокТоваров.РазмерСписка() > 0 Тогда
       Запрос.УложитьСписокОбъектов(ТекСписокТоваров, "#ТекСписокТоваров", "Номенклатура");
   КонецЕсли;
   
   ТекстЗапроса = "
   |SELECT Номенклатура.ID [Товар $Справочник.Номенклатура]
   |FROM $Справочник.Номенклатура AS Номенклатура With (NOLOCK)
   |INNER JOIN $Справочник.СвойстваНоменклатуры AS СвойстваНоменклатуры With (NOLOCK) ON Номенклатура.ID = СвойстваНоменклатуры.PARENTEXT
   |WHERE (Номенклатура.ISMARK <> 1)
   |AND (Номенклатура.ID IN (SELECT val FROM #ТекСписокТоваров))
   |AND ($СвойстваНоменклатуры.ЗначениеСвойства = :ЗначениеФильтра)
   |"
   ;
   
   Запрос.ВыполнитьИнструкцию(ТекстЗапроса, тзТоваров);

КонецЦикла;

Так вот, несмотря на то, что это запрос должен выгружать результат в тзТоваров, у меня почему-то тзБуфер (!!!) изменялась тоже - из нее удалялись ранее созданные колонки и в нее (!) загружались результаты запроса..
7 Fiasko
 
20.05.13
18:59
помогло только так:

тзТоваров = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
8 Злопчинский
 
20.05.13
19:04
Не видно как определена ТЗБуфер
9 Fiasko
 
20.05.13
19:17
тзТоваров = СоздатьОбъект("ТаблицаЗначений");
тзБуфер = СоздатьОбъект("ТаблицаЗначений");

Запрос = СоздатьЗапрос();

Если Страница=2 Тогда
   тзБуфер = ЗапросПоТоварам(КлассыРукава);
КонецЕсли;
10 fedoss
 
20.05.13
19:21
(9) А если
тзТоваров = СоздатьОбъект("ТаблицаЗначений");
написать прямо перед
Запрос.ВыполнитьИнструкцию(ТекстЗапроса, тзТоваров);
тзБуфер продолжит волшебным образом изменяться?
11 Fiasko
 
20.05.13
19:41
(10) угу :)
12 SnarkHunter
 
20.05.13
20:10
Сдается мне, Герасим, что ты чего-то недоговариваешь... (с)Муму
13 Fiasko
 
20.05.13
21:50
(12) это к чему? все понятно же...