| Предыдущая тема :: Следующая тема   | 
	
	
	
		| Автор | 
		Сообщение | 
	
	
		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. | 
			 
		  | 
	
	
		  | 
	
	
		 |