Имя: Пароль:
1C
1С v8
Учебный пример по запросу к ТЗ работает неправильно.
,
0 memogolik
 
06.11.12
10:15
Есть форма, на ней таблица значений. Колонки этой таблицы типизированы, пытаюсь выбрать единственный столбец из ТЗ, но в результате запроса получаю ТЗ с единственным столбцом количество(число), а на форме этот столбец назывался "Поле1" типа "СправочникСсылка.Номенклатура".

Процедура КнопкаВыполнитьНажатие(Кнопка)
   // Вставить содержимое обработчика.
   МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
   Запрос = Новый Запрос();
   Запрос.МенеджерВременныхТаблиц=МенеджерВременныхТаблиц;
   Запрос.Текст="
   |ВЫБРАТЬ
   |    Поле1
   |ПОМЕСТИТЬ ТП
   |ИЗ
   |    &ТП КАК ТП
   |";
   Запрос.УстановитьПараметр("ТП",ТП);
   ТЗ2=Запрос.Выполнить().Выгрузить();
   а=0;
КонецПроцедуры

Процедура ПриОткрытии()
   // Вставить содержимое обработчика.
   МассивТипов= Новый Массив;
   МассивТипов.Добавить(Тип("СправочникСсылка.Номенклатура"));
   КЧ = Новый КвалификаторыЧисла(12,2);
   ОписаниеТипов = Новый ОписаниеТипов(МассивТипов,КЧ);
   ТП.Колонки.Добавить("Поле1",ОписаниеТипов);
   ЭлементыФормы.ТП.СоздатьКолонки();    
   НоваяСтрока = ТП.Добавить();
   //НоваяСтрока.Поле1=333;
КонецПроцедуры

Вот скрин:
http://rusfolder.com/33471343
Заранее спасибо за помощь.
1 ДенисЧ
 
06.11.12
10:16
Запрос.Текст="
   |ВЫБРАТЬ
   |    Поле1
   |ПОМЕСТИТЬ ТП
   |ИЗ
   |    &ТП КАК ТП;
|ВЫБРАТЬ * ИЗ ТП
   |";
2 Maxus43
 
06.11.12
10:18
Запрос.УстановитьПараметр("ТП",ТЗ_Надо_Она_В_Данных_У_ТП);
3 Maxus43
 
06.11.12
10:19
мимо) норм там
4 memogolik
 
06.11.12
10:23
(1) не работает (Ошибка при вызове метода Выполнить())
5 Maxus43
 
06.11.12
10:24
(4) в конструкторе делай
6 memogolik
 
06.11.12
11:04
Вот еще пример
http://help1c.com/faq82/view/815.html

Процедура КнопкаВыполнитьНажатие(Кнопка)
   // Вставить содержимое обработчика.
   Таблица = Новый ТаблицаЗначений;
   //Опишем тип создаваемой колонки
   Массив = Новый Массив;
   КЧ = Новый КвалификаторыЧисла(10, 2);
   Массив.Добавить(Тип("Число"));
   ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ);
   Таблица.Колонки.Добавить("КодУслуги",ОписаниеТиповЧ);

   //... выборки из справочника и заполнение ТЗ
   //Пока ВыборкаСпр.Следующий() Цикл
          НоваяСтрока = Таблица.Добавить();  
          НоваяСтрока.КодУслуги = 11;  
          НоваяСтрока = Таблица.Добавить();  
          НоваяСтрока.КодУслуги = 22;  
   //КонецЦикла;
     
   Запрос = Новый Запрос;
   МенеджерВТ = Новый МенеджерВременныхТаблиц;
   Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
   // Текст запроса для построения временной таблицы
   Запрос.Текст = "ВЫБРАТЬ
                     |    Таб.КодУслуги КАК Код
                     |ПОМЕСТИТЬ ВТДанные
                     |ИЗ
                     |    &Данные КАК Таб";
   Запрос.УстановитьПараметр("Данные",Таблица);
   Результат = Запрос.Выполнить().Выгрузить();
   а=0;
КонецПроцедуры

И все равно в переменной Результат таблица значений с колонкой "Количество" ( . В чем же косяк?
7 memogolik
 
06.11.12
11:14
Вот так заработало, если кому интересно:
Т.е. значение этой временной таблицы я получил только следующим запросом:
Процедура КнопкаВыполнитьНажатие(Кнопка)
   // Вставить содержимое обработчика.
   Таблица = Новый ТаблицаЗначений;
   //Опишем тип создаваемой колонки
   Массив = Новый Массив;
   КЧ = Новый КвалификаторыЧисла(10, 2);
   Массив.Добавить(Тип("Число"));
   ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ);
   Таблица.Колонки.Добавить("КодУслуги",ОписаниеТиповЧ);

   //... выборки из справочника и заполнение ТЗ
   //Пока ВыборкаСпр.Следующий() Цикл
          НоваяСтрока = Таблица.Добавить();  
          НоваяСтрока.КодУслуги = 11;  
          НоваяСтрока = Таблица.Добавить();  
          НоваяСтрока.КодУслуги = 22;  
   //КонецЦикла;
     
   Запрос = Новый Запрос;
   МенеджерВТ = Новый МенеджерВременныхТаблиц;
   Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
   // Текст запроса для построения временной таблицы
   Запрос.Текст = "ВЫБРАТЬ
                     |    Таб.КодУслуги КАК Код
                     |ПОМЕСТИТЬ ВТДанные
                     |ИЗ
                     |    &Данные КАК Таб";
   Запрос.УстановитьПараметр("Данные",Таблица);
   Результат = Запрос.Выполнить();
   Запрос.Текст="
   |ВЫБРАТЬ *
   |ИЗ
   |    ВТДанные
   |";
   Рез = Запрос.Выполнить().Выгрузить();
   а=0;
КонецПроцедуры
8 Serginio1
 
06.11.12
11:19
(0) Во первых у тебя запрос возвращает количество вставленных строк.
Во вторых. Используй пакеты. Посмотри различие между выполнитьПакет и выполнить.
МенеджерВременныхТаблиц используй там, где временные таблицы используются многократно из разных процедур.
Иначе пакетный запрос то что нужно как в (1).
9 Franchiser
 
гуру
06.11.12
11:20
(7) проще было пакетом запросов сделать
10 Franchiser
 
гуру
06.11.12
11:24
Косяк твой был в том, что выполняемый запрос, который делает помещение результата во временную таблицу не возвращает в качестве результата ту самую временную таблицу.
Основная теорема систематики: Новые системы плодят новые проблемы.