1) Я так понимаю это и не функция вовсе, в привычном понимании этого слова. Поскольку сам я описать нечто подобное точно не смогу через vip. Мне кажется, эта конструкция (так будет правильней) поддерживается непосредственно компилятором (то же касается и функции If()). Если да, то в документации явно есть неточности (см. ниже)
2) Эту функцию нельзя использовать без присваивания в левой части (иначе компилятор просто не может вывести тип выражения), почему такое поведение не описать в документации? Сейчас компилятор выдает неинформативную ошибку, что-то про нехватку ')'
т.е. написать в доке, что можно так
aa := Case(...);
но нельзя просто
Case(...);
3) Следующий код вообще не компилится, хотя все требования для работы псевдофункции Сase соблюдены:
Код: Выделить всё
insert into tblLocal (NRec, DogovorNRec, Number, Summa, DDoc, DocTypeName)
     select
       KatSopr.NRec,
       dogovorNRec,
       KatSopr.NSopr,
       KatSopr.Summa,
       KatSopr.DSopr,
       Case(KatSopr.VidSopr; 111 : 'Акт на услуги', 101  : 'Приходная накладная'; '')
     from
       KatSopr
     where
     ((
       dogovorNRec == KatSopr.CDogovor
     ));