8.х Можно ли делать запрос по своим виртуальным табличкам?

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем CSCO12103692, 12 окт 2012.

  1. TopicStarter Overlay
    CSCO12103692
    Offline

    CSCO12103692 Опытный в 1С

    Регистрация:
    19 июн 2012
    Сообщения:
    190
    Симпатии:
    0
    Баллы:
    26
    Всем добрый день, подскажите по сабжу пожалуйста.

    Есть, скажем, внешняя обработка. Она там себе шуршит, обрабатывает что-то, и на определенном этапе из разных источников появляются 2 заполненных какими-то данными таблички.

    Хочется показать их содержимое пользователю, предварительно сгруппировав (у них есть одно общее поле, то есть в данном случае там будет join), но открыв конструктор запросов вижу, что там работать можно только с объектами конфигурации.

    Можно ли запросы припахать ко временным таблицам (которые мы в этой обработке сами в начале объявили и затем заполнили), и если да, то как.
    Мне этот момент не ясен :(
  2. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Можно.
    Таблицу надо передать в качестве параметра.
    Кажется, синтаксис такой (проверьте, а то я чет слегка подзабыл))):
    Код:
    Запрос = Новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ
    |  ....
    |ИЗ  &Таблица";
    
    Запрос.УстановитьПараметр("Таблица", ВашаТаблицаЗначений);
  3. TopicStarter Overlay
    CSCO12103692
    Offline

    CSCO12103692 Опытный в 1С

    Регистрация:
    19 июн 2012
    Сообщения:
    190
    Симпатии:
    0
    Баллы:
    26
    Оки, сейчас я допишу одну функцию и затем сразу попробую.
  4. TopicStarter Overlay
    CSCO12103692
    Offline

    CSCO12103692 Опытный в 1С

    Регистрация:
    19 июн 2012
    Сообщения:
    190
    Симпатии:
    0
    Баллы:
    26
    Что-то не взлетает.
    Сделал для чистоты эксперимента новую обработку, там одну табличку с двумя колонками. Говорю выбрать, 1С сперва ругается, что нужно поставить псевдоним:

    {(5, 9)}: Ожидается псевдоним запроса
    &Table1<<?>>

    Потом, есди добавить псевдоним, ругань такая:
    "Содержимое объекта данных может быть выбрано только во временную таблицу"

    Где покрутить?
  5. Annie
    Offline

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    Чтобы продолжить работу с внешней таблицей, надо использовать МенеджерВременныхТаблиц:

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

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.984
    Симпатии:
    398
    Баллы:
    104
    Можно кстати и без этих строк обойтись.
  7. TopicStarter Overlay
    CSCO12103692
    Offline

    CSCO12103692 Опытный в 1С

    Регистрация:
    19 июн 2012
    Сообщения:
    190
    Симпатии:
    0
    Баллы:
    26
    Хоть убейте не взлетает.................................................

    {(3, 3)}: Тип не может быть выбран в запросе


    Стоп ребята, может мы говорим о разных вещах? Я под табличкой понимаю ТаблицуЗначений и с ней у меня проблема.
  8. Annie
    Offline

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    Ну давайте ваш вариант, мне было бы интересно ))

    Ну дак, определите типы для ТЗ.

    Вам нужно ТЗ загнать в запрос, так? :smile:
    Если так, то говорим мы об одном и том же ))
  9. TopicStarter Overlay
    CSCO12103692
    Offline

    CSCO12103692 Опытный в 1С

    Регистрация:
    19 июн 2012
    Сообщения:
    190
    Симпатии:
    0
    Баллы:
    26
    Так, с типами заработало... но ничего не понимаю :))

    Это обязательно нужно делать в 2 запроса? То есть в первом запросе мы помещаем данные во временную таблицу этого самого менеджера? Нелзя ли примо там же её утилизировать без второго запроса?

    То есть выбрать что требуется, поместить в менеджер и показать пользователю?? Или в первом запросе мы можем создать только временные таблицы, но не выбирать, а сама выборка идет во втором?

    Если не трудно, развернутый ответ был бы очень кстати...
  10. Annie
    Offline

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    Надеюсь, правила форума не запрещают мне кинуть ссыль, но вот здесь довольно подробно описано: _http://kb.mista.ru/article.php?id=628
  11. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.984
    Симпатии:
    398
    Баллы:
    104
    Удалите строки которые я выделил в предыдущем сообщении и будет все также как и у Вас.

    Своими словами. Когда в результате источника данных для запроса выступает таблица значений или табличная часть или результат другого запроса (Про это все написано в синтакс-помощнике) , то содержимое может быть выбрано только во временную таблицу. Это все можно организовать в одном запросе. Т.е.
    Код:
    Выбрать
    ЗагруженоИзТЗ.Поле1
    Поместить ВТНовыеДанные
    Из &ЗагруженоСТЗ КАКЗагруженоИзТЗ
    ;
    Выбрать
    ВТНовыеДанные.Поле1
    Из ВТНовыеДанные КАК ВТНовыеДанные
    Запрос.УстановитьПараметры("ЗагруженоСТЗ ", Ваша таблдица значений);
    Запрос.Выпонить();
    
    В этом случае все будет хорошо.
  12. Annie
    Offline

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    nbIpKuH_BaH9I, ок, ваш вариант оптимальнее :smile:
  13. TopicStarter Overlay
    CSCO12103692
    Offline

    CSCO12103692 Опытный в 1С

    Регистрация:
    19 июн 2012
    Сообщения:
    190
    Симпатии:
    0
    Баллы:
    26
    Хорошо, по методу ПыркинаВани тоже работает, и уже довольно симпатишно.

    Кстати о запросах: заметил одну делать в СП. Раньше выполнение всегда делал через выполнить, а затем выгрузить (в 2 строки), а можно оказывается сразу так:
    Код:
    ТзПередано=Запрос.Выполнить().Выгрузить();
    Как говорится мелочь, а приятно.

    зы
    Всем мерси, тему можно пометить как (РЕШЕНО)
  14. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Сколько людей столько и мнений
    Код:
    Функция ПолучитьРезультатЗапроса_Запрос1()
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    | Таблица.Поле1,
    | Таблица.Поле2
    |ПОМЕСТИТЬ ВР_Таблица
    |ИЗ
    | &Таблица КАК Таблица
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    | ВР_Таблица.Поле1,
    | ВР_Таблица.Поле2,
    | РеализацияТоваровУслуг.Контрагент
    |ИЗ
    | ВР_Таблица КАК ВР_Таблица
    |  ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    |  ПО ВР_Таблица.Поле2 = РеализацияТоваровУслуг.Контрагент
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |УНИЧТОЖИТЬ ВР_Таблица";
    Запрос.УстановитьПараметр("Таблица", ПараметрТаблица);
    Результат = Запрос.Выполнить();
    Возврат Результат;
    КонецФункции //ПолучитьРезультатЗапроса_Запрос1
  15. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.984
    Симпатии:
    398
    Баллы:
    104
    Метод Выгрузить() выгружает результат запроса в таблицу значений. А теперь представьте,что у Вас в результате пару миллионов записей. Так что метод выгрузить не всегда такой эффективный как многие думают. Все зависит от ситуации. Удачи!!!

Поделиться этой страницей