Переключение на Главную Страницу Страницы: 1 ... 9 10 [11] 12 13 ... 20 ОтправитьПечать
Очень популярная тема (более 25 ответов) Начну пожалуй потихоньку постить баги 1cpp-tf (число прочтений - 86947 )
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Начну пожалуй потихоньку постить баги 1cpp-tf
Ответ #150 - 12. Марта 2008 :: 17:39
Печать  
Леша, это видно какая-то фигня редкая, необычная.
Не попадается пока зараза.

Может и правда какой-нибудь тест сделаешь.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Начну пожалуй потихоньку постить баги 1cpp-tf
Ответ #151 - 13. Марта 2008 :: 06:46
Печать  
Тест слепил. Открываем, прячем колонку Код - ТП очищается.  Только не понял, отчего оно так себя ведёт.  Т.е. сначала попытался с нуля обработку нарисовать - не падало. Потом взял класс, и по минимуму перетащил код оттуда, с соблюдением порядка вызовов - и стало падать.  Что закомментировать чтобы не падало найти не могу пока.
  

TF_err.zip ( 9 KB | Загрузки )
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Начну пожалуй потихоньку постить баги 1cpp-tf
Ответ #152 - 13. Марта 2008 :: 17:19
Печать  
Да, есть такая беда - инжектор барахлит.
Документировал: http://www.1cpp.ru/bugs/show_bug.cgi?id=3633

Проблема проявляется в зависимости от взаимного расположения (в реальном запросе) скрываемой колонки и колонок ключа порядка.
Как исправить - пока что-то не ясно.

Буду думать местами.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Начну пожалуй потихоньку постить баги 1cpp-tf
Ответ #153 - 13. Марта 2008 :: 17:51
Печать  
ADirks

Да, вот что вспомнил.
Решал уже подобную (в логике) задачу - http://www.1cpp.ru/bugs/show_bug.cgi?id=2969

Описание там оставляет желать лучшего, но логика ошибки та же - несоответстие индексов условиям хранения.
Проблема с БП исправлено в ветке TF3 - и, соответственно, сейчас в стволе ее нет.

В твоем случае есть такой вариант:
Код
Выбрать все
Процедура Показать()
	оПоставщикДанных.УстИДПоле("ROW_ID"); // ид поле
	УстановитьСортировкуВПоставщикеДанных(0); // установка КП
	оТП.ПоставщикДанных = оПоставщикДанных; // установка поставщика
...
 



На общий воркэраунд не потянет, но как иллюстрация пойдет.
Короче, ИД поле и поля КП должны быть первыми в селект-листе, иначе эта нарушенная логика непременно рано или поздно ударяет в голову.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Начну пожалуй потихоньку постить баги 1cpp-tf
Ответ #154 - 13. Марта 2008 :: 22:26
Печать  
Короче, сделал, вроде нормально.
Смысл в переупорядочивании полей селект-листа таким образом, чтобы необходимость инвалидации строк возникала только при замене КП.

Код
Выбрать все
bool CSQLProvider::CSelectListItemLess::operator()(CSelectListItem* lhs, CSelectListItem* rhs)
{
	DWORD const rhsOrder = rhs->m_nFlags & IS_ORDERKEY;
	DWORD const lhsOrder = lhs->m_nFlags & IS_ORDERKEY;
	bool ret = rhsOrder < lhsOrder;
	if (!ret)
	{
		if (lhsOrder)
			ret = rhs->m_nFieldIndex < lhs->m_nFieldIndex;
		else if (!rhsOrder)
		{
			DWORD const rhsID = rhs->m_nFlags & IS_IDFIELD;
			DWORD const lhsID = lhs->m_nFlags & IS_IDFIELD;
			ret = (rhsID) < (lhsID);
			if (!ret && (rhsID) == (lhsID))
				ret = rhs->m_nFieldIndex < lhs->m_nFieldIndex;
		}
	}
	return ret;
}

void CSQLProvider::ReorderFields()
{
	CSelectListItem** begin = reinterpret_cast<CSelectListItem**>(m_fields.GetData());
	CSelectListItem** end = begin + m_fields.GetSize();

	if (begin != end)
	{
		std::sort(begin, end, CSelectListItemLess());
		CSelectListItem** pItem = begin;
		for (int i = 0; pItem != end; ++i)
			(*pItem++)->m_nFieldIndex = i;
	}
}

// плюс вызов ReorderFields() после установки КП и ИД полей.
// ...
 



Под vs6, наверное, не скомпилируется, ну и хрен с ним; а в новый модуль в выходные залью.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Начну пожалуй потихоньку постить баги 1cpp-tf
Ответ #155 - 13. Марта 2008 :: 22:49
Печать  
Ладно, и для vs6 сделал, пусть будет.

ADirks

Леха, глянь, как оно, полегчает или нет? Улыбка
Надеюсь, я ничего не забыл и в других местах не аукнется.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Начну пожалуй потихоньку постить баги 1cpp-tf
Ответ #156 - 14. Марта 2008 :: 07:12
Печать  
Падать перестало, это здорово.  Спасибо.

Но другая напасть теперь одолевает  Улыбка   Та самая проблема с видимостью колонок.  Допустим, я меняю текст запроса, оставляя при этом набор колонок неизменным (меняются фильтры). При этом у поставщика естественно слетают настройки селект-листа. Я пытаюсь ему втолковать эту информацию таким способом
Код
Выбрать все
	Для н = 1 По Колонки.Количество() Цикл
		Колонка = Колонки.Получить(н-1);
		Колонка.Видимость = Колонка.Видимость;
	КонецЦикла;
 


Для этого правда пришлось в методе CGridColumn::SetVisible() пришлось закомментировать 2 первых строчки. И всё бы ничего, но колонок много, и в итоге на сервер уходит куча запросов, с постепенно уменьшающимся количеством колонок.  Время реакции это естественно не улучшает. Придумать бы что-нибудь такое, чтоб одним махом убрать ненужные колонки из селект-листа...
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Начну пожалуй потихоньку постить баги 1cpp-tf
Ответ #157 - 14. Марта 2008 :: 07:46
Печать  
Леша, а поставщика ты отключаешь на время установки текста запроса?
Но при подключении к ТП селект-лист теряет информацию о скрытых колонках, так?

Я думаю, надо изменить логику CCursorGridCtrl::QueryFields с добавления на синхронизацию по видимости.
Это позволит при установке провайдера получать требуемый селект лист.

http://www.1cpp.ru/bugs/show_bug.cgi?id=3635

А вот с отправкой запросов - тут ведь как.
ИМХО автоматическая отправка запроса нужна только при интерактивном изменении видимости колонки.
И при первичной установке поставщика.

Все остальное надо бы делать вручную, но это повлияет на обратную совместимость... Нерешительный
  

De quelle planète es-tu?
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Начну пожалуй потихоньку постить баги 1cpp-tf
Ответ #158 - 14. Марта 2008 :: 07:59
Печать  
Цитата:
Леша, а поставщика ты отключаешь на время установки текста запроса?
Но при подключении к ТП селект-лист теряет информацию о скрытых колонках, так?

А тут без разницы, можно и не отключая поменять текст запроса - поставщик всё равно забывает все настройки.

Цитата:
А вот с отправкой запросов - тут ведь как.
ИМХО автоматическая отправка запроса нужна только при интерактивном изменении видимости колонки.
И при первичной установке поставщика.

Все остальное надо бы делать вручную, но это повлияет на обратную совместимость...

Угу...  по простому тут фиг чё получится...
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Начну пожалуй потихоньку постить баги 1cpp-tf
Ответ #159 - 14. Марта 2008 :: 08:10
Печать  
Я сейчас подумал - можно такую схему реализовать:

1. отключаем поставщика
2. устанавливаем текст запроса
3. устанавливаем кп
4. устанавливаем ид поле
5. подключаем поставщика

Вот в п. 5 должно быть следующее поведение: синхронизация селект-листа с видимостью колонок ТП, причем обновление нужно только после установки всех колонок.
В этом случае лишних запросов не будет, твой дополнительный цикл по колонкам будет не нужен.
Порадует тебя такое решение? Улыбка

В прошлом сообщении я еще задумывался над конструкцией типа твоей
Код
Выбрать все
Для н = 1 По Колонки.Количество() Цикл
		Колонка = Колонки.Получить(н-1);
		Колонка.Видимость = ?(Колонка.Видимость = 0, 1, 0);  // инверсия
КонецЦикла;
 


Тут, конечно, придется вводить другую логику, что повлияет на совместимость.
С другой стороны, у меня таких конструкций массового изменения видимости ни одной нет.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Начну пожалуй потихоньку постить баги 1cpp-tf
Ответ #160 - 14. Марта 2008 :: 08:41
Печать  
Цитата:
Я сейчас подумал - можно такую схему реализовать:

1. отключаем поставщика
2. устанавливаем текст запроса
3. устанавливаем кп
4. устанавливаем ид поле
5. подключаем поставщика

Вот в п. 5 должно быть следующее поведение: синхронизация селект-листа с видимостью колонок ТП, причем обновление нужно только после установки всех колонок.
В этом случае лишних запросов не будет, твой дополнительный цикл по колонкам будет не нужен.
Порадует тебя такое решение?

ДААААА!!!   Улыбка)

Цитата:
В прошлом сообщении я еще задумывался над конструкцией типа твоей
Для н = 1 По Колонки.Количество() Цикл
           Колонка = Колонки.Получить(н-1);
           Колонка.Видимость = ?(Колонка.Видимость = 0, 1, 0);  // инверсия
КонецЦикла;

Тут, конечно, придется вводить другую логику, что повлияет на совместимость.
С другой стороны, у меня таких конструкций массового изменения видимости ни одной нет.

Не понял чего-то...  Если у колонки таким макаром меняется видимость, то пусть оно ведёт себя так же, как сейчас. Вполне здравое поведение.  Просто надо такую операцию делать до назначения поставщика.
У меня такие вот массовые операции - это восстановление настроек. Восстанавливается видимость колонок, их порядок и ширина.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Начну пожалуй потихоньку постить баги 1cpp-tf
Ответ #161 - 14. Марта 2008 :: 08:50
Печать  
ADirks писал(а) 14. Марта 2008 :: 08:41:
Если у колонки таким макаром меняется видимость, то пусть оно ведёт себя так же, как сейчас. Вполне здравое поведение.  Просто надо такую операцию делать до назначения поставщика.
У меня такие вот массовые операции - это восстановление настроек. Восстанавливается видимость колонок, их порядок и ширина.

Ага, все правильно.

Я просто представил себе ТП с 200 колонок, из которых одновременно активно только 50.
Пользователь, гад, нажимает кнопку: "хачу видеть первые 50", потом "хачу видеть последние 50".
Короче, это будет цикл, который скрывает 50, а потом добавляет 50.
При подключенном поставщике будет 100 запросов на сервер.

Ну, ладно, как обычно пишут: "подобные извращения выходят за рамки нашей книжки". Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Начну пожалуй потихоньку постить баги 1cpp-tf
Ответ #162 - 14. Марта 2008 :: 09:07
Печать  
ADirks писал(а) 14. Марта 2008 :: 08:41:
ДААААА!!!   Улыбка)



------- Comment #1 From kms 2008-03-14 12:04:29 [reply] -------
[-] Нарушение синхронизации селект-листа с видимостью колонок ТП
при установке провайдера

Changed files:
1cpp/Source/CursorGrid CursorGridCtrl.cpp,1.30


Угу? Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Начну пожалуй потихоньку постить баги 1cpp-tf
Ответ #163 - 14. Марта 2008 :: 09:38
Печать  
Йессс   Улыбка

я знал что надо 2 строчки добавить, только не знал какие   Подмигивание
  
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Начну пожалуй потихоньку постить баги 1cpp-tf
Ответ #164 - 17. Марта 2008 :: 17:26
Печать  
Цитата:
Я сейчас подумал - можно такую схему реализовать:

1. отключаем поставщика
2. устанавливаем текст запроса
3. устанавливаем кп
4. устанавливаем ид поле
5. подключаем поставщика

Вот в п. 5 должно быть следующее поведение: синхронизация селект-листа с видимостью колонок ТП, причем обновление нужно только после установки всех колонок.
В этом случае лишних запросов не будет, твой дополнительный цикл по колонкам будет не нужен.
Порадует тебя такое решение?

А вот меня не порадовало. Печаль

Скачал последнюю ночную и обнаружил зависимость от того, в какой момент подключается поставщик.
Раньше это было безразлично.
Тест прилагаю. Четко видна странность установки ключа порядка из нескольких полей.
Выдается выборка только на один экран.
Для проверки нужна сегодняшняя ночная сборка.
  

_testTF01.ert ( 14 KB | Загрузки )
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 9 10 [11] 12 13 ... 20
ОтправитьПечать