При переходе пользователей с тонкого клиента на работу через веб-клиент (в браузере) часто возникает неприятная проблема: привычное сочетание клавиш Ctrl + Колёсико мыши перестает масштабировать табличный документ (отчеты, печатные формы, счета-фактуры). Вместо изменения размера шрифта и ячеек страница просто прокручивается вверх или вниз, либо масштабируется весь интерфейс браузера целиком, ломая верстку программы.
В этой статье мы подробно разберем технические причины такого поведения платформы «1С:Предприятие 8», изучим официальные ограничения веб-клиента и рассмотрим практические способы решения этой проблемы как для обычных пользователей, так и для разработчиков конфигураций.
Давайте проанализируем, как устроен вывод графической информации в различных клиентах 1С. В тонком и толстом клиентах платформа отрисовывает интерфейс с помощью собственного графического движка. Когда фокус ввода находится на табличном документе, движок напрямую перехватывает системные сообщения операционной системы о зажатии клавиши Ctrl и вращении колесика мыши, мгновенно пересчитывая масштаб отображения табличного поля.
В веб-клиенте ситуация кардинально меняется, так как вся работа происходит внутри веб-браузера (Chrome, Firefox, Safari, Edge). Здесь мы сталкиваемся со следующими ограничениями:
ТабличныйДокумент рендерится как тяжелое иерархическое дерево элементов DOM (HTML-таблицы, контейнеры div, абсолютное позиционирование для объединенных ячеек и линий). Чтобы масштабировать только саму таблицу средствами JavaScript, веб-клиенту пришлось бы перехватывать событие прокрутки wheel, отменять стандартное действие браузера через event.preventDefault() и динамически пересчитывать геометрические параметры сотен или тысяч элементов HTML на лету.Помимо невозможности масштабирования колесиком мыши, работа с табличными документами в браузере имеет еще несколько задокументированных ограничений, о которых полезно знать:
Ctrl + Num- и Ctrl + Num+.Alt + PgUp и Alt + PgDn.Понимая эти ограничения, мы можем предложить пользователям и разработчикам удобные альтернативные варианты изменения масштаба.
Начиная с версии платформы 8.3.10, в 1С реализован собственный качественный механизм масштабирования интерфейса управляемых форм, который отлично работает и в веб-клиенте. Давайте разберем по шагам, как им воспользоваться:
Если пользователю необходимо срочно увеличить мелко написанный текст в отчете, а искать настройки платформы некогда, можно воспользоваться стандартным зумом браузера. Однако здесь нужно соблюдать одно правило:
Перед тем как зажать клавишу Ctrl и прокрутить колесико мыши, необходимо убрать курсор мыши за пределы поля табличного документа. Курсор можно навести на панель разделов, пустую серую область формы или панель открытых окон. В этом случае браузер успешно перехватит событие и увеличит масштаб страницы целиком.
Минус метода: вместе с табличной частью увеличатся все кнопки, меню и заголовки системы, что сократит полезное рабочее пространство на мониторе.
Если мы разрабатываем конфигурацию и знаем, что наши пользователи будут массово работать через веб-клиент, мы можем программно облегчить им жизнь. Рассмотрим основные инструменты управления масштабом табличного документа из кода.
У элемента управляемой формы типа «Поле табличного документа» существует замечательное свойство РежимМасштабированияПросмотра. Мы можем использовать его для принудительного изменения размера отображения таблицы.
Давайте посмотрим на пример кода, который позволяет динамически переключать масштаб табличного документа на форме с помощью кнопок «Увеличить» и «Уменьшить»:
&НаКлиенте
Процедура УвеличитьМасштабТаблицы(Команда)
// Получаем текущий режим масштабирования элемента формы "Результат"
ТекущийРежим = Элементы.Результат.РежимМасштабированияПросмотра;
Если ТекущийРежим = РежимМасштабированияПросмотра.Мелкий Тогда
Элементы.Результат.РежимМасштабированияПросмотра = РежимМасштабированияПросмотра.Обычный;
ИначеЕсли ТекущийРежим = РежимМасштабированияПросмотра.Обычный Тогда
Элементы.Результат.РежимМасштабированияПросмотра = РежимМасштабированияПросмотра.Крупный;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УменьшитьМасштабТаблицы(Команда)
ТекущийРежим = Элементы.Результат.РежимМасштабированияПросмотра;
Если ТекущийРежим = РежимМасштабированияПросмотра.Крупный Тогда
Элементы.Результат.РежимМасштабированияПросмотра = РежимМасштабированияПросмотра.Обычный;
ИначеЕсли ТекущийРежим = РежимМасштабированияПросмотра.Обычный Тогда
Элементы.Результат.РежимМасштабированияПросмотра = РежимМасштабированияПросмотра.Мелкий;
КонецЕсли;
КонецПроцедуры
Используя перечисление РежимМасштабированияПросмотра, мы можем предоставить пользователям веб-клиента удобные кнопки прямо на панели отчета, заменяя отсутствующий жест мыши.
Также важно не путать экранный масштаб с масштабом печати. Если отчет не помещается на лист при выводе из браузера, мы должны использовать свойства самого объекта ТабличныйДокумент:
// Настройка автоматического масштабирования под ширину листа при печати
ТабДок.АвтоМасштаб = Истина;
// Или установка фиксированного масштаба печати в процентах
ТабДок.МасштабПечати = 85;
Эти свойства будут корректно учтены платформой при формировании печатной формы или PDF-файла в веб-клиенте.
Таким образом, хотя прямое масштабирование через Ctrl + Колёсико мыши внутри табличного поля в браузере невозможно из-за ограничений веб-технологий, мы всегда можем использовать штатный механизм изменения масштаба интерфейса «1С» или предусмотреть специализированные кнопки управления масштабом на форме отчета.