Процедура с параметром <QUEUE>

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Процедура с параметром <QUEUE>

Сообщение Игорь Столяров »

Привет всем !

Возник детский вопрос: как создать процедуру с необязательным параметром <QUEUE> SpisokName ?
Попытка получить значение Omitted(SpisokName) - просто валит программу и всё.

Нашёл странный рабочий, но не документированный вариант:

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

MyProc Procedure(<QUEUE> SpisokName)
  Code
 !If Omitted(SpisokName) ! = CRASH
  If Not (SpisokName &= Null)
     Get(SpisokName,1)  ! и т.д. вроде бы всё работает
  end
Я не изобретаю велосипед ? Может быть можно по другому решить вопрос ? Спасибо !
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Процедура с параметром <QUEUE>

Сообщение Admin »

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

MyProc Procedure(<QUEUE SpisokName>)
OMITTED работает.
Clarion 11
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Процедура с параметром <QUEUE>

Сообщение Игорь Столяров »

Да, действительно с <Queue> работает. Спасибо.
Это я хотел сделать простой пример и не проверил. :(
Не работает с типом данных Queue, т.е.

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

Q_Type Queue,Type
Field1  Long
  end
  ...

MyProc Procedure(<Q_Type SpisokName>)
  Code
 !If Omitted(SpisokName) ! = CRASH
  If Not (SpisokName &= Null)
     Get(SpisokName,1)  ! и т.д. вроде бы всё работает
  end
P/S: В обычном коде работает. Не работает из ABC класса в AppGen. ХЗ ! :(
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Процедура с параметром <QUEUE>

Сообщение Admin »

Игорь Столяров писал(а): 16 Декабрь 2022, 14:50 Не работает из ABC класса в AppGen
Как метод класса или в классе?
И вообще лучше (готовый к запуску) пример давать сразу.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Процедура с параметром <QUEUE>

Сообщение Игорь Столяров »

Admin писал(а): 16 Декабрь 2022, 15:24 И вообще лучше (готовый к запуску) пример давать сразу.
Да. Тут что-то явно не то. :( Соберу пример и выложу.
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Процедура с параметром <QUEUE>

Сообщение kreator »

Я тут недавно столкнулся с фичей.
Объявление функции:

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

EmployeeFilter         FUNCTION(GLO:EmployeeQueue, Long, Long, Long, Long), Byte
,где GLO:EmployeeQueue - прототип очереди.
Вот так работает:

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

EmployeeFilter PROCEDURE (Q, LOC:X, LOC:Y, LOC:W, LOC:H)
Вот так не работает:

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

EmployeeFilter PROCEDURE (LOC:Q, LOC:X, LOC:Y, LOC:W, LOC:H)
Компилятор ругается на LOC:Q. :shock:
We are hard at work… for you. :)
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 425
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 87 раз
Поблагодарили: 5 раз

Процедура с параметром <QUEUE>

Сообщение ingasoftplus »

Игорь Столяров писал(а): 16 Декабрь 2022, 12:54 Omitted(SpisokName) - просто валит программу и всё.
а можно по позиции параметра (2 способ) просто смотреть:

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

IF OMITTED(1)  
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Процедура с параметром <QUEUE>

Сообщение Игорь Столяров »

Admin писал(а): 16 Декабрь 2022, 15:24 Как метод класса или в классе?
Да. Видимо Omitted() воспримается как запрос на параметры метода, а не самой процедуры.
Т.е. проверить наличие параметров процедуры в BROWSE или FORM ABC вообще нельзя. :(
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Процедура с параметром <QUEUE>

Сообщение kreator »

А вот не такая же проблема - viewtopic.php?p=48124#p48124?
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Процедура с параметром <QUEUE>

Сообщение Игорь Столяров »

Видимо да. Просто заход с другой стороны. :dizzy:
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Процедура с параметром <QUEUE>

Сообщение Игорь Столяров »

Вариант с Routine - это эксплуатация глюка RunTime, который может быть прикрыт в любом обновлении. :(
Работает, но очень рискованно.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Процедура с параметром <QUEUE>

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

Игорь Столяров писал(а): 16 Декабрь 2022, 20:37 Вариант с Routine - это эксплуатация глюка RunTime
Это не глюк, вызов OMITTED из ROUTINE, объявленной в процедуре = вызов OMITTED из этой процедуры. Метод класса это уже другая область видимости.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Процедура с параметром <QUEUE>

Сообщение Игорь Столяров »

Дед Пахом писал(а): 16 Декабрь 2022, 21:21 Метод класса это уже другая область видимости.
Т.е. здесь нет зависимости от точки вызова локальной подпрограммы ... :(
Интересно будет (потом) попробовать перейти из класса в Routine, убить его там и вернуться в точку вызова. :shock:
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить