Имя: Пароль:
1C
 
Отчет с выбором валюты
0 Artificial
 
08.08.16
14:10
Нужно, чтоб отчет пересчитывал сумму в зависимости от выбранной валюты по курсу. Не понимаю, как доделать. Вот что сейчас есть:
ВЫБРАТЬ
    ПриходнаяНакладная.Дата,
    ПриходнаяНакладная.Номер,
    ПриходнаяНакладная.СуммаПоДокументу,
    ПриходнаяНакладная.Валюта,
    ВЫБОР
        КОГДА &Валюта = ПриходнаяНакладная.Валюта
            ТОГДА ПриходнаяНакладная.СуммаПоДокументу
        ИНАЧЕ ПриходнаяНакладная.СуммаПоДокументу * ВложенныйЗапрос.Курс
    КОНЕЦ КАК СуммаИтог
ИЗ
    Документ.ПриходнаяНакладная КАК ПриходнаяНакладная
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            КурсыВалютСрезПоследних.Курс КАК Курс,
            КурсыВалютСрезПоследних.Валюта КАК Валюта
        ИЗ
            РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) КАК КурсыВалютСрезПоследних) КАК ВложенныйЗапрос
        ПО ПриходнаяНакладная.Валюта = ВложенныйЗапрос.Валюта,
    РегистрСведений.КурсыВалют.СрезПоследних(&Период, Валюта = &Валюта) КАК КурсыВалютСрезПоследних
1 Artificial
 
08.08.16
14:24
Ап
2 HardBall
 
08.08.16
14:42
(0) ЕстьNULL, зачем подзапрос?
3 Artificial
 
08.08.16
15:17
(2) ВЫБРАТЬ
    ПриходнаяНакладная.Дата,
    ПриходнаяНакладная.Номер,
    ПриходнаяНакладная.СуммаПоДокументу,
    ПриходнаяНакладная.Валюта,
    ВЫБОР
        КОГДА &Валюта = ПриходнаяНакладная.Валюта
            ТОГДА ПриходнаяНакладная.СуммаПоДокументу
        ИНАЧЕ ПриходнаяНакладная.СуммаПоДокументу * КурсыВалютСрезПоследних.Курс
    КОНЕЦ КАК СуммаИтог
ИЗ
    Документ.ПриходнаяНакладная КАК ПриходнаяНакладная,
    РегистрСведений.КурсыВалют.СрезПоследних(&Период, Валюта = &Валюта) КАК КурсыВалютСрезПоследних

Заменил на вот такое.
4 aleks_default
 
08.08.16
15:34
(3) Подсказываю, ты должен получить два курса валюты. По валюте документа и по валюте выбранной в отчете.
+ нужно определиться на какую дату получать курсы, просто на текущую или на дату каждого документа
5 Джинн
 
08.08.16
15:38
Книга знаний: Срез последних на каждую дату в запросе

Но сама по себе постановка задачи идиотская.
6 aleks_default
 
08.08.16
15:41
(5)Это почему это? Че плохого в том чтобы смотреть суммы отчета в разных валютах?
7 Artificial
 
08.08.16
15:47
(4) Я понимаю. Для этого я и лепил вложенный запрос. Но не срослось. Поможете?
8 Джинн
 
08.08.16
15:51
(6) В том, что это идиотизм. Отчет о сферическом коне в вакууме в грам-градусах-на-рыло.

При зачете аванса какой курс будет в этом отчете? А что такое кросс-курс и валюта триангуляции Вы знаете?
9 Artificial
 
08.08.16
15:52
(8) Не надо усложнять, это, можно сказать, тест.
10 aleks_default
 
08.08.16
15:57
(8)Представьте себе и такие отчеты бывают(это я про сферического коня). При планировании и упр. учете не всегда нужны точные цифры, и возможность оценить суммы в другой валюте тоже нужна.
11 Джинн
 
08.08.16
15:59
(9) Ну если это сферическая в вакууме задача, то в (5) готовое решение.

Где-то у меня еще валялось более красивое решение с точки зрения читабельности и производительности, но сходу не найду.

(10) Чушь. Словом "упр. учет" обычно прикрывается ларечный бред. Исключения есть, но крайне редкие.
12 Nuobu
 
08.08.16
15:59
(9) Так это тестовое задание? А чего ж тогда на форуме спрашиваешь? Если не справляешься, то какой смысл тебя брать на работу? Если тебе тут ответ дадут, то и дальше по любому пустяку будешь сюда глядеть. Если не справился с тестовым заданием, то, может, скилл нужно поднять, а уже потом - снова себя пробовать?
13 Nuobu
 
08.08.16
16:01
А по вопросу: Тебе нужно получить не только курс выбранной валюты, но и курс валюты документа, а так же курс и привести его к выбранной.
14 Artificial
 
08.08.16
16:02
(13) Ну я беру курс с регистра, ставлю ему валюту в условие типа Валюта = &Валюта. А вот как с документа, я понять не могу.
15 Nuobu
 
08.08.16
16:04
(14) Я об этом и говорю. Тебе ссылку дали в (5) читай её и думай.
16 arsik
 
гуру
08.08.16
16:08
(0) Недавно такое делал.
Сначала все пересчитываешь в рубли а потом делишь все на курс нужной тебе валюты.

(втЦены.Цена * втКурсы.Курс / &КурсПересчета)
17 arsik
 
гуру
08.08.16
16:11
Вот примерно так
ВЫБРАТЬ
    КурсыВалютСрезПоследних.Валюта КАК Валюта,
    ВЫБОР
        КОГДА КурсыВалютСрезПоследних.Курс * КурсыВалютСрезПоследних.Кратность > 0
            ТОГДА КурсыВалютСрезПоследних.Курс * КурсыВалютСрезПоследних.Кратность
        ИНАЧЕ 1
    КОНЕЦ КАК Курс
ПОМЕСТИТЬ втКурсы
ИЗ
    РегистрСведений.КурсыВалют.СрезПоследних(&ДатаСреза, Валюта <> ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) КАК КурсыВалютСрезПоследних

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка),
    1

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПриходнаяНакладная.Дата,
    ПриходнаяНакладная.Номер,
    ПриходнаяНакладная.СуммаПоДокументу,
    ПриходнаяНакладная.Валюта,
    ПриходнаяНакладная.СуммаПоДокументу * втКурсы.Курс / &КурсПересчета КАК СуммаИтог
ИЗ
    ВРемТаб КАК ПриходнаяНакладная,
    втКурсы КАК втКурсы
18 arsik
 
гуру
08.08.16
16:14
Ошибка. Вот так правильно

ВЫБРАТЬ
    КурсыВалютСрезПоследних.Валюта КАК Валюта,
    ВЫБОР
        КОГДА КурсыВалютСрезПоследних.Курс * КурсыВалютСрезПоследних.Кратность > 0
            ТОГДА КурсыВалютСрезПоследних.Курс * КурсыВалютСрезПоследних.Кратность
        ИНАЧЕ 1
    КОНЕЦ КАК Курс
ПОМЕСТИТЬ втКурсы
ИЗ
    РегистрСведений.КурсыВалют.СрезПоследних(&ДатаСреза, Валюта <> ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) КАК КурсыВалютСрезПоследних

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка),
    1

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПриходнаяНакладная.Дата,
    ПриходнаяНакладная.Номер,
    ПриходнаяНакладная.СуммаПоДокументу,
    ПриходнаяНакладная.Валюта,
    ПриходнаяНакладная.СуммаПоДокументу * втКурсы.Курс / &КурсПересчета КАК Поле1
ИЗ
    &ВРемТаб КАК ПриходнаяНакладная
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ втКурсы КАК втКурсы
        ПО ПриходнаяНакладная.Валюта = втКурсы.Валюта
19 arsik
 
гуру
08.08.16
16:15
&ВРемТаб КАК ПриходнаяНакладная - это заглушка, я через конструктор делал. У меня нет в базе документа ПриходнаяНакладная
20 Artificial
 
08.08.16
16:22
(19) &КурсПересчета а это что такое?
21 Artificial
 
08.08.16
16:30
(19) Я его убрал. Получилась одна колонка в валюте документа, а одна в рублях. А как по произвольной валюте?
22 arsik
 
гуру
08.08.16
16:31
(21) КурсПересчета - это рублевый курс валюты в которой тебе нужно посчитат отчет
23 Artificial
 
08.08.16
16:33
(22) Как получить?
24 arsik
 
гуру
08.08.16
16:37
Ну мне было проще заранее получить и параметром в запрос передать. Но можно и внутри запроса. Примерно вот так

ВЫБРАТЬ
    КурсыВалютСрезПоследних.Валюта КАК Валюта,
    ВЫБОР
        КОГДА КурсыВалютСрезПоследних.Курс * КурсыВалютСрезПоследних.Кратность > 0
            ТОГДА КурсыВалютСрезПоследних.Курс * КурсыВалютСрезПоследних.Кратность
        ИНАЧЕ 1
    КОНЕЦ КАК Курс
ПОМЕСТИТЬ втКурсы
ИЗ
    РегистрСведений.КурсыВалют.СрезПоследних(&ДатаСреза, Валюта <> ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) КАК КурсыВалютСрезПоследних

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка),
    1

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПриходнаяНакладная.Дата,
    ПриходнаяНакладная.Номер,
    ПриходнаяНакладная.СуммаПоДокументу,
    ПриходнаяНакладная.Валюта,
    ПриходнаяНакладная.СуммаПоДокументу * втКурсы.Курс / втКурсы1.Курс КАК Поле1
ИЗ
    &ВРемТаб КАК ПриходнаяНакладная
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ втКурсы КАК втКурсы
        ПО ПриходнаяНакладная.Валюта = втКурсы.Валюта
            И (втКурсы1.Валюта = &Валюта),
    втКурсы КАК втКурсы1
25 Nuobu
 
08.08.16
16:40
(24) Где ты работаешь?
26 arsik
 
гуру
08.08.16
16:44
(25) Что ты будешь делать с этими знаниями?
27 Artificial
 
08.08.16
16:46
(24) Ругается странно: Поле не найдено втКурсы1.Валюта
28 arsik
 
гуру
08.08.16
16:49
(27) Временная таблица с курсами то у тебя есть в запросе?
29 Artificial
 
08.08.16
16:51
(28) втКурсы есть, конечно.
30 Джинн
 
08.08.16
16:58
Ептыть, бегом в магазин за метлой! Если не хватило знаний великого и могучего, чтобы прочесть (5)
31 Artificial
 
08.08.16
17:01
(30) Прочел и сделал по образцу, не вышло.
32 Джинн
 
08.08.16
17:18
(31) Но там же готовый пример. Только вместо ЗаказПокупателя ваш документ поставить и еще одной валюты курс получить к той, что уже в документе.
33 Джинн
 
08.08.16
17:19
И забудьте про СрезПоследних вообще на фиг применительно к этой задаче. Вам самому нужно этот "срез" делать на каждую дату.
34 Nuobu
 
08.08.16
17:19
(26) Ну, мне само название не нужно, просто франч, или фикси?
35 arsik
 
гуру
08.08.16
17:21
(29) Короче. Вот так правильно. Конструктор глючит

ВЫБРАТЬ
    КурсыВалютСрезПоследних.Валюта КАК Валюта,
    ВЫБОР
        КОГДА КурсыВалютСрезПоследних.Курс * КурсыВалютСрезПоследних.Кратность > 0
            ТОГДА КурсыВалютСрезПоследних.Курс * КурсыВалютСрезПоследних.Кратность
        ИНАЧЕ 1
    КОНЕЦ КАК Курс
ПОМЕСТИТЬ втКурсы
ИЗ
    РегистрСведений.КурсыВалют.СрезПоследних(&ДатаСреза, Валюта <> ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) КАК КурсыВалютСрезПоследних

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка),
    1

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПриходнаяНакладная.Дата,
    ПриходнаяНакладная.Номер,
    ПриходнаяНакладная.СуммаПоДокументу,
    ПриходнаяНакладная.Валюта,
    ПриходнаяНакладная.СуммаПоДокументу * втКурсы.Курс / втКурсы1.Курс КАК Поле1
ИЗ
    &ВРемТаб КАК ПриходнаяНакладная
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ втКурсы КАК втКурсы
        ПО ПриходнаяНакладная.Валюта = втКурсы.Валюта
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ втКурсы КАК втКурсы1
        ПО (втКурсы1.Валюта = &Валюта)
36 arsik
 
гуру
08.08.16
17:22
(34) Фикси
37 Nuobu
 
08.08.16
17:24
(36) Аа, тогда ясно. Почему не сделать, как в (5) описано?
38 arsik
 
гуру
08.08.16
17:34
(37) Можно и так сделать. Но неохота на (0) время тратить. Ну и моя реальная задача ни как с логикой (0) не связана.
39 Artificial
 
08.08.16
17:39
(35) Большое спасибо, arsik! Сейчас изучу.
40 Джинн
 
08.08.16
17:50
(35) И что тут правильного? Какая в жпо "ДатаСреза"?
41 Nuobu
 
08.08.16
17:54
(40) Зачем ты сюда встряёшь? Они уже друг другу всё объяснили. Работодатель не влетит на фигового специалиста, Артифишуал будет еще учиться и станет нормальным прогом, а арсик потешит своё самолюбие.
42 aleks_default
 
08.08.16
17:58
(40)Нервные клетки не восстанавливаются, или восстанавливаются но оооочень медленно.
Повтори эту фразу 10 раз и успокойся.
43 Джинн
 
08.08.16
17:58
(41) Ну дык горбатого же к стене лепят! Курс то разный на каждую дату документа. Вот на каждую дату документа и необходимо эмулировать "срез последних".
44 Nuobu
 
08.08.16
17:59
(43) Это и так ясно всем, кроме ТСа.
45 aleks_default
 
08.08.16
18:00
А им ненадо на дату каждого документа, им надо "на сичас".
46 Джинн
 
08.08.16
18:19
(45) Все старые документы пересчитать на другую валюту по сегодняшнему курсу? В чем смысл?
47 hhhh
 
08.08.16
19:35
(46) если остаток на складе, то имеет смысл.
Программист всегда исправляет последнюю ошибку.