Вызов списочной из простой
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
zh Участник со стажем
Вступление в Клуб: 10.12.2009
|
Пн Сен 10, 2012 11:07  Вызов списочной из простой |
|
Полезность: Нет оценки
|
Товарищи, возникла необходимость вызвать списочную операцию с заполненным параметром... в проверке:
[code]
if p_message = 'DEFAULT' then
...
P_BUS_PROC := nvl(P_BUS_PROC, ::[BUS_PROCESS]([code]='ГАШЕНИЕ'));
[/code]
..так вот, задача - переопределить параметр P_BUS_PROC.
пытался вызвать из простой из тела PLPCALL'ом, выпало в ошибку. у списочной есть один IN OUT параметр. ошибка: невозможно вернуть значение такого то параметра.
второй вариант вызова - PLPCALL через клиент-скрипт:
[code]
Runtime.PlayEx("<% PLPCALL %VAR%.V_FOLDER := %THIS%.[DISTR_DEBT_DOG](%PARAM%.P_DATE => %PARAM%.P_DATE, %PARAM%.P_DATE_VAL => %PARAM%.P_DATE, %PARAM%.P_BUS_PROC => %VAR%.V_BUS_PROC) %>")
[/code]
..однако так же потерпел неудачу. в клиент-скрипте
[code]msgbox(Object1.Text)[/code]
(Object1 = V_BUS_PROC) значение возвращает, поднимается экранная форма вызываемой операции, но отладка все в том же
[code]
if p_message = 'DEFAULT' then
...
stdio.put_line_pipe('##P_BUS_PROC = ' || P_BUS_PROC,'TST_DEP');
P_BUS_PROC := nvl(P_BUS_PROC, ::[BUS_PROCESS]([code]='ГАШЕНИЕ'));
[/code]
выдает пустое значение.
Может кто поделиться идеями реализации?
ЦФТ посоветовало сделать копию дистрибутива и поддерживать его до конца дней. Идея, сами понимаете, не фонтан. _________________ Всего должно быть в меру. |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Пн Сен 10, 2012 11:46   |
|
Полезность: Нет оценки
|
Вся разница в том, что в простой THIS это ссылка на экземпляр, а в списочной это таблица. Вам необходимо %THIS% представить операции как таблицу. ну и секция Default при вызове PLPCALL выдает пустое значение, значение появится в секции VALIDATE при P_INFO = '%PLPCALL%'. Иначе придется писать
Код: | if P_MESSAGE = 'DEFAULT' or (P_MESSAGE = 'VALIDATE' and P_INFO = '%PLPCALL%') then
... |
Да и для примера посмотри операцию SELL типа PR_CRED. Там как раз твой случай. _________________ всегда есть как минимум 2 выхода |
|
 |
vtar Эксперт
Вступление в Клуб: 20.03.2009
|
|
 |
zh Участник со стажем
Вступление в Клуб: 10.12.2009
|
Вт Сен 11, 2012 09:21   |
|
Полезность: Нет оценки
|
Alexsey пишет: | Вся разница в том, что в простой THIS это ссылка на экземпляр, а в списочной это таблица. Вам необходимо %THIS% представить операции как таблицу. ну и секция Default при вызове PLPCALL выдает пустое значение, значение появится в секции VALIDATE при P_INFO = '%PLPCALL%'. Иначе придется писать
Код: | if P_MESSAGE = 'DEFAULT' or (P_MESSAGE = 'VALIDATE' and P_INFO = '%PLPCALL%') then
... |
|
Кстати, он таки заходит в "чистый" Default...
Кусок самописной отладки при разовом вызове до поднятия экранной формы, безусловно малоинформативно, но с комментариями:
-- Выполнение вызывающей операции -->>
### DEFAULT/%PLPCALL% -- поднял дистрибутив по дефолту
## DEFAULT -- зашел в Дефолт без PLPCALL'а
## sell_proc = 0 -- пока что не понял, что переменные подменены, поймет во втором цикле
### VALIDATE/%PLPCALL% -- второй цикл, поднимаем экранную форму, подменяем пеерменные
## sell_proc = 1 -- дистрибутив успешно принял подмену.
-->> поднятие экранной формы вызываемой операции.
Alexsey пишет: |
Да и для примера посмотри операцию SELL типа PR_CRED. Там как раз твой случай. |
Как раз на ее примере и делал вызов через клиент-скрипт. _________________ Всего должно быть в меру. |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|