Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 12:22

Четверг. Вопрос 8

Автор mixqn, 14 мар 2013, 00:42

0 Пользователей и 1 гость просматривают эту тему.

mixqn

Вопрос от технического руководителя проектов офиса «ДелаемПроекты.рф» компании «Первый БИТ» Королева Алексея. Взят с проекта «Световые технологии».

Задан некий период. Необходимо в СКД сформировать таблицу со всеми датами из этого периода и значением курса на каждую из дат. Какой механизм необходимо для этого использовать? Какое количество запросов будет в источниках данных СКД?



Предыдущий вопрос Следующий вопрос

evgeny.s

количество запросов в источниках данных - 2
основной момент для таких задач правильно указать параметры в связях наборов данных.
Если указан параметр,то  СКД передает в приемник связи параметры, указанные в соединении.
в качестве значений, переданных параметров будут выступать значения соответствующих полей источника связи.

soft

Сначала - нужно получить все даты периода. Если есть регистр типа Производстенного календаря - берем из него (во всех типовых в принципе есть). Если нету - придется формировать этот запрос программно.
Далее получаем на каждую дату период последней записи регистра сведений (не среза последних, а берем саму таблицу регистра)
Далее присоединяем регистр к таблице, полученной на шаге 2 по периоду.
ТЕ - 2 вирт таблицы/1 запрос-выборка

AQR

ВЫБРАТЬ
   0 КАК Цифра
ПОМЕСТИТЬ ТабЦифр

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   3

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   4

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   5

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   6

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   7

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   8

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   9
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ДОБАВИТЬКДАТЕ(&ДатаНачала, ДЕНЬ, ТабЦифр1.Цифра + 10 * ТабЦифр2.Цифра + 100 * ТабЦифр3.Цифра + 1000 * ТабЦифр4.Цифра) КАК День
ПОМЕСТИТЬ ТабДней
ИЗ
   ТабЦифр КАК ТабЦифр1,
   ТабЦифр КАК ТабЦифр2,
   ТабЦифр КАК ТабЦифр3,
   ТабЦифр КАК ТабЦифр4
ГДЕ
   ДОБАВИТЬКДАТЕ(&ДатаНачала, ДЕНЬ, ТабЦифр1.Цифра + 10 * ТабЦифр2.Цифра + 100 * ТабЦифр3.Цифра + 1000 * ТабЦифр4.Цифра) <= &ДатаКонца

ИНДЕКСИРОВАТЬ ПО
   День
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ТабДней.День,
   КурсыВалют.Курс
ИЗ
   ТабДней КАК ТабДней
      ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
      ПО (НАЧАЛОПЕРИОДА(ТабДней.День, ДЕНЬ) = НАЧАЛОПЕРИОДА(КурсыВалют.Период, ДЕНЬ))
ГДЕ
   КурсыВалют.Валюта = &Валюта

info_pvm

на СКД можно так
- сформировать програмно таблицу с датами периода и в СКД передать как внешний источник данных
- и каждую дату из этой таблицы в СКД передавать как параметр в СрезПоследних в РС с информацией о курсах валют.

savichevae

Реализовать можно с помощью связанных наборов данных, будет 2 запроса

Alex_k

Будет 2 источника данных.
В 1 список нужных периодов.
Во второй получаем срез последних значения курса.
При их объединении нужно будет указать свойство период как параметр в колонке "параметр". Переданный параметр, в этом случае, передастся как параметр "период" для среза последних.

IrinaO

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

mzelensky

Вопрос от технического руководителя проектов офиса «ДелаемПроекты.рф» компании «Первый БИТ» Королева Алексея. Взят с проекта «Световые технологии».

Задан некий период. Необходимо в СКД сформировать таблицу со всеми датами из этого периода и значением курса на каждую из дат. Какой механизм необходимо для этого использовать? Какое количество запросов будет в источниках данных СКД?

Первый набор данных - тут выбираем то, что нам требуется, например, заказ покупателя. Главное чтобы в выбираемых полях были реквизиты "Дата" и "Валюта".

Второй набор данных типа "Запрос":

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

Далее соединяем эти наборы данных. Параметры второго запроса "&Дата" и "&Валюта" необходимы для соединения с первым набором данных. Настваиваем источники связей для параметров "Дата" и "Валюта" для того, чтобы из первого (основного) набора данных эти параметры были переданы во второй (подчиненный) набор данных

SlazZy

На мой взгляд несколько странная формулировка вопроса :) если прямо следовать тому, что написано, то надо просто выбирать данные за определенный период из физической таблицы регистра сведений.
Если же имеется в виду, что в выборку должны попасть ВСЕ даты из заданного периода, даже если по ним нету записей, то надо сделать группировку по полю "Период" с дополнением день, тогда в выборке будут все даты за заданный период.

Теги:
Рейтинг@Mail.ru

Поиск