Можно ли совместить две очереди посредством референса?

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Можно ли совместить две очереди посредством референса?

Сообщение kreator »

С8.0.9759. Есть типовая очередь:

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

GLO:ReportQueue      QUEUE,TYPE,PRE()
GLO:RQField1           STRING(255)
GLO:RQField2           STRING(255)
GLO:RQField3           STRING(255)
GLO:RQField4           STRING(255)
GLO:RQField5           STRING(255)
GLO:RQField6           STRING(255)
GLO:RQField7           STRING(255)
GLO:RQField8           STRING(255)
GLO:RQField9           STRING(255)
GLO:RQField10          STRING(255)
GLO:RQField11          STRING(255)
GLO:RQField12          STRING(255)
GLO:RQField13          STRING(255)
GLO:RQField14          STRING(255)
GLO:RQField15          STRING(255)
GLO:RQField16          STRING(255)
GLO:RQField17          STRING(255)
GLO:RQField18          STRING(255)
GLO:RQField19          STRING(255)
GLO:RQField20          STRING(255)
                     END
Есть процедура Отчёта (стандартная), отчёт строится по локальной очереди, которая описана так:

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

LOC:Queue            GLO:ReportQueue
Но данные формируются в другой процедуре, и передаются в процедуру отчёта через заголовок (очередь Q, описанная также, как и локальная LOC:Queue). То, что данные передаются, я проверил. Хотелось бы не перегонять данные из Q в LOC:Queue, а сделать банальный референс. Но вот так не идёт:

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

LOC:Queue &= Q
Что не так я делаю?
We are hard at work… for you. :)
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: Можно ли совместить две очереди посредством референса?

Сообщение Дед Пахом »

LOC:Queue &GLO:ReportQueue
С уважением, ДП
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Можно ли совместить две очереди посредством референса?

Сообщение kreator »

Дед Пахом писал(а):LOC:Queue &GLO:ReportQueue
Так программа вылетает по Exception при вызове отчёта. GLO:ReportQueue - Type, и её не существует, видимо, и ссылка на неё не имеет смысла, наверно.
We are hard at work… for you. :)
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Re: Можно ли совместить две очереди посредством референса?

Сообщение Admin »

Q как описана?
Должна быть по моему как (*GLO:ReportQueue Q)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: Можно ли совместить две очереди посредством референса?

Сообщение Дед Пахом »

kreator писал(а):
Дед Пахом писал(а):LOC:Queue &GLO:ReportQueue
Так программа вылетает по Exception при вызове отчёта. GLO:ReportQueue - Type, и её не существует, видимо, и ссылка на неё не имеет смысла, наверно.
Ну правильно, вылетает, раз ты не написал присвоение LOC:Queue &= Q внутри процедуры.
С уважением, ДП
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Можно ли совместить две очереди посредством референса?

Сообщение kreator »

Дед Пахом писал(а):Ну правильно, вылетает, раз ты не написал присвоение LOC:Queue &= Q внутри процедуры.
Написал, но вылетает ещё до этого присвоения.
Admin писал(а):Q как описана?
Должна быть по моему как (*GLO:ReportQueue Q)
GLO:ReportQueue Q. Очереди всегда передаются по адресу, звёздочка не нужна. И я проверил - с Q всё в порядке.
Меня всё же смущает вот такое объявление:

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

LOC:Queue            &GLO:ReportQueue                      
В хелпе вот такой пример:

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

Queue1  QUEUE
ShortVar  SHORT
LongVar1  LONG
LongVar2  LONG
       END

QueueRef  &QUEUE               !Reference a QUEUE, only

Queue1Ref &Queue1              !Reference to a QUEUE defined exactly as Queue1, only

LongRef   &LONG                !Reference a LONG, only

LongRef2  &LONG                !Reference a LONG, only

CODE

QueueRef &= Queue1            !Assign QUEUE reference

Queue1Ref &= Queue1           !Assign QUEUE reference

IF Queue1Ref &= QueueRef      !Are they referencing the same QUEUE?

 MESSAGE('Both Pointing at same QUEUE')

END

IF SomeCondition              !Evaluate some condition

 LongRef &= Queue1.LongVar1   !and reference an appropriate variable

ELSE

 LongRef &= Queue1.LongVar2

END

LongRef += 1                  !Increment either LongVar1 or LongVar2

                              !depending upon which variable is referenced

IF LongRef2 &= NULL           !Detect unreferenced reference variable and 

 LongRef2 &= LongRef          !create a second reference to the same data

END

LongRef &= ADDRESS(Queue1.LongVar1)   !Reference assign the address of

                                      !a simple data type

Ни о чём.
We are hard at work… for you. :)
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: Можно ли совместить две очереди посредством референса?

Сообщение Дед Пахом »

не пойму, такая проблема найти, где к Loc:Queue идёт обращение, и перед этим присвоить ей нужную очередь?
С уважением, ДП
PavelNK
Старожил
Сообщения: 279
Зарегистрирован: 15 Март 2011, 8:02

Re: Можно ли совместить две очереди посредством референса?

Сообщение PavelNK »

где исходники?
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Можно ли совместить две очереди посредством референса?

Сообщение kreator »

Решил проблему, отказался от LOC:Queue. Откуда, вообще, выросла проблема? Clarion (в частности, С8.0) не видит переменных, передаваемых через заголовок. Мало того, что в дизайнере не видит (в дизайнере отчётов, например), но и при компиляции ругается. Решил использовать локальную переменную. Теперь вернул всё взад, и ни на что не ругается. Такая же фигня происходит, когда ввожу новые глобальные переменные, Clarion их не видит (в редакторе, например), приходится работать через панель "Data/Tables". Через некоторое время эти переменные становятся видимыми в редакторе. Резюме. Надо переползать с восьмёрки, срочно. А то - вроде, мелкая проблема, а времени теряется масса.
We are hard at work… for you. :)
Ответить