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

Операция типа «Печать»
На страницу 1, 2  След.
 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
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.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
На страницу 1, 2  След.
Страница 1 из 2

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