Цены на дату скд

Цены на дату скд

Не в первый раз стакиваюсь с ситуацией, когда в запросе требуется найти остатки не на фиксированную дату (параметр — один на весь отчет), а на произвольную, (когда дата остатков в каждой строке своя). Нашел статью, которая оказалась весьма полезна для меня, жаль что поздно, так как первый вариант пришлось придумать самому.
[spoiler]
Скопипастил с: http://www.kb.mista.ru/article.php?id=92

Получение актуальных данных из регистра сведений на дату, получаемую в самом запросе

Примечание apas:
Для получения остатков регистра накопления в первом варианте используем реальную таблицу регистра накопления и агрегатную функцию сумма(приход-расход) (требуется условие по виду движения)
Второй вариант может быть полезен и в других случаях, когда виртуальная таблица задается только параметром и никак иначе (например виртуальная таблица "критерии отбора")

Существует несколько способов получить нужные данные.

1.Непосредственно в запросе (через реальную таблицу регистра)

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

Вызов СрезПоследних() можно использовать только с передачей в него заранее готового значения даты, на которую требуется получить значения. Поэтому сабж делается через стыковку нескольких запросов —
основной, к нему стыкуется запрос по регистру сведений с условием по дате и поиском записи с маскимальной датой (периодом).

Для общего развития:
Что есть срез последних в платформе?

В зависимости от периодичности регистра (по времени, по позизии регистратора) ВТ разворачивается в следующий запрос:
1. По времени (год, месяц, . секунда)

2. По позиции регистратора
В данном случае нужно еще раз обернуть выборку

Все это можно увидеть посмотрев технологический журнал с включенным режимом протоколирования запросов

Читайте также:  Правая кнопка мыши не открывает контекстное меню

2.Система компоновки данных (передача набора значений одной таблицы в параметр виртуальной таблицы)

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

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

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

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

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

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

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

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

Читайте также:  Комментарии к фото женщине красивые в стихах

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

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

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

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

Иногда требуется запросом получить из периодического регистра сведений данные на несколько дат сразу. Типичный пример — работа с курсами валют. Рассмотрим алгоритм решение данной задачи на примере.

Постановка задачи

В базе создан документ «РеализацияТоваровУслуг», в шапке которого есть реквизит «Валюта». Запросом требуется для каждого документа получить актуальный курс валюты из шапки на дату документа. Хранение курсов валют осуществляется в периодическом регистре сведений « КурсыВалют «.
Решением «в лоб» этой задачи мог бы быть запрос в цикле: получение всех документов с их датами и валютой и в выборке обращение к виртуальной таблице среза последних регистра «КурсыВалют». Но т.к. запрос в цикле — это «плохо», попробуем реализовать задачу одним запросом .

Решение

Для решения задачи будем использовать факт, что таблицы в запросе можно соединять не только на равенство полей.

Порядок действий в запросе:

  1. Получение для каждого документа периода установки курса валюты. Документы соединяются с ФИЗИЧЕСКОЙ таблицей «КурсыВалют». Здесь следует обратить внимание на условия соединения. Валюты должны быть равны, а дата документа >= периоду регистра сведений.
    В результате такого соединения для каждого документа будет получено множество строк, удовлетворяющих условию: все записи курсов по валюте документа, установленные не позже даты документа.
    Завершающим этапом будет группировка строк с получением максимального периода курса. В результате для каждого документа будет получен требуемый период установки курса для нужной валюты (максимальная дата установки курса валюты, но не больше даты документа). Результат помещается во временную таблицу ВТПериодыУстановкиКурсов.
  2. Получение курса. Временная таблица ВТПериодыУстановкиКурсов соединяется с ФИЗИЧЕСКОЙ таблицей «КурсыВалют». Соединение происходит по Валюте документа и периоду установки курса, определенному во второй временной таблице.
Читайте также:  Как найти логин и пароль в компьютере

Остались вопросы?
Спросите в комментариях к статье.

Данная задача может быть решена как с использованием вложенных запросов, так и с помощью. временных таблиц. Попробуем решить задачу, используя временные таблицы. Сначала приведем весь текст запроса, а потом кратко разберем по частям принцип его работы.

Текст запроса:
Код 1C v 8.х
Данный пакетный запрос содержит три подзапроса. Рассмотрим их подробнее.

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

Во втором подзапросе мы соединяем временную таблицу с регистром сведений «ЦеныНоменклатуры» при этом из регистра сведений мы выбираем МАКСИМАЛЬНУЮ дату из меньших или равных дат. Результат этого подзапроса также помещаем во временную таблицу (втМаксПериод). Посмотрим, какие данные попадают в эту таблицу:
Рис. 8 Временная таблица втМаксПериод

В последнем запросе пакета, мы еще раз соединяем временную таблицу с таблицей цен номенклатуры. На этот мы соединяем таблице по номенклатуре и периоду.

Итоговый результат запроса:

Ссылка на основную публикацию
Формула частота в excel
При анализе данных периодически возникает задача подсчитать количество значений, попадающих в заданные интервалы "от и до" (в статистике их называют...
Уравнение плоскости по двум пересекающимся прямым
УСЛОВИЕ: Составить уравнение плоскости, проходящей через две параллельные прямые x-2/3=y+1/2=z-3/-2 x-1/3=y-2/2=z+3/-2 Добавил yelymcheav , просмотры: ☺ 1976 ⌚ 2019-05-14 15:35:56....
Уравнение баланса мощностей формула
При решений электротехнических задач, часто нужно проверить правильность найденных значений. Для этого в науке ТОЭ, существует так называемый баланс мощностей....
Формула тейлора с остатком в форме пеано
Формулировка: Если существует , то представима в следующем виде: Это выражение называется формулой Тейлора с остаточным членом в форме Пеано...
Adblock detector