Данные добавляется повторно 
	  На страницу 1, 2  След. 
	     | 
   
 
	
		| Предыдущая тема :: Следующая тема   | 
	 
	
	
		| Автор | 
		Сообщение | 
	 
	
		брат666 Участник со стажем
 
  Вступление в Клуб: 20.02.2014
  | 
		
			
				 Чт Авг 27, 2015 15:39   Данные добавляется повторно | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				Добрый день . Написал процедуру такую.
 
 
 	  | Код: | 	 		  PROCEDURE GET_ZLG_HOME_PROP_DATA(P_ZALOG REF [ZALOG]) IS
 
ZAYAVKA REF [DECL_ON_GET_CRED];
 
ANKET   REF [VTA_CARDLOAN_APP];
 
rec          rec_tab;
 
C_ZALOG VARCHAR;
 
BEGIN
 
   BEGIN SELECT C(C.PART_TO_LOAN.PRODUCT : PRD) IN ::[ZALOG] WHERE C%ID = P_ZALOG%ID INTO C_ZALOG;
 
      EXCEPTION WHEN OTHERS THEN NULL;
 
   END;
 
   
 
   BEGIN
 
       LOCATE ZAYAVKA IN ::[DECL_ON_GET_CRED]  WHERE ZAYAVKA.[DECL_PRD] = C_ZALOG;
 
       LOCATE ANKET IN ::[VTA_CARDLOAN_APP] WHERE ANKET.[APP_REF] = ZAYAVKA%ID;--'300110049';
 
    EXCEPTION WHEN OTHERS THEN
 
       NULL;
 
   END;
 
   C := 0;
 
   FOR (SELECT Z(Z.[NAME_PROP]  : NAME_PR,
 
              Z.[AMT_PROP]   : CNT_PROP,
 
              Z.[PRICE_PROP] : PRC_PROP,
 
              Z.[SUM_PROP]   : SUM_PROP) IN  ANKET.[HOME_PROP] ALL
 
      )
 
   LOOP
 
      C := C + 1;
 
      rec(C).name := Z.NAME_PR;
 
      rec(C).cnt := Z.CNT_PROP;
 
      rec(C).price := Z.PRC_PROP;
 
      rec(C).summ := Z.SUM_PROP;
 
      
 
      FOR C IN REC.first..REC.last
 
      LOOP
 
         V_HOME_PR_NAME := rec(C).name;
 
         V_HOME_PR_CNT := rec(C).cnt;
 
         V_HOME_PR_PRC := rec(C).price;
 
         V_HOME_PR_SUM := rec(C).summ;
 
      END LOOP;
 
 
       --word.add_tabrow(2);
 
       --word.Set_CellValue (2, 1, C);
 
       --word.Set_CellValue (2, 2, V_HOME_PR_NAME);
 
       --word.Set_CellValue (2, 3, V_HOME_PR_CNT);
 
       --word.Set_CellValue (2, 4, V_HOME_PR_PRC);
 
      --word.Set_CellValue (2, 5, V_HOME_PR_SUM);
 
 
   END LOOP;
 
END; | 	  
 
 
Так как не заработал добавление строк , закомментировал и в клиент-скрипте кое-что добавил.
 
 
 	  | Код: | 	 		  '#include ::[RUNTIME].[MSWORD_SCRIPT]
 
 
Public Function Main(LastControl)
 
On Error Resume Next
 
   If LastControl is OK then      
 
      cnt = GetData("COUNT")
 
      
 
      if cnt > 0 then
 
         i = 1
 
      
 
         for i = 1 to cnt
 
            if PrintWordDoc = False then
 
               Main = False
 
               Exit Function
 
            end if
 
         next
 
            
 
         MsgBox "Kolichestvo raspechatannix dogovorov: " + cnt, vbOKOnly & vbInformation, "Pechat uspeshno zakonchena"
 
      else
 
         MsgBox "Net informacii o poruchitelyax!", vbOKOnly & vbInformation, "Danniye otsutstvuyut"
 
      end if
 
   End If
 
   
 
   Main = True ' Rezul`tiruyushhee znachenie validatora (True ili False)   
 
End Function
 
 
Public function PrintWordDoc
 
   if not OpenWordDoc(WrdApp, WrdDoc, GetData("REPORTFILE")) then 
 
      'MsgBox "Can not open file!"
 
      PrintWordDoc = False
 
      Exit Function
 
   end if
 
   
 
   dim FieldsColl
 
   set FieldsColl = WrdApp.ActiveDocument.FormFields
 
   if FieldsColl.Count >= 1 then
 
      for Each aField in FieldsColl
 
         Text4Setting = GetData(aField.Name)
 
         if Text4Setting = "" then
 
            Text4Setting = " "
 
         end if
 
         if Len(Text4Setting) > 255 _
 
         or instr(1, Text4Setting, vbLF, vbBinaryCompare) > 0 _
 
         then
 
            WrdDoc.FormFields(aField.Name).Select
 
            Call WrdApp.Selection.TypeText(Text4Setting)
 
         else
 
            aField.Result = Text4Setting
 
         end if
 
      next
 
   end If
 
   
 
   if CRED_CODE = "RC6007" then
 
      for row = 1 to GetData("CNT")
 
         WrdDoc.Tables(2).Rows.Add
 
         WrdDoc.Tables(2).Cell(WrdDoc.Tables(2).Rows.Last.Index, 1).Range.InsertAfter(GetData("CNT"))
 
          WrdDoc.Tables(2).Cell(WrdDoc.Tables(2).Rows.Last.Index, 2).Range.InsertAfter(GetData("HOME_PR_NAME"))
 
          WrdDoc.Tables(2).Cell(WrdDoc.Tables(2).Rows.Last.Index, 3).Range.InsertAfter(GetData("HOME_PR_CNT"))
 
          WrdDoc.Tables(2).Cell(WrdDoc.Tables(2).Rows.Last.Index, 4).Range.InsertAfter(GetData("HOME_PR_PRC"))
 
          WrdDoc.Tables(2).Cell(WrdDoc.Tables(2).Rows.Last.Index, 5).Range.InsertAfter(GetData("HOME_PR_SUM"))
 
      next
 
   end if
 
   
 
   'call SetWordVisible(WrdApp, WrdDoc)' pokazat` dokument
 
   'WrdDoc.ExportAsFixedFormat "C:\Temp\main_doc.pdf",  17, true, 0, 0,1, 1, 0, True,True, 0, True, True, False
 
   if CRED_CODE = "SM1001" then
 
      WrdDoc.ExportAsFixedFormat "C:\Temp\main_doc.pdf",  17, true, 0, 0,1, 1, 0, True,True, 0, True, True, False
 
   else 
 
      call SetWordVisible(WrdApp, WrdDoc)' pokazat` dokument
 
   end If
 
   PrintWordDoc = True
 
End function | 	  
 
 
и в проверке вызываю процедуру и
 
 
 	  | Код: | 	 		  elsif p_info = 'HOME_PR_NAME' then
 
         P_DATA := V_HOME_PR_NAME;
 
         V_HOME_PR_NAME := '';
 
      elsif p_info = 'HOME_PR_CNT' then
 
         P_DATA := V_HOME_PR_CNT;
 
         V_HOME_PR_CNT := '';
 
      elsif p_info = 'HOME_PR_PRC' then
 
         P_DATA := V_HOME_PR_PRC;
 
         V_HOME_PR_PRC := '';
 
      elsif p_info = 'HOME_PR_SUM' then
 
         P_DATA := V_HOME_PR_SUM;
 
         V_HOME_PR_SUM := '';
 
      elsif p_info = 'CNT' then
 
         P_DATA := C;
 
         C := ''; | 	  
 
 
Но у меня данные добавляется повторно в строках.Просьба помочь решить проблему.За ранее благодарен. | 
			 
		  | 
	 
	
		  | 
	 
	
		Матвеев Евгений Профи
 
  Вступление в Клуб: 31.01.2012
  | 
		
			
				 Чт Авг 27, 2015 16:36    | 
				     | 
			 
			
				Полезность: 1 
  | 
			 
			
				mdb можешь прислать?
 
или в текстовом виде то что у тебя выводится?
 
 
Есть мнение что у тебя не перевызывается 
 
PROCEDURE GET_ZLG_HOME_PROP_DATA(P_ZALOG REF [ZALOG]) IS,
 
так как с клиент скрипте нет 
 
Call Runtime.ServerValidate(nothing, "%VAR%.V_REFRESHVARIABLE"),
 
который у тебя мог бы вызвать GET_ZLG_HOME_PROP_DATA, которая в свою очередь вызывала бы 
 
         V_HOME_PR_NAME := rec(C).name; 
 
         V_HOME_PR_CNT := rec(C).cnt; 
 
         V_HOME_PR_PRC := rec(C).price; 
 
         V_HOME_PR_SUM := rec(C).summ; 
 
как новый комплект значений
 
Как то так... | 
			 
		  | 
	 
	
		  | 
	 
	
		Матвеев Евгений Профи
 
  Вступление в Клуб: 31.01.2012
  | 
		
			
				 Чт Авг 27, 2015 16:39    | 
				     | 
			 
			
				Полезность: 1 
  | 
			 
			
				Соответственно в секции проверка разместить GET_ZLG_HOME_PROP_DATA
 
 
У меня вот так формировалось... (сейчас уже эту технологию не использую)
 
 
		elsif P_INFO = '%VAR%.V_REFRESHVARIABLE' then
 
 
		    	F1 := curcred.[CLIENT].[NAME]||' - '||ProperNumDog(curcred.[NUM_DOG])||' - '||curcred%id;--V_REFRESHVARIABLE;--V_REFRESHVARIABLE;
 
		    	F2 := curcred.[CLIENT].[NAME];-- ФИО клиента
 
		    	F3 := GetAddrClientByCred(curcred);--curcred.[CLIENT].[NAME];-- Адрес регистрации;
 
		    	F4 := StdLib.Fio(curcred.[CLIENT].[NAME], 'И О');--curcred.[CLIENT].[NAME];--||V_REFRESHVARIABLE;
 
		    	F5 := curcred.[NUM_DOG];--||V_REFRESHVARIABLE;
 
		    	F6 := to_char(curcred.[DATE_BEGIN],'dd');--curcred.[CLIENT].[NAME];--||V_REFRESHVARIABLE;
 
		    	F7 := ::[RUNTIME].[TMC_REPORTS].get_month_str(curcred.[DATE_BEGIN]);--curcred.[CLIENT].[NAME];--||V_REFRESHVARIABLE;
 
		    	F8 := to_char(curcred.[DATE_BEGIN],'yyyy');--curcred.[CLIENT].[NAME];--||V_REFRESHVARIABLE; | 
			 
		  | 
	 
	
		  | 
	 
	
		брат666 Участник со стажем
 
  Вступление в Клуб: 20.02.2014
  | 
		
			
				 Пт Авг 28, 2015 07:25    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				| mdb файл . | 
			 
		  | 
	 
	
		  | 
	 
	
		vtar Эксперт
 
  Вступление в Клуб: 20.03.2009
  | 
		
			
				 Пт Авг 28, 2015 09:30    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				Бро,
 
возможно стоит сделать так
 
 
 	  | Код: | 	 		  
 
PROCEDURE GET_ZLG_HOME_PROP_DATA(P_ZALOG REF [ZALOG]) IS 
 
 ZAYAVKA REF [DECL_ON_GET_CRED]; 
 
 ANKET   REF [VTA_CARDLOAN_APP]; 
 
 rec          rec_tab; 
 
 C_ZALOG VARCHAR; 
 
 BEGIN 
 
 | 	  
 
 rec.Delete; | 
			 
		  | 
	 
	
		  | 
	 
	
		брат666 Участник со стажем
 
  Вступление в Клуб: 20.02.2014
  | 
		
			
				 Пт Авг 28, 2015 09:43    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				| Я не врубился, можно по точнее ? А то я уже сегодня тоже несколько вариантов пробовал, не получился. | 
			 
		  | 
	 
	
		  | 
	 
	
		vtar Эксперт
 
  Вступление в Клуб: 20.03.2009
  | 
		
			
				 Пт Авг 28, 2015 09:56    | 
				     | 
			 
			
				Полезность: 1 
  | 
			 
			
				 	  | брат666 пишет: | 	 		  | Я не врубился, можно по точнее ? А то я уже сегодня тоже несколько вариантов пробовал, не получился. | 	  
 
завязывай с травой, Бро    
 
 
Временную табличку rec очистить в начале процедуры. | 
			 
		  | 
	 
	
		  | 
	 
	
		Матвеев Евгений Профи
 
  Вступление в Клуб: 31.01.2012
  | 
		
			
				 Пт Авг 28, 2015 12:28    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | брат666 пишет: | 	 		  | mdb файл . | 	  
 
 
Можешь так же  выслать 
 
 	  | Цитата: | 	 		  
 
PRAGMA INCLUDE([VTA_AZ_SYMBOLS].[CH]); | 	  
 
? | 
			 
		  | 
	 
	
		  | 
	 
	
		брат666 Участник со стажем
 
  Вступление в Клуб: 20.02.2014
  | 
		
			
				 Пт Авг 28, 2015 12:39    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				| Это для использование латинских символов,точнее наших букв. Думаю что, это не нужен тебе. А так все понятно там? | 
			 
		  | 
	 
	
		  | 
	 
	
		Матвеев Евгений Профи
 
  Вступление в Клуб: 31.01.2012
  | 
		
			
				 Пт Авг 28, 2015 13:03    | 
				     | 
			 
			
				Полезность: 1 
  | 
			 
			
				Забодался твои макроподстановки комментировать
 
Процесс продолжается в текущий момент
 
 
Шаблон документа еще нужен...с полями
 
...
 
 
Или у тебя здесь повторы?
 
 	  | Код: | 	 		  
 
   if CRED_CODE = "RC6007" then
 
      for row = 1 to GetData("CNT")
 
         WrdDoc.Tables(2).Rows.Add
 
         WrdDoc.Tables(2).Cell(WrdDoc.Tables(2).Rows.Last.Index, 1).Range.InsertAfter(GetData("CNT"))
 
          WrdDoc.Tables(2).Cell(WrdDoc.Tables(2).Rows.Last.Index, 2).Range.InsertAfter(GetData("HOME_PR_NAME"))
 
          WrdDoc.Tables(2).Cell(WrdDoc.Tables(2).Rows.Last.Index, 3).Range.InsertAfter(GetData("HOME_PR_CNT"))
 
          WrdDoc.Tables(2).Cell(WrdDoc.Tables(2).Rows.Last.Index, 4).Range.InsertAfter(GetData("HOME_PR_PRC"))
 
          WrdDoc.Tables(2).Cell(WrdDoc.Tables(2).Rows.Last.Index, 5).Range.InsertAfter(GetData("HOME_PR_SUM"))
 
      next
 
   end if
 
 | 	 
  | 
			 
		  | 
	 
	
		  | 
	 
	
		брат666 Участник со стажем
 
  Вступление в Клуб: 20.02.2014
  | 
		
			
				 Пт Авг 28, 2015 13:25    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				| Ты реально меня выручаешь , благодарен очень заранее . | 
			 
		  | 
	 
	
		  | 
	 
	
		брат666 Участник со стажем
 
  Вступление в Клуб: 20.02.2014
  | 
		
			
				 Пт Авг 28, 2015 15:50    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				[code]begin
 
	if P_MESSAGE = 'DEFAULT' then
 
		V_ADR_MASK	:= '$POST_CODE $CITY $STREET $HOUSE $KORPUS $FLAT';
 
		V_GRAPH_XLS	:= (nvl(::[SYSTEM_PARAMS].[GET]('CRED_GRAPH_XLS'), '0') = '1');
 
		V_DEFAULT	:= nvl(V_DEFAULT, true);
 
		V_DATE_ON	:= Oper_Day;
 
		P_ZAL	:= this;
 
		
 
		--GET_ZLG_HOME_PROP_DATA(THIS); -- !VTB Orkhan Huseynov 26/08/2015 11:33:27 !! |
 
		
 
	elsif P_MESSAGE = 'VALIDATE' then
 
		GET_ZLG_HOME_PROP_DATA(THIS);
 
		P_DATA := ' ';
 
		-- dlya obrabotki neskol`kix odinakovyx polei
 
		if substr(p_info, -1) in ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')
 
		and instr(p_info, 'PRC_DEBT_CR_112') = 0 then-- Isklyuchaem kodiki okanchivayushhiesya na cifru
 
			p_info	:= substr(p_info, 1, length(p_info) - 1);
 
		end if;
 
		if	p_info in ('P_FILE_NAME', 'P_FILE_NAME.NAME') then
 
			V_DEFAULT	:= false;
 
			IniFileManager(P_ZAL, P_FILE_NAME, V_DEFAULT, V_FILE_MANAGER);
 
		elsif	p_info = '%VAR%.V_DEFAULT'
 
		and		V_DEFAULT then
 
			IniFileManager(P_ZAL, P_FILE_NAME, V_DEFAULT, V_FILE_MANAGER);
 
		elsif	p_info in
 
			('%VAR%.V_FILE_MANAGER.SRC_MASK'
 
			,'%VAR%.V_FILE_MANAGER.SRC_PATH'
 
			,'%VAR%.V_FILE_MANAGER.SRC_NAME'
 
		)then
 
			if 	V_FILE_MANAGER.[SRC_NAME] != P_FILE_NAME.[NAME] then
 
				P_FILE_NAME	:= null;
 
			end if;
 
			V_DEFAULT	:= false;
 
		end if;
 
 
		if	p_info = 'REPORTFILE' then
 
	 		P_DATA := V_FILE_MANAGER.[SRC_NAME];--&ReportFile;--V_FILE_MANAGER.[SRC_PATH]||;
 
	 	elsif	p_info = 'REPORTPATH' then
 
 			P_DATA := 'Z:\Doc\Credit_Card_Action_girov_mug.doc';--V_FILE_MANAGER.[SRC_PATH];--[MSLIB].GetReportPath;--'D:\DVZ\docum.dot'
 
		elsif p_info = 'OSN' then
 
			p_DATA := ::[VTA_REKV_F].[VTA_PRINTLIB].get_osn([stdlib].userid.[DEPART],nvl([stdlib].userid.[DEPART].[FILIAL_V],::[BRANCH]([CODE]='001')), [stdlib].userid,nvl(this.[DATE_BEGIN],::[SYSTEM].[OP_DATE]));
 
		elsif p_info = 'FIO_DIR' then
 
			p_DATA := ::[VTA_REKV_F].[VTA_PRINTLIB].get_fio_dir([stdlib].userid.[DEPART],nvl([stdlib].userid.[DEPART].[FILIAL_V],::[BRANCH]([CODE]='001')), [stdlib].userid,nvl(this.[DATE_BEGIN],::[SYSTEM].[OP_DATE]));
 
		elsif p_info = 'BANK_NAME' then
 
			p_DATA := ::[VTA_REKV_F].[VTA_PRINTLIB].get_bname([stdlib].userid.[DEPART],nvl([stdlib].userid.[DEPART].[FILIAL_V],::[BRANCH]([CODE]='001')), [stdlib].userid,nvl(this.[DATE_BEGIN],::[SYSTEM].[OP_DATE]));
 
		elsif p_info = 'BANK_ADDRES' then
 
			p_DATA := ::[VTA_REKV_F].[VTA_PRINTLIB].get_baddr([stdlib].userid.[DEPART],nvl([stdlib].userid.[DEPART].[FILIAL_V],::[BRANCH]([CODE]='001')), [stdlib].userid,nvl(this.[DATE_BEGIN],::[SYSTEM].[OP_DATE]));
 
		elsif p_info = 'BANK_VOEN' then
 
			p_DATA := ::[VTA_REKV_F].[VTA_PRINTLIB].get_bvoen([stdlib].userid.[DEPART],nvl([stdlib].userid.[DEPART].[FILIAL_V],::[BRANCH]([CODE]='001')), [stdlib].userid,nvl(this.[DATE_BEGIN],::[SYSTEM].[OP_DATE]));
 
		elsif p_info = 'BANK_FADMH' then
 
			p_DATA := ::[VTA_REKV_F].[VTA_PRINTLIB].get_bbik([stdlib].userid.[DEPART],nvl([stdlib].userid.[DEPART].[FILIAL_V],::[BRANCH]([CODE]='001')), [stdlib].userid,nvl(this.[DATE_BEGIN],::[SYSTEM].[OP_DATE]));
 
		elsif p_info = 'BANK_SWIFT' then
 
			p_DATA := ::[VTA_REKV_F].[VTA_PRINTLIB].get_bsw([stdlib].userid.[DEPART],nvl([stdlib].userid.[DEPART].[FILIAL_V],::[BRANCH]([CODE]='001')), [stdlib].userid,nvl(this.[DATE_BEGIN],::[SYSTEM].[OP_DATE]));
 
		elsif p_info = 'DOLJ' then
 
			p_DATA := ::[VTA_REKV_F].[VTA_PRINTLIB].get_dolj([stdlib].userid.[DEPART],nvl([stdlib].userid.[DEPART].[FILIAL_V],::[BRANCH]([code]='001')), [stdlib].userid,nvl(this.[DATE_BEGIN],::[SYSTEM].[OP_DATE]));	
 
		
 
		elsif p_info = 'HOME_PR_NAME' then
 
			P_DATA := V_HOME_PR_NAME;
 
				--V_HOME_PR_NAME := '';
 
		elsif p_info = 'HOME_PR_CNT' then
 
			P_DATA := V_HOME_PR_CNT;
 
				--V_HOME_PR_CNT := '';
 
		elsif p_info = 'HOME_PR_PRC' then
 
			P_DATA := V_HOME_PR_PRC;
 
				--V_HOME_PR_PRC := '';
 
		elsif p_info = 'HOME_PR_SUM' then
 
			P_DATA := V_HOME_PR_SUM;
 
				--V_HOME_PR_SUM := '';
 
		elsif p_info = 'CNT' then
 
			P_DATA := C;			
 
				--	C := '';
 
		--END IF;
 
		end if;
 
	end if;
 
end;[/code]
 
 
вот сокращенный код, не надо с лишними разобраться.пока что у меня не хляет   | 
			 
		  | 
	 
	
		  | 
	 
	
		Матвеев Евгений Профи
 
  Вступление в Клуб: 31.01.2012
  | 
		
			
				 Пт Авг 28, 2015 15:53    | 
				     | 
			 
			
				Полезность: 1 
  | 
			 
			
				Я правильно понимаю в таблице у тебя повтор всегда по последнему элементу массива
 
 
			V_HOME_PR_NAME := rec(rec.last).name;
 
			V_HOME_PR_CNT := rec(rec.last).cnt;
 
			V_HOME_PR_PRC := rec(rec.last).price;
 
			V_HOME_PR_SUM := rec(rec.last).summ;
 
 
???
 
 
 	  | Код: | 	 		  
 
   FOR (SELECT Z(Z.[NAME_PROP]  : NAME_PR,
 
              Z.[AMT_PROP]   : CNT_PROP,
 
              Z.[PRICE_PROP] : PRC_PROP,
 
              Z.[SUM_PROP]   : SUM_PROP) IN  ANKET.[HOME_PROP] ALL
 
      )
 
   LOOP
 
      C := C + 1;
 
      rec(C).name := Z.NAME_PR;
 
      rec(C).cnt := Z.CNT_PROP;
 
      rec(C).price := Z.PRC_PROP;
 
      rec(C).summ := Z.SUM_PROP;
 
      
 
      FOR C IN REC.first..REC.last
 
      LOOP
 
         V_HOME_PR_NAME := rec(C).name;
 
         V_HOME_PR_CNT := rec(C).cnt;
 
         V_HOME_PR_PRC := rec(C).price;
 
         V_HOME_PR_SUM := rec(C).summ;
 
      END LOOP;
 
 
       --word.add_tabrow(2);
 
       --word.Set_CellValue (2, 1, C);
 
       --word.Set_CellValue (2, 2, V_HOME_PR_NAME);
 
       --word.Set_CellValue (2, 3, V_HOME_PR_CNT);
 
       --word.Set_CellValue (2, 4, V_HOME_PR_PRC);
 
      --word.Set_CellValue (2, 5, V_HOME_PR_SUM);
 
 
   END LOOP;
 
END; | 	 
  | 
			 
		  | 
	 
	
		  | 
	 
	
		Матвеев Евгений Профи
 
  Вступление в Клуб: 31.01.2012
  | 
		
			
				 Пт Авг 28, 2015 20:03    | 
				     | 
			 
			
				Полезность: 1 
  | 
			 
			
				Дабы сильно не менять структуру кода, можно сделать следующее:
 
 
1. Индексированный массив rec rec_tab; перемести из функции GET_ZLG_HOME_PROP_DATA просто в глобальные описания... например вот так:
 
 
 	  | Код: | 	 		  
 
type rec_tab is table of TRepLine;
 
rec          rec_tab;
 
 
V_HOME_PR_NAME  VARCHAR;
 
V_HOME_PR_CNT   VARCHAR;
 
V_HOME_PR_PRC   VARCHAR;
 
V_HOME_PR_SUM   VARCHAR;
 
C             INTEGER;
 
 | 	  
 
 
2. В начале функции GET_ZLG_HOME_PROP_DATA чисть массив rec, дабы при повторных вызовах не было путаницы 
 
 
 	  | Код: | 	 		  
 
 
PROCEDURE GET_ZLG_HOME_PROP_DATA(P_ZALOG REF [ZALOG]) IS
 
    ZAYAVKA REF [DECL_ON_GET_CRED];
 
    ANKET   REF [VTA_CARDLOAN_APP];
 
    C_ZALOG VARCHAR;
 
BEGIN
 
    rec.delete;
 
 | 	  
 
 
3. Там же (см.п.1) заведи переменную, текущий указатель элемента индексированного массива
 
 	  | Код: | 	 		  
 
type rec_tab is table of TRepLine;
 
rec          rec_tab;
 
cur_rec_num number := 1;
 
 | 	  
 
 
4. Конечно не очень хорошо по каждому обращению вызывать GET_ZLG_HOME_PROP_DATA, я бы перенес ... но ладно, можно оставить
 
 	  | Код: | 	 		  
 
elsif P_MESSAGE = 'VALIDATE' then
 
      GET_ZLG_HOME_PROP_DATA(THIS);
 
      P_DATA := ' ';
 
 | 	  
 
 
5. В секцию проверка добавить
 
 	  | Код: | 	 		  
 
      if   p_info = 'OK' then
 
         cur_rec_num := 1;      
 
      end if;
 
 | 	  
 
 
6. Код
 
 
 	  | Код: | 	 		  
 
      elsif p_info = 'HOME_PR_NAME' then
 
         P_DATA := V_HOME_PR_NAME;
 
         V_HOME_PR_NAME := '';
 
      elsif p_info = 'HOME_PR_CNT' then
 
         P_DATA := V_HOME_PR_CNT;
 
         V_HOME_PR_CNT := '';
 
      elsif p_info = 'HOME_PR_PRC' then
 
         P_DATA := V_HOME_PR_PRC;
 
         V_HOME_PR_PRC := '';
 
      elsif p_info = 'HOME_PR_SUM' then
 
      
 
         P_DATA := V_HOME_PR_SUM;
 
         V_HOME_PR_SUM := '';
 
      elsif p_info = 'CNT' then
 
         P_DATA := C;
 
         C := '';
 
      
 
      end if;
 
 | 	  
 
 
Поменять на такой
 
 
 	  | Код: | 	 		  
 
      elsif p_info = 'HOME_PR_NAME' then
 
         if cur_rec_num <= rec.count rhen
 
            P_DATA := rec(cur_rec_num).name;--V_HOME_PR_NAME;
 
         end if;
 
         V_HOME_PR_NAME := '';
 
      elsif p_info = 'HOME_PR_CNT' then
 
         if cur_rec_num <= rec.count rhen
 
            P_DATA := rec(cur_rec_num).cnt;--V_HOME_PR_CNT;
 
         end if;
 
         V_HOME_PR_CNT := '';
 
      elsif p_info = 'HOME_PR_PRC' then
 
         if cur_rec_num <= rec.count rhen
 
            P_DATA := rec(cur_rec_num).price;--V_HOME_PR_PRC;
 
         end if;
 
         V_HOME_PR_PRC := '';
 
      elsif p_info = 'HOME_PR_SUM' then
 
         if cur_rec_num <= rec.count rhen
 
            P_DATA := rec(cur_rec_num).summ;--V_HOME_PR_SUM;
 
         end if;
 
         V_HOME_PR_SUM := '';
 
         cur_rec_num := cur_rec_num + 1;
 
      elsif p_info = 'CNT' then
 
         P_DATA := C;
 
         C := '';
 
      end if;
 
 | 	  
 
 
Должно заработать | 
			 
		  | 
	 
	
		  | 
	 
	
		брат666 Участник со стажем
 
  Вступление в Клуб: 20.02.2014
  | 
		
			
				 Пн Авг 31, 2015 08:21    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				| Спасибо большое, заработал. | 
			 
		  | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
  | 
   
 
		 |