При разработке интерфейсов на управляемых формах 1С часто возникает задача создания фиксированной области, внутри которой элементы могли бы прокручиваться. Типичный пример — лента сообщений, список задач или динамически формируемый набор кнопок. Стандартная ОбычнаяГруппа в 1С не имеет собственного свойства прокрутки; скролл появляется только у всей формы целиком, что не всегда удобно, если нам нужно оставить «шапку» и «подвал» формы неподвижными.
В этой статье мы разберем несколько проверенных способов решения этой задачи, проанализируем их преимущества и недостатки, а также научимся обходить платформенные ограничения.
Рассмотрим наиболее современный подход, который позволяет добиться визуального сходства с интерфейсами популярных мессенджеров или социальных сетей. Использование ПолеHTMLДокумента дает полный контроль над оформлением и прокруткой.
Пошаговый алгоритм реализации:
Строка и разместим его как элемент Поле HTML-документа.overflow-y: auto;.Проанализируем пример формирования содержимого:
&НаСервере
Процедура СформироватьЛентуНаСервере()
ТекстHTML = "<html><body style='margin:0; padding:10px; font-family:Arial;'>";
ТекстHTML = ТекстHTML + "<div style='height: 300px; overflow-y: scroll; border: 1px solid #ccc;'>";
Для Каждого Сообщение Из Объект.СписокСообщений Цикл
ТекстHTML = ТекстHTML + "<div style='margin-bottom:10px; padding:5px; background:#f0f0f0;'>";
ТекстHTML = ТекстHTML + "<p>" + Сообщение.Текст + "</p>";
ТекстHTML = ТекстHTML + "<a href='v8action:click?id=" + Сообщение.Идентификатор + "'>Подробнее</a>";
ТекстHTML = ТекстHTML + "</div>";
КонецЦикла;
ТекстHTML = ТекстHTML + "</div></body></html>";
ЭтаФорма.ПолеЛенты = ТекстHTML;
КонецПроцедуры
Для обработки кликов внутри такой области мы используем событие ПриНажатии элемента ПолеHTMLДокумента. Выясним причину использования схемы v8action: она позволяет передавать параметры из HTML-кода обратно в процедуру 1С, что делает область не просто текстовой, а интерактивной.
Если мы не хотим погружаться в верстку на HTML, можно использовать стандартный элемент Таблица. Этот метод позволяет эмулировать прокручиваемую область, используя строки таблицы как «блоки» данных.
Как это настроить:
ТаблицаЗначений).В отдельной строке.ОтображениеЗаголовка, ОтображениеПодвала, ГоризонтальныеЛинии и ВертикальныеЛинии.Разберем ситуацию: теперь каждая строка таблицы выглядит не как набор ячеек, а как отдельная карточка. Поскольку у таблицы 1С встроенная вертикальная прокрутка работает всегда при превышении количества строк, мы получаем желаемый эффект фиксированной области со скроллом.
Еще один интересный вариант — разместить на форме ПолеТабличногоДокумента. Рассмотрим подробнее, почему это эффективно. Табличный документ по своей природе — это бесконечное полотно с собственными полосами прокрутки.
Мы можем программно выводить в него области, содержащие не только текст, но и Рисунки, которые могут выполнять роль кнопок. Выясним, как сделать область интерактивной: для ячеек или рисунков можно установить свойство Гиперссылка и обрабатывать событие Выбор.
Пример программного заполнения области:
&НаСервере
Процедура ЗаполнитьПрокручиваемуюОбласть()
ТабДок = ЭтаФорма.Элементы.ПолеТабличногоДокумента;
ТабДок.Очистить();
Макет = ПолучитьМакет("МакетЭлементаЛенты");
Для Инд = 1 По 20 Цикл
Область = Макет.ПолучитьОбласть("Строка");
Область.Параметры.Значение = "Элемент списка №" + Инд;
ТабДок.Вывести(Область);
КонецЦикла;
КонецПроцедуры
Этот метод хорош тем, что позволяет визуально проектировать «карточку» элемента в конфигураторе через макет, не прибегая к сложному коду CSS.
Проанализируем ситуацию, когда нам нужно использовать именно обычные элементы управления 1С (поля ввода, переключатели) внутри группы. Поскольку у группы нет скролла, мы можем пойти на хитрость с компоновкой всей формы.
Алгоритм реализации «псевдо-скролла» группы:
СпособОтображенияОкна в значение Максимизированное или зададим жесткую высоту окна.РастягиватьПоВертикали = Ложь).РастягиватьПоВертикали = Истина.Результат: За счет того, что шапка и подвал прижаты к краям, а центральная часть переполнена, пользователю будет казаться, что прокручивается только центральная область, в то время как меню и заголовки остаются на месте.
Посмотрим на итоговую таблицу применимости решений:
Выясним, какой метод выбрать именно вам: если ваша задача — просто «накидать элементов», попробуйте сначала Метод 4 или Метод 2. Если же вы стремитесь к современному дизайну «как в ВК», то альтернативы Полю HTML-документа практически нет. Мы надеемся, что эти способы помогут вам сделать интерфейсы ваших конфигураций более удобными и функциональными!