Страница 1 из 1

использование CASE в create view

Добавлено: 12 апр 2010, 14:25
kukurechka
Добрый день!
Стоит задача создать vip-интерфейс.
При компиляции вылетает следующая ошибка:
Ожидалась «)» (стр.20, поз.1) when T$BASEDOC.f$tipmoney=1 then ‘руб’
У меня возникают сомнению по поводу правильности написания вьюхи... можно ли использовать такую конструкцию CASE?
interface_filter.vih

Код: Выделить всё

vipInterface interface_filter;

	public:
		dataStream NaProdstream;
end;
report_DO_filter.vip

Код: Выделить всё

#define ComponentVersion
#component "L_BASEDOC"
#include interface_filter.vih
interface interface_filter;
   const
   CmPrintdoc = 3440;
   end;

create view NaProd
as select distinct
T$BASEDOC.f$viddoc,--ўЁ¤ ¤®Єг¬Ґ­в 
T$BASEDOC.f$nodoc,--ь ¤®Ј®ў®а 
T$BASEDOC.f$name,--ЇаЁ¬Ґз ­ЁҐ
T$BASEDOC.f$ddoc,--¤ в 
T$BASEDOC.f$total,-- б㬬 
T$BASEDOC.f$descr,--¤ҐбЄаЁЇв®а
T$BASEDOC.f$cval,--ббл«Є  ­  nrec klval 
VAL =
case 
when T$BASEDOC.f$tipmoney = 1 then 'агЎ'
when T$BASEDOC.f$tipmoney = 2 then '¤®«'
when T$BASEDOC.f$tipmoney = 3 then 'Ґўа®'
else 'not fix'
end,
--T$KLVAL.f$simvol, ---ў «ов 
T$BASEDOC.f$corg, -- ббл«Є  ­  nrec Katorg
T$KATORG.f$name --Ё¬п ®аЈ ­Ё§ жЁЁ
from T$BASEDOC,T$KATORG,T$KLVAL 
where ((T$BASEDOC.f$viddoc == 201 and T$BASEDOC.f$corg == T$KATORG.f$nrec))
;
   screen NaProdscreen;
   buttons CmPrintdoc;
   <<
     <.ЇҐз вм.>
   >>
   end;
datastream NaProdstream
  (
	[User] UserName;
    table NaProd 
    (
       [Ndoc] T$BASEDOC.f$nodoc;
       [date] T$BASEDOC.f$ddoc; 
       [descr] T$BASEDOC.f$descr;
       [nameorg] T$KATORG.f$name;
       [summa] T$BASEDOC.f$total;
       [val] VAL;
       [note] T$BASEDOC.f$name;      
    );
  )

  handleevent table NaProd 
    cmOnProcess:
      if (not NextVisual)
        BreakProcess;
  end;

  handleevent
    cmPreProcess:
      StartNewVisual(vtRotateVisual, vfTimer + vfBreak + vfConfirm, 'Формируется отчет', 0);

    cmPostProcess:
      StopVisual('', 0);
  end;
 end;
  handleevent
    cmPrintdoc:
       RunFReport(NaProdstream,'', false);
  end;
End.

Добавлено: 12 апр 2010, 14:37
Vik
В таком виде оператор CASE можно использовать разве что в прямом SQL. Вы можете использовать функцию case:

Код: Выделить всё

...
,Поле1
...
case (BASEDOC.tipmoney;
        1 : 'агЎ' 
        2 : '¤®«' 
        3 : 'Ґўа®' ;
      'not fix' )            (fieldname = VAL)
,....
,ПолеN
Ну или функцию if () используйте.

Добавлено: 12 апр 2010, 17:44
kukurechka
Спасибо, Vik! с оператором CASE совладали.
Пытаюсь скомпилировать вылетате следующее сообщение:
таблица T$BASEDOC отсутствует в словаре :(

Добавлено: 12 апр 2010, 18:08
Den
в словаре галактики названия таблиц хранятся без t$

Добавлено: 13 апр 2010, 04:47
LaaLaa
а поля без f$

Добавлено: 13 апр 2010, 13:14
kukurechka
Благодарю, все получилось :grin: