powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Помогите разобратся (Процедура ASA)
25 сообщений из 28, страница 1 из 2
Помогите разобратся (Процедура ASA)
    #33004366
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ASA есть процедура
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
ALTER PROCEDURE "SLVZ"."PR_GETPRICE"
(
IN  @RN_nakl Numeric,           -- RN Детализации
IN  @Nomen_mod Numeric,         -- Модификация номенклатуры
IN  @Nomen_mod_pack Numeric,    -- Упаковна модификации
OUT @NALOG_GC Numeric,          -- Налоговая группа
OUT @PRICE Numeric,             -- Цена
OUT @PRICEMEAS Numeric          -- Цена за
)

В РВ надо получить выходные параметры, делаю

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Long ll_rn_pack
Long ll_nalog_gc, ll_Pracemease
Real ll_Price

str_sp_grid str1 
str_sp_select str_select
str_sp sp

........

DECLARE GetPrice PROCEDURE FOR pr_GetPrice
@RN_nakl =  1000015 ,//:sp.idn (Long)
@Nomen_mod =  188685057 ,//:str1.idn (Long)
@Nomen_mod_pack =  188946972 ,//:str_select.id (Long)
@NALOG_GC = :ll_nalog_gc,
@PRICE = :ll_Price,
@PRICEMEAS = :ll_Pracemease;
EXECUTE GetPrice;
MessageBox('',String(ll_Price))

1. Если в сторчке @RN_nakl = 1000015 делаю @RN_nakl = :sp.idn (Long) то ругается на не совпадение типов (sqlerr = 999)
Почему?
2. ll_Price всега выдаёт 0

Что я не так сделал или как правильно?

==================
ASA9.0.2 PB9
...
Рейтинг: 0 / 0
Помогите разобратся (Процедура ASA)
    #33004414
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поскольку мне сегодня, как всегда, думать лень , то для начала осведомлюсь, чем не устроил вариант с объявлением SP как Local External Function в транзакционном объекте? Дальше можно было бы написать:

Код: plaintext
SQLCA.PR_GETPRICE( 1000015 ,  188685057 ,  188946972 , :ll_nalog_gc, :ll_Price, :ll_Pracemease)
____________________________________
- Гарфилд, мышь!
- Спасибо, я сыт!
...
Рейтинг: 0 / 0
Помогите разобратся (Процедура ASA)
    #33004438
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
SQLCA.PR_GETPRICE( 1000015 ,  188685057 ,  188946972 , :ll_nalog_gc, :ll_Price, :ll_Pracemease)
Ошибка синтаксиса!

===============================
PB 9.0.2 (7534) ASA 9.0.2 (2451)
...
Рейтинг: 0 / 0
Помогите разобратся (Процедура ASA)
    #33004443
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DIGITALPRO
Код: plaintext
SQLCA.PR_GETPRICE( 1000015 ,  188685057 ,  188946972 , :ll_nalog_gc, :ll_Price, :ll_Pracemease)
Ошибка синтаксиса!

===============================
PB 9.0.2 (7534) ASA 9.0.2 (2451)Следует читать
Код: plaintext
SQLCA.PR_GETPRICE( 1000015 ,  188685057 ,  188946972 , ll_nalog_gc, ll_Price, ll_Pracemease)
...
Рейтинг: 0 / 0
Помогите разобратся (Процедура ASA)
    #33004463
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99Следует читать
Код: plaintext
Следует читать[src]SQLCA.PR_GETPRICE( 1000015 ,  188685057 ,  188946972 , ll_nalog_gc, ll_Price, ll_Pracemease)


Теперь говорит, что такой процедуры нет!
...
Рейтинг: 0 / 0
Помогите разобратся (Процедура ASA)
    #33004474
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DIGITALPROТеперь говорит, что такой процедуры нет!
Нескромный вопрос - а в транзакционном объекте ты её объявил? Если да - как именно выглядит декларация?
...
Рейтинг: 0 / 0
Помогите разобратся (Процедура ASA)
    #33004488
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DIGITALPROВ ASA есть процедура
...
В РВ надо получить выходные параметры, делаю


Должно помочь следующее:
- в transaction.DbParm добавить PBNewSPInvocation=Yes,
- к аргументу добавить OUTPUT.

Код: plaintext
@PRICE = :ll_Price OUTPUT, 

Подробности в справке, раздел "ODBC DECLARE and EXECUTE with PBNewSPInvocation"
...
Рейтинг: 0 / 0
Помогите разобратся (Процедура ASA)
    #33004689
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
SQLCA.PR_GETPRICE( 1000015 ,  188685057 ,  188946972 , ll_nalog_gc, ll_Price, ll_Pracemease)
Это все ОК работает

А вот с выходным (OUT) параметром ничего не выходит выдает 0
...
Рейтинг: 0 / 0
Помогите разобратся (Процедура ASA)
    #33004951
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще раз - как именно выглядит декларация в транзакционном объекте?
ref decimal для output параметров стоит?
...
Рейтинг: 0 / 0
Помогите разобратся (Процедура ASA)
    #33005107
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что такое ref ? (я с этим еще не знаком)

Сейчас все выглядит так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Long ll_nalog_gc, ll_Pracemease
Real  ll_Price

DECLARE GetPrice PROCEDURE FOR pr_GetPrice
:sp.idn, :ll_rn_mod, :ll_rn_mod_pack, ll_nalog_gc, ll_Price, ll_Pracemease;

EXECUTE GetPrice;
MessageBox('',String(ll_Price)) - выдает  0 

Может просто покажете как будет выглядеть правильный скрипт?!
===============================
PB 9.0.2 (7534) ASA 9.0.2 (2451)
...
Рейтинг: 0 / 0
Помогите разобратся (Процедура ASA)
    #33005404
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Это все OK работает" относилось к SQLCA.PR_GETPRICE
т.е. вызову через RPC, объявленному в Local External Functions в SQLCA (транзакционный объект)
моя просьба "показать декларацию" относилась именно к этому варианту

а Вы мне показываете DECLARE опять. Вызов SP через DECLARE/EXECUTE и вызов через RPC - два разных способа. Я говорил именно о втором.
Первым я практически никогда не пользуюсь. Что-то смутно помню про то что в ASE/MSSQL надо было после EXECUTE делать FETCH. Но к ASA это скорее всего не относится, а вот совет Anatoly Moskovsky по поводу "ODBC DECLARE and EXECUTE with PBNewSPInvocation" относится ТОЛЬКО к первому способу.
Мне обычно проще через RPC сделать.

Так шта для начала выбирайте с каким вариантом будем разбираться.
А там уж может и дойдет дело до "правильного скрипта".
А то прям какое-то броуновское движение происходит.
...
Рейтинг: 0 / 0
Помогите разобратся (Процедура ASA)
    #33005463
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
А то прям какое-то броуновское движение происходит.
;))) Абсолютно с Вами согласен!

На самом деле с RPC не работал и даже незнаю что это такое, всегда вызывал процедуры именно ч/з DECLARE / EXECUTE (были только IN парметры) и вопросов не возникало, в связи с этим предлагаю остановится на DECLARE / EXECUTE (1-й вариант).
...
Рейтинг: 0 / 0
Помогите разобратся (Процедура ASA)
    #33005604
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DIGITALPROНа самом деле с RPC не работал и даже незнаю что это такое...Тут прям напрашивается и знать не хочу

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
// transaction object 
// declare local external functions

subroutine PR_GETPRICE(double RN_nakl ,           /*RN Детализации*/ &
double Nomen_mod,         /*Модификация номенклатуры*/ &
double Nomen_mod_pack,    /*Упаковна модификации*/ &
ref double NALOG_GC,          /*Налоговая группа*/ &
ref double PRICE,             /*Цена*/ &
ref double PRICEMEAS /*Цена за*/ &
) RPCFUNC ALIAS FOR "SLVZ.PR_GETPRICE"

// вызов 
SQLCA.PR_GETPRICE( 1000015 ,  188685057 ,  188946972 , ll_nalog_gc, ll_Price, ll_Pracemease)
...
Рейтинг: 0 / 0
Помогите разобратся (Процедура ASA)
    #33005890
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йопт.... Не ну это надо ж... Только сейчас заметил....
Вы коллеги на самом деле используете Real/Double для "денежных" значений?
Вам никто никогда не говорил что использование чисел с плавающей точкой в финансовых расчетах это большая глупость и источник ошибок?

Я еще понимаю если б мы на Java писали и приходилось бы убеждать что для денег НАДО рисовать свой класс, но в PB к счастью есть нормальный DECIMAL.

В real вообще влезает не больше семи или восьми знаков, т.е. с учетом копеек у вас уже на сотнях тысяч пойдет ошибка.
...
Рейтинг: 0 / 0
Помогите разобратся (Процедура ASA)
    #33005960
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ЗоринАндрей
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
// transaction object 
// declare local external functions

subroutine PR_GETPRICE(long RN_nakl ,           /*RN Детализации*/ &
long Nomen_mod,         /*Модификация номенклатуры*/ &
long Nomen_mod_pack,    /*Упаковна модификации*/ &
ref decimal NALOG_GC,          /*Налоговая группа*/ &
ref decimal PRICE,             /*Цена*/ &
ref decimal PRICEMEAS /*Цена за*/ &
) RPCFUNC ALIAS FOR "SLVZ.PR_GETPRICE"

// вызов 
decimal { 2 } /* или 4? :-)*/ d_nalog_gc, ld_Price, ld_Pracemease
SQLCA.PR_GETPRICE( 1000015 ,  188685057 ,  188946972 , ld_nalog_gc, ld_Price, ld_Pracemease)
так лучше?
...
Рейтинг: 0 / 0
Помогите разобратся (Процедура ASA)
    #33007368
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
subroutine PR_GETPRICE(long RN_nakl ,           /*RN Детализации*/ &
long Nomen_mod,         /*Модификация номенклатуры*/ &
long Nomen_mod_pack,    /*Упаковна модификации*/ &
ref decimal NALOG_GC,          /*Налоговая группа*/ &
ref decimal PRICE,             /*Цена*/ &
ref decimal PRICEMEAS /*Цена за*/ &
) RPCFUNC ALIAS FOR "SLVZ.PR_GETPRICE"
Говорит что синтаксис. ошибка
...
Рейтинг: 0 / 0
Помогите разобратся (Процедура ASA)
    #33007709
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые, помогите срочно с этой процедурой!!!!

А вообще кто нибудь выдургивал этот самый out параметр???

Уже счделал тестовую процедуру с 1 out параметром и все одно в РВ значение = 0

>>> HELP <<<
...
Рейтинг: 0 / 0
Помогите разобратся (Процедура ASA)
    #33007837
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DIGITALPROА вообще кто нибудь выдургивал этот самый out параметр???
Конечно, "выдёргивал". Никогда проблем не было (работаю только через RPC, т.к. считаю вызов SP с помощью динамического SQL в моих задачах неоправданным усложнением). К сожалению, больше ничем помочь не могу.
...
Рейтинг: 0 / 0
Помогите разобратся (Процедура ASA)
    #33007910
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Dim2000

А не нарисуете скрипт (весь) для RPC? и как это расшифровывается

А то, что мне написал PL99, у меня выдают синтаксическую ошибку.
...
Рейтинг: 0 / 0
Помогите разобратся (Процедура ASA)
    #33008036
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DIGITALPRO To Dim2000

А не нарисуете скрипт (весь) для RPC? и как это расшифровывается

А то, что мне написал PL99, у меня выдают синтаксическую ошибку. DIGITALPROМожет просто покажете как будет выглядеть правильный скрипт?!
===============================
PB 9.0.2 (7534) ASA 9.0.2 (2451)Я привел скрипт, который компилируется и никаких ошибок не выдает. Если у вас проблема, то, может быть, стоит постараться описать ее как можно более полно , чтобы вам могли помочь
Телепатов, здесь нет, к сожалению.
На наводящие вопросы
Dim2000 DIGITALPROТеперь говорит, что такой процедуры нет!
Нескромный вопрос - а в транзакционном объекте ты её объявил? Если да - как именно выглядит декларация?
ЗоринАндрейеще раз - как именно выглядит декларация в транзакционном объекте?
ref decimal для output параметров стоит?вы отвечать не желаете, читать документацию или воспользоваться поиском, видимо, тоже не хотите

DIGITALPROУважаемые, помогите срочно с этой процедурой!!!!
А вообще кто нибудь выдургивал этот самый out параметр???
Уже счделал тестовую процедуру с 1 out параметром и все одно в РВ значение = 0
>>> HELP <<< Последняя попытка... О какой именно ошибке сообщает компилятор?
...
Рейтинг: 0 / 0
Помогите разобратся (Процедура ASA)
    #33008070
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
// transaction object 
// declare local external functions

Вот эти комментарии нуждаются в комментариях?

Если Вы создали объект унаследованный от transaction
( New -> PB Object -> Standard Class -> transaction)
Прописали его в качестве SQLCA в свойствах application object
и во вновь созданном объекте вставили скрипт приведенный PL99 в Declare Local External Function.
то никаких Syntax Error не будет.

Ну а если Вы его вставили куда не попадя...
...
Рейтинг: 0 / 0
Помогите разобратся (Процедура ASA)
    #33008086
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Помогите разобратся (Процедура ASA)
    #33008096
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗоринАндрейЕсли Вы создали объект унаследованный от transaction
( New -> PB Object -> Standard Class -> transaction)
Прописали его в качестве SQLCA в свойствах application object
и во вновь созданном объекте вставили скрипт приведенный PL99 в Declare Local External Function.
то никаких Syntax Error не будет.
А ещё можно Edit->Paste special->SQL->Remote Stored Procedure(s)...
...
Рейтинг: 0 / 0
Помогите разобратся (Процедура ASA)
    #33008120
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DIGITALPROА не нарисуете скрипт (весь) для RPC?
А что там рисовать? Объявление прототипа для ХП уже нарисовал PL99 (это если не устраивает автоматическая генерация оного путём тыкания мышей - см. моё предыдущее письмо). Как её вызывать - я (почти правильно ) написал в первом же ответе в эту тему:

Код: plaintext
SQLCA.PR_GETPRICE( 1000015 ,  188685057 ,  188946972 , ll_nalog_gc, ll_Price, ll_Pracemease)

и как это расшифровывается
Remote Procedure Call.
...
Рейтинг: 0 / 0
Помогите разобратся (Процедура ASA)
    #33008159
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASA
Код: plaintext
1.
2.
3.
4.
ALTER PROCEDURE "SLVZ"."PR_TEST"
(OUT rrr Numeric)
BEGIN
set rrr =  777 ;
END

PB
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Decimal ll_Price
subroutine PR_TEST (Ref Decimal ll_Price) RPCFUNC ALIAS FOR "SLVZ.PR_TEST";
SQLCA.PR_TEST(ll_Price);

MessageBox('test',"= " + String(ll_Price))

IF SQLCA.sqlcode = - 1  then
	ll_sqlcode = SQLCA.sqldbcode
	ls_sqlerrtext = SQLCA.sqlerrtext
	rollback;
	f_dberror( ll_sqlcode, ls_sqlerrtext, dw_ie )
	RETURN
ELSE
	commit;
END IF;
Syntax error
в строке
Код: plaintext
subroutine PR_TEST (Ref Decimal ll_Price) RPCFUNC ALIAS FOR "SLVZ.PR_TEST";
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Помогите разобратся (Процедура ASA)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]