Имя: Пароль:
1C
1С v8
Валюта на каждую дату документа
0 asder117
 
05.08.22
15:37
Знакомый проходит тестирование "Построить Отчет который выводит продажи по дням с указанием: даты продажи, суммы продажи в рублях, суммы продажи в валюте, выбранной пользователем в шапке отчета." Валюта в документе не предусмотрена, делать надо на СКД
Я ему предложил вариант такой
ВЫБРАТЬ
    ПоступлениеТоваровУслуг.Ссылка КАК Ссылка,
    ПоступлениеТоваровУслуг.Дата КАК Дата,
    ЕСТЬNULL(КурсыВалют.Курс,0) КАК Курс
ИЗ
    Документ.ОказаниеУслуги КАК ПоступлениеТоваровУслуг
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
        ПО (КурсыВалют.Период В
                (ВЫБРАТЬ ПЕРВЫЕ 1
                    КурсыВалют.Период
                ИЗ
                    РегистрСведений.КурсыВалют КАК КурсыВалют
                ГДЕ
                     КурсыВалют.Период <= ПоступлениеТоваровУслуг.Дата
                УПОРЯДОЧИТЬ ПО
                    КурсыВалют.Период УБЫВ))
ГДЕ
КурсыВалют.Валюта = &Валюта    
Но если Валюту поменять (у которой нет курсов) записей не будет вообще (ну по идее так и должно быть) а они хоят чтобы ничего не сломалась и также если ввезти валюту только с одним курсов то выводится только 2 записи хотя по моему так должен быть последний срез..подскажите может кто делал таковую задачу..честно вроде с опытом а голову сломал
1 1Сергей
 
05.08.22
15:42
Сделать временную таблицу, куда побросать все курсы на даты + одной строкой добавить рупь с курсом 1
2 mikecool
 
05.08.22
15:44
(0) не помогай знакомому, ему потом работать
3 mikecool
 
05.08.22
15:45
+2 особенно если не знаешь как
4 mikecool
 
05.08.22
15:59
1) условие на валюту - в соединение
2) нужен еще регламентный календарь, если хотят по всем датам
5 6awkup_true
 
05.08.22
16:00
(1) курс получать во вложенном запросе по каждому документу еще можно
6 vde69
 
05.08.22
16:11
за прямой запрос к документу - сразу двойку...

кто мешает обращаться к регистрам проведения этого документа?
7 Lexandr
 
05.08.22
16:12
Данные о продаже из документов? А не подвох ли это?
8 asder117
 
05.08.22
16:33
(7) Таковая задача)) Я сам знаю что надо из регистра продажи и связать с курсами временной таблицы (6)
9 vde69
 
05.08.22
16:36
(8) я за запрос из (0) при любой постановке задачи поставлю "минус", да и за "Такова задача" (за бездумное исполнение не верных ТЗ) то же поставлю "минус".

В результате ты постами (0) и (8) у меня полностью провалил-бы экзамен.
10 asder117
 
05.08.22
16:38
(1) Это тоже я вариант подсказал сделать...но опять же если на дату документа курс не установлен значит должен браться срез последних
11 asder117
 
05.08.22
16:40
(9) Ъто запрос кстати взят из Срез последних на каждую дату в СКД и в запросе который внесен был в книгу знаний)) и это не ТЗ а задача на проверке на вшивость а про 8 почему нельзя продажи с курсами связать
12 asder117
 
06.08.22
00:32
(9) Сам такой придумал
ВЫБРАТЬ
    ПродажиОбороты.Период КАК Дата,
    СУММА(ПродажиОбороты.ВыручкаОборот) КАК СуммаПродаж
ПОМЕСТИТЬ ДокументыПродаж
ИЗ
    РегистрНакопления.Продажи.Обороты(, , ДЕНЬ, ) КАК ПродажиОбороты

СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Период

ИНДЕКСИРОВАТЬ ПО
    Дата
;

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТМаксПериод.Дата КАК Дата,
    ВТМаксПериод.СуммаПродаж КАК СуммаПродаж,
    КурсыВалют.Курс КАК Курс
ИЗ
    ВТМаксПериод КАК ВТМаксПериод
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
        ПО ВТМаксПериод.Период = КурсыВалют.Период
ГДЕ
    КурсыВалют.Валюта = &Валюта
АВТОУПОРЯДОЧИВАНИЕ
Все отрабатывает как надо. А как сделать если к примеру валюта заведена а курсов не заели..хотят чтобы просто сумма выходила..хотя как ни крути но один курс задать придется..
13 asder117
 
06.08.22
20:52
(12) если к примеру задали валюту на которую нет курса к примеру, следовательно виртуальная таблица курсов и дат курсовбудет пустая. Как можно в запросе проверит на пустоту виртуальную таблицу и присвоить к примеру курсу значение 1. Спасибо
14 RomanYS
 
06.08.22
21:42
(13) ЕстьNull(рег.курс, 1) как курс
15 asder117
 
06.08.22
23:38
(14) пробовал блин не работает...хотя натолкнул на мысль..спс