Не во всех случаях появляется полоса прокрутки (обычное приложение)

1. LeaNaeD 03.09.12 14:44 Сейчас в теме
Сделал простенькую обработку для объяснения сути проблемы. В общем, делаю я довольно навороченную для моего уровня штуковину с автоматически создающимися на форме закладками и полями ввода. Проблема такова: при перемещении по закладкам иногда возникает ситуация, когда после перехода на ту или иную закладку полоса прокрутки не появляется, и часть элементов, расположенных на этой закладке, становится недоступной для пользователя. Однако, погуляв туда-сюда по закладкам и опять переключившись на данную проблемную закладку, мы видим, что полоса прокрутки на своем законном месте!

Чувствую, что копать надо в сторону привязок, но пока что не особо в этом разбираюсь. Прошу советов мудрых.

К вниманию дается обработка с алгоритмом, повторяющим данную проблему (написана в 1С 8.2, но по сути в 8.1 должно быть то же самое). Открываем форму обработки, НИЧЕГО не делаем с размерами самой формы! Гуляем по закладкам, как описано в прилагающихся скриншотах.

Страница5 - Страница4 - Страница3 - Страница2 - никаких проблем.

Далее закрываем обработку и открывааем снова.

Страница5 - Страница4 - Страница2 - нет полосы прокрутки.

Далее, например, так:

Страница4 - Страница2 - вуаля, полоса прокрутки появилась.

Исчезнувшая полоса прокрутки как-то связана с тем, что когда впервые переходим с закладки с небольшим количеством элементов (и соответственно без полосы прокрутки) на закладку с большим количеством элементов, то при первом переходе полоса прокрутки не появляется.


Версия моем платформы - 8.2.15.294.
Прикрепленные файлы:
ПробаСтраницы.epf
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
12. bambr1975 881 03.09.12 19:03 Сейчас в теме
(1) LeaNaeD, в первоначальном варианте обработки в свойствах формы снимите галочку "Использовать выравнивающие линии" - глюк больше не повторится
hydro2588_2015; opkc; AlexanderAndreev; slashmax; Мах; Liily; +6 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
12. bambr1975 881 03.09.12 19:03 Сейчас в теме
(1) LeaNaeD, в первоначальном варианте обработки в свойствах формы снимите галочку "Использовать выравнивающие линии" - глюк больше не повторится
hydro2588_2015; opkc; AlexanderAndreev; slashmax; Мах; Liily; +6 Ответить
13. LeaNaeD 03.09.12 19:38 Сейчас в теме
(12) bambr1975,

Аааа, мой спаситель!
2. trand 03.09.12 14:55 Сейчас в теме
У меня обработка не открылась по причине:
Неверный формат хранилища данных
3. LeaNaeD 03.09.12 15:32 Сейчас в теме
(2) Apextrofimov,

>Версия моем платформы - 8.2.15.294

Какая у Вас?

Вообще, могу дать код обработки. Достаточно создать форму обработки, на ней разместить панель "Панель1" и вставить следующий код (ну и подставить для формы соответствующую событийную процедуру ПриОткрытии):


Процедура ПриОткрытии()
	
	СозданиеСтраницыИЭлементов(10);
	СозданиеСтраницыИЭлементов(30);
	СозданиеСтраницыИЭлементов(2);
	СозданиеСтраницыИЭлементов(20);	
	
	
КонецПроцедуры

Процедура СозданиеСтраницыИЭлементов(КоличествоЭлементов)
	
	НовСтраница = ЭлементыФормы.Панель1.Страницы.Добавить("Страница"+ЭлементыФормы.Панель1.Страницы.Количество()+1);
	ЭлементыФормы.Панель1.ТекущаяСтраница = НовСтраница;
	
	ВерхЭлемента = 10;
	
	Для Ном = 1 По КоличествоЭлементов Цикл
		
		НовыйЭлементУправленияНадпись = ЭлементыФормы.Добавить(Тип("Надпись"), НовСтраница.Имя+"Надпись"+Ном,Истина,ЭлементыФормы.Панель1);
		НовыйЭлементУправленияНадпись.Верх = ВерхЭлемента;
		НовыйЭлементУправленияНадпись.Заголовок = НовСтраница.Имя+"Надпись"+Ном;
		НовыйЭлементУправленияНадпись.Лево = 6;
		НовыйЭлементУправленияНадпись.Ширина = 200;
		НовыйЭлементУправленияНадпись.Высота = 19;
		
		
		НовыйЭлементУправления = ЭлементыФормы.Добавить(Тип("ПолеВвода"), НовСтраница.Имя+"Поле"+Ном,Истина,ЭлементыФормы.Панель1);		
		НовыйЭлементУправления.Верх = ВерхЭлемента;
		НовыйЭлементУправления.Лево = НовыйЭлементУправленияНадпись.Лево + НовыйЭлементУправленияНадпись.Ширина + 6;
		НовыйЭлементУправления.Высота = 19;
		НовыйЭлементУправления.Ширина = 30;
		НовыйЭлементУправления.ТолькоПросмотр = Ложь;
		
		НовыйЭлементУправления.ТипЗначения = Новый ОписаниеТипов("Строка");
		НовыйЭлементУправления.ВыбиратьТип = Ложь;
		
		ВерхЭлемента = ВерхЭлемента + 19 + 6;	
		
	КонецЦикла;
	
КонецПроцедуры

Показать
4. Akuji 22 03.09.12 15:59 Сейчас в теме
А то что элементы страниц формируются только начиная со 2й страницы это нормально или нет?
В первой получается неопределенное значение...
5. LeaNaeD 03.09.12 16:04 Сейчас в теме
(4) Akuji,

Обработка сделана почти на тяпляп, чтобы воспроизвести ошибку. Первая закладка просто пустая, нет на ней никаких элементов ну и хай с ним.
6. Akuji 22 03.09.12 16:41 Сейчас в теме
и все таки, как в оригинале?)
если что то типо того:
Процедура ПриОткрытии()
	
	СозданиеСтраницыИЭлементов(10,ЭлементыФормы.Панель1.ТекущаяСтраница);//первая страница уже создана!
	НовСтраница =ЭлементыФормы.Панель1.Страницы.Добавить("Страница"+ЭлементыФормы.Панель1.Страницы.Количество()+1);
	СозданиеСтраницыИЭлементов(30,НовСтраница);
	НовСтраница =ЭлементыФормы.Панель1.Страницы.Добавить("Страница"+ЭлементыФормы.Панель1.Страницы.Количество()+1);
	СозданиеСтраницыИЭлементов(2,НовСтраница);
	НовСтраница =ЭлементыФормы.Панель1.Страницы.Добавить("Страница"+ЭлементыФормы.Панель1.Страницы.Количество()+1);
	СозданиеСтраницыИЭлементов(20,НовСтраница);	
	
	
КонецПроцедуры

Процедура СозданиеСтраницыИЭлементов(КоличествоЭлементов,НовСтраница)
	ЭлементыФормы.Панель1.ТекущаяСтраница = НовСтраница;
	
	ВерхЭлемента = 10;
	
	Для Ном = 1 По КоличествоЭлементов Цикл
		
		НовыйЭлементУправленияНадпись = ЭлементыФормы.Добавить(Тип("Надпись"), НовСтраница.Имя+"Надпись"+Ном,Истина,ЭлементыФормы.Панель1);
		НовыйЭлементУправленияНадпись.Верх = ВерхЭлемента;
		НовыйЭлементУправленияНадпись.Заголовок = НовСтраница.Имя+"Надпись"+Ном;
		НовыйЭлементУправленияНадпись.Лево = 6;
		НовыйЭлементУправленияНадпись.Ширина = 200;
		НовыйЭлементУправленияНадпись.Высота = 19;
		
		
		НовыйЭлементУправления = ЭлементыФормы.Добавить(Тип("ПолеВвода"), НовСтраница.Имя+"Поле"+Ном,Истина,ЭлементыФормы.Панель1);		
		НовыйЭлементУправления.Верх = ВерхЭлемента;
		НовыйЭлементУправления.Лево = НовыйЭлементУправленияНадпись.Лево + НовыйЭлементУправленияНадпись.Ширина + 6;
		НовыйЭлементУправления.Высота = 19;
		НовыйЭлементУправления.Ширина = 30;
		НовыйЭлементУправления.ТолькоПросмотр = Ложь;
		
		НовыйЭлементУправления.ТипЗначения = Новый ОписаниеТипов("Строка");
		НовыйЭлементУправления.ВыбиратьТип = Ложь;
		
		ВерхЭлемента = ВерхЭлемента + 19 + 6;	
		
	КонецЦикла;
	
КонецПроцедуры
Показать


то глюк не воспроизводится. все работает нормально
8. LeaNaeD 03.09.12 18:14 Сейчас в теме
(6) Akuji,

В оригинале в районе 4000-5000 строк кода, смысла приводить его нет. Однако часть с созданием закладок и полей практически идентичная.

В вашем примере замените код процедуры на этот.

Процедура ПриОткрытии()
   
   СозданиеСтраницыИЭлементов(10,ЭлементыФормы.Панель1.ТекущаяСтраница);//первая страница уже создана!
   НовСтраница =ЭлементыФормы.Панель1.Страницы.Добавить("Страница"+ЭлементыФормы.Панель1.Страницы.Количество()+1);
   СозданиеСтраницыИЭлементов(10,НовСтраница);
   НовСтраница =ЭлементыФормы.Панель1.Страницы.Добавить("Страница"+ЭлементыФормы.Панель1.Страницы.Количество()+1);
   СозданиеСтраницыИЭлементов(30,НовСтраница);
   НовСтраница =ЭлементыФормы.Панель1.Страницы.Добавить("Страница"+ЭлементыФормы.Панель1.Страницы.Количество()+1);
   СозданиеСтраницыИЭлементов(2,НовСтраница);
   НовСтраница =ЭлементыФормы.Панель1.Страницы.Добавить("Страница"+ЭлементыФормы.Панель1.Страницы.Количество()+1);
   СозданиеСтраницыИЭлементов(20,НовСтраница);   
   
   
КонецПроцедуры

Показать


В результате у меня тот же самый косяк при переходе по страницам 5-->4--->2.
Почему Вас (как и остальных) смутило, что первая закладка пустая? Логики 1С это не нарушает.




(7) lehis_S,

Не понял смысла в Вашем коде. Суть в том, что на каждой закладке может находиться определенное количество различных элементов. И понятное дело, что эти элементы должны находиться именно на этой закладке, а не на других. Мой код просто воспроизводит это дело (Куча закладок с различным количеством элементов на них) и воспроизводит ошибку с непоявляющейся полосой прокрутки.
9. lehis_S 03.09.12 18:33 Сейчас в теме
(8) LeaNaeD,
Суть в том, что не глючит, уже общелкался))). Хотя с вашим кодом были глюки описанные вами. Я понимаю что это не решение, но может все-таки, чем-то поможет. Да и платформа у меня 8.2.16.352.
Прикрепленные файлы:
ВнешняяОбработка2.epf
10. LeaNaeD 03.09.12 18:45 Сейчас в теме
(9) lehis_S,

Располагать на форме количество элементов, меньшее, чем то, при котором часть элементов заходит за границу формы - это не вариант. Тем более, это пример с небольшой формой, а в реале оно покруче будет. У меня разрешение монитора 1920х1080, и где все нормально, у кого-то на 800х600 вылезут такие косяки. Да и элементы эти тоже могут быть похитрее - это здесь они в высоту 19, а может быть один элемент, но такой огромный по высоте, что и на фулл хд выйдет за пределы формы.
11. LeaNaeD 03.09.12 18:52 Сейчас в теме
(9) lehis_S,

Кстати, измените код процедуры в своей обработке (тот, что Вы приложили для скачивания) на этот

Процедура ПриОткрытии()
	
	СозданиеСтраницыИЭлементов(10);
	СозданиеСтраницыИЭлементов(10);
	СозданиеСтраницыИЭлементов(30);
	СозданиеСтраницыИЭлементов(2);
	СозданиеСтраницыИЭлементов(10);
	СозданиеСтраницыИЭлементов(20);   
	ОснСтр = ЭлементыФормы.Панель1.Страницы.Страница1;
	ЭлементыФормы.Панель1.ТекущаяСтраница = ОснСтр;
	
КонецПроцедуры
Показать


Гуляйте по закладкам прямо по очереди слева направо 1-->2-->3-->4-->5. На 5 странице косяк.

Дополню - вру, сразу на второй странице уже косяк, нет полосы прокрутки. Для чистоты эксперимента напоминаю - если ненароком изменили размер формы, делаете "восстановить положение окна" форме обработки, иначе глюк может не проявиться.
7. lehis_S 03.09.12 17:09 Сейчас в теме
Немного изменил код глюков нет.
Процедура ПриОткрытии()
	
	СозданиеСтраницыИЭлементов(10);
	СозданиеСтраницыИЭлементов(30);
	СозданиеСтраницыИЭлементов(2);
	СозданиеСтраницыИЭлементов(20);   
	ОснСтр = ЭлементыФормы.Панель1.Страницы.Страница1;
	ЭлементыФормы.Панель1.ТекущаяСтраница = ОснСтр;
	
КонецПроцедуры

Процедура СозданиеСтраницыИЭлементов(КоличествоЭлементов)
	
    НовСтраница = ЭлементыФормы.Панель1.ТекущаяСтраница ;
	
	ВерхЭлемента = 10;
	
	Для Ном = 1 По КоличествоЭлементов Цикл
		
		НовыйЭлементУправленияНадпись = ЭлементыФормы.Добавить(Тип("Надпись"), НовСтраница.Имя+"Надпись"+Ном,Истина,ЭлементыФормы.Панель1);
		НовыйЭлементУправленияНадпись.Верх = ВерхЭлемента;
		НовыйЭлементУправленияНадпись.Заголовок = НовСтраница.Имя+"Надпись"+Ном;
		НовыйЭлементУправленияНадпись.Лево = 6;
		НовыйЭлементУправленияНадпись.Ширина = 200;
		НовыйЭлементУправленияНадпись.Высота = 19;
		
		
		НовыйЭлементУправления = ЭлементыФормы.Добавить(Тип("ПолеВвода"), НовСтраница.Имя+"Поле"+Ном,Истина,ЭлементыФормы.Панель1);      
		НовыйЭлементУправления.Верх = ВерхЭлемента;
		НовыйЭлементУправления.Лево = НовыйЭлементУправленияНадпись.Лево + НовыйЭлементУправленияНадпись.Ширина + 6;
		НовыйЭлементУправления.Высота = 19;
		НовыйЭлементУправления.Ширина = 30;
		НовыйЭлементУправления.ТолькоПросмотр = Ложь;
		
		НовыйЭлементУправления.ТипЗначения = Новый ОписаниеТипов("Строка");
		НовыйЭлементУправления.ВыбиратьТип = Ложь;
		
		ВерхЭлемента = ВерхЭлемента + 19 + 6;   
		
	КонецЦикла;
	Если КоличествоЭлементов <> 20 Тогда 
		НовСтраница = ЭлементыФормы.Панель1.Страницы.Добавить("Страница"+ЭлементыФормы.Панель1.Страницы.Количество()+1);
		
		ЭлементыФормы.Панель1.ТекущаяСтраница = НовСтраница;
	КонецЕсли;
	
КонецПроцедуры
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот