Страница 1 из 1
Можно ли совместить две очереди посредством референса?
Добавлено: 08 Август 2014, 15:58
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
Есть процедура Отчёта (стандартная), отчёт строится по локальной очереди, которая описана так:
Но данные формируются в другой процедуре, и передаются в процедуру отчёта через заголовок (очередь Q, описанная также, как и локальная LOC:Queue). То, что данные передаются, я проверил. Хотелось бы не перегонять данные из Q в LOC:Queue, а сделать банальный референс. Но вот так не идёт:
Что не так я делаю?
Re: Можно ли совместить две очереди посредством референса?
Добавлено: 08 Август 2014, 16:13
Дед Пахом
LOC:Queue &GLO:ReportQueue
Re: Можно ли совместить две очереди посредством референса?
Добавлено: 08 Август 2014, 16:33
kreator
Дед Пахом писал(а):LOC:Queue &GLO:ReportQueue
Так программа вылетает по Exception при вызове отчёта. GLO:ReportQueue - Type, и её не существует, видимо, и ссылка на неё не имеет смысла, наверно.
Re: Можно ли совместить две очереди посредством референса?
Добавлено: 08 Август 2014, 16:50
Admin
Q как описана?
Должна быть по моему как (*GLO:ReportQueue Q)
Re: Можно ли совместить две очереди посредством референса?
Добавлено: 08 Август 2014, 18:35
Дед Пахом
kreator писал(а):Дед Пахом писал(а):LOC:Queue &GLO:ReportQueue
Так программа вылетает по Exception при вызове отчёта. GLO:ReportQueue - Type, и её не существует, видимо, и ссылка на неё не имеет смысла, наверно.
Ну правильно, вылетает, раз ты не написал присвоение LOC:Queue &= Q внутри процедуры.
Re: Можно ли совместить две очереди посредством референса?
Добавлено: 11 Август 2014, 10:11
kreator
Дед Пахом писал(а):Ну правильно, вылетает, раз ты не написал присвоение LOC:Queue &= Q внутри процедуры.
Написал, но вылетает ещё до этого присвоения.
Admin писал(а):Q как описана?
Должна быть по моему как (*GLO:ReportQueue Q)
GLO:ReportQueue Q. Очереди всегда передаются по адресу, звёздочка не нужна. И я проверил - с Q всё в порядке.
Меня всё же смущает вот такое объявление:
В хелпе вот такой пример:
Код: Выделить всё
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
Ни о чём.
Re: Можно ли совместить две очереди посредством референса?
Добавлено: 11 Август 2014, 16:17
Дед Пахом
не пойму, такая проблема найти, где к Loc:Queue идёт обращение, и перед этим присвоить ей нужную очередь?
Re: Можно ли совместить две очереди посредством референса?
Добавлено: 11 Август 2014, 20:03
PavelNK
где исходники?
Re: Можно ли совместить две очереди посредством референса?
Добавлено: 12 Август 2014, 9:59
kreator
Решил проблему, отказался от LOC:Queue. Откуда, вообще, выросла проблема? Clarion (в частности, С8.0) не видит переменных, передаваемых через заголовок. Мало того, что в дизайнере не видит (в дизайнере отчётов, например), но и при компиляции ругается. Решил использовать локальную переменную. Теперь вернул всё взад, и ни на что не ругается. Такая же фигня происходит, когда ввожу новые глобальные переменные, Clarion их не видит (в редакторе, например), приходится работать через панель "Data/Tables". Через некоторое время эти переменные становятся видимыми в редакторе. Резюме. Надо переползать с восьмёрки, срочно. А то - вроде, мелкая проблема, а времени теряется масса.