CftClub.ru
Клуб специалистов ЦФТ-Банк

Валидатор вызываемой операции
На страницу Пред.  1, 2, 3, 4, 5  След.
 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеПт Май 16, 2008 11:49    Ответить с цитатой
Полезность: Нет оценки
разговор на самом деле странный..
чтобы передать в операцию временные переменные.. в них нужно занести значения.. а значения этих переменных как раз и заносит ВЫЗЫВАЕМАЯ операция....
а так как вы предлагаете не копировать код по заполнению значениями временных переменных я и спрашиваю.. может вы каким либо другим способом временные переменные заполняете.. неизвестным мне
_________________
всегда есть как минимум 2 выхода
alexiy
Профи


Вступление в Клуб: 29.06.2007
СообщениеПт Май 16, 2008 11:54    Ответить с цитатой
Полезность: Нет оценки
Alexsey пишет:
разговор на самом деле странный..
чтобы передать в операцию временные переменные.. в них нужно занести значения.. а значения этих переменных как раз и заносит ВЫЗЫВАЕМАЯ операция....
а так как вы предлагаете не копировать код по заполнению значениями временных переменных я и спрашиваю.. может вы каким либо другим способом временные переменные заполняете.. неизвестным мне

Very Happy Very Happy Very Happy
да, другим.
вот он:
alexiy пишет:
2. вызвать валидатор:
Код:
this=>[SPOPCLOS_EXP](параметры...);
, передав туда в качестве всех параметров временные переменные.

_________________
two bee or not two bee
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеПт Май 16, 2008 11:57    Ответить с цитатой
Полезность: Нет оценки
может я вначале что то не так написал.. постараюсь объяснить:
1 мы имеем документ, реквизиты которого необходимо записать в массив
2 мы имеем операцию которая получает ссылку на этот документ
3 нам нужно вызвать операцию которая по ссылке на документ заносит запись в массив, но при этом нам нужно чтоб эта операция отработала в фоновом режиме, т.е. без отображения формы... эта же операция умеет по ссылке на документ выбирать необходимые ей параметры
требуется операцией из пункта 2 вызвать операцию из пункта 3, чтобы занести реквизиты документа в массив...
_________________
всегда есть как минимум 2 выхода
dnk_dz
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеПт Май 16, 2008 13:12    Ответить с цитатой
Полезность: Нет оценки
Если поможет, можно попробовать следующее. Вызывем операцию [OPER] из типа [TYPE]
Код:
declare
  -- объявляем переменные для всех параметров вызываемой операции
  P1 type;
  ...
  PN type;

  oper ref [TYPE]; -- переменная типа ссылка на ТБП вызываемой операции.
begin
  ...
  -- Вызвать валидатор DEFAULT
   oper=>[OPER]('DEFAULT', P_INFO, P1, P2, ...);
  -- При необходимости вызвать валидатор на контролы
  P_INFO = 'ИМЯ_КОНТРОЛА';
   oper=>[OPER]('VALIDATE', P_INFO, P1, P2, ...);
  -- Вызываем экзекутор
   oper.[OPER](P1, P2,...);
end;
ggrey
Участник со стажем


Вступление в Клуб: 01.10.2007
СообщениеСр Май 21, 2008 14:44    Ответить с цитатой
Полезность: 1
Alexsey, вы не очень внимательно читаете alexiy. Если вы не поняли его, то долго объяснять, но дам кусок кода для вашего случая, просто попробуйте вставить его в нужное вам место, и передать туда ваш документ.
P.S. В коде могут быть ошибки, т.к. нет возможности проверить, но их будет легко исправить. Не уверен, что нужен первый вызов валидатора, но анализировать не хочу.

Код:

var empty ref [LEGAL_161P];
var doc ref [DOCUMENT]; -- здесь должна быть ваша переменная типа Документ
var p_message string := 'DEFAULT';
var p_info string;
var P#VO [VID_OPER_PR_REF];
var P#DATA in [DATE];
var P#SUME in [SUMMA];
var P#SUMV in [SUMMA];
var P#PRIM in [STRING_400];
var P#CURREN in [FT_MONEY_REF];
var P_BLOCK_0 in [POL_161P_PRIV];
var P_BLOCK_1 in [POL_161P_PRIV];
var P_BLOCK_2 in [POL_161P_PRIV];
var P_BLOCK_3 in [POL_161P_PRIV];
var P_BLOCK_4 in [POL_161P_PRIV];
var P_DOC in [DOCUMENT_REF];
var P#BRANCH in [BRANCH_REF];
var P_B_PL_OBSL in [CL_BANK_REF];
var P_B_PL_REP in [CL_BANK_REF];
var P_B_POL_OBSL in [CL_BANK_REF];
var P_B_POL_REP in [CL_BANK_REF];
var P_PRIZ6001 in [STRING_32];
var P_BANK_0 in [POL_161P_BANK];
var   P_BANK_1 in [POL_161P_BANK];
var   P_DESCR in [STRING_254];
var   P_METAL in [FT_MONEY_REF];
var   P_REG_DATE in [DATE];

empty=>NEW#AUTO_NEW(
   p_message
   ,p_info
   ,P#VO      --Код вида операций
   ,P#DATA      --Дата совершения операции
   ,P#SUME      --Сумма операций в рублевом эквиваленте
   ,P#SUMV      --Сумма операций в валюте ее проведения
   ,P#PRIM      --Основание совершение операции
   ,P#CURREN      --Цифровой код валюты
   ,P_BLOCK_0      --Сведения о  плательщике денежных средств по операции
   ,P_BLOCK_1      --Сведения о представителе плательщкика
   ,P_BLOCK_2      --Сведения о представителе получателя
   ,P_BLOCK_3      --Сведения о получателе денежных средств по операции
   ,P_BLOCK_4      --Участник операции по  поручению
   ,P_DOC      --Документ
   ,P#BRANCH      --Филиал
   ,P_B_PL_OBSL      --Банк плательщика, обслуживающий операцию
   ,P_B_PL_REP      --Банк плательщика, предоставивщий документы
   ,P_B_POL_OBSL      --Банк Получателя, обслуживающий операцию
   ,P_B_POL_REP      --Банк получателя, предоставивщий документы
   ,P_PRIZ6001      --Коды признаков необычных операций и сделок
   ,P_BANK_0      --Банк плательщика
   ,P_BANK_1      --Банк получателя
   ,P_DESCR      --Дополнительная информация об операции
   ,P_METAL      --Код метала
   ,P_REG_DATE      --Дата занесения операции в архив
   );
p_message := 'VALIDATE';
p_info := 'P_DOC';
P_DOC := doc;

empty=>NEW#AUTO_NEW(
   p_message
   ,p_info
   ,P#VO      --Код вида операций
   ,P#DATA      --Дата совершения операции
   ,P#SUME      --Сумма операций в рублевом эквиваленте
   ,P#SUMV      --Сумма операций в валюте ее проведения
   ,P#PRIM      --Основание совершение операции
   ,P#CURREN      --Цифровой код валюты
   ,P_BLOCK_0      --Сведения о  плательщике денежных средств по операции
   ,P_BLOCK_1      --Сведения о представителе плательщкика
   ,P_BLOCK_2      --Сведения о представителе получателя
   ,P_BLOCK_3      --Сведения о получателе денежных средств по операции
   ,P_BLOCK_4      --Участник операции по  поручению
   ,P_DOC      --Документ
   ,P#BRANCH      --Филиал
   ,P_B_PL_OBSL      --Банк плательщика, обслуживающий операцию
   ,P_B_PL_REP      --Банк плательщика, предоставивщий документы
   ,P_B_POL_OBSL      --Банк Получателя, обслуживающий операцию
   ,P_B_POL_REP      --Банк получателя, предоставивщий документы
   ,P_PRIZ6001      --Коды признаков необычных операций и сделок
   ,P_BANK_0      --Банк плательщика
   ,P_BANK_1      --Банк получателя
   ,P_DESCR      --Дополнительная информация об операции
   ,P_METAL      --Код метала
   ,P_REG_DATE      --Дата занесения операции в архив
   );

empty.NEW#AUTO_NEW(
   P#VO      --Код вида операций
   ,P#DATA      --Дата совершения операции
   ,P#SUME      --Сумма операций в рублевом эквиваленте
   ,P#SUMV      --Сумма операций в валюте ее проведения
   ,P#PRIM      --Основание совершение операции
   ,P#CURREN      --Цифровой код валюты
   ,P_BLOCK_0      --Сведения о  плательщике денежных средств по операции
   ,P_BLOCK_1      --Сведения о представителе плательщкика
   ,P_BLOCK_2      --Сведения о представителе получателя
   ,P_BLOCK_3      --Сведения о получателе денежных средств по операции
   ,P_BLOCK_4      --Участник операции по  поручению
   ,P_DOC      --Документ
   ,P#BRANCH      --Филиал
   ,P_B_PL_OBSL      --Банк плательщика, обслуживающий операцию
   ,P_B_PL_REP      --Банк плательщика, предоставивщий документы
   ,P_B_POL_OBSL      --Банк Получателя, обслуживающий операцию
   ,P_B_POL_REP      --Банк получателя, предоставивщий документы
   ,P_PRIZ6001      --Коды признаков необычных операций и сделок
   ,P_BANK_0      --Банк плательщика
   ,P_BANK_1      --Банк получателя
   ,P_DESCR      --Дополнительная информация об операции
   ,P_METAL      --Код метала
   ,P_REG_DATE      --Дата занесения операции в архив
   );
ggrey
Участник со стажем


Вступление в Клуб: 01.10.2007
СообщениеСр Май 21, 2008 14:46    Ответить с цитатой
Полезность: Нет оценки
Забыл убрать 'in' в объявлении переменных, но это не смертельноSmile
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеЧт Май 22, 2008 06:38    Ответить с цитатой
Полезность: Нет оценки
так то я и сам сделать могу...
вопрос был чтоб вызываемая операция сама все отбирала своим кодом.
т.е вызов сводился к одной строке
например
Код:
stdio.put_line_buf('<%CALL MAIN_DOCUM NEW#AUTO ||this%id||%>')

_________________
всегда есть как минимум 2 выхода
dnk_dz
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеЧт Май 22, 2008 08:58    Ответить с цитатой
Полезность: Нет оценки
Alexsey пишет:
так то я и сам сделать могу...
вопрос был чтоб вызываемая операция сама все отбирала своим кодом.
т.е вызов сводился к одной строке
например
Код:
stdio.put_line_buf('<%CALL MAIN_DOCUM NEW#AUTO ||this%id||%>')


Увы, чудес не бывает Smile
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеЧт Май 22, 2008 09:24    Ответить с цитатой
Полезность: Нет оценки
dnk_dz пишет:
Alexsey пишет:
так то я и сам сделать могу...
вопрос был чтоб вызываемая операция сама все отбирала своим кодом.
т.е вызов сводился к одной строке
например
Код:
stdio.put_line_buf('<%CALL MAIN_DOCUM NEW#AUTO ||this%id||%>')


Увы, чудес не бывает Smile

вы правы.. хотя жаль, конечно, что так нельзя сделать
_________________
всегда есть как минимум 2 выхода
ssa774
Профи


Вступление в Клуб: 30.11.2007
СообщениеВт Май 27, 2008 08:46    Ответить с цитатой
Полезность: Нет оценки
Может кто подскажет, как решить такую проблему:
есть простая операция, которая печатает файл Word с использование RUNTIME.[WORD]. Есть списочная операция, которая вызывает простую. Но: если делать вызов через
Код:

stdio.put_line_buf('<% CALL MAIN_DOCUM SVB_ZAPR_CL_OPER '||P_DOC||' %>');


То каждый раз отображается экранная форма и нужно для каждого экземпляра нажимать OK.
А если делать вызов через
Код:

P_DOC=>[SVB_ZAPR_CL_OPER](P_MESSAGE,P_INFO,P_DATA);

то в результате файл не отображается, хотя по логам видно, что заход в валидатор осуществляется. Скорей всего, не выполняется клиент-скрипт простой операции, но почему - не понятно.
Не отображать экранную форму операции никак нельзя, она нужна.
Может быт как-то можно программно нажимать кнопку ОК в простой операции?
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеВт Май 27, 2008 08:53    Ответить с цитатой
Полезность: Нет оценки
как ктото писал в этом посте... непомню точно кто
Код:
p_info = 'ok'

тогда должно имитироваться нажатие кнопки 'ok'
_________________
всегда есть как минимум 2 выхода


Последний раз редактировалось: Alexsey (Вт Май 27, 2008 08:58), всего редактировалось 2 раз(а)
dnk_dz
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеВт Май 27, 2008 08:54    Ответить с цитатой
Полезность: Нет оценки
Да, клиент скрипт не выполняется в случае P_DOC=>... по той причиние, что данный синтаксис вызывает только серверный валидатор.
В данном случае поможет только stdio.put_line_buf(<% CALL...). Чтобы не отражалась форма вызываемой операции нужно в свойствах операции поставить признак "Не отображать экранную форму".
ssa774
Профи


Вступление в Клуб: 30.11.2007
СообщениеВт Май 27, 2008 09:00    Ответить с цитатой
Полезность: Нет оценки
Alexsey пишет:
как ктото писал в этом посте... непомню точно кто
Код:
p_info = 'ok'

тогда должно сымитироваться нажатие кнопки 'ok'

а где это писать? в вызывающей операции? может там должно быть не "=", а ":="? и как вызывающая операция поймет, что это p_info именно вызываемой операции?
Alex2019
Профи


Вступление в Клуб: 02.07.2007
СообщениеВт Май 27, 2008 09:01    Ответить с цитатой
Полезность: 1
ssa774 пишет:
Может быт как-то можно программно нажимать кнопку ОК в простой операции?

Попробуйте при вызове простой операции по stdio.put_line_buf(<% CALL...) в ее дефолтном клиент-скрипте указать
Код:
Call Form1.ScriptServerValidate( OK, "OK")

а признак "Не отображать экранную форму" не выставлять. Проверки при загрузке формы - "Сервер, Клиент"


Последний раз редактировалось: Alex2019 (Вт Май 27, 2008 09:04), всего редактировалось 1 раз
ssa774
Профи


Вступление в Клуб: 30.11.2007
СообщениеВт Май 27, 2008 09:02    Ответить с цитатой
Полезность: Нет оценки
dnk_dz пишет:
Да, клиент скрипт не выполняется в случае P_DOC=>... по той причиние, что данный синтаксис вызывает только серверный валидатор.
В данном случае поможет только stdio.put_line_buf(<% CALL...). Чтобы не отражалась форма вызываемой операции нужно в свойствах операции поставить признак "Не отображать экранную форму".


В том то и дело, что форма нужна. На форму будут добавлены параметры и простая операция должна работать сама по себе. Списочная и простая находятся в разных типах.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
На страницу Пред.  1, 2, 3, 4, 5  След.
Страница 2 из 5

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru