Приколы компилятора

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Приколы компилятора

Сообщение Алексей »

объясните, почему если написать

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

_loop specmtr
{
     if (getfirst katnazna=tsOK) AND (katnazna.nazcode <> '63') then continue;
     message(katsopr.nsopr+' '+katnazna.nazcode);
}
то выводятся ВСЕ документы с любым кодом назначения

а если написать

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

_loop specmtr
{
     if (getfirst katnazna=tsOK) AND (katnazna.nazcode = '63') then 
     {
       message(katsopr.nsopr+' '+katnazna.nazcode);
     }
}
то в сообщения выводятся только документы с типом назначения 63

почему не отрабатывает оператор не равно? самое интересное, если вывести в сообщение булевское значение katnazna.nazcode <>'63', то он выдает верные значения!

подцепка до katnazna такая

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

...
and specmtr.cspec    /== spsopr.nrec
and spsopr.csopr     /== katsopr.nrec
and katsopr.cnazna    == katnazna.nrec
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Re: Приколы компилятора

Сообщение Masygreen »

getfirst katnazna=tsOK лишнее
Время ведет!
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Приколы компилятора

Сообщение Алексей »

да и без него тоже самое! я уже голову сломал, всяко разно пробовал. и isValid таблицы проверял и getfirst

само условие я так понял работает верно... а вот continue почему то не хочет...
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Приколы компилятора

Сообщение m0p3e »

Двоякая ситуация. Одним махом проверяем и позиционирование на запись и значение в ней. Что будет выполнено первым? :)
Если все-таки вот так?

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

_loop specmtr
{
  if getfirst katnazna <> tsOK
     continue;
  if katnazna.nazcode <> '63'
     continue;
  message(katsopr.nsopr+' '+katnazna.nazcode);
}
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Приколы компилятора

Сообщение Den »

Masygreen верно заметил насчет того что getfirst katnazna в данном случае вообще лишнее, с учетом того какой кусок VIEW Вы привели тут
katnazna подцеплена по уникальному ключу так что данные для подцепленной таблицы доставятся в том же запросе, что и данные корневого узла.
Т.е. фактически просто хватит внутри Loop specmtr проверять условие
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Re: Приколы компилятора

Сообщение Masygreen »

не использовать /==
Время ведет!
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Приколы компилятора

Сообщение Алексей »

почему? :) сегодня кстати делал аналогичную задачу на тех же данных и конструкция

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

if katnazna.nazcode <> '63' then continue
отработала на ура...
просто порой бывают моменты когда я не понимаю, почему делается не так как я написал, а по другому.

в первоначальном случае выкрутился так

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

if katnazna.nazcode <> '63' then
{

}
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Приколы компилятора

Сообщение RAJAH »

Алексей писал(а):просто порой бывают моменты когда я не понимаю, почему делается не так как я написал, а по другому.
Довольно часто. :) Надо философски относиться: "Это же Галактика!".
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Приколы компилятора

Сообщение Алексей »

вот я и создал ветку... я конечно понимаю, что без полного кода интерфейса сложно проанализировать, но всё же.
проблема скажем даже так не в ошибке... обойти легко, бывает найти сложно, т.е. объёмы данных большие и заметить ошибку бывает заметить сложно.
Ответить