Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Не получается отчет

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


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

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

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


Ну и левое соединение можно сделать прямо в СКД, тогда конечно будет запрос в цикле, но не думаю, что особо критично.
   dman54
 
7 - 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.Цифра) <= &ДатаКонца

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

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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
Компьютер — устройство разработанное для ускорения и автоматизации человеческих ошибок.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует