Имя: Пароль:
1C
1С v8
Хелп с запросом в временной таблице. Реализация "*" - звездочки
,
0 Кокос
 
18.04.13
14:40
Хочу получить через запрос строки ТЗ в виде ТЗ по фильтру. Ну то есть из ТЗ выделить ТЗ по отбору.
НайтиСТроки грузит в массив а не в тз. Попробовал через менеджер ВТ. но почемуто на выходе получается только одна строка с одной колонкой "Количество"


Запрос = Новый Запрос;
       МенеджерВТ = Новый МенеджерВременныхТаблиц;
       Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
       Запрос.Текст = "ВЫБРАТЬ *
                 |ПОМЕСТИТЬ ВТДанные
                 |ИЗ
                 |    &Данные КАК Таб ГДЕ Таб.НомерДокументаМакономи = &ТекущийНомер";
       Запрос.УстановитьПараметр("Данные",ТаблицаСтрок);
       Запрос.УстановитьПараметр("ТекущийНомер",СписокНомеровДокументов[СчетчикЦикла].Значение);
1 zak555
 
18.04.13
14:41
тз откуда взял ?
2 Рэйв
 
18.04.13
14:41
я тож пробовал так..Не летает..Только поименно поля брать придется
3 GROOVY
 
18.04.13
14:42
ВЫБРАТЬ *
                 |ПОМЕСТИТЬ ВТДанные
                 |ИЗ
                 |    &Данные КАК Таб ГДЕ Таб.НомерДокументаМакономи = &ТекущийНомер
;
ВЫБРАТЬ * ИЗ ВТДанные
4 Рэйв
 
18.04.13
14:42
потом уже из ВТ можно по звездочке
5 acsent
 
18.04.13
14:42
см. Скопировать()
6 1Сергей
 
18.04.13
14:42
(3) +1
7 GROOVY
 
18.04.13
14:42
Предложение ПОМЕСТИТЬ лишь создает ВТ, в результат запроса при этом выводится единственное поле содержащее количество строк помещенных в ВТ
8 GROOVY
 
18.04.13
14:43
Так что нужно вторым запросом выбрать данные из ВТ.
9 Кокос
 
18.04.13
14:44
понял. Всем спасибо. (5) тоже. чет я не посмотрел.
10 Кокос
 
18.04.13
14:51
(3) заработало :)

Вопрос!

Что быстрее? (3) или (5) ?
11 Паланик
 
18.04.13
15:00
(10) Замерь сам, и нам расскажешь)
12 GROOVY
 
18.04.13
15:01
(10) От ТЗ зависит. При большой ТЗ запрос быстрее будет.
13 GANR
 
18.04.13
15:04
А вот так лучше стало?

Запрос = Новый Запрос;
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.Текст =
"ВЫБРАТЬ
|    *
|ПОМЕСТИТЬ ВТДанные
|ИЗ
|    &Данные КАК Таб
|;                  
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    *
|ИЗ
|    ВТДанные КАК ВТДанные
|ГДЕ
|    ВТДанные.НомерДокументаМакономи = &НомерДокументаМакономи";

Запрос.УстановитьПараметр("Данные",ТаблицаСтрок);
Запрос.УстановитьПараметр("ТекущийНомер",СписокНомеровДокументов[СчетчикЦикла].Значение);
14 ДенисЧ
 
18.04.13
15:08
(13)
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;

Это можешь смело убрать.
15 GANR
 
18.04.13
15:12
(14) (3) учтем

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
|    *
|ПОМЕСТИТЬ ВТДанные
|ИЗ
|    &Данные КАК Таб
|ГДЕ
|    ВТДанные.НомерДокументаМакономи = &НомерДокументаМакономи
|;                  
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    *
|ИЗ
|    ВТДанные КАК ВТДанные";

Запрос.УстановитьПараметр("Данные",ТаблицаСтрок);
Запрос.УстановитьПараметр("ТекущийНомер",СписокНомеровДокументов[СчетчикЦикла].Значение);
16 ДенисЧ
 
18.04.13
15:14
(15) Повторяю. Не нужен тебе в данном случаем Менеджер временных таблиц
17 Кокос
 
18.04.13
15:20
(12) ТЗ большое.. тогда оставлю запрос.
18 acsent
 
18.04.13
15:21
(13) не уж то 1с так плохо делает тэйбл скан???
19 acsent
 
18.04.13
15:21
(17) если многократный поиск, то добавь индекс
20 GANR
 
18.04.13
15:34
(16) А ну менеджер это так - "Чтоб не думать" :).
21 Кокос
 
19.04.13
16:17
(1) по ADO из оракла
22 Кокос
 
30.04.13
21:05
Народ! А дайте кто нибудьл пример соединения в запросе по справочнику с внешней таблицей.
ну чтот типа

"ВЫБРАТЬ
|    *
|ПОМЕСТИТЬ ВТДанные
|ИЗ
|    &Данные КАК Таб
|;                  
|///////////
|ВЫБРАТЬ
|    Договоры.Ссылка
|ИЗ Справочник.Договоры .ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|   ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ * ВТДанные КАК ВТДанные) ГДЕ ДоговорыКонтрагентов.Владелец.ВнешнийКод = ВТДанные.ВнешнийКод";
23 Nikosss
 
30.04.13
22:06
(22) Попробуй для ТаблицыЗначений для колонки задать Тип, хотя бы пару колонок и проверить.
ТЗ = Новый ТаблицаЗначений();
ТЗ.Колонки.Добавить("Контрагент",Новый ОписаниеТипов("СправочникСсылка.Контрагенты");
Для ВТ обязательно надо задать тип, вот только когда через ADODB получал данные, вроде описывать конкретно тип не надо было, но проверить стоит ))
24 Кокос
 
30.04.13
22:51
(23) имеешь ввиду для колонки по которому я собираюсь делать объединение?  ну там все строчное. единственное что можно сделать это зафиксировать ширину. а так запрос корректен?
25 zladenuw
 
30.04.13
22:56
26 Кокос
 
04.05.13
10:38
(25) класс. спс за ссылку. ато так и не нашелбы как мне поля временной таблицы объявить... конструктор их не видел...
27 mistеr
 
04.05.13
11:01
(26) Значит от звездочки все-таки отказался? Наконец-то.
28 Кокос
 
04.05.13
11:13
(27) еще выдает ошибки. сейчас доотлажу и выведу конечный вариант. :)
29 Кокос
 
04.05.13
11:38
&НаСервере
Процедура ЗагрузитьКодыМакономиНаСервере4(Параметры)
   Если Параметры = Неопределено Тогда
       возврат;
   КонецЕсли;
   Данные = ПолучитьИзВременногоХранилища(Параметры).ТаблицаКодовМакономи;  
   Если Данные.Количество() = 0 Тогда
       Возврат;
   КонецЕсли;
   ТаблицаКодовМакономи = Новый ТаблицаЗначений;
   ТаблицаКодовМакономи.Колонки.Очистить();
   ТаблицаКодовМакономи.Колонки.Добавить("ВнешнийКод",Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100)));
   ТаблицаКодовМакономи.Колонки.Добавить("КодМакономи",Новый ОписаниеТипов("Строка"));
   Кол = Данные.Количество();
   Для Сч = 0 По Кол - 1 Цикл
       НоваяСТрока = ТаблицаКодовМакономи.Добавить();
       НоваяСтрока.ВнешнийКод = Данные[Сч].Значение.ВнешнийКод;
       НоваяСтрока.КодМакономи = Данные[Сч].Значение.КодМакономи;
   КонецЦикла;    
   Запрос = Новый Запрос;
   МенеджерВТ = Новый МенеджерВременныхТаблиц;
   Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    *
   |ПОМЕСТИТЬ ТаблицаКодов
   |ИЗ
   |    &Данные КАК Таб
   |;                  
   |////////////////////////////////////////////////////////////////////////////////
   |";
   ЗАпрос.УстановитьПараметр("Данные",ТаблицаКодовМакономи);
   Запрос.Выполнить();
   Запрос.Текст =
   "ВЫБРАТЬ
   |    Договоры.Ссылка,
   |    Договоры.Ссылка.Владелец.ВнешнийКод КАК КодВладельца,
   |    ТаблицаКодов.ВнешнийКод КАК КодВнешний,
   |    ТаблицаКодов.КодМакономи
   |ИЗ
   |    Справочник.ДоговорыКонтрагентов КАК Договоры
   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаКодов КАК ТаблицаКодов
   |        ПО Договоры.Владелец.ВнешнийКод = ТаблицаКодов.ВнешнийКод
   |ГДЕ
   |    Договоры.КодМакономи = """"";
   
   ТД = Запрос.Выполнить().Выгрузить();
   НачатьТранзакцию();
   Для Каждого ВыборкаДоговоры из ТД Цикл
       оДок = ВыборкаДоговоры.ссылка.ПолучитьОбъект();
       оДок.КодМакономи = ВыборкаДоговоры.КодМакономи;
       оДок.Записать();
   КонецЦикла;
  ЗафиксироватьТранзакцию();
 
КонецПроцедуры
30 Кокос
 
04.05.13
11:39
ну и сделал в конструкторе запросов как в (25)
31 hhhh
 
04.05.13
11:44
(29) а зачем менеджер временных таблиц?

нормально напиши

  Запрос = Новый Запрос;
 ЗАпрос.УстановитьПараметр("Данные",ТаблицаКодовМакономи);
 Запрос.Текст =
   "ВЫБРАТЬ
   |    *
   |ПОМЕСТИТЬ ТаблицаКодов
   |ИЗ
   |    &Данные КАК Таб
   |;                  
   |ВЫБРАТЬ
   |    Договоры.Ссылка,
   |    Договоры.Ссылка.Владелец.ВнешнийКод КАК КодВладельца,
   |    ТаблицаКодов.ВнешнийКод КАК КодВнешний,
   |    ТаблицаКодов.КодМакономи
   |ИЗ
   |    Справочник.ДоговорыКонтрагентов КАК Договоры
   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаКодов КАК ТаблицаКодов
   |        ПО Договоры.Владелец.ВнешнийКод = ТаблицаКодов.ВнешнийКод
   |ГДЕ
   |    Договоры.КодМакономи = """"";
   
   ТД = Запрос.Выполнить().Выгрузить();
32 Кокос
 
04.05.13
11:45
(31) а он тогда на Договоры.Владелец.ВнешнийКод = ТаблицаКодов.ВнешнийКод будет ругаться. типа таких полей нет
33 Кокос
 
04.05.13
11:45
а вообще сейчас попробую. но вроде ругался. просто уже два часа отлаживал :)
34 hhhh
 
04.05.13
11:48
(32) не будет ругаться. И можно покороче

Договоры.Владелец.ВнешнийКод КАК КодВладельца
Ошибка? Это не ошибка, это системная функция.