Обработка изменения грида. Не всегда входит в валидатор 
	   
	     | 
   
 
	
		| Предыдущая тема :: Следующая тема   | 
	 
	
	
		| Автор | 
		Сообщение | 
	 
	
		san_light Участник со стажем
 
  Вступление в Клуб: 18.03.2011
  | 
		
			
				 Ср Май 25, 2011 13:34   Обработка изменения грида. Не всегда входит в валидатор | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				Есть структура, один из реквизитов которой - ссылка на ден. единицы.
 
Этот реквизит (цифровой код) среди прочих выводится в грид.
 
Изменение этой колонки обрабатывается в клиент-валидаторе, все работает отлично, НО...!!!
 
Когда в нескольких записях грида вводятся одинаковые коды, клиент-валидатор отрабатывает только для первой записи, а для остальных даже не заходит в код валидатора. Повторюсь, когда вводятся разные коды, все работает на ура. создается впечатление что если в разные записи записывать одну и ту же валюту, то грид не считает это изменением!!!
 
Кто сталкивался и\или кто знает решение, прошу отзовитесь!!
 
Заранее спасибо | 
			 
		  | 
	 
	
		  | 
	 
	
		san_light Участник со стажем
 
  Вступление в Клуб: 18.03.2011
  | 
		
			
				 Ср Май 25, 2011 13:37    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				это код в блоке проверок
 
 	  | Код: | 	 		     
 
--Обработка изменений в гридах
 
   GRID_VALIDATE(p_message, P_INFO, v_this, 'V_SUMM_GRID', V_SUMM_GRID, V_TMP_STR, V_COM_GRID, P_COM_NONCASH);
 
   debug_pipe('Проверка: ' || p_message || ' -\- ' || P_INFO, 0);
 
   GRID_VALIDATE(p_message, P_INFO, v_this, 'V_COM_GRID', V_COM_GRID, V_TMP_STR, V_SUMM_GRID, P_COM_NONCASH);
 
 | 	  
 
при этом когда вводятся одинаковые коды валют debug_pipe ничего не выводит (поэтому и решил, что даже в блок проверок не входит) | 
			 
		  | 
	 
	
		  | 
	 
	
		Alexsey Эксперт
 
  Вступление в Клуб: 06.09.2007
  | 
		
			
				 Чт Май 26, 2011 10:22    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				в проверке пишу обычно 
 
 	  | Код: | 	 		  if P_INFO like '%VAR%.<Имя грида>.[Имя контрола в гриде]%' then
 
...
 
end if; | 	  
 
все работает как часы _________________ всегда есть как минимум 2 выхода | 
			 
		  | 
	 
	
		  | 
	 
	
		san_light Участник со стажем
 
  Вступление в Клуб: 18.03.2011
  | 
		
			
				 Чт Май 26, 2011 11:03    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				(не понял как добавлять рисунки, поэтому вложил файл картинки)
 
да работает, но при изменении кода валюты (см. рис.), когда для двух записей подряд ввожу один код в блок проверок даже не заходит.
 
Клиент-скрипт "видит" все, а в блок проверок не идет, как будто ИБСО не считает это изменением, правда когда "проваливаешься" в ссылку и там устанавливаешь валюту - отрабатывает нормально | 
			 
		  | 
	 
	
		  | 
	 
	
		san_light Участник со стажем
 
  Вступление в Клуб: 18.03.2011
  | 
		
			
				 Чт Май 26, 2011 11:13    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				получается так
 
Изменение простым набором цифрового кода
  Последний раз редактировалось: san_light (Чт Май 26, 2011 11:17), всего редактировалось 1 раз | 
			 
		  | 
	 
	
		  | 
	 
	
		san_light Участник со стажем
 
  Вступление в Клуб: 18.03.2011
  | 
		
			
				 Чт Май 26, 2011 11:15    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				а должно быть так
 
изменение валюты при "проваливании" в ссылку "(***)"
 
после смены валюты меняется курс и суммы | 
			 
		  | 
	 
	
		  | 
	 
	
		Alexsey Эксперт
 
  Вступление в Клуб: 06.09.2007
  | 
		
			
				 Чт Май 26, 2011 11:19    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				из доки по работе с гридами
 
 
 	  | Цитата: | 	 		  6.2.6.	RowColChange
 
Синтаксис
 
Grid_RowColChange()
 
Описание
 
Выполняется при изменении значений свойств Row или Col.
 
Событие вызывается при изменении значений свойств Row или Col пользователем (с помощью мыши или клавиатуры) или в ходе выполнения программного кода. Подробнее о свойствах Row и Col см. пункты Row и Col соответственно.
 
Пример
 
 	  | Код: | 	 		  Private Sub Grid_RowColChange
 
   V_VIEW.Text = Grid.Text(Grid.Row, 1)
 
End Sub | 	  
 
6.2.7.	ValidateEdit
 
Синтаксис
 
Grid_ValidateEdit(Row As Long, Col As Long, Cancel As Boolean)
 
Описание
 
Выполняется перед выходом ячейки из режима редактирования значения.
 
Это событие вызывается перед сохранением любых совершенных пользователем изменений в указанной ячейке. Позволяет перехватить происходящие изменения, прочитав содержимое свойства EditText (см. пункт EditText), и убедиться, что отредактированное значение является допустимым для данной ячейки (определяемой параметрами Col, Row). Если введенное пользователем значение не является допустимым, следует установить параметр Cancel равным True, в этом случае изменения не будут приняты и ячейка останется в режиме редактирования.
 
Пример
 
 	  | Код: | 	 		  Public Sub Grid1_ValidateEdit (Row, Col, Cancel)
 
   MsgBox Grid1.EditText
 
End Sub | 	  
 
 | 	  
 
 
ну и на мой взгляд код валюты тут не при чем.. просто в одном случае выполняется условие вызова, в другом нет. _________________ всегда есть как минимум 2 выхода | 
			 
		  | 
	 
	
		  | 
	 
	
		Alexsey Эксперт
 
  Вступление в Клуб: 06.09.2007
  | 
		
			
				 Чт Май 26, 2011 11:31    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | san_light пишет: | 	 		  а должно быть так
 
изменение валюты при "проваливании" в ссылку "(***)"
 
после смены валюты меняется курс и суммы | 	  
 
 
когда проваливаешься в {***} отрабатывает один контрол, когда меняешь руками, работает другой контрол.. вывод - нужна валидация и там где меняешь руками... без контрола, который является ссылкой _________________ всегда есть как минимум 2 выхода | 
			 
		  | 
	 
	
		  | 
	 
	
		san_light Участник со стажем
 
  Вступление в Клуб: 18.03.2011
  | 
		
			
				 Пт Май 27, 2011 06:49    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | Alexsey пишет: | 	 		   	  | san_light пишет: | 	 		  а должно быть так
 
изменение валюты при "проваливании" в ссылку "(***)"
 
после смены валюты меняется курс и суммы | 	  
 
 
когда проваливаешься в {***} отрабатывает один контрол, когда меняешь руками, работает другой контрол.. вывод - нужна валидация и там где меняешь руками... без контрола, который является ссылкой | 	   как реализовать? на экранной форме и там и там стоит "Проверка введенного значения". P_INFO в обоих случаях одинаковое.
 
 
насчет цитат из документации - читал, этими обработчиками и проверял, отрабатывают как надо, но в блок проверок все равно не заходит (повторюсь, если вводить разные коды - валидация отрабатывает нормально) | 
			 
		  | 
	 
	
		  | 
	 
	
		Alexsey Эксперт
 
  Вступление в Клуб: 06.09.2007
  | 
		
			
				 Пт Май 27, 2011 09:56    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				Понятно что стоит проверка валидируемого значения, НО, в одном случае юзается ссылка(т.е. контрол ссылки на значение), во втором ты меняешь значение с клавиатуры, т.е. дочерний контрол ссылки.. P_INFO  в таком случае одинаковым быть не может по определению.
 
Повесь проверку валидации по Like на родительский контрол, в таком случае должно точно работать и там и там.
 
Да и под валидацией понимается "не птичка" в параметре "ChekValidate", а реальное описание в блоке проверки или клиент скрипте... и если стоит признак валидации, а в коде квалификатор не описан, ничего работать не будет
 
 
Пример реально работающего скрипта
 
 	  | Код: | 	 		  if P_MESSAGE = 'VALIDATE' then
 
-- обработаем выбор или редактирование контрагента в гриде
 
   if P_INFO like '%VAR%.V_KONTR.CONTR%' then
 
         V_DEST_STR := V_DEST_STR || NL$ ||
 
         '
 
         V_CTR_IDX.TEXT = Grid9.Row
 
         '|| NL$;
 
         if V_CTR_IDX = 0 then
 
            V_CTR_IDX := 1;
 
         end if;
 
         debug_pipe(V_KONTR(V_CTR_IDX).[CONTR].[NAME], 0);
 
         V_KONTR(V_CTR_IDX).[COUNTRY] := [LIB].get_country_ref(V_KONTR(V_CTR_IDX).[CONTR]);
 
    end if;
 
end if; | 	 
  _________________ всегда есть как минимум 2 выхода | 
			 
		  | 
	 
	
		  | 
	 
	
		san_light Участник со стажем
 
  Вступление в Клуб: 18.03.2011
  | 
		
			
				 Пт Май 27, 2011 13:07    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				debug_pipe('Grid_Rec_Init:' || P_MESSAGE || "-\-" || P_INFO, 0)
 
в обоих случаях показывает
 
 
15:48:04 Grid_Rec_Init: VALIDATE -\- V_SUMM_GRID.VALUTA_DT[1]
 
         Grid_Rec_Init: VALIDATE -\- V_COM_GRID.VALUTA_DT[2]
 
         Grid_Rec_Init: VALIDATE -\- V_COM_GRID.VALUTA_DT[1]
 
         Grid_Rec_Init: VALIDATE -\- V_COM_GRID.VALUTA_DT[1] 
 
поэтому я и говорю, что P_INFO - одинаковое.
 
проверяю я именно по Like.
 
насчет вашего примера
 
Все работает замечательно, если ввожу подряд разные коды.
 
а вод когда ввожу одинаковые - отрабатывает только первое изменение. Потом у меня до "if P_MESSAGE = 'VALIDATE' then... " даже не доходит (я так понимаю что не входит в блок проверок вообще - самому с трудом верится).
 
Будет у меня маленькая просьба, может сами попробуете и посмотрите (как на рисунках у меня во вложении)? именно с кодом валюты и именно то, о чем я говорю.
 
Буду очень признателен. | 
			 
		  | 
	 
	
		  | 
	 
	
		Alexsey Эксперт
 
  Вступление в Клуб: 06.09.2007
  | 
		
			
				 Пт Май 27, 2011 14:05    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | san_light пишет: | 	 		  debug_pipe('Grid_Rec_Init:' || P_MESSAGE || "-\-" || P_INFO, 0)
 
в обоих случаях показывает
 
 
15:48:04 Grid_Rec_Init: VALIDATE -\- V_SUMM_GRID.VALUTA_DT[1]
 
         Grid_Rec_Init: VALIDATE -\- V_COM_GRID.VALUTA_DT[2]
 
         Grid_Rec_Init: VALIDATE -\- V_COM_GRID.VALUTA_DT[1]
 
         Grid_Rec_Init: VALIDATE -\- V_COM_GRID.VALUTA_DT[1] 
 
поэтому я и говорю, что P_INFO - одинаковое.
 
проверяю я именно по Like.
 
насчет вашего примера
 
Все работает замечательно, если ввожу подряд разные коды.
 
а вод когда ввожу одинаковые - отрабатывает только первое изменение. Потом у меня до "if P_MESSAGE = 'VALIDATE' then... " даже не доходит (я так понимаю что не входит в блок проверок вообще - самому с трудом верится).
 
Будет у меня маленькая просьба, может сами попробуете и посмотрите (как на рисунках у меня во вложении)? именно с кодом валюты и именно то, о чем я говорю.
 
Буду очень признателен. | 	  
 
 
В блок проверки не входит потому как машина считает, что запись не была изменена. Вы говорили, что клиент-скрипт видит, что производились действия с контролом, тогда из клиент скрипта необходимо дернуть серверную валидацию.
 
 
Например:
 
 	  | Код: | 	 		  Private Sub Grid_RowColChange
 
   Form1.ScriptServerValidate <Validate_name грида>, "V_SUMM_GRID"
 
End Sub | 	 
  _________________ всегда есть как минимум 2 выхода | 
			 
		  | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
  | 
   
 
		 |