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

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


Вступление в Клуб: 19.09.2007
СообщениеВт Май 27, 2008 10:44    Ответить с цитатой
Полезность: Нет оценки
ssa774 пишет:
Alex2019 пишет:
Светлана, прошу прощения за назойливость, но чем вас не устроило решение Call Form1.ScriptServerValidate( OK, "OK")? (см. месс. 09.01)

Такое ощущение, что все кругом что-то знают... Smile в этой теме первое сообщение от 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    Ответить с цитатой
Полезность: Нет оценки
dnk_dz пишет:
Да


В таком случае полностью поддерживаю Smile
И вызывается операция (валидаторы и тело), и "нажимается" кнопка ОК, и не отображается форма.

PS хотя, в описании задачи на предыдущих страницах этой ветки немудрено запутаться... Wink
ssa774
Профи


Вступление в Клуб: 30.11.2007
СообщениеВт Май 27, 2008 11:40    Ответить с цитатой
Полезность: Нет оценки
dnk_dz пишет:
ssa774 пишет:
Alex2019 пишет:
Светлана, прошу прощения за назойливость, но чем вас не устроило решение Call Form1.ScriptServerValidate( OK, "OK")? (см. месс. 09.01)

Такое ощущение, что все кругом что-то знают... Smile в этой теме первое сообщение от 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

А вы все говорили - низзя-а, низзя-а.. Very Happy
dnk_dz
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеПт Май 30, 2008 05:41    Ответить с цитатой
Полезность: Нет оценки
Цитата:
А вы все говорили - низзя-а, низзя-а...

Однозначно, необходимо занести в "Мастер-класс участников клуба". Very Happy

P.S.
Век живи - век учись Rolling Eyes
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);


отрабатывает... вторая же ругается на недостаток переменных, по всей видимости через валидатор нужно в обязательном порядке описывать все переменные. Sad

Код:
stdio.put_line_buf('<% PLPCALL P_DOG.[PSC_CANC_TERM](P_DATE => '''||P_DATE||''')%>');
Тупо не отрабатывает.
_________________
Всего должно быть в меру.
alexiy
Профи


Вступление в Клуб: 29.06.2007
СообщениеЧт Фев 11, 2010 16:36    Ответить с цитатой
Полезность: Нет оценки
zh пишет:
по всей видимости через валидатор нужно в обязательном порядке описывать все переменные. Sad

совершенно справедливо.
а в чем проблема?
опишите все Smile
...
прошу прощения, это я несколько ерунду написал:"::[DEPN]=>[PSK_CL](...)".
имелось в виду, конечно, "dog=>[PSK_CL] (...)". но Вы и сами поняли Smile
_________________
two bee or not two bee
zh
Участник со стажем


Вступление в Клуб: 10.12.2009
СообщениеЧт Фев 11, 2010 17:08    Ответить с цитатой
Полезность: Нет оценки
alexiy пишет:
zh пишет:
по всей видимости через валидатор нужно в обязательном порядке описывать все переменные. Sad

совершенно справедливо.
а в чем проблема?
опишите все Smile


все: Smile

Стоит задача автоматически расторгать депозитные договора, у которых наступила дата окончания договора. Без приложения чьих либо рук. Изначально была попытка решения через 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] не может иметь экземпляров или отсутствует таблица

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

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