Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) ТабличноеПоле, ОбновитьСтроки(), на последнюю стр. (число прочтений - 9194 )
chicago
Senior Member
****
Отсутствует


1C++, I have nothing to
say more!

Сообщений: 316
Местоположение: Тернополь-Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
ТабличноеПоле, ОбновитьСтроки(), на последнюю стр.
06. Июня 2007 :: 15:14
Печать  
Как сделать что бы при:
Код
Выбрать все
ТабПол.ОбновитьСтроки(); 


текущей строкой ставала последняя строка, но если учесть, что до этого вызова "ОбновитьСтроки()" текущая строка была на обекте который уже (в момент вызова) удален?
Спасибо.
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #1 - 06. Июня 2007 :: 15:56
Печать  
Метод ТабличноеПоле::ОбновитьСтроки предназначен для обновления отображаемых в данный момент строк. Он старается сохранить позицию с которой отображается в данный момент набор данных. В общем случае этот метод не изменяет положение текущей строки, за исключением того случая, когда текущей строки уже нет в наборе данных.

Как я понял, задача стоит именно в назначении текущей строки, поэтому надо воспользоваться свойством ТабличноеПоле::ТекущаяСтрока, оно доступно по записи.
Или использовать фукнционал "начального отображения", установить свойство ТабличноеПоле::НачальноеПредставление и инициализировать данные поставщика данных:
а)для объекта ПоставщикДанныхODBC метод Обновить();
б)для объекта ПоставщикДанныхТЗ подобного метода нет, возможно желаемого эффекта можно достич переустанавливая объект отображаемой таблицы значений или переустановить самого поставщика данных в ТП;
  
Наверх
ICQ  
IP записан
 
chicago
Senior Member
****
Отсутствует


1C++, I have nothing to
say more!

Сообщений: 316
Местоположение: Тернополь-Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #2 - 06. Июня 2007 :: 16:18
Печать  
1. Спасибо DmitrO за такое чудо как ТабличноеПоле вообще! Улыбка
2. Что такое "Метод ТабличноеПоле::ОбновитьСтроки..." читал и буду читать, но:

Код
Выбрать все
ТабПол.НачальноеПредставление = 1;
ТабПол.ТекущаяСтрока = "";

ТабПол.ОбновитьСтроки();
 


эфекта не дает...

Рассказываю все по порядку:
1. Была строка в ТП (она же текущая или ТекСтр).
2. Обьект (документ) который соответсвовал этой ТекСтр только что удален, но его еще видно в ТП.
3. Я хочу обновить (интерактивно, по кнопке "Обновить", автообновление ТП не интересует) ТП, но не как "ПоставщикДанныхODBC.Обновить()", а как ТабличноеПоле.ОбновитьСтроки().

Да, "задача стоит именно в назначении текущей строки", но после удаления прежней текущей строки я же не знаю которая была "перед" (сверху) нее.

Спасибо.
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #3 - 06. Июня 2007 :: 16:29
Печать  
так..
Тогда что тебя не устраивает, если просто вызовать только метод ОбновитьСтроки? Строка отображающая только что удаленный документ исчезнет, текущей строкой станет другая, в чем проблема? и причем тут тогда последняя строка в наборе данных?
  
Наверх
ICQ  
IP записан
 
chicago
Senior Member
****
Отсутствует


1C++, I have nothing to
say more!

Сообщений: 316
Местоположение: Тернополь-Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #4 - 06. Июня 2007 :: 16:39
Печать  
DmitrO писал(а) 06. Июня 2007 :: 16:29:
так..
Тогда что тебя не устраивает, если просто вызовать только метод ОбновитьСтроки? Строка отображающая только что удаленный документ исчезнет, текущей строкой станет другая, в чем проблема? и причем тут тогда последняя строка в наборе данных?


Если просто вызвать ОбновитьСтроки, то "Строка отображающая только что удаленный документ исчезнет, текущей строкой станет другая", а именно самая первая (в наборе данных). Но надо что бы была самая последняя (в наборе данных).
Как?
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #5 - 06. Июня 2007 :: 16:50
Печать  
странно, не должно быть такого поведения..
но всеже, попробуй перед вызовом ОбновитьСтроки сделать ТабПол.НачальноеПредставление = 1;
  
Наверх
ICQ  
IP записан
 
chicago
Senior Member
****
Отсутствует


1C++, I have nothing to
say more!

Сообщений: 316
Местоположение: Тернополь-Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #6 - 06. Июня 2007 :: 16:53
Печать  
DmitrO писал(а) 06. Июня 2007 :: 16:50:
странно, не должно быть такого поведения..
но всеже, попробуй перед вызовом ОбновитьСтроки сделать ТабПол.НачальноеПредставление = 1;


Ну, говорил же, делал, но. Эфекта нет...  Смущённый
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #7 - 06. Июня 2007 :: 16:57
Печать  
щас проверить не могу, завтра на работе..
  
Наверх
ICQ  
IP записан
 
chicago
Senior Member
****
Отсутствует


1C++, I have nothing to
say more!

Сообщений: 316
Местоположение: Тернополь-Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #8 - 06. Июня 2007 :: 17:06
Печать  
DmitrO писал(а) 06. Июня 2007 :: 16:57:
щас проверить не могу, завтра на работе..


Спасибо.

PS.
1. Суть задачи сводится к тому, что при:
Код
Выбрать все
ТабПол.НачальноеПредставление = 1;
ТабПол.ОбновитьСтроки(); 


по логике текущей строкой должна быть последняя, а в действительности не так.
2. 1С++ 2.0.3.3.
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #9 - 07. Июня 2007 :: 06:33
Печать  
Расследование проведено. Ошибка подтверждается.
Ошибка заключается в следующем:
Метод ОбновитьСтроки неправильно устанавливает текущую строку, если текущая строка была удалена из набора данных. Он ee ставит на первую отображаемую в ТП строку (важно: не на первую в наборе данных, это разные вещи).
В остальном метод работает правильно.

Что касается конкретной задачи, описанной в этой ветке.
Решение должно быть таким:
Код
Выбрать все
//удаляем документ
ТабПол.НачальноеПредставление = 1;
ТабПол.ПоставщикДанных.Обновить(); 

  
Наверх
ICQ  
IP записан
 
chicago
Senior Member
****
Отсутствует


1C++, I have nothing to
say more!

Сообщений: 316
Местоположение: Тернополь-Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #10 - 07. Июня 2007 :: 06:48
Печать  
1. Спасибо за быстрый ответ (жду его с 8 утра Подмигивание).
2.
DmitrO писал(а) 07. Июня 2007 :: 06:33:
Расследование проведено. Ошибка подтверждается.
Ошибка заключается в следующем:
Метод ОбновитьСтроки неправильно устанавливает текущую строку, если текущая строка была удалена из набора данных.

Сказано в точку на все 100%.
3.
DmitrO писал(а) 07. Июня 2007 :: 06:33:
... Он ee ставит на первую отображаемую в ТП строку (важно: не на первую в наборе данных, это разные вещи).

Тут не совсем понял... Озадачен
4. Пробую предложеное решение.

  
Наверх
ICQ  
IP записан
 
chicago
Senior Member
****
Отсутствует


1C++, I have nothing to
say more!

Сообщений: 316
Местоположение: Тернополь-Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #11 - 07. Июня 2007 :: 07:39
Печать  
Еще раз большое спасибо. Работает! Улыбка
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #12 - 07. Июня 2007 :: 08:00
Печать  
Ну раз работает, то позволь тебе заметить, что я тебе написал это решение еще в первом своем посте, тока ты почему-то ни как меня не слышал. Прочитай еще раз внимательно, там ведь нет ни одного лишнего слова.
  
Наверх
ICQ  
IP записан
 
chicago
Senior Member
****
Отсутствует


1C++, I have nothing to
say more!

Сообщений: 316
Местоположение: Тернополь-Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #13 - 07. Июня 2007 :: 08:30
Печать  
DmitrO писал(а) 07. Июня 2007 :: 08:00:
Ну раз работает, то позволь тебе заметить, что я тебе написал это решение еще в первом своем посте, тока ты почему-то ни как меня не слышал. Прочитай еще раз внимательно, там ведь нет ни одного лишнего слова.


Согласен с замечанием.
Если я правильно понял имелось в виду это:
DmitrO писал(а) 06. Июня 2007 :: 15:56:
а)для объекта ПоставщикДанныхODBC метод Обновить();


Если да то я не смог это (по не внимательности) интерпретировать как
Код
Выбрать все
ТабПол.ПоставщикДанных.Обновить(); 


Смущённый
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #14 - 07. Июня 2007 :: 09:04
Печать  
Да, я так и подумал.
  
Наверх
ICQ  
IP записан
 
chicago
Senior Member
****
Отсутствует


1C++, I have nothing to
say more!

Сообщений: 316
Местоположение: Тернополь-Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #15 - 07. Июня 2007 :: 09:12
Печать  
Улыбка Значит мы порозумилыся (как у нас на укр. говорят, тоисть поняли друг друга).

Еще раз спасибо за помощь.
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #16 - 08. Июня 2007 :: 03:16
Печать  
Вопрос по табличному полю: можно как - нибудь отловить событие понажатию наячейку ТП?
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #17 - 08. Июня 2007 :: 04:35
Печать  
Nick писал(а) 08. Июня 2007 :: 03:16:
Вопрос по табличному полю: можно как - нибудь отловить событие понажатию наячейку ТП?

Нажатию чем? Пальцем? Документацию почитать не пробовали? Открою великую тайну: там описано все, что можно, все остальное - нельзя.
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #18 - 08. Июня 2007 :: 04:51
Печать  
Как это не смешно действительно пальцем - на тачь скрине Улыбка, но в общем случае мышкой.
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #19 - 08. Июня 2007 :: 04:56
Печать  
Я так понимаю нужно использовать  ПриАктивизацииЯчейки(), но как! Печаль Скинте пример пожалуйста
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #20 - 08. Июня 2007 :: 05:00
Печать  
Спасибо вроде разобрался
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #21 - 08. Июня 2007 :: 05:45
Печать  
ну вообще-то, это событие сработает только когда текущая ячейка изменяется(!), а чистого события по нажатию левой кнопки мыши на ячейке - нет
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #22 - 08. Июня 2007 :: 05:52
Печать  
DmitrO писал(а) 08. Июня 2007 :: 05:45:
ну вообще-то, это событие сработает только когда текущая ячейка изменяется(!), а чистого события по нажатию левой кнопки мыши на ячейке - нет

Спасибо
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #23 - 08. Июня 2007 :: 06:08
Печать  
DmitrO писал(а) 08. Июня 2007 :: 05:45:
ну вообще-то, это событие сработает только когда текущая ячейка изменяется(!), а чистого события по нажатию левой кнопки мыши на ячейке - нет

Более того оно срабатывает когда курсор мышки покидает границы ТП, это по моему уже лишнее, т.е при простом перемещении мышки срабатывает это событие, можно это как - то обойти?
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #24 - 08. Июня 2007 :: 06:24
Печать  
Nick писал(а) 08. Июня 2007 :: 06:08:
Более того оно срабатывает когда курсор мышки покидает границы ТП
ничего не напутал? у ТП нет такого поведения.
  

1&&2&&3
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: ТабличноеПоле, ОбновитьСтроки(), на последнюю
Ответ #25 - 08. Июня 2007 :: 06:43
Печать  
trad писал(а) 08. Июня 2007 :: 06:24:
Nick писал(а) 08. Июня 2007 :: 06:08:
Более того оно срабатывает когда курсор мышки покидает границы ТП
ничего не напутал? у ТП нет такого поведения.


Да сейчас перепроверил не получилось Улыбка, правда перед эти 1С на гдухо повисла Печаль, в общем смысл какой вот процедура:

Процедура ТабПолеТараПриАктивизацииЯчейки()

     Если ВводимТару = 1 Тогда              
           Если ТараТС<> 0 Тогда
                 ТабПолеТара.ТекущаяСтрока = ТараТС;
                 ТабПолеТара.ТекущаяКолонка = ТараТК;
           КонецЕсли;      
           Сообщить("Возврат");
           Возврат;
     КонецЕсли;
     ТараТК =  ТабПолеТара.ТекущаяКолонка;
     ТараТС =  ТабПолеТара.ТекущаяСтрока;
     
     ВводимТару = 1;
     Сообщить("1--------"+Строка(ТараТС));
     оВвестиЧисло.ВвестиЧисло(0,"Введите количество тары",2,0,1,0);
     Сообщить("2--------"+Строка(ТараТС));
     ВводимТару = 0;

КонецПроцедуры

При выборе ячейки открывается форма в котрой пользователь вводит число и нажимает кнопку ОК и форма закрывается, после этого опять срабатывает событие и опять открывается форма. То есть такое ощущение что
ТП перехватывает событие для другой формы?
Ка сэтим бороться?
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать