Имя: Пароль:
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) нет, видел с ним решения
это тестовое задание, не думал, что оно может включать создание таблицы дат, поэтому создал тему
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn