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