Не во всех случаях появляется полоса прокрутки (обычное приложение)
Сделал простенькую обработку для объяснения сути проблемы. В общем, делаю я довольно навороченную для моего уровня штуковину с автоматически создающимися на форме закладками и полями ввода. Проблема такова: при перемещении по закладкам иногда возникает ситуация, когда после перехода на ту или иную закладку полоса прокрутки не появляется, и часть элементов, расположенных на этой закладке, становится недоступной для пользователя. Однако, погуляв туда-сюда по закладкам и опять переключившись на данную проблемную закладку, мы видим, что полоса прокрутки на своем законном месте!
Чувствую, что копать надо в сторону привязок, но пока что не особо в этом разбираюсь. Прошу советов мудрых.
К вниманию дается обработка с алгоритмом, повторяющим данную проблему (написана в 1С 8.2, но по сути в 8.1 должно быть то же самое). Открываем форму обработки, НИЧЕГО не делаем с размерами самой формы! Гуляем по закладкам, как описано в прилагающихся скриншотах.
Страница5 - Страница4 - Страница3 - Страница2 - никаких проблем.
Далее закрываем обработку и открывааем снова.
Страница5 - Страница4 - Страница2 - нет полосы прокрутки.
Далее, например, так:
Страница4 - Страница2 - вуаля, полоса прокрутки появилась.
Исчезнувшая полоса прокрутки как-то связана с тем, что когда впервые переходим с закладки с небольшим количеством элементов (и соответственно без полосы прокрутки) на закладку с большим количеством элементов, то при первом переходе полоса прокрутки не появляется.
Версия моем платформы - 8.2.15.294.
Чувствую, что копать надо в сторону привязок, но пока что не особо в этом разбираюсь. Прошу советов мудрых.
К вниманию дается обработка с алгоритмом, повторяющим данную проблему (написана в 1С 8.2, но по сути в 8.1 должно быть то же самое). Открываем форму обработки, НИЧЕГО не делаем с размерами самой формы! Гуляем по закладкам, как описано в прилагающихся скриншотах.
Страница5 - Страница4 - Страница3 - Страница2 - никаких проблем.
Далее закрываем обработку и открывааем снова.
Страница5 - Страница4 - Страница2 - нет полосы прокрутки.
Далее, например, так:
Страница4 - Страница2 - вуаля, полоса прокрутки появилась.
Исчезнувшая полоса прокрутки как-то связана с тем, что когда впервые переходим с закладки с небольшим количеством элементов (и соответственно без полосы прокрутки) на закладку с большим количеством элементов, то при первом переходе полоса прокрутки не появляется.
Версия моем платформы - 8.2.15.294.
Прикрепленные файлы:
ПробаСтраницы.epf


По теме из базы знаний
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) Apextrofimov,
>Версия моем платформы - 8.2.15.294
Какая у Вас?
Вообще, могу дать код обработки. Достаточно создать форму обработки, на ней разместить панель "Панель1" и вставить следующий код (ну и подставить для формы соответствующую событийную процедуру ПриОткрытии):
>Версия моем платформы - 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;
КонецЦикла;
КонецПроцедуры
Показать
и все таки, как в оригинале?)
если что то типо того:
то глюк не воспроизводится. все работает нормально
если что то типо того:
Процедура ПриОткрытии()
СозданиеСтраницыИЭлементов(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;
КонецЦикла;
КонецПроцедуры
Показатьто глюк не воспроизводится. все работает нормально
(6) Akuji,
В оригинале в районе 4000-5000 строк кода, смысла приводить его нет. Однако часть с созданием закладок и полей практически идентичная.
В вашем примере замените код процедуры на этот.
В результате у меня тот же самый косяк при переходе по страницам 5-->4--->2.
Почему Вас (как и остальных) смутило, что первая закладка пустая? Логики 1С это не нарушает.
(7) lehis_S,
Не понял смысла в Вашем коде. Суть в том, что на каждой закладке может находиться определенное количество различных элементов. И понятное дело, что эти элементы должны находиться именно на этой закладке, а не на других. Мой код просто воспроизводит это дело (Куча закладок с различным количеством элементов на них) и воспроизводит ошибку с непоявляющейся полосой прокрутки.
В оригинале в районе 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,
Не понял смысла в Вашем коде. Суть в том, что на каждой закладке может находиться определенное количество различных элементов. И понятное дело, что эти элементы должны находиться именно на этой закладке, а не на других. Мой код просто воспроизводит это дело (Куча закладок с различным количеством элементов на них) и воспроизводит ошибку с непоявляющейся полосой прокрутки.
(8) LeaNaeD,
Суть в том, что не глючит, уже общелкался))). Хотя с вашим кодом были глюки описанные вами. Я понимаю что это не решение, но может все-таки, чем-то поможет. Да и платформа у меня 8.2.16.352.
Суть в том, что не глючит, уже общелкался))). Хотя с вашим кодом были глюки описанные вами. Я понимаю что это не решение, но может все-таки, чем-то поможет. Да и платформа у меня 8.2.16.352.
Прикрепленные файлы:
ВнешняяОбработка2.epf
(9) lehis_S,
Располагать на форме количество элементов, меньшее, чем то, при котором часть элементов заходит за границу формы - это не вариант. Тем более, это пример с небольшой формой, а в реале оно покруче будет. У меня разрешение монитора 1920х1080, и где все нормально, у кого-то на 800х600 вылезут такие косяки. Да и элементы эти тоже могут быть похитрее - это здесь они в высоту 19, а может быть один элемент, но такой огромный по высоте, что и на фулл хд выйдет за пределы формы.
Располагать на форме количество элементов, меньшее, чем то, при котором часть элементов заходит за границу формы - это не вариант. Тем более, это пример с небольшой формой, а в реале оно покруче будет. У меня разрешение монитора 1920х1080, и где все нормально, у кого-то на 800х600 вылезут такие косяки. Да и элементы эти тоже могут быть похитрее - это здесь они в высоту 19, а может быть один элемент, но такой огромный по высоте, что и на фулл хд выйдет за пределы формы.
(9) lehis_S,
Кстати, измените код процедуры в своей обработке (тот, что Вы приложили для скачивания) на этот
Гуляйте по закладкам прямо по очереди слева направо 1-->2-->3-->4-->5. На 5 странице косяк.
Дополню - вру, сразу на второй странице уже косяк, нет полосы прокрутки. Для чистоты эксперимента напоминаю - если ненароком изменили размер формы, делаете "восстановить положение окна" форме обработки, иначе глюк может не проявиться.
Кстати, измените код процедуры в своей обработке (тот, что Вы приложили для скачивания) на этот
Процедура ПриОткрытии()
СозданиеСтраницыИЭлементов(10);
СозданиеСтраницыИЭлементов(10);
СозданиеСтраницыИЭлементов(30);
СозданиеСтраницыИЭлементов(2);
СозданиеСтраницыИЭлементов(10);
СозданиеСтраницыИЭлементов(20);
ОснСтр = ЭлементыФормы.Панель1.Страницы.Страница1;
ЭлементыФормы.Панель1.ТекущаяСтраница = ОснСтр;
КонецПроцедуры
ПоказатьГуляйте по закладкам прямо по очереди слева направо 1-->2-->3-->4-->5. На 5 странице косяк.
Дополню - вру, сразу на второй странице уже косяк, нет полосы прокрутки. Для чистоты эксперимента напоминаю - если ненароком изменили размер формы, делаете "восстановить положение окна" форме обработки, иначе глюк может не проявиться.
Немного изменил код глюков нет.
Процедура ПриОткрытии()
СозданиеСтраницыИЭлементов(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.ТекущаяСтраница = НовСтраница;
КонецЕсли;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот