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

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

Добавлено: 13 фев 2013, 10:57
Алексей
объясните, почему если написать

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

_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

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

Добавлено: 13 фев 2013, 11:03
Masygreen
getfirst katnazna=tsOK лишнее

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

Добавлено: 13 фев 2013, 11:10
Алексей
да и без него тоже самое! я уже голову сломал, всяко разно пробовал. и isValid таблицы проверял и getfirst

само условие я так понял работает верно... а вот continue почему то не хочет...

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

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

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

_loop specmtr
{
  if getfirst katnazna <> tsOK
     continue;
  if katnazna.nazcode <> '63'
     continue;
  message(katsopr.nsopr+' '+katnazna.nazcode);
}

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

Добавлено: 14 фев 2013, 12:02
Den
Masygreen верно заметил насчет того что getfirst katnazna в данном случае вообще лишнее, с учетом того какой кусок VIEW Вы привели тут
katnazna подцеплена по уникальному ключу так что данные для подцепленной таблицы доставятся в том же запросе, что и данные корневого узла.
Т.е. фактически просто хватит внутри Loop specmtr проверять условие

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

Добавлено: 14 фев 2013, 13:41
Masygreen
не использовать /==

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

Добавлено: 14 фев 2013, 16:21
Алексей
почему? :) сегодня кстати делал аналогичную задачу на тех же данных и конструкция

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

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

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

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

if katnazna.nazcode <> '63' then
{

}

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

Добавлено: 14 фев 2013, 16:55
RAJAH
Алексей писал(а):просто порой бывают моменты когда я не понимаю, почему делается не так как я написал, а по другому.
Довольно часто. :) Надо философски относиться: "Это же Галактика!".

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

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