Имя: Пароль:
1C
1С v8
Работа с менеджером временных таблиц
0 inmortal203
 
03.06.13
11:07
Есть обработка, в которой хочу обработать запросом табличную часть.

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

1С выдает что поле "Товары.Номенклатура" не существует. Почему оно так?
1 mikecool
 
03.06.13
11:08
и правильно выдает, ты же постоянно пустой мвт передаешь
2 inmortal203
 
03.06.13
11:10
как так? обоснуешь кодом?
3 zmaximka
 
03.06.13
11:11
Новый Запрос это лишнее
4 Ёпрст
 
гуру
03.06.13
11:11
(0)
выкини создание Запроса каждый раз, как и задания менеджера временных таблиц.
5 zmaximka
 
03.06.13
11:12
Запр.Текст =
   "ВЫБРАТЬ
   |    ЦеныНоменклатурыСрезПоследних.Цена
   |ИЗ
   |    Товары
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
   |        ПО Товары.Наименование = ЦеныНоменклатурыСрезПоследних.Номенклатура
   |ГДЕ
   |    ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен";

и ....
6 Ёпрст
 
гуру
03.06.13
11:12
И .. используй пакетный запрос.
7 inmortal203
 
03.06.13
11:22
попробовал создать пакетный запрос, ругается что нет выбранных полей. то есть создается запрос с пустой таблицей без единого поля. естественно связей по полям которых нет тоже не утсановишь
8 wraithik
 
03.06.13
11:23
Товары.Выгрузить() - там колонка товар есть?
9 alexhtn
 
03.06.13
11:23
В соединении таблиц пишешь "ПО Товары.Наименование".
А в тексте ошибки Товары.Номенклатура.
Что-то не сходится.
10 inmortal203
 
03.06.13
11:24
(9)
Попутал... Товары.Наименование всюду
11 inmortal203
 
03.06.13
11:25
но суть не в этом, а в том что сама Товары пуста. То есть ни Номенклатура ни Наименование в ней нет
12 alexhtn
 
03.06.13
11:27
Попробуй писать вместо * имена колонок
"ВЫБРАТЬ Номенклатура
   |ПОМЕСТИТЬ Товары
13 inmortal203
 
03.06.13
11:28
(8)
Я выгружаю всю табличную часть, потом обращаюсь по ее имени, я не прав?
В табличной части 2 поля - Наименование и количество.
14 inmortal203
 
03.06.13
11:29
(12)
Так тоже не катит, пишет "Поле не найдено"
15 Любопытная
 
03.06.13
11:32
(14)обрабатываешь ТЧ чего? Обратись к ней по ссылке в запросе, чего ты ее туда-сюда выгружаешь-загружаешь.
И да - пакетный запрос удобоваримее, имхо
16 ИС-2
 
naïve
03.06.13
11:32
так пробывал?

+ Code
   МВТ = Новый МенеджерВременныхТаблиц;
   Запр=Новый Запрос;
   Запр.МенеджерВременныхТаблиц = МВТ;
   Запр.Текст =
   "ВЫБРАТЬ *
   |ПОМЕСТИТЬ Товары
   |ИЗ &ЗагрузкаЗаказа КАК ЗагрузкаЗаказа";
   Запр.УстановитьПараметр("ЗагрузкаЗаказа",Товары.Выгрузить());
   Запр.Выполнить();
       
  // Запрос = Новый Запрос;
  // Запрос.МенеджерВременныхТаблиц = МВТ;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ЦеныНоменклатурыСрезПоследних.Цена
   |ИЗ
   |    Товары
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
   |        ПО Товары.Наименование = ЦеныНоменклатурыСрезПоследних.Номенклатура
   |ГДЕ
   |    ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен";
17 wraithik
 
03.06.13
11:33
Товары.Наименование замени на Товары.Номенклатура
18 inmortal203
 
03.06.13
11:36
(17)
Именно то! Уже углядел) Спасибо, все работает...
Почему то был уверен что в ТЧ именно Наименование
19 inmortal203
 
03.06.13
11:37
а так изначальный код рабочий...
информация к размышлению тем кто советовал следующее)

// Запрос = Новый Запрос;
// Запрос.МенеджерВременныхТаблиц = МВТ;
20 1Сергей
 
03.06.13
11:38
(19) нафиг тут не упёрся это МВТ. Всё делается одним запросом
21 inmortal203
 
03.06.13
11:40
(20)
Не скажи... Я же говорю что... см. (7)
22 inmortal203
 
03.06.13
11:41
Ну или как вариант написать ручками весь запрос) Конструктор зло...
23 ИС-2
 
naïve
03.06.13
11:43
(19) откуда второй запрос найдет МВТ первого запроса? Переменную запрос фактически обнуляешь.
24 ИС-2
 
naïve
03.06.13
11:44
а хотя понял, в переменной МВТ храниться Товары. Работает, но,имхо, дурной стиль.
25 inmortal203
 
03.06.13
11:49
(24)
Может быть дурной, но как лишний опыт сгодится