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

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

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

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

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

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

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

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

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

 

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

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