Имя: Пароль:
1C
1С v8
Непонятная конструкция в запросе
0 jamesgold
 
06.08.15
22:31
Добрый день, прошу помочь!

Помогите понять конструкцию в запросе, добавляется следующее поле:

Запрос.Текст = Запрос.Текст +
                    "    ВЫРАЗИТЬ(ЕСТЬNULL(ПервоначальнаяСтоимостьОС.СуммаОстатокДт, 0) - ЕСТЬNULL(ВЫБОР КОГДА СписокОС.ПорядокПогашенияСтоимости = ЗНАЧЕНИЕ(Перечисление.ПорядокПогашенияСтоимостиОС.НачислениеИзноса) ТОГДА АмортизацияОС.СуммаОстатокДт ИНАЧЕ АмортизацияОС.СуммаОстатокКт КОНЕЦ, 0) КАК ЧИСЛО(15, 2)) КАК ОстаточнаяСтоимость
                    |";

Может кто-нибудь прокоментировать?
1 Asmody
 
06.08.15
22:33
Что конкретно непонятно? Все слова известные.
2 jsmith82
 
06.08.15
22:33
форматнул бы как-нибудь

ВЫРАЗИТЬ
(
ЕСТЬNULL(ПервоначальнаяСтоимостьОС.СуммаОстатокДт, 0)
-
ЕСТЬNULL(
    ВЫБОР
        КОГДА СписокОС.ПорядокПогашенияСтоимости = ЗНАЧЕНИЕ(Перечисление.ПорядокПогашенияСтоимостиОС.НачислениеИзноса) ТОГДА АмортизацияОС.СуммаОстатокДт             ИНАЧЕ АмортизацияОС.СуммаОстатокКт
    КОНЕЦ, 0) КАК ЧИСЛО(15, 2)
) КАК ОстаточнаяСтоимость
3 jsmith82
 
06.08.15
22:34
ну да, всё тут понятно, чо уж
4 jamesgold
 
06.08.15
22:36
Согласен, так нагляднее)
5 jamesgold
 
06.08.15
22:36
Спасибо!!!
6 Asmody
 
06.08.15
22:38
ЕСТЬNULL() возвращает первый аргумент, если он не NULL, иначе - второй аргумент.
Конструкция ВЫБОР ТОГДА ИНАЧЕ КОНЕЦ  эквивалентна тернарному оператору ?(,,).
ВЫРАЗИТЬ() - это приведение типа
7 rsv
 
06.08.15
23:36
(0)  аnsi  sql 92 . Cse там описан.
8 rsv
 
06.08.15
23:37
Т.е. Сase
9 rsv
 
06.08.15
23:44
Выразить он же сильно  обрезанный Cast  и так далее
10 jsmith82
 
06.08.15
23:47
(7)(8)(9) а он tsql, думаешь, знает?
11 rsv
 
06.08.15
23:50
(10)  стандарт ANSI держат все субд .  Case  должны уж точно все держать