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