вторник, 9 января 2018 г.

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


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

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

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

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

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

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

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

 2 Использовать менеджер временных таблиц 

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

Комментариев нет:

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

Печать чека ККМ из драйвера ККМ

Суть проблемы: Пробиваем чек из 1С: Бухгалтерии. Чек пробит не  правильно. Теперь нужно сделать чек коррекции. Но в программе это сделать н...