Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
dnk_dz Эксперт
Вступление в Клуб: 19.09.2007
|
Вт Май 27, 2008 10:44   |
|
Полезность: Нет оценки
|
ssa774 пишет: | Alex2019 пишет: | Светлана, прошу прощения за назойливость, но чем вас не устроило решение Call Form1.ScriptServerValidate( OK, "OK")? (см. месс. 09.01) |
Такое ощущение, что все кругом что-то знают... в этой теме первое сообщение от 15/05 |
ScriptServerValidate вызывает серверный блок валидации, а не генерирует события.
Еще раз повторю, в вашем случае поможет только отключение формы операции. Можно сделать копию простой операции специально для вызова из списочной, чтобы в простой осталась форма. |
|
 |
lexus Профи
Вступление в Клуб: 28.09.2007
|
Вт Май 27, 2008 11:15   |
|
Полезность: Нет оценки
|
dnk_dz пишет: | Еще раз повторю, в вашем случае поможет только отключение формы операции. Можно сделать копию простой операции специально для вызова из списочной, чтобы в простой осталась форма. |
Я правильно понял - имеете в виду крыж "Не отображать экранную форму операции"? |
|
 |
dnk_dz Эксперт
Вступление в Клуб: 19.09.2007
|
Вт Май 27, 2008 11:18   |
|
Полезность: Нет оценки
|
lexus пишет: | dnk_dz пишет: | Еще раз повторю, в вашем случае поможет только отключение формы операции. Можно сделать копию простой операции специально для вызова из списочной, чтобы в простой осталась форма. |
Я правильно понял - имеете в виду крыж "Не отображать экранную форму операции"? |
Да |
|
 |
lexus Профи
Вступление в Клуб: 28.09.2007
|
Вт Май 27, 2008 11:22   |
|
Полезность: Нет оценки
|
В таком случае полностью поддерживаю
И вызывается операция (валидаторы и тело), и "нажимается" кнопка ОК, и не отображается форма.
PS хотя, в описании задачи на предыдущих страницах этой ветки немудрено запутаться...  |
|
 |
ssa774 Профи
Вступление в Клуб: 30.11.2007
|
Вт Май 27, 2008 11:40   |
|
Полезность: Нет оценки
|
dnk_dz пишет: | ssa774 пишет: | Alex2019 пишет: | Светлана, прошу прощения за назойливость, но чем вас не устроило решение Call Form1.ScriptServerValidate( OK, "OK")? (см. месс. 09.01) |
Такое ощущение, что все кругом что-то знают... в этой теме первое сообщение от 15/05 |
ScriptServerValidate вызывает серверный блок валидации, а не генерирует события.
Еще раз повторю, в вашем случае поможет только отключение формы операции. Можно сделать копию простой операции специально для вызова из списочной, чтобы в простой осталась форма. |
это-то конечно можно... только операции плодить не хочется. должно же быть какое-то решение. Когда печатаем файл word с помощью MSLIB никаких проблем не возникает, есть форма на простой операции и она не отображается. А с RUNTIME.[WORD], которая быстрее работает - не получается. |
|
 |
dnk_dz Эксперт
Вступление в Клуб: 19.09.2007
|
Ср Май 28, 2008 06:01   |
|
Полезность: Нет оценки
|
Цитата: | только операции плодить не хочется. |
Можно сделать не просто копию операции, а операцию, которая использует форму и код нужной операции через obj=>[...], obj.[...].
Тогда не будет дублирования кода. Правда, я не уверен на 100%, что такое будет работать. |
|
 |
ssa774 Профи
Вступление в Клуб: 30.11.2007
|
Чт Май 29, 2008 10:41   |
|
Полезность: 4
|
dnk_dz пишет: | Еще раз повторю, в вашем случае поможет только отключение формы операции. Можно сделать копию простой операции специально для вызова из списочной, чтобы в простой осталась форма. |
Все-таки можно сделать вызов простой операции, чтобы ее форма не отображалась и клиент-скрипт выполнялся.
Простая операция печатает документ Word для экземпляра. Тип результата - строка или мемо, как угодно.
Списочная операция - в проверках Сервер-Клиент, на форме переменная - строка или мемо, как в простой. Клиент-Скрипт списочной такой же, как у простой.
Проверка списочной выглядит так:
Код: |
P_DOC ref [MAIN_DOCUM];
P_MES string;
begin
if P_MESSAGE = 'DEFAULT' then
f_click := true;
index_t := this.first;
elsif P_MESSAGE = 'VALIDATE' then
if f_click then
P_DOC := this(index_t).[ID_DOC];
P_MES := 'DEFAULT';
P_DOC=>[SVB_ZAPR_CL_OPE1](P_MES,P_INFO,P_DATA,P_SIGN_PERSON,P_SIGN_FIO,P_SIGN_CASTA); -- здесь запуск Word
P_MES := 'VALIDATE';
P_DOC=>[SVB_ZAPR_CL_OPE1](P_MES,P_INFO,P_DATA,P_SIGN_PERSON,P_SIGN_FIO,P_SIGN_CASTA); -- формирование клиент-скрипта
index_t := index_t + 1;
if index_t > this.last then
f_click := false;
end if;
end if;
end if;
end;
|
манипуляции с флагом f_click - для того, чтобы бегать по списку и закончить, как только напечатали последний экземпляр
Клиент-Скрипт списочной:
Код: |
Public Function Main(LastControl)
If LastControl Is Nothing Then
'
Elseif LastControl is OK then
While Memo1.Text <> ""
Execute Memo1.Text
Memo1 = ""
Call Form1.ScriptServerValidate(OK, "OK")
WEND
End If
Main = True ' Результирующее значение валидатора (True или False)
End Function
|
А вы все говорили - низзя-а, низзя-а..  |
|
 |
dnk_dz Эксперт
Вступление в Клуб: 19.09.2007
|
Пт Май 30, 2008 05:41   |
|
Полезность: Нет оценки
|
Цитата: | А вы все говорили - низзя-а, низзя-а... |
Однозначно, необходимо занести в "Мастер-класс участников клуба".
P.S.
Век живи - век учись  |
|
 |
zh Участник со стажем
Вступление в Клуб: 10.12.2009
|
Чт Фев 11, 2010 13:17   |
|
Полезность: Нет оценки
|
Товарисчи!.. может кто подскажет...
Стоит задача автоматически закрывать депозитные договора, по наступлению даты окончания. В текущем исполнении удалось добиться следующего:
Имеется:
операция 1.
по "Закрытие,расторжение" копия дистрибутивной, но с отключенной экранной формы.
операция 2. (простая)
Вызывающая первую таким нехитрым способом:
stdio.put_line_buf('<% PLPCALL P_DOG.[PSC_CANC_TERM](P_DATE => '''||P_DATE||''')%>');
операция 3. (групповая)
Вызывающая вторую тоже не особо сложным образом:
stdio.put_line_buf('<% CALL DEPN PSK_CL '|| dog%id ||' %>');
По сути, если выполнять операцию ручками, с минимальным уровнем отладки, все проходит на ура, а вот если попытаться вставить ее в задачи по расписанию, лог пишется, но ничего не происходит. В чем может быть загвоздка? _________________ Всего должно быть в меру. |
|
 |
w00per Профи
Вступление в Клуб: 17.10.2007
|
Чт Фев 11, 2010 13:36   |
|
Полезность: Нет оценки
|
ЦФТ пишет: | Также Договор может быть закрыт при выполнении завершения операционного дня общесистемной процедурой: проверяются остатки на счетах, если остатки нулевые, счета закрываются – им присваивается статус "Закрыт" и указывается дата закрытия, одновременно выполняется закрытие Договоров, привязанных к закрываемым счетам: они также переводятся в состояние "Закрыт" и в них указывается "Дата закрытия". |
_________________ I Lie About Everything. |
|
 |
zh Участник со стажем
Вступление в Клуб: 10.12.2009
|
Чт Фев 11, 2010 14:05   |
|
Полезность: Нет оценки
|
w00per пишет: | ЦФТ пишет: | Также Договор может быть закрыт при выполнении завершения операционного дня общесистемной процедурой: проверяются остатки на счетах, если остатки нулевые, счета закрываются – им присваивается статус "Закрыт" и указывается дата закрытия, одновременно выполняется закрытие Договоров, привязанных к закрываемым счетам: они также переводятся в состояние "Закрыт" и в них указывается "Дата закрытия". |
|
Да, в групповой обработке депозитных договоров имеется возможность закрывать помеченные к закрытию договора, но.. что бы их пометить, нужно расторгнуть договор... по логике ЦФТ договора не могут расторгаться в автоматическом режиме..., только закрываться. Поэтому подобных механизмов попросту не предусмотрено... в Ритейле они были, но сейчас разговор о "ЦФТ - Банк" _________________ Всего должно быть в меру. |
|
 |
alexiy Профи
Вступление в Клуб: 29.06.2007
|
Чт Фев 11, 2010 15:54   |
|
Полезность: 1
|
zh пишет: | В чем может быть загвоздка? |
задания по расписанию не умеют запускать экранные формы операций.
если перед вызовом тела операции непременно нужно вызвать её валидатор, вместо Код: | stdio.put_line_buf('<% PLPCALL ... | и Код: | stdio.put_line_buf('<% CALL ... | можно использовать конструкцию вида:
Код: | ::[DEPN]=>[PSK_CL](...) |
_________________ two bee or not two bee |
|
 |
zh Участник со стажем
Вступление в Клуб: 10.12.2009
|
Чт Фев 11, 2010 16:33   |
|
Полезность: Нет оценки
|
alexiy пишет: | zh пишет: | В чем может быть загвоздка? |
задания по расписанию не умеют запускать экранные формы операций.
если перед вызовом тела операции непременно нужно вызвать её валидатор, вместо Код: | stdio.put_line_buf('<% PLPCALL ... | и Код: | stdio.put_line_buf('<% CALL ... | можно использовать конструкцию вида:
Код: | ::[DEPN]=>[PSK_CL](...) |
|
Сейчас из первой операции вызов второй осуществил следующей конструкцией:
Код: |
dog=>[PSK_CL](P_MESSAGE, P_INFO, P_DATE, P_DOG);
P_MESSAGE := 'VALIDATE';
P_INFO := 'OK';
dog=>[PSK_CL](P_MESSAGE, P_INFO, P_DATE, P_DOG);
dog->(DEPN)[PSK_CL](P_DATE,P_DOG);
|
отрабатывает... вторая же ругается на недостаток переменных, по всей видимости через валидатор нужно в обязательном порядке описывать все переменные.
Код: | stdio.put_line_buf('<% PLPCALL P_DOG.[PSC_CANC_TERM](P_DATE => '''||P_DATE||''')%>'); | Тупо не отрабатывает. _________________ Всего должно быть в меру. |
|
 |
alexiy Профи
Вступление в Клуб: 29.06.2007
|
Чт Фев 11, 2010 16:36   |
|
Полезность: Нет оценки
|
zh пишет: | по всей видимости через валидатор нужно в обязательном порядке описывать все переменные. |
совершенно справедливо.
а в чем проблема?
опишите все
...
прошу прощения, это я несколько ерунду написал:"::[DEPN]=>[PSK_CL](...)".
имелось в виду, конечно, "dog=>[PSK_CL] (...)". но Вы и сами поняли  _________________ two bee or not two bee |
|
 |
zh Участник со стажем
Вступление в Клуб: 10.12.2009
|
Чт Фев 11, 2010 17:08   |
|
Полезность: Нет оценки
|
alexiy пишет: | zh пишет: | по всей видимости через валидатор нужно в обязательном порядке описывать все переменные. |
совершенно справедливо.
а в чем проблема?
опишите все
|
все:
Стоит задача автоматически расторгать депозитные договора, у которых наступила дата окончания договора. Без приложения чьих либо рук. Изначально была попытка решения через 3 операции по связке на PLPCALL'ах
первая операция групповая - вылавливала договора, подлежащие закрытию, вызывала вторую операцию:
Код: | stdio.put_line_buf('<% CALL DEPN PSK_CL (P_DATE =>'''||P_DATE||''') '|| dog%id ||' %>'); |
вторая, простая, в свою очередь была до безобразия простой:
Код: |
begin
P_DATE:= to_date(sys_context(user_context,'CLOSE_DATE_FROM'), 'dd/mm/yyyy');
if P_DATE is null then
P_DATE:=::[SYSTEM].[OP_DATE];
end if;
stdio.put_line_buf('<% PLPCALL P_DOG.[PSC_CANC_TERM](P_DATE => '''||P_DATE||''')%>');
end;
|
Вызов PSC_CANC_TERM (копия дистрибьютной CANC_TERM с отключенной экранной формой)
В общем, все это замечательно работает только в том случае, если исходная, первая операция запускается ручками... Та, что ловит договора... Параметры Экранной формы - Дата закрытия и филиал.
Сейчас пытаюсь перетащить все это в Задачи. Параметры зашиваем в операцию.
Вызов второго PLPCALL'a...
Код: | stdio.put_line_buf('<% PLPCALL P_DOG.[PSC_CANC_TERM](P_DATE => '''||P_DATE||''')%> |
...может и происходит, но сама операция уже не отрабатывает.
Пытаюсь найти пути решения...
Новая попытка:
Код: |
dog=>[CANC_TERM](P_MESSAGE, P_INFO,P_DATE,P_SUMMA,P_CLIENT_REQ,P_COURCE,P_SUMM_BACK,P_SUMM_BACK_CUR,P_NEW_VID_DOG,P_RET_DEBIT,P_RET_DEBIT_ACC);
P_MESSAGE := 'VALIDATE';
P_INFO := 'OK';
dog=>[CANC_TERM](P_MESSAGE, P_INFO,P_DATE,P_SUMMA,P_CLIENT_REQ,P_COURCE,P_SUMM_BACK,P_SUMM_BACK_CUR,P_NEW_VID_DOG,P_RET_DEBIT,P_RET_DEBIT_ACC);
dog->(DEPN)[CANC_TERM](P_DATE,P_SUMMA,P_CLIENT_REQ,P_COURCE,P_SUMM_BACK,P_SUMM_BACK_CUR,P_NEW_VID_DOG,P_RET_DEBIT,P_RET_DEBIT_ACC);
|
В обход второй операции с использованием дистрибутивной...
Падает на параметрах...
ORA-20999: CLS-NO_INSTANCES: Тип [PAY_WAY] не может иметь экземпляров или отсутствует таблица
Думал, он их сам присвоит, аннет.  _________________ Всего должно быть в меру. |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|