Как передать в запрос таблицу значений
Перейти к содержимому

Как передать в запрос таблицу значений

  • автор:

Как передать в запрос таблицу значений

Всем здрям, нужна помощь. Для двух полей динамического списка есть необходимость брать данные из заданной программно таблицы значений. Пытаюсь:
ВЫБРАТЬ
.
ТаблицаДляЗапроса.Значение1 КАК Значение1,
ТаблицаДляЗапроса.Значение2 КАК Значение2
ИЗ
.
ЛЕВОЕ СОЕДИНЕНИЕ &ПараметрТаблицаЗначений КАК ТаблицаДляЗапроса
ПО ОсновнаяТаблица.Поле = ТаблицаДляЗапроса.Поле

Ругается на ПараметрТаблицаЗначений:
Ошибка при выполнении запроса.
по причине:
<(84, 20)>: Ожидается имя таблицы
ЛЕВОЕ СОЕДИНЕНИЕ >&ПараметрТаблицаЗначений КАК ТаблицаДляЗапроса

Как правильно передать в запрос таблицу? Сейчас передаю через
ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(Список,»ПараметрТаблицаЗначений»,ТаблицаДляЗапроса//ТЗ которую в коде задал ранее//,Истина);

Передача таблицы значений в запрос

  • Передача таблицы значений в запрос. В качестве внешнего источника могут выступать: Таблица значений, Табличная часть, Результат запроса.

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

    3 3 0 0 2 Скопировано.
    4 года назад

    Недостаточно рейтинга для добавления отрицательного голоса. Шаблон будет скрыт из ваших результатов поиска.

    Шаблоны кода 1С

    Секреты TurboConf

    TurboConf ИР

    Нейросети и AI

    Лайфхаки 1С

    Бубен админа

    1С не всерьез

    Комментарии

    JomInG
    #1, 15 июля 2020 22:36

    Разве не будет ошибки, что колонки таблицы не типизированные?

    2 2 Ответить
    reborn85
    #2, 15 июля 2020 22:48

    (1) JomInG, будет ошибка, но прямо тут где то рядом есть отличная функционая автоматической типизации подготовленных данных для передачи в запрос, в общем случае работает нормально она

    Таблица значений как источник данных в запросе 1С

    Не очень часто, но приходится делать запросы к таблице значений в 1С. При этом нужно учитывать несколько нюансов.

    Во-первых, в таблице значений, являющейся источником данных для запроса, колонки должны быть типизированы.

    ТаблицаОплат = новый ТаблицаЗначений ;
    ТаблицаОплат . Колонки . Добавить ( «Дата» , Новый ОписаниеТипов ( «Дата» .
    Новый Квалификаторыдаты ( ЧастиДаты . Дата ) ) ) ;
    ТаблицаОплат . Колонки . Добавить ( «Договор» , Новый ОписаниеТипов ( «ДокументСсылка.ДоговорЗайма» ) ) ;
    ТаблицаОплат . Колонки . Добавить ( «Сумма» , Новый ОписаниеТипов ( «Число» .
    Новый КвалификаторыЧисла ( 15 , 2 ) ) ) ;

    Подробнее вопрос типизации колонок рассмотрим в следующей статье, посвященной работе с таблицами значений.

    Во-вторых, таблица значений передается в запрос как обычный параметр. Имена выбираемых полей соответствуют именам колонок таблицы. Но запрос придется писать вручную, конструктор запроса в данном случае не поможет.

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

    В-третьих, результат выполнения запроса к таблице значений нельзя использовать сразу. Его нужно поместить во временную таблицу, сделать запрос к ней и только потом делать выборку из результата. Это можно реализовать двумя способами:

      Создать пакетный запрос.

    запрос = новый запрос ;
    запрос . Текст = «ВЫБРАТЬ
    | Оплаты.Дата,
    | Оплаты.ДоговорЗайма,
    | Оплаты.Сумма КАК ОПЛАТА,
    | Оплаты.Просрочка
    |ПОМЕСТИТЬ Оплаты
    |ИЗ
    | &ТаблицаОплат КАК Оплаты
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    | Оплаты.Дата КАК Дата,
    | Оплаты.ДоговорЗайма КАК ДоговорЗайма,
    | Оплаты.ОПЛАТА КАК ОПЛАТА,
    | Оплаты.Просрочка КАК Просрочка
    |ИЗ
    | Оплаты КАК Оплаты» ;

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

    Раздел: Программирование Статьи по 1С Метки: язык запросов 1С

    Добавить комментарий Отменить ответ

    Теперь мы в соцсетях! Подписывайтесь, чтобы получать информацию о последних обновлениях или задать вопрос.

    Как в запросе, в качестве источника данных, использовать таблицу значений?

    Если при использовании в запросе таблицы значений, возникает ошибка: «Тип не может быть выбран в запросе», то нужно явно указать Тип значения колонок ТЗ!
    Т.е. если мы используем таблицу значений, так же в свою очередь выгруженную из результата запроса или из табличной части документа например — то такой проблемы не возникает, т.к. в таком случае колонки будут типизированными. А если мы сами создаем таблицу значений, то нужно явно указать тип для каждой колонки:
    Код 1C v 8.х

     ТЗ = Новый ТаблицаЗначений; 
    ТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));

    Аренда 1С в облаке

    Запрос к Таблице Значений

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *