Странности case

Приемы и подходы, обмен опытом

Модераторы: Screw, larin

Ответить
stix
заказчик
Сообщения: 95
Зарегистрирован: Чт, 25/09/2008 07:45
Имя Фамилия: Марат Ахметзянов
Откуда: ОАО "Северо-Западные Магистральные Нефтепроводы"

Странности case

Сообщение stix »

Решил заюзать функцию case (не оператор case of end;). Возникли вопросы:
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
     ));
по сути левая часть это поле DocTypeName - из него можно вывести тип, но компилятор обламывается. Думаю баг
Gera
топ-софт
Сообщения: 97
Зарегистрирован: Пн, 24/09/2007 17:53
Имя Фамилия: Юрий Герман
Откуда: ТопСофт
Контактная информация:

Сообщение Gera »

Ответ конечно не по теме, но наименование документа надо брать из таблицы KatDoc.
stix
заказчик
Сообщения: 95
Зарегистрирован: Чт, 25/09/2008 07:45
Имя Фамилия: Марат Ахметзянов
Откуда: ОАО "Северо-Западные Магистральные Нефтепроводы"

Сообщение stix »

Юрий Герман
Спасибо! Актуально, воспользуюсь! Но вопрос в силе
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Сообщение cruger »

а что такое "функция"? где это определено?

в чём смысл писания case(), если есть case?

насчёт некорректной работы обратитесь в техподдержку
stix
заказчик
Сообщения: 95
Зарегистрирован: Чт, 25/09/2008 07:45
Имя Фамилия: Марат Ахметзянов
Откуда: ОАО "Северо-Западные Магистральные Нефтепроводы"

Сообщение stix »

Фёдор Терсин
в тексте выше я все подробно расписал. Даже пример привел, где не работает Сase(). Запустите его у себя, получите ошибку, если уж мне не верите. Для чего мне обращаться в ТП, если они все равно к вам перенаправят запрос. Замкнутый круг.

Здесь определение функции http://ru.wikipedia.org/wiki/%D0%A4%D1% ... %B8%D0%B5)

читаем
функция возвращает значение, а её вызов может использоваться в программе как выражение.
в моем примере функция Case не работает, т.е. не выступает в роли выражения, определяющего значение поля записи таблицы. Все отсылки к оператору case от лукавого, вопрос не в этом, не подменяйте понятия!
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Сообщение cruger »

это не замкнутый круг, а реально работающий способ локализации проблемы, регистрации и исправления ошибки

погодите, разве то, что написано в википедии - стандарт, который неукоснительно надо соблюдать и из которого нет исключений?

про оператор я имел в виду отдельное использование, без присваивания
в чём необходимость такого использования?
stix
заказчик
Сообщения: 95
Зарегистрирован: Чт, 25/09/2008 07:45
Имя Фамилия: Марат Ахметзянов
Откуда: ОАО "Северо-Западные Магистральные Нефтепроводы"

Сообщение stix »

Проблема локализована, есть тест, который не отрабатывает должным образом. К чему эта бюрократия, да мне проще забить и переписать код по-другому, только проблему то это не решит. Ладно, хотел как лучше
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Сообщение cruger »

я и говорю, как лучше - через техподдержку открыть инцидент
а иначе на каком основании человек, который должен работать по нескольким инцидентам и перспективным планам, отложит это всё, и будет разбираться с тем, что на форуме прочитал? придёт к нему начальник, спросит:
- что у нас с такой-то критичной проблемой, которая на контроле у руководства?
а он ответит:
- забил я на неё, разбираюсь с тем, что на форуме прочитал...
как-то не вяжется такая картина с нормальной организацией работ, не находите?
stix
заказчик
Сообщения: 95
Зарегистрирован: Чт, 25/09/2008 07:45
Имя Фамилия: Марат Ахметзянов
Откуда: ОАО "Северо-Западные Магистральные Нефтепроводы"

Сообщение stix »

Фёдор Терсин
Ну я так думаю у вас есть внутренняя система регистрации инцидентов и багов. Занесите туда проблему, будет официальная регистрация, ведь вам, наверное, это проще сделать, да и быстрее

Со своей стороны я зарегистрирую инцидент на supportru
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Сообщение cruger »

не забудьте сослаться на форум. для того, что б там, не разобравшись, не мусолили проблему сами долго, не пытались её решить как-то своими силами, а сразу после первичной локализации эскалировали разработчикам
stix
заказчик
Сообщения: 95
Зарегистрирован: Чт, 25/09/2008 07:45
Имя Фамилия: Марат Ахметзянов
Откуда: ОАО "Северо-Западные Магистральные Нефтепроводы"

Сообщение stix »

Фёдор Терсин
o'k, т.е. форум все-таки играет положительную роль ;-)
vadim
топ-софт
Сообщения: 197
Зарегистрирован: Чт, 06/09/2007 17:38
Имя Фамилия: Вадим Володько
Откуда: ТопСофт
Контактная информация:

Сообщение vadim »

Уважаемый Марат!
Форум конечно играет роль, но никоим образом не призван подменять собой техподдержку или локализацию ею проблем (с вашим участием, возможно).
Об этом однозначно было указано в условиях, которые Вы приняли, регистрируясь на этом форуме. Не так ли? Предлагаю в своих сообщениях придерживаться правил.
Ответить