Сжать страницу с двадцатью собственными пояснениями и проверить прокрутку

Учебные задачи

ВертикальнаяПрокруткаПриСжатии требует растяжения страницы и подходящего режима прокрутки всей формы.

Где и как запускать

Полный модуль своей новой управляемой формы внешней обработки. Данные только в памяти формы.

Подготовка

  1. В своей отдельной конфигурации УчебнаяКонфигурацияСинтаксиса создайте новую внешнюю обработку с пустой управляемой основной формой. Каждый урок вставляйте в отдельную копию формы целым модулем.

  2. В событии формы ПриСозданииНаСервере назначьте одноимённый обработчик. Не создавайте вручную реквизиты НазваниеТовара, Количество, Цена, Сумма, две страницы и команду: код создаёт их сам.

  3. Первая страница содержит вымышленную Книгу: количество 3, цена 250, сумма 750. Это только значения формы, не номенклатура, цены, документ или регистр базы.

  4. Другая страница с собственным пояснением нужна для ручного переключения вкладок. Команда находится вне страниц и не скрывается при переключении.

  5. Используйте настольный тонкий/толстый клиент 8.5.1.1343. Сохранённые свойства не доказывают видимый эффект во всех темах и интерфейсах; размеры окна и внешний вид проверяются вручную.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Реквизиты = Новый Массив;
    Реквизиты.Добавить(Новый РеквизитФормы("НазваниеТовара", Новый ОписаниеТипов("Строка")));
    Для Каждого Имя Из СтрРазделить("Количество,Цена,Сумма", ",") Цикл
        Реквизиты.Добавить(Новый РеквизитФормы(Имя, Новый ОписаниеТипов("Число")));
    КонецЦикла;
    ЭтаФорма.ИзменитьРеквизиты(Реквизиты);
    НазваниеТовара = "Книга";
    Количество = 3;
    Цена = 250;
    Сумма = Количество * Цена;
    Страницы = Элементы.Добавить("УчебныеСтраницы", Тип("ГруппаФормы"));
    Страницы.Вид = ВидГруппыФормы.Страницы;
    Страница = Элементы.Добавить("УчебнаяСтраницаКниги", Тип("ГруппаФормы"), Страницы);
    Страница.Вид = ВидГруппыФормы.Страница;
    Страница.Заголовок = "Собственная Книга";
    Другая = Элементы.Добавить("УчебнаяСтраницаПояснения", Тип("ГруппаФормы"), Страницы);
    Другая.Вид = ВидГруппыФормы.Страница;
    Другая.Заголовок = "Что меняется";
    Пояснение = Элементы.Добавить("УчебноеПояснение", Тип("ДекорацияФормы"), Другая);
    Пояснение.Вид = ВидДекорацииФормы.Надпись;
    Пояснение.Заголовок = "Меняются только элементы и значения собственной формы. Записи в базе нет.";
    Для Каждого Имя Из СтрРазделить("НазваниеТовара,Количество,Цена,Сумма", ",") Цикл
        Поле = Элементы.Добавить("УчебноеПоле" + Имя, Тип("ПолеФормы"), Страница);
        Если Имя = "Сумма" Тогда
            Поле.Вид = ВидПоляФормы.ПолеНадписи;
        Иначе
            Поле.Вид = ВидПоляФормы.ПолеВвода;
        КонецЕсли;
        Поле.ПутьКДанным = Имя;
        Поле.Заголовок = Имя;
        Поле.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто;
    КонецЦикла;
    Страницы.ТекущаяСтраница = Страница;
    ЭтаФорма.ВертикальнаяПрокрутка = ВертикальнаяПрокруткаФормы.ИспользоватьПриНеобходимости;
    Страница.РастягиватьПоВертикали = Истина;
    Страница.Высота = 6;
    Страница.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
    Страница.ВертикальнаяПрокруткаПриСжатии = Истина;
    Для Номер = 1 По 20 Цикл
        Надпись = Элементы.Добавить("УчебнаяСтрокаСтраницы" + Строка(Номер), Тип("ДекорацияФормы"), Страница);
        Надпись.Вид = ВидДекорацииФормы.Надпись;
        Надпись.Заголовок = "Собственное пояснение страницы " + Строка(Номер);
    КонецЦикла;

    КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
    КомандаДействия.Действие = "УчебноеДействие";
    КомандаДействия.Заголовок = "Проверить собственную страницу";
    КомандаДействия.Подсказка = "Действие только над данными учебной формы";
    КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
    Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
    Кнопка.ИмяКоманды = КомандаДействия.Имя;
    Кнопка.Заголовок = КомандаДействия.Заголовок;

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

&НаКлиенте
Процедура УчебноеДействие(Команда)
    Сообщить(ЭтаФорма.ВертикальнаяПрокрутка = ВертикальнаяПрокруткаФормы.ИспользоватьПриНеобходимости);
    Сообщить(Элементы.УчебнаяСтраницаКниги.РастягиватьПоВертикали);
    Сообщить(Элементы.УчебнаяСтраницаКниги.ВертикальнаяПрокруткаПриСжатии = Истина);
    Сообщить(Элементы.УчебнаяСтраницаКниги.Высота = 6);
    Сообщить("Попробуйте дойти прокруткой до собственного пояснения 20");
КонецПроцедуры

Разбор по шагам

  1. У формы разрешить вертикальную прокрутку при необходимости; одно свойство дочерней страницы без этого недостаточно.

  2. Страница растягивается по вертикали, желаемая высота 6 строк; это не шесть пикселей.

  3. Создать двадцать собственных надписей внутри этой страницы ниже четырёх учебных полей.

  4. Уменьшить высоту окна, чтобы содержимое реально превысило выделенное место. Проверить достижимость двадцатой надписи.

  5. Вторая страница и внешняя команда остаются доступными, данные первой страницы не теряются.

Как проверить результат

  1. Команда выводит четыре Истина и подсказку о последнем пояснении.

  2. При реальном сжатии вручную проверьте прокрутку до пояснения 20. На большом окне полоса может не понадобиться — это не ошибка.

Ожидаемый результат

Условия прокрутки подготовлены на реальном длинном наполнении собственной страницы.

На что обратить внимание

  1. Неопределено у ВертикальнаяПрокруткаПриСжатии определяется автоматически и интерпретируется как Ложь.

  2. Нельзя обещать видимую полосу при любых размерах окна.

  3. Это прокрутка страницы интерфейса, а не загрузка следующей страницы данных из базы.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.