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

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

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

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

saleksvik

1. Создаем 1-ый набор данных "ТаблицаСДатами" с типом "Запрос". Текст запроса:
ВЫБРАТЬ
   ДОБАВИТЬКДАТЕ(&Дата1, ДЕНЬ, Таблица1.а * 1000 + Таблица2.а * 100 + Таблица3.а * 10 + Таблица4.а) КАК ПериодКурса
ИЗ
   (ВЫБРАТЬ
      0 КАК а ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ
      6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК Таблица1,
   (ВЫБРАТЬ
      0 КАК а ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ
      6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК Таблица2,
   (ВЫБРАТЬ
      0 КАК а ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ
      6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК Таблица3,
   (ВЫБРАТЬ
      0 КАК а ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ
      6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК Таблица4
ГДЕ
   Таблица1.а * 1000 + Таблица2.а * 100 + Таблица3.а * 10 + Таблица4.а < РАЗНОСТЬДАТ(&Дата1, &Дата2, ДЕНЬ)
2. Создаем 2-ой набор данных "КурсыВалют" с типом "Запрос". Текст запроса:
ВЫБРАТЬ
   &ДатаПериода,
   КурсыВалютСрезПоследних.Валюта,
   КурсыВалютСрезПоследних.Курс,
   КурсыВалютСрезПоследних.Кратность
ИЗ
   РегистрСведений.КурсыВалют.СрезПоследних(&ДатаПериода, ) КАК КурсыВалютСрезПоследних

3. Связываем эти наборы данных. Параметр &ДатаПериода используем для связи этих наборов данных:
- ИсточникСвязи - ТаблицаСДатами; - ПриемникСвязи - КурсыВалют; - ВыражениеИсточник - ПериодКурса; - ВыражениеПриемник - ДатаПериода; - Параметр - ДатаПериода

В каждом из наборов данных использовали по одному запросу.
Во вложении пример отчета для конфигурации "Управление торговлей, ред.11"

Opera

объединение. 2 запроса

adamx

Для того чтобы получить дополнительный разворот по всем датам, необходимо указать поле "Все" в качестве значения параметра "ГруппировкиДляЗначенийГруппировок" метода "Выбрать".
Это если использовать запрос.
В СКД  создается 2 источника данных типа Запрос. В одном формируются  даты  на которые  необходимо  получить курс, во втором сами регистры  из  которых получаем значения курса,  дату  получения остатков ставим & Период , еще выбираем такое поле & Период .
Затем в связях наборов данных  СКД  связываем данные ТаблицаДат и НаборДанных, поле связи  Период  и параметр  Период .
Этот параметр передается в  таблицу  курсов  из   таблицы   дат  и получаем курсы валют на  все   даты, сформированные  в  таблице дат .

Boulala

В источниках данных будет 2 набора данных:
1. Это таблица с датами на каждый день периода (либо запрос к регл. календарю, либо в набор данных - объект передать таблицу дат)
2. Обращение к виртуальной таблице КурсВалют.СрезПоследних
ВЫБРАТЬ
&Период КАК Период,
КурсыВалютСрезПоследних.Курс
ИЗ
РегистрСведений.КурсыВалют.СрезПоследних(&Период, Валюта = &Валюта) КАК КурсыВалютСрезПоследних


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

crs

Для этого нужно использовать механизм дополнения периодов. Будет 2 запроса

Cyber_mouse

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

1Chelpk

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

TimonChD

Можно выполнить одним запросом в CRL^
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(&Дата1, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК ДатаЗ
ПОМЕСТИТЬ СписокДат
ИЗ
(ВЫБРАТЬ
0 КАК a

ОБЪЕДИНИТЬ

ВЫБРАТЬ
1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
3

ОБЪЕДИНИТЬ

ВЫБРАТЬ
4

ОБЪЕДИНИТЬ

ВЫБРАТЬ
5

ОБЪЕДИНИТЬ

ВЫБРАТЬ
6

ОБЪЕДИНИТЬ

ВЫБРАТЬ
7

ОБЪЕДИНИТЬ

ВЫБРАТЬ
8

ОБЪЕДИНИТЬ

ВЫБРАТЬ
9) КАК aa
ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
0 КАК b

ОБЪЕДИНИТЬ

ВЫБРАТЬ
1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
3

ОБЪЕДИНИТЬ

ВЫБРАТЬ
4

ОБЪЕДИНИТЬ

ВЫБРАТЬ
5

ОБЪЕДИНИТЬ

ВЫБРАТЬ
6

ОБЪЕДИНИТЬ

ВЫБРАТЬ
7

ОБЪЕДИНИТЬ

ВЫБРАТЬ
8

ОБЪЕДИНИТЬ

ВЫБРАТЬ
9) КАК bb
ПО (ИСТИНА)
ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
0 КАК c

ОБЪЕДИНИТЬ

ВЫБРАТЬ
1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
3

ОБЪЕДИНИТЬ

ВЫБРАТЬ
4

ОБЪЕДИНИТЬ

ВЫБРАТЬ
5

ОБЪЕДИНИТЬ

ВЫБРАТЬ
6

ОБЪЕДИНИТЬ

ВЫБРАТЬ
7

ОБЪЕДИНИТЬ

ВЫБРАТЬ
8

ОБЪЕДИНИТЬ

ВЫБРАТЬ
9) КАК cc
ПО (ИСТИНА)
ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
0 КАК d

ОБЪЕДИНИТЬ

ВЫБРАТЬ
1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
3

ОБЪЕДИНИТЬ

ВЫБРАТЬ
4

ОБЪЕДИНИТЬ

ВЫБРАТЬ
5

ОБЪЕДИНИТЬ

ВЫБРАТЬ
6

ОБЪЕДИНИТЬ

ВЫБРАТЬ
7

ОБЪЕДИНИТЬ

ВЫБРАТЬ
8

ОБЪЕДИНИТЬ

ВЫБРАТЬ
9) КАК dd
ПО (ИСТИНА)
ГДЕ
aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&Дата1, &Дата2, ДЕНЬ)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЕСТЬNULL(КурсыВалют.Период, КурсыПоследние.Период) КАК Период,
ЕСТЬNULL(КурсыВалют.Валюта, КурсыПоследние.Валюта) КАК Валюта,
ЕСТЬNULL(КурсыВалют.Курс, КурсыПоследние.Курс) КАК Курс
ПОМЕСТИТЬ КурсыВалют
ИЗ
(ВЫБРАТЬ
КурсыВалютСрезПоследних.Период КАК Период,
КурсыВалютСрезПоследних.Валюта КАК Валюта,
КурсыВалютСрезПоследних.Курс КАК Курс
ИЗ
РегистрСведений.КурсыВалют.СрезПоследних(&Дата1, ) КАК КурсыВалютСрезПоследних) КАК КурсыПоследние
ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
КурсыВалют.Период КАК Период,
КурсыВалют.Валюта КАК Валюта,
КурсыВалют.Курс КАК Курс
ИЗ
РегистрСведений.КурсыВалют КАК КурсыВалют
ГДЕ
КурсыВалют.Период МЕЖДУ &Дата1 И &Дата2) КАК КурсыВалют
ПО КурсыПоследние.Период = КурсыВалют.Период
И КурсыПоследние.Валюта = КурсыВалют.Валюта

ИНДЕКСИРОВАТЬ ПО
Период,
Валюта
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
СписокДат.ДатаЗ,
Валюты.Ссылка
ПОМЕСТИТЬ МассивВалют
ИЗ
СписокДат КАК СписокДат,
(ВЫБРАТЬ
Валюты.Ссылка КАК Ссылка
ИЗ
Справочник.Валюты КАК Валюты) КАК Валюты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
МассивВалют.ДатаЗ КАК ДатаЗ,
МассивВалют.Ссылка КАК Ссылка,
МАКСИМУМ(ДатаКурса.Период) КАК Период
ПОМЕСТИТЬ МассивВалютСДатами
ИЗ
МассивВалют КАК МассивВалют
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
КурсыВалют.Период КАК Период,
КурсыВалют.Валюта КАК Валюта,
КурсыВалют.Курс КАК Курс
ИЗ
КурсыВалют КАК КурсыВалют) КАК ДатаКурса
ПО МассивВалют.ДатаЗ >= ДатаКурса.Период
И МассивВалют.Ссылка = ДатаКурса.Валюта

СГРУППИРОВАТЬ ПО
МассивВалют.ДатаЗ,
МассивВалют.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
МассивВалютСДатами.ДатаЗ,
МассивВалютСДатами.Ссылка,
ВложенныйЗапрос.Курс
ИЗ
МассивВалютСДатами КАК МассивВалютСДатами
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
КурсыВалют.Период КАК Период,
КурсыВалют.Валюта КАК Валюта,
КурсыВалют.Курс КАК Курс
ИЗ
КурсыВалют КАК КурсыВалют) КАК ВложенныйЗапрос
ПО МассивВалютСДатами.Ссылка = ВложенныйЗапрос.Валюта
И МассивВалютСДатами.Период = ВложенныйЗапрос.Период

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

Поиск