Версия для печати темы (https://pro1c.org.ua/index.php?s=cd751b1c1e5581525b7febe89a5a3eb8&showtopic=6418)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Система компоновки данных _ Срез последних на каждую дату в запросе

Автор: Vofka 19.02.12, 22:06

Данный способ подходит для отчетов. Из очевидных плюсов - если курс (или другие данные) не нужны для построения отчета, то СКД не будет их получать. Однако быстродействие такого отчета может оказаться и несколько ниже, чем в первом способе.

Для примера сделаем отчет - список заказов покупателей.

Для этого создадим набор данных "Документы" - запрос:

ВЫБРАТЬ
    ЗаказПокупателя.Ссылка КАК ЗаказПокупателя,
    ЗаказПокупателя.Дата КАК Дата,
    ЗаказПокупателя.ВалютаДокумента КАК ВалютаДокумента,
    ЗаказПокупателя.СуммаДокумента КАК СуммаДокумента
{ВЫБРАТЬ
    ЗаказПокупателя.*,
    Дата,
    ВалютаДокумента.*,
    СуммаДокумента}
ИЗ
    Документ.ЗаказПокупателя КАК ЗаказПокупателя
{ГДЕ
    ЗаказПокупателя.Ссылка.* КАК ЗаказПокупателя,
    ЗаказПокупателя.СуммаДокумента}


Для того, чтобы потом успешно свзать наборы данных, в запрос необходимо включить поля "Дата" и "ВалютаДокумента". Чтобы они не появлялись в списке доступных полей, если это необходимо, их можно убрать, установив флажки ограничений в таблице "Поля" схемы компоновки. В остальном запрос вряд ли требует комментариев.



Для того, чтобы получить информацию о курсах валют, добавим второй набор данных-запрос, "Курсы валют":

ВЫБРАТЬ
    &Дата КАК Дата,
    КурсыВалютСрезПоследних.Валюта КАК Валюта,
    КурсыВалютСрезПоследних.Курс КАК Курс,
    КурсыВалютСрезПоследних.Кратность КАК Кратность
{ВЫБРАТЬ
    Дата,
    Валюта.*,
    Курс,
    Кратность}
ИЗ
    РегистрСведений.КурсыВалют.СрезПоследних(&Дата, Валюта = &Валюта) КАК КурсыВалютСрезПоследних
{ГДЕ
    КурсыВалютСрезПоследних.Курс,
    КурсыВалютСрезПоследних.Кратность}


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



Перейдем к соединению наборов. На странице "Связи наборов данных" добавим 2 связи:
1. Источник связи - набор "Документы", приемник - набор "Курсы валют". Выражение источник - "Дата", выражение приемник - "Дата", Параметр - "Дата"
2. Источник связи - набор "Документы", приемник - набор "Курсы валют". Выражение источник - "ВалютаДокумента", выражение приемник - "Валюта", Параметр - "Валюта"



Главное здесь - параметры связи. При соединении наборов данных, если указан параметр, СКД передает в подчиненный набор (в нашем случае - запрос "Курсы валют") параметры, указанные в соединении. Значениями параметров будут значения соответствующих полей набора-источника.

Перейдем к вычисляемым полям. Добавим вычисляемое поле "СуммаВВалютеУпрУчета". Выражение поля - "СуммаДокумента * Курс / Кратность".



Также укажем поля "СуммаДокумента" и "СуммаВВалютеУпрУчета" как ресурсы



Настроим отчет.
Добавим одну группировку "Детальные записи", в выбранных полях укажем "ЗаказПолкупателя", "Курс" и "Кратность". Добавим ресурсы "СуммаДокумента" и "СуммаВВалютеУпрУчета"



Можно формировать отчет



http://pro1c.org.ua/index.php?showtopic=6419
http://pro1c.org.ua/index.php?showtopic=6416

http://pro1c.org.ua/index.php?showtopic=6418

http://pro1c.org.ua/redirect.php?http://www.kb.mista.ru/article.php?id=92

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua