Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Пт Май 16, 2008 11:49   |
|
Полезность: Нет оценки
|
разговор на самом деле странный..
чтобы передать в операцию временные переменные.. в них нужно занести значения.. а значения этих переменных как раз и заносит ВЫЗЫВАЕМАЯ операция....
а так как вы предлагаете не копировать код по заполнению значениями временных переменных я и спрашиваю.. может вы каким либо другим способом временные переменные заполняете.. неизвестным мне _________________ всегда есть как минимум 2 выхода |
|
 |
alexiy Профи
Вступление в Клуб: 29.06.2007
|
Пт Май 16, 2008 11:54   |
|
Полезность: Нет оценки
|
Alexsey пишет: | разговор на самом деле странный..
чтобы передать в операцию временные переменные.. в них нужно занести значения.. а значения этих переменных как раз и заносит ВЫЗЫВАЕМАЯ операция....
а так как вы предлагаете не копировать код по заполнению значениями временных переменных я и спрашиваю.. может вы каким либо другим способом временные переменные заполняете.. неизвестным мне |
да, другим.
вот он: 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' в объявлении переменных, но это не смертельно |
|
 |
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||%>') |
|
Увы, чудес не бывает  |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Чт Май 22, 2008 09:24   |
|
Полезность: Нет оценки
|
dnk_dz пишет: | Alexsey пишет: | так то я и сам сделать могу...
вопрос был чтоб вызываемая операция сама все отбирала своим кодом.
т.е вызов сводился к одной строке
например
Код: | stdio.put_line_buf('<%CALL MAIN_DOCUM NEW#AUTO ||this%id||%>') |
|
Увы, чудес не бывает  |
вы правы.. хотя жаль, конечно, что так нельзя сделать _________________ всегда есть как минимум 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   |
|
Полезность: Нет оценки
|
как ктото писал в этом посте... непомню точно кто
тогда должно имитироваться нажатие кнопки '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 пишет: | как ктото писал в этом посте... непомню точно кто
тогда должно сымитироваться нажатие кнопки '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...). Чтобы не отражалась форма вызываемой операции нужно в свойствах операции поставить признак "Не отображать экранную форму". |
В том то и дело, что форма нужна. На форму будут добавлены параметры и простая операция должна работать сама по себе. Списочная и простая находятся в разных типах. |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|