Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Продолжаю воевать с табличным полем+запрос (число прочтений - 2694 )
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Продолжаю воевать с табличным полем+запрос
15. Декабря 2010 :: 04:47
Печать  
Итак, имеем табличное поле с поставщиком данных - запросом.

Запрос, в самом примитивном случае, такой:
Код
Выбрать все
	ТекстЗапроса = "
	|SELECT
	|	Журн.IDDoc As [Документ $Документ.Заказ],
	|	Журн.Date_Time_IDDOC As Порядок,
	|	Rtrim(Журн.DocNo) As Номер,
	|	Док.$ОбщийРеквизит.Комментарий As Комментарий,
	|	Журн.$ОбщийРеквизит.Автор As [Автор $Справочник.Пользователи]
	|FROM
	|	_1SJourn Журн (nolock)
	|	LEFT JOIN $Документ.Заказ Док (NoLock) on Док.IDDoc = Журн.IDDoc
	|WHERE
	|	Журн.IDDocDef = $ВидДокумента.Заказ";
 


В текст запроса может добавляться условие по реквизиту документа.

Ключ порядка - Порядок, ключ строки - Документ.
Если отображаются колонки Комментарий + Автор, то имею непонятную хрень. Если хоть одна из них скрыта - то все работает нормально.
Непонятная хрень заключается в следующем:
Если обе колонки отображаются при открытии формы, то в табличном поле высвечивается сообщение ошибки скуля "State 07009, native 0, message [Microsoft][ODBC SQL Server Driver]Недопустимый индекс дескриптора". Но, тем не менее, табличное поле заполняется.
Если при открытии была видима только одна колонка, а потом мы включили видимость второй - то никаких сообщений об ошибке нет.
но и в том и в другой случае (т.е. когда отображаются обе колонки, без разницы, как мы этого добились) начинается фигня с сохранением ключа строки. Т.е. "включаю фильтр" - позиционирование табличного поля сбрасывается на самое начало.

Стоит убрать одну из этих двух колонок - все ок, ключ строки при перепостроении запроса сохраняется. Стоит отобразить обе - начинается хрень.

Сохранение ключа строки осуществляется следующим образом:

Код
Выбрать все
Процедура УстановитьТекстЗапроса(_ТекстЗапроса)
	Сам = Сам(Контекст);

	ТекстЗапроса = СтрЗаменить(_ТекстЗапроса, "<$WHERE>", "");

	Попытка
		// могли сменить ключ строки, а в старом запросе этого поля не было
		ТекДанные = Сам.ТекущиеДанные.Получить(КлючСтроки);
	Исключение
		ТекДанные = "";
	КонецПопытки;

	Поставщик.УстТекстЗапроса(ТекстЗапроса);

	Поставщик.УстИдПоле(КлючСтроки);
	Поставщик.УстКлючПорядка(КлючПорядка);

	Для й = 1 По Сам.Колонки.Количество() Цикл
		Колонка = Сам.Колонки.Получить(й - 1);
		//Если Колонка.Видимость = 1 Тогда
			Поле = Поставщик.Поля.Добавить(Колонка.Данные);
			Поле.ТипБыстрогоПоиска = 1;
		//КонецЕсли;
	КонецЦикла;


	Сам.ПоставщикДанных = Поставщик;
	Сам.ПоставщикДанных.Обновить(ТекДанные);
КонецПроцедуры	// УстановитьТекстЗапроса
 



Иногда, волею судеб, глюк перестает проявляться. На некоторое время. Потом начинает снова.

Еще замечание - при "хрени" колонка комментарий - пустая.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Продолжаю воевать с табличным полем+запрос
Ответ #1 - 15. Декабря 2010 :: 05:06
Печать  
Замечание №2 - похоже, хрень проявляется когда колонка "Комментарий" не является последней.

Если это важно, то Комментарий - это неограниченная строка.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Продолжаю воевать с табличным полем+запрос
Ответ #2 - 15. Декабря 2010 :: 05:11
Печать  
LTrim(Cast(Док.$ОбщийРеквизит.Комментарий as Char(500))) As Комментарий,

кажется, помогло...

PS капец. что-то я третий день на форуме в режиме "тихо сам с собою..."
  
Наверх
 
IP записан
 
Anatol
Senior Member
****
Отсутствует


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Продолжаю воевать с табличным полем+запрос
Ответ #3 - 15. Декабря 2010 :: 06:38
Печать  
эээ... ну ты ведь пишешь в самую рань, когда все спят =) и в течении 15 минут сам разруливаешь свои вопросы, что нужно отвечать?
  
Наверх
wwwICQ  
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Продолжаю воевать с табличным полем+запрос
Ответ #4 - 15. Декабря 2010 :: 08:22
Печать  
Это у вас рань.
У меня - разгар рабочего дня Улыбка
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Продолжаю воевать с табличным полем+запрос
Ответ #5 - 16. Декабря 2010 :: 10:22
Печать  
Ээ простите - а в тематических ветках это не судьба обсуждать?
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать