Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Kozyrev Участник - экстремал
Вступление в Клуб: 03.09.2007
|
Пт Мар 28, 2008 14:47  Операция типа «Печать» |
|
Полезность: Нет оценки
|
Есть операция (1), которая формирует строку текста. Как можно передать эту строку в операцию (2) типа "Печать"?
Я создал операцию типа "печать", задал в ней параметр типа "memo" и в РЭФ указал вывод этой строки.
Как я понимаю из нужно вызвать из операции формирующей нужную строку операцию печати и передать ей эту строку.
Подскажите, пожалуйста, как это можно сделать?
P.S. Может это вообще делается как-то иначе?
P.P.S. Операция (1) имеет форму для ввода значений пользователем. |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Пт Мар 28, 2008 15:33  Re: Операция типа «Печать» |
|
Полезность: Нет оценки
|
Kozyrev пишет: | Есть операция (1), которая формирует строку текста. Как можно передать эту строку в операцию (2) типа "Печать"?
Я создал операцию типа "печать", задал в ней параметр типа "memo" и в РЭФ указал вывод этой строки.
Как я понимаю из нужно вызвать из операции формирующей нужную строку операцию печати и передать ей эту строку.
Подскажите, пожалуйста, как это можно сделать?
P.S. Может это вообще делается как-то иначе?
P.P.S. Операция (1) имеет форму для ввода значений пользователем. |
например как написано в операции ::[MAIN_DOCUM].[PRINT], закладка проверка:
Код: |
for i in 1..P_COUNT loop --чтоб работало и по нескольким ОТМЕЧЕНЫМ
stdio.put_line_buf('<% CALL MAIN_DOCUM PRINT_DOC '||this||' %>');
end loop; |
_________________ всегда есть как минимум 2 выхода |
|
 |
Kozyrev Участник - экстремал
Вступление в Клуб: 03.09.2007
|
Пт Мар 28, 2008 15:39   |
|
Полезность: Нет оценки
|
Alexsey
В таком случае операции печати будет передаваться ID печатаемого экземпляра, а необходимо передать ей строку текста... |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Пт Мар 28, 2008 15:42   |
|
Полезность: Нет оценки
|
Kozyrev пишет: | Alexsey
В таком случае операции печати будет передаваться ID печатаемого экземпляра, а необходимо передать ей строку текста... |
вместо this можно передать любую переменную.. там же написано, что это как образец...
тогда будет выглядеть примерно так:
Код: |
for i in 1..P_COUNT loop --чтоб работало и по нескольким ОТМЕЧЕНЫМ
stdio.put_line_buf('<% CALL MAIN_DOCUM PRINT_DOC '||tmp_str||' %>');
end loop; |
_________________ всегда есть как минимум 2 выхода |
|
 |
timochev Эксперт
Вступление в Клуб: 02.07.2007
|
Пт Мар 28, 2008 15:49   |
|
Полезность: Нет оценки
|
Alexsey пишет: | вместо this можно передать любую переменную.. там же написано, что это как образец...
тогда будет выглядеть примерно так:
Код: |
for i in 1..P_COUNT loop --чтоб работало и по нескольким ОТМЕЧЕНЫМ
stdio.put_line_buf('<% CALL MAIN_DOCUM PRINT_DOC '||tmp_str||' %>');
end loop; |
| Разве такое будет работать? Проверено? А как же ID? Ведь операция печати действует как простая - над неким экземпляром. |
|
 |
timochev Эксперт
Вступление в Клуб: 02.07.2007
|
Пт Мар 28, 2008 15:51   |
|
Полезность: Нет оценки
|
Kozyrev пишет: | Alexsey
В таком случае операции печати будет передаваться ID печатаемого экземпляра, а необходимо передать ей строку текста... | Мы передаем через предварительную инициализацию переменных в глобальных описаниях операции печати. |
|
 |
Kozyrev Участник - экстремал
Вступление в Клуб: 03.09.2007
|
Пт Мар 28, 2008 15:56   |
|
Полезность: Нет оценки
|
Цитата: | Разве такое будет работать? Проверено? А как же ID? Ведь операция печати действует как простая - над неким экземпляром. |
Пробовал - не работает. Но, правда у меня так много опыта в Pl/Plus чтобы быть уверенным на все 100. |
|
 |
dnk_dz Эксперт
Вступление в Клуб: 19.09.2007
|
Пт Мар 28, 2008 15:58   |
|
Полезность: 3
|
timochev пишет: | Alexsey пишет: | вместо this можно передать любую переменную.. там же написано, что это как образец...
тогда будет выглядеть примерно так:
Код: |
for i in 1..P_COUNT loop --чтоб работало и по нескольким ОТМЕЧЕНЫМ
stdio.put_line_buf('<% CALL MAIN_DOCUM PRINT_DOC '||tmp_str||' %>');
end loop; |
| Разве такое будет работать? Проверено? А как же ID? Ведь операция печати действует как простая - над неким экземпляром. |
Так точно работать не будет.
Можно использовать PLPCALL. Типа
Код: | stdio.put_line_buf('<% PLPCALL %THIS%.[ИМЯ_ОПЕРАЦИИ](ИМЯ_ПАРАМЕТРА => '''||ЗНАЧАНИЕ||''')%>');
|
например,
Код: | stdio.put_line_buf('<% PLPCALL %THIS%.[PRINT_STR](%VAR%.P_STR => '''||str||''')%>');
|
|
|
 |
dnk_dz Эксперт
Вступление в Клуб: 19.09.2007
|
Пт Мар 28, 2008 16:01   |
|
Полезность: Нет оценки
|
dnk_dz пишет: | timochev пишет: | Alexsey пишет: | вместо this можно передать любую переменную.. там же написано, что это как образец...
тогда будет выглядеть примерно так:
Код: |
for i in 1..P_COUNT loop --чтоб работало и по нескольким ОТМЕЧЕНЫМ
stdio.put_line_buf('<% CALL MAIN_DOCUM PRINT_DOC '||tmp_str||' %>');
end loop; |
| Разве такое будет работать? Проверено? А как же ID? Ведь операция печати действует как простая - над неким экземпляром. |
Так точно работать не будет.
Можно использовать PLPCALL. Типа
Код: | stdio.put_line_buf('<% PLPCALL %THIS%.[ИМЯ_ОПЕРАЦИИ](ИМЯ_ПАРАМЕТРА => '''||ЗНАЧАНИЕ||''')%>');
|
например,
Код: | stdio.put_line_buf('<% PLPCALL %THIS%.[PRINT_STR](%VAR%.P_STR => '''||str||''')%>');
|
|
Вдогонку... Не забывайте, что в параметрах операции на закладке "Свойства/Дополнительные свойства" надо поставить признак "Выводит команды в буфер сессии" |
|
 |
Kozyrev Участник - экстремал
Вступление в Клуб: 03.09.2007
|
Пт Мар 28, 2008 17:09   |
|
Полезность: Нет оценки
|
А в самой операции печати нужно писать дополнительно код? |
|
 |
timochev Эксперт
Вступление в Клуб: 02.07.2007
|
Пт Мар 28, 2008 17:11   |
|
Полезность: Нет оценки
|
А все ли нормально с инициализацией переменных операции печати при ее вызове через PLPCALL? Переменные случайно не пустые в момент составления текста?
Последний раз редактировалось: timochev (Пт Мар 28, 2008 17:11), всего редактировалось 1 раз |
|
 |
dnk_dz Эксперт
Вступление в Клуб: 19.09.2007
|
Пт Мар 28, 2008 17:11   |
|
Полезность: Нет оценки
|
Kozyrev пишет: | А в самой операции печати нужно писать дополнительно код? |
Нет |
|
 |
Kozyrev Участник - экстремал
Вступление в Клуб: 03.09.2007
|
Сб Мар 29, 2008 11:07   |
|
Полезность: Нет оценки
|
Пробовал так:
Код: | stdio.PUT_LINE_BUF('<% PLPCALL %THIS%.[ORL_PRINT_OPER](%PARAM%.P#MEMO => '''||temp_str||''') %>'); |
и так:
Код: | stdio.PUT_LINE_BUF('<% PLPCALL %THIS%.[ORL_PRINT_OPER](%PARAM%.P#MEMO => ''Текст_для_печати'' ) %>');
|
Значение не передается в операцию печати... |
|
 |
dnk_dz Эксперт
Вступление в Клуб: 19.09.2007
|
Пн Мар 31, 2008 07:35   |
|
Полезность: 2
|
Вобщем, можно сделать так:
В вызывающей операции завести глобальную переменную, перед вызовом PLPCALL присвоить этой переменной строку для печати, например:
Код: |
P_STR := 'Это строка для печати!'; -- Это глобальная переменная
stdio.put_line_buf('<% PLPCALL %THIS%.ORL_PRINT_OPER() %>');
|
В операции печати присвоить переменной для вывода на печать значение глобальной переменной из вызывающей операции в секции проверки
Код: | if P_MESSAGE = 'DEFAULT' then
P#MEMO := ::[ВАШ_ТБП].[ИМЯ_ВЫЗЫВАЮЩЕЙ_ОПЕРАЦИИ].P_STR;
end if;
|
|
|
 |
w00per Профи
Вступление в Клуб: 17.10.2007
|
Пн Мар 31, 2008 08:56   |
|
Полезность: 1
|
Я бы посоветовал сделать следующим оброзом:
1. В операции типа "Печать" создать параметр "P_PRN тип Строка32000"
2. В РЭФ создать алиас ссылающийся на этот параметр, количество элементов (в свойствах алиаса) оставить равным нулю - это для того, чтобы не было проблем с количеством выводимых символов в этом алиасе.
3. dnk_dz пишет: | В вызывающей операции завести глобальную переменную, перед вызовом PLPCALL присвоить этой переменной строку для печати, например:
Код: |
P_STR := 'Это строка для печати!'; -- Это глобальная переменная
stdio.put_line_buf('<% PLPCALL %THIS%.ORL_PRINT_OPER() %>');
|
В операции печати присвоить переменной для вывода на печать значение глобальной переменной из вызывающей операции в секции проверки
Код: | if P_MESSAGE = 'DEFAULT' then
P#MEMO := ::[ВАШ_ТБП].[ИМЯ_ВЫЗЫВАЮЩЕЙ_ОПЕРАЦИИ].P_STR;
end if;
|
|
С учетом того что присваиваем не в P#MEMO, а в P_PRN _________________ I Lie About Everything. |
|
 |
|