Страница 1 из 1
Процедура с параметром <QUEUE>
Добавлено: 16 Декабрь 2022, 12:54
Игорь Столяров
Привет всем !
Возник детский вопрос: как создать процедуру с необязательным параметром <QUEUE> SpisokName ?
Попытка получить значение Omitted(SpisokName) - просто валит программу и всё.
Нашёл странный рабочий, но не документированный вариант:
Код: Выделить всё
MyProc Procedure(<QUEUE> SpisokName)
Code
!If Omitted(SpisokName) ! = CRASH
If Not (SpisokName &= Null)
Get(SpisokName,1) ! и т.д. вроде бы всё работает
end
Я не изобретаю велосипед ? Может быть можно по другому решить вопрос ? Спасибо !
Процедура с параметром <QUEUE>
Добавлено: 16 Декабрь 2022, 14:18
Admin
OMITTED работает.
Clarion 11
Процедура с параметром <QUEUE>
Добавлено: 16 Декабрь 2022, 14:50
Игорь Столяров
Да, действительно с <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. ХЗ !

Процедура с параметром <QUEUE>
Добавлено: 16 Декабрь 2022, 15:24
Admin
Игорь Столяров писал(а): 16 Декабрь 2022, 14:50
Не работает из ABC класса в AppGen
Как метод класса или в классе?
И вообще лучше (готовый к запуску) пример давать сразу.
Процедура с параметром <QUEUE>
Добавлено: 16 Декабрь 2022, 15:38
Игорь Столяров
Admin писал(а): 16 Декабрь 2022, 15:24
И вообще лучше (готовый к запуску) пример давать сразу.
Да. Тут что-то явно не то.

Соберу пример и выложу.
Процедура с параметром <QUEUE>
Добавлено: 16 Декабрь 2022, 15:50
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.

Процедура с параметром <QUEUE>
Добавлено: 16 Декабрь 2022, 16:18
ingasoftplus
Игорь Столяров писал(а): 16 Декабрь 2022, 12:54
Omitted(SpisokName) - просто валит программу и всё.
а можно по позиции параметра (2 способ) просто смотреть:
Процедура с параметром <QUEUE>
Добавлено: 16 Декабрь 2022, 17:33
Игорь Столяров
Admin писал(а): 16 Декабрь 2022, 15:24
Как метод класса или в классе?
Да. Видимо Omitted() воспримается как запрос на параметры метода, а не самой процедуры.
Т.е. проверить наличие параметров процедуры в BROWSE или FORM ABC вообще нельзя.

Процедура с параметром <QUEUE>
Добавлено: 16 Декабрь 2022, 18:06
kreator
А вот не такая же проблема -
viewtopic.php?p=48124#p48124?
Процедура с параметром <QUEUE>
Добавлено: 16 Декабрь 2022, 19:33
Игорь Столяров
Видимо да. Просто заход с другой стороны.

Процедура с параметром <QUEUE>
Добавлено: 16 Декабрь 2022, 20:37
Игорь Столяров
Вариант с Routine - это эксплуатация глюка RunTime, который может быть прикрыт в любом обновлении.

Работает, но очень рискованно.
Процедура с параметром <QUEUE>
Добавлено: 16 Декабрь 2022, 21:21
Дед Пахом
Игорь Столяров писал(а): 16 Декабрь 2022, 20:37
Вариант с Routine - это эксплуатация глюка RunTime
Это не глюк, вызов OMITTED из ROUTINE, объявленной в процедуре = вызов OMITTED из этой процедуры. Метод класса это уже другая область видимости.
Процедура с параметром <QUEUE>
Добавлено: 16 Декабрь 2022, 21:55
Игорь Столяров
Дед Пахом писал(а): 16 Декабрь 2022, 21:21
Метод класса это уже другая область видимости.
Т.е. здесь нет зависимости от точки вызова локальной подпрограммы ...

Интересно будет (потом) попробовать перейти из класса в Routine, убить его там и вернуться в точку вызова.
