Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема ТабличноеПоле, зависание при позиционировании на строку и автообновлении (число прочтений - 2082 )
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
ТабличноеПоле, зависание при позиционировании на строку и автообновлении
10. Сентября 2010 :: 12:20
Печать  
Интересное поведение ТП при позиционировании на строку:
Код
Выбрать все
ТПОтчет.ТекущаяСтрока = ДокПоиска 

.
Предварительно установлено автообновление каждые 5 секунд. Источник - ODBCDataProvider.MSSQL. Делаю поиск в ТП как в стандартном виде (поле ввода + кнопка). Так вот если нажатие на кнопку (выполняется поиск) совпадает с автообновлением, то Автообновление зацикливается и по истечении некоторого времени 1С вылетает.
Думаю что может быть зависание, потому что после установки строки я использую Форма.Обновить, в результате чего и происходит зацикливание. Может еще кто то сталкивался с таким? Как можно обойти?
  
Наверх
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТабличноеПоле, зависание при позиционировании на строку и автообновлении
Ответ #1 - 10. Сентября 2010 :: 12:24
Печать  
Решил так,
при начале поиска:
Код
Выбрать все
ТПОтчет.ТаймаутОбновления = 0; 


При окончании поиска:
Код
Выбрать все
ТПОтчет.ТаймаутОбновления = 5; 


- заработало.
  
Наверх
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТабличноеПоле, зависание при позиционировании на строку и автообновлении
Ответ #2 - 10. Сентября 2010 :: 12:30
Печать  
Выловил что зависает про профайлеру, под ряд идут 2 запроса:
Код
Выбрать все
exec sp_executesql N'
select
... 


потом вот этот:
Код
Выбрать все
exec sp_executesql N'
select top 20 


Ну и по прохождении некоторого времени 1С слетает.

Версия 1С++ - 3.2.2.5.
  
Наверх
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: ТабличноеПоле, зависание при позиционировании на строку и автообновлении
Ответ #3 - 10. Сентября 2010 :: 12:49
Печать  
(0) А в какое значение выставлено ТаймаутБыстрогоПоиска ?

PS А 5 сек на обновление не слишком ли больщая нагрузка для sql
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: ТабличноеПоле, зависание при позиционировании на строку и автообновлении
Ответ #4 - 11. Сентября 2010 :: 05:26
Печать  
pvase писал(а) 10. Сентября 2010 :: 12:20:
Интересное поведение ТП при позиционировании на строку:
Код
Выбрать все
ТПОтчет.ТекущаяСтрока = ДокПоиска 

.
Предварительно установлено автообновление каждые 5 секунд. Источник - ODBCDataProvider.MSSQL. Делаю поиск в ТП как в стандартном виде (поле ввода + кнопка). Так вот если нажатие на кнопку (выполняется поиск) совпадает с автообновлением, то Автообновление зацикливается и по истечении некоторого времени 1С вылетает.
Думаю что может быть зависание, потому что после установки строки я использую Форма.Обновить, в результате чего и происходит зацикливание. Может еще кто то сталкивался с таким? Как можно обойти?

Скорее всего - ты как-то нарушаешь работу с ТП в этом месте "Делаю поиск в ТП как в стандартном виде (поле ввода + кнопка)". Можешь показать процедуру этого поиска?
  
Наверх
ICQ  
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТабличноеПоле, зависание при позиционировании на строку и автообновлении
Ответ #5 - 13. Сентября 2010 :: 08:08
Печать  
Z1 писал(а) 10. Сентября 2010 :: 12:49:
(0) А в какое значение выставлено ТаймаутБыстрогоПоиска ?

PS А 5 сек на обновление не слишком ли больщая нагрузка для sql


Нормально, потом сделаю меньше, а для тестов как раз то что надо.
  
Наверх
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТабличноеПоле, зависание при позиционировании на строку и автообновлении
Ответ #6 - 13. Сентября 2010 :: 08:10
Печать  
Salimbek писал(а) 11. Сентября 2010 :: 05:26:
Скорее всего - ты как-то нарушаешь работу с ТП в этом месте "Делаю поиск в ТП как в стандартном виде (поле ввода + кнопка)". Можешь показать процедуру этого поиска?


Вот код поиска с отключением автообневления (который сейчас работает):
Код
Выбрать все
Процедура ПоискВТП()
	ТекКол = ТПОтчет.ТекущаяКолонка.Имя;
	Если ТекКол <> "" Тогда
		ТПОтчет.ТаймаутОбновления = 0;
		Если ТекВидДок <> "" Тогда
			ТекстЗППоиск = " --Журнал ПланПогрузки (ПОИСК): "+глПользователь+"
			|SELECT
			|	TOP 1
			|	Tab1.IDDOC AS [Документ]
			|";
			флНадоДжойн = 0;
			флПолеНайдено = 0;

			ТаблСорт = "";
			ПолеТабл = "";
			ТаблПоле = "";

			Если ТекКол = "Контрагент" Тогда
				ЗнПоиска = СокрЛП(стрПоиск);
				флПолеНайдено = 1;
				флНадоДжойн = 1;
				ТаблСорт = "$Справочник.Контрагенты";
				ТаблПоле = "$Tab1.Контрагент";
				ПолеТабл = "ID";
				УсловиеПоиска = "	AND (UPPER(TabSort.DESCR) LIKE '%" + Врег(ЗнПоиска) + "%')";
			Иначе
				Сообщить("По колонке " + СокрЛП(ТекКол) + " поиск невозможен");
				ТПОтчет.ТаймаутОбновления = 10;
				Возврат;
			КонецЕсли;

			ТекстЗППоиск = ТекстЗППоиск + "
			|FROM $Документ."+ТекВидДок+" AS Tab1 (NOLOCK)
			|	INNER JOIN Журналы As TabJ (NOLOCK) ON (TabJ.IDDOC = Tab1.IDDOC)
			|	INNER JOIN ВидыДокументов AS TabV ON (TabV.IDDOCDEF = TabJ.IDDOCDEF)
			|	LEFT OUTER JOIN dbo.tbl_PlanPogrParam AS TabParam WITH (NOLOCK) ON ((Tab1.IDDOC = TabParam.IDDOC) AND ('"+ИдПользователя+"' = TabParam.IDUSER))";

			Если флНадоДжойн = 1 Тогда
				ТекстЗППоиск = ТекстЗППоиск + "
				|	LEFT OUTER JOIN "+ТаблСорт+" AS TabSort ON ("+ТаблПоле+" = TabSort."+ПолеТабл+")";
			КонецЕсли;

			ТекстЗППоиск = ТекстЗППоиск + "
			|WHERE
			|	1 = 1" + ВключитьФильтры();
			Если (флПолеНайдено = 1) Тогда
				ТекстЗППоиск = ТекстЗППоиск + "
				|	"+УсловиеПоиска;
			Иначе
				Сообщить("По этой колонке поиск невозможен");
				ТПОтчет.ТаймаутОбновления = 10;
				Возврат;
			КонецЕсли;
			ТекстЗППоиск = ТекстЗППоиск + "
			|	AND (COALESCE(TabParam.DATE_TIME_IDDOC,TabJ.DATE_TIME_IDDOC)) > '" +  ТПОтчет.ТекущиеДанные.P_DATE_TIME_IDDOC + "'";
			ТекстЗППоиск = ТекстЗППоиск + "
			|ORDER BY
			|	TabParam.DATE_TIME_IDDOC,
			|	TabJ.DATE_TIME_IDDOC";
			глODBC.Отладка(0);
			ДокПоиска = глВыполнитьСкалярныйЗапросSQL(ТекстЗППоиск);


			Если СокрЛП(ДокПоиска) <> "" Тогда
				Попытка
					ТПОтчет.ТекущаяСтрока = ДокПоиска;
					Форма.Обновить();
				Исключение
				КонецПопытки;
			Иначе
				Предупреждение("Ничего не найдено",5);
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	ТПОтчет.ТаймаутОбновления = 10;
КонецПроцедуры 

  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать