Имя: Пароль:
1C
1С v8
Не получается отчет
,
0 dman54
 
28.12.18
10:00
Есть кто поможет по запросу\скд: есть независимый регистр сведений КурсыВалют (период-день, валюта, курс), нужно вывести отчет курс валют со всеми датами в заданном промежутке (дата1, дата2), причем если на тек.дату нет курса, выводится последний известный
есть конфа, наработки отчета

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВсеВалюты.Валюта КАК Валюта,
    КурсыВалют.Курс КАК Курс,
    КурсыВалют.Период КАК Период
ИЗ
    ВсеВалюты КАК ВсеВалюты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
        ПО ВсеВалюты.Валюта = КурсыВалют.Валюта  
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних() КАК КурсыВалютСрезПоследних
        ПО ВсеВалюты.Валюта = КурсыВалютСрезПоследних.Валюта
1 Beduin
 
28.12.18
10:02
Стандартная задачка про курсы валют на дату документа. У Радченко все расписано
2 dman54
 
28.12.18
10:04
Находил похожие решения для дат из документов. Тут нет документов, в базе только справочник и регистрСведений
3 Beduin
 
28.12.18
10:07
(2) Ну и привязывай левым соединением табличку по валютам ограниченную заданным интервалом
4 IOANNscrp
 
28.12.18
10:11
(3) Проблему услышали? нужно вывести курс валют на каждый день ограниченный интервалом, каких-то дней может и не быть, а нужно вывести.
5 Beduin
 
28.12.18
10:12
(4) Нужна табличка с датами. Без нее не получится.
6 Eiffil123
 
28.12.18
10:45
нужно сначала получить все даты, например от рождества Тутанхамона, до 4000 года (это делается через ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВСЕ... и тд).
Потом фильтр по этим датам, чтобы они были в диапазоне.


Ну и левое соединение можно сделать прямо в СКД, тогда конечно будет запрос в цикле, но не думаю, что особо критично.
7 dman54
 
28.12.18
11:24
Всем спасибо, пришлось использовать таблицу дат

ВЫБРАТЬ
    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.Цифра) <= &ДатаКонца

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

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ТабДней.День КАК Дата,
    КурсыВалютСрезПоследних.Валюта КАК Валюта
ИЗ
    ТабДней КАК ТабДней,
    РегистрСведений.КурсыВалют.СрезПоследних(&ДатаКонца, ) КАК КурсыВалютСрезПоследних;
8 Eiffil123
 
28.12.18
12:47
(7) Твой запрос покажет курс только на дату &ЛатаКонца, но подход к получению списка дат правильный.
9 dman54
 
28.12.18
13:02
(8) да, потом соединение через скд сделал к срезу последних с параметром дата, таких примеров уже много было (типа как получить срез последних на каждую дату http://catalog.mista.ru/public/77568/) Спасибо:) работает полностью как надо
10 КонецЕсли
 
28.12.18
13:18
(0) регистрсведений.РегламентированныйПроизводственныйКалендарь  есть в конфигурации?
11 dman54
 
30.12.18
07:33
(10) нет, видел с ним решения
это тестовое задание, не думал, что оно может включать создание таблицы дат, поэтому создал тему
Независимо от того, куда вы едете — это в гору и против ветра!