Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
ssa774 Профи
Вступление в Клуб: 30.11.2007
|
Вт Дек 20, 2011 13:02  Передача параметров по PLPCALL |
|
Полезность: Нет оценки
|
Можно ли передать массив структур из одной операции в другую?
Операцию вызываю так:
Код: |
stdio.put_line_buf('<% PLPCALL [SVB_207P_AN].[SVB_AN_XLS](P_DATE_S =>'''||P_DATE_BEG||''', %PARAM%.P_DATE_E =>'''|| P_DATE_END||''', %PARAM%.P_FILIAL => '''||P_FILIAL||''') %>');
|
Простое присваивание
Код: |
[SVB_207P_AN].SVB_AN_XLS.V_ACC_ARR := V_ACC_ARR;
|
и поэкземплярная передача не работают...
Код: |
i := V_ACC_ARR.first;
while i<=V_ACC_ARR.count loop
[SVB_207P_AN].SVB_AN_XLS.V_ACC_ARR(i).ACC := V_ACC_ARR(i).ACC;
[SVB_207P_AN].SVB_AN_XLS.V_ACC_ARR(i).BOOL := V_ACC_ARR(i).BOOL;
i := i+1;
end loop;
|
|
|
 |
Random Эксперт
Вступление в Клуб: 27.06.2011
|
Вт Дек 20, 2011 13:15  Re: Передача параметров по PLPCALL |
|
Полезность: Нет оценки
|
ssa774 пишет: | Можно ли передать массив структур из одной операции в другую?
Операцию вызываю так:
Код: |
stdio.put_line_buf('<% PLPCALL [SVB_207P_AN].[SVB_AN_XLS](P_DATE_S =>'''||P_DATE_BEG||''', %PARAM%.P_DATE_E =>'''|| P_DATE_END||''', %PARAM%.P_FILIAL => '''||P_FILIAL||''') %>');
|
Простое присваивание
Код: |
[SVB_207P_AN].SVB_AN_XLS.V_ACC_ARR := V_ACC_ARR;
|
и поэкземплярная передача не работают...
Код: |
i := V_ACC_ARR.first;
while i<=V_ACC_ARR.count loop
[SVB_207P_AN].SVB_AN_XLS.V_ACC_ARR(i).ACC := V_ACC_ARR(i).ACC;
[SVB_207P_AN].SVB_AN_XLS.V_ACC_ARR(i).BOOL := V_ACC_ARR(i).BOOL;
i := i+1;
end loop;
|
|
Дело не в присваивании, а в вызове.
Условимся в аналогиях: вызов операции с поднятием экранной формы - это как бы отправка письма твоему собеседнику.
Прямой вызов из кода по имени операции - аналогичен телефонному звонку.
То, что ты делаешь (stdio.put_line_buf('<% PLPCALL [SVB_...) ) - это ты отправил письмо. Причём бумажное.
Бессмысленно после этого немедленно звонить и спрашивать результаты.
вызови просто
Код: | ::[SVB_207P_AN].[SVB_AN_XLS](P_DATE_S == P_DATE_BEG
, P_DATE_E == P_DATE_END
, P_FILIAL == P_FILIAL
);
[SVB_207P_AN].SVB_AN_XLS.V_ACC_ARR := V_ACC_ARR;
|
|
|
 |
ssa774 Профи
Вступление в Клуб: 30.11.2007
|
Вт Дек 20, 2011 13:44   |
|
Полезность: Нет оценки
|
Просто нельзя, там нужно экранную форму поднимать с клиент-скриптом. |
|
 |
vtar Эксперт
Вступление в Клуб: 20.03.2009
|
Вт Дек 20, 2011 14:08   |
|
Полезность: Нет оценки
|
Что то не нашел у себя на схеме такого объекта [SVB_207P_AN] - локальная доработка ?
Мысль такая - поэкземплярная передача работает , но где то в операции происходит явная инициализация массива, которая "затирает" переданные значения. Если выложите код, можно подумать. |
|
 |
maestro Профи
Вступление в Клуб: 12.10.2010
|
Вт Дек 20, 2011 14:35   |
|
Полезность: Нет оценки
|
Должны работать и простое присваивание и поэлементная передача..
В противном случае, массив переинициализируется в валидаторе. |
|
 |
Random Эксперт
Вступление в Клуб: 27.06.2011
|
Чт Дек 22, 2011 10:18   |
|
Полезность: Нет оценки
|
ssa774 пишет: | Просто нельзя, там нужно экранную форму поднимать с клиент-скриптом. |
Так, я осёл.
Насколько я понял, ты пытаешься проинициализировать переменные операции, а потом её вызвать с поднятием экранной формы, да?
Так нельзя.
Переменные обналливаются при вызове.
Заведи в операции [SVB_207P_AN].SVB_AN_XLS глобальные переменные, и используй их для инициализации перемнных операции в секции валидации.
Или перенеси переменные в параметры. |
|
 |
ssa774 Профи
Вступление в Клуб: 30.11.2007
|
Чт Дек 22, 2011 10:26   |
|
Полезность: Нет оценки
|
Random пишет: |
Заведи в операции [SVB_207P_AN].SVB_AN_XLS глобальные переменные, и используй их для инициализации перемнных операции в секции валидации.
Или перенеси переменные в параметры. |
Да, это я уже поняла. Операция поднимается с экранной формой, если нажать на ОК, все выполняется. Но пользователю так не нравится..., хочет автоматическое выполнение.
Вызываю без экранной формы, выполняется блок валидации, но клиент-скрипт не выполняется.
Вопрос: как вызвать операцию печати отчета Excel из другой операции без поднятия экранной формы, чтобы выполнялся клиент-скрипт вызываемой операции? |
|
 |
maestro Профи
Вступление в Клуб: 12.10.2010
|
Чт Дек 22, 2011 10:51   |
|
Полезность: 1
|
ssa774 пишет: |
Вопрос: как вызвать операцию печати отчета Excel из другой операции без поднятия экранной формы, чтобы выполнялся клиент-скрипт вызываемой операции? |
После выполнения валидатора вызываемой операции, код VB-скрипта формирования XL можно считать из пакета [EXCEL] и выполнить в клиент-скрипте вызывающей операции. |
|
 |
Volod Эксперт
Вступление в Клуб: 19.09.2007
|
Чт Дек 22, 2011 11:01   |
|
Полезность: Нет оценки
|
PLPCALL-ом и вызывается и без формы. Только что проверил - все работает. |
|
 |
ssa774 Профи
Вступление в Клуб: 30.11.2007
|
Чт Дек 22, 2011 11:05   |
|
Полезность: Нет оценки
|
Volod пишет: | PLPCALL-ом и вызывается и без формы. Только что проверил - все работает. |
А в вызываемой операции не стоит ли флажок "Не отображать экранную форму"?
Если да, то вызывается.
Мне нужно вызывать операцию печати отчета из другой операции без отображения экранной формы. Но такой флажок ставить нельзя, т.к. операция нужна для самостоятельного вызова с отображением экранной формы.
Можно примерчик вызова по plpcall без отображения формы? |
|
 |
Volod Эксперт
Вступление в Клуб: 19.09.2007
|
Чт Дек 22, 2011 12:03   |
|
Полезность: 1
|
Как вариант -
Код: | If LastControl Is Nothing Then
....
If что-то then
call Form1.ScriptPostEvent(OK, "CLICK")
End if
|
|
|
 |
ssa774 Профи
Вступление в Клуб: 30.11.2007
|
Чт Дек 22, 2011 12:06   |
|
Полезность: Нет оценки
|
Volod пишет: | Как вариант -
Код: | If LastControl Is Nothing Then
....
If что-то then
call Form1.ScriptPostEvent(OK, "CLICK")
End if
|
|
Не работает так, это событие происходит после выполнения скрипта. А в скрипт не заходит вообще. |
|
 |
Volod Эксперт
Вступление в Клуб: 19.09.2007
|
Чт Дек 22, 2011 12:08   |
|
Полезность: Нет оценки
|
Я перед ответом проверил - работает. Форма рисуется на экране - но по ОК переходит к выполнению. |
|
 |
vtar Эксперт
Вступление в Клуб: 20.03.2009
|
Чт Дек 22, 2011 12:32   |
|
Полезность: Нет оценки
|
Цитата: | Не работает так, это событие происходит после выполнения скрипта. А в скрипт не заходит вообще. |
в операции,
Дополнительные свойства - Проверки -
при загрузке формы операции:
при смене элемента управления:
что выставлено ? |
|
 |
ssa774 Профи
Вступление в Клуб: 30.11.2007
|
Чт Дек 22, 2011 12:56   |
|
Полезность: Нет оценки
|
Цитата: | Цитата: | Не работает так, это событие происходит после выполнения скрипта. А в скрипт не заходит вообще. |
в операции,
Дополнительные свойства - Проверки -
при загрузке формы операции:
при смене элемента управления:
что выставлено ? |
и в вызываемой и в вызывающей операции стоит Клиент-Сервер.
Вызываемая операция - это печать отчета в Excel, она бы иначе и не работала. Когда ее отдельно вызываю, печатает отчет с выполнением скрипта. Попробую прописать PostEvent. |
|
 |
|