Имя: Пароль:
1C
1C 7.7
v7: Выборка из временной таблицы прямой запрос
, ,
0 art_id
 
05.04.13
09:42
Есть простенький запрос.

"|SET NOCOUNT ON
|
|SELECT
|    $СпецификацияСтроки.Элемент [Элемент $Справочник.Номенклатура],
|    SUM($СпецификацияСтроки.Норма) Норма
|INTO #ТаблицаСпецификаций
|FROM $ДокументСтроки.Спецификация AS СпецификацияСтроки With (NOLOCK)
|WHERE ($СпецификацияСтроки.ВидЭлемента = :ВидЭлементаПолуфабрикат)
|    AND (СпецификацияСтроки.IDDOC IN (Select Val FROM #СписокСпецификаций))
|GROUP BY
|    $СпецификацияСтроки.Элемент
|
|SET NOCOUNT OFF
|
|Select T.Элемент From #ТаблицаСпецификаций AS T";

Выдает ошибку
Недопустимое имя столбца "Элемент"

Если выбрать все поля из ВТ, то все ок. Подскажите ЧЯДНТ?
1 ДенисЧ
 
05.04.13
09:44
А зачем ты приводишь тип при выгрузке в временную таблицу?
2 art_id
 
05.04.13
09:46
(1)Со старого осталось запроса. Но даже без приведения типа ошибку выдает
3 viktor_vv
 
05.04.13
09:49
Надо перед выполнением уничтожать временную таблицу, если она есть.
4 viktor_vv
 
05.04.13
09:50
На самом деле у тебя ошибка при записи во временную таблицу. Но показывается только последняя.
5 art_id
 
05.04.13
09:50
(3)Пробовал, не помогает.
Причем в инете найти не могу где пример выборки есть из ВТ
6 art_id
 
05.04.13
09:51
(4)какая ошибка? как ее поймать?
7 viktor_vv
 
05.04.13
09:52
Ну тогда попробуй отдельным запросом во временную, через Выполнить(), а другим уже выгребай оттуда.
8 Ёпрст
 
05.04.13
09:53
(0) выкини типизация
9 Ёпрст
 
05.04.13
09:53
тиризацию
10 МихаилМ
 
05.04.13
09:54
(0)
вот и посмотрите, как у Вам в ВТ поля называютя.
очевидно, что полей с осмысленными названиями быть не должно, тк имена полей создщаютя  

$ДокументСтроки
11 art_id
 
05.04.13
09:58
Спасибо всем. Убрал типизацию. Первый запрос через Выполнить() поместил, вторым выбрал. Получилось.
12 viktor_vv
 
05.04.13
09:58
(6) См (7) насчет отдельного запроса.

Рез = глЗапросСКЛ.Выполнить(ТекстЗапросаВремТаб);

Если Рез = 0 Тогда
  Сообщить(глЗапросСКЛ.GetLastError());
КонецЕсли ;
13 art_id
 
05.04.13
09:59
Но почему не работает в одном запросе?
14 Ёпрст
 
05.04.13
10:02
(13) go
15 art_id
 
05.04.13
10:09
(14)т.е. в начале запроса необходимо GO?
16 viktor_vv
 
05.04.13
10:16
(15) Да оно вроде и без go работает. Сейчас сделал простенький запрос подобный (0), все в одном работает нормально.
17 art_id
 
05.04.13
10:18
(16)хм, странно. Может из-за версии компоненты?
18 viktor_vv
 
05.04.13
10:20
См (10).

|SET NOCOUNT OFF
|
|Select * From #ТаблицаСпецификаций AS T";

И смотри в ТЗ имена столбцов.

Или через отладка(1) получи текст запроса и загони в QA.
Попробуй еще имя дать не Элемент, а другое какое-то.
19 art_id
 
05.04.13
10:23
(18)вот именно что если делать через Select * FROM ...
То потом выдает ТЗ с нормальными именами. Сейчас попробовал через GO
ТекстЗапроса = "
   |GO
   |DROP TABLE #ТаблицаСпецификаций
   |
   |SET NOCOUNT ON
   |
   |SELECT
   |    $СпецификацияСтроки.Элемент Элемент,
   |    SUM($СпецификацияСтроки.Норма) Норма
   |INTO #ТаблицаСпецификаций
   |FROM $ДокументСтроки.Спецификация AS СпецификацияСтроки With (NOLOCK)
   |WHERE ($СпецификацияСтроки.ВидЭлемента = :ВидЭлементаПолуфабрикат)
   |    AND (СпецификацияСтроки.IDDOC IN (Select Val FROM #СписокСпецификаций))
   |GROUP BY
   |    $СпецификацияСтроки.Элемент
   |
   |SET NOCOUNT OFF
   |select T.Элемент [Элемент $Справочник] FROm #ТаблицаСпецификаций AS T";

Выдала ошибку
Связанная инструкция не подготовлена
20 МихаилМ
 
05.04.13
10:25
(19)
go - это шутка
21 Ёпрст
 
05.04.13
10:26
(20) :) догадливый..

ЗЫ: на самом деле всё просто  - ВыполнитьИнструкцию  возвращает результат только первого запроса, хотя и обрабатывает их все.
22 art_id
 
05.04.13
10:26
(20)понятно
23 Ёпрст
 
05.04.13
10:28
т.е если запрос содержит несколько  конструкций (запросов), результат будет  только от первой конструкции (но все запросы всё равно выполнятся)..это еще в доке было написано (вроде).
24 МихаилМ
 
05.04.13
10:28
+(21)
это относится к odbc
в ole db - наоборот
25 Ёпрст
 
05.04.13
10:30
поэтому, тебе и надо 2 раза выполнять - один для создания таблички, второй для выборки.
Ну и что нить типа этого воткнуть еще не мешает:

|if object_id(N'tempdb..#ТаблицаСпецификаций') is not null
|drop table #ТаблицаСпецификаций

перед пиханием во временную табличку
26 Ёпрст
 
05.04.13
10:31
(24) ага, там результат последнего возвращает.
27 art_id
 
05.04.13
10:32
(23)ну либо я в доке не увидел, либо дока какая-то другая у меня. Если есть ссылочка на документацию, поделись пжл.
(25)А не прокатит через Выполнить(), а затем ПолучитьРезультатыВ_ТЗ()?
if object_id(N'tempdb..#ТаблицаСпецификаций') is not null
Это я так понимаю что если ВТ существует, то удаляем. Где про это прочитать можно?
28 Ёпрст
 
05.04.13
10:48
29 Ёпрст
 
05.04.13
10:51
30 ADirks
 
05.04.13
10:54
И Set NoCount ON   д.б. _первой_ конструкцией в запросе! На рефлексе.

а то, в результате, к примеру

|delete from #ТаблицаСпецификаций
|SET NOCOUNT ON

получишь несколько неожиданный результат
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой