Как программно установить масштаб просмотра табличного документа в 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки часто возникает задача сделать интерфейс максимально удобным для пользователя. Одной из таких задач является программная установка масштаба просмотра Табличного документа. Проблема заключается в том, что в платформе «1С:Предприятие 8.3» отсутствует прямое свойство вроде МасштабПросмотраПроцент. Свойства МасштабПечати и АвтоМасштаб отвечают только за вывод на бумагу и не меняют отображение на экране. В этой статье мы подробно разберем, как обойти это ограничение, используя различные подходы: от имитации действий пользователя до манипуляций со свойствами формы.

Метод 1: Использование Windows Script Host (SendKeys)

Проанализируем самый популярный, хоть и «костыльный» метод — имитацию нажатия горячих клавиш. Этот способ позволяет программно вызвать стандартное меню 1С и выбрать нужный масштаб, как если бы это делал пользователь с клавиатуры. Для реализации нам понадобится COM-объект WScript.Shell.

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


WshShell = Новый COMОбъект("Wscript.Shell");
// Активируем меню (Alt), переходим в Таблица -> Вид -> Масштаб
WshShell.SendKeys("%A{RIGHT 3}{UP}{RIGHT}{ENTER}");

В управляемых формах структура меню отличается, и нам нужно предварительно убедиться, что фокус установлен на элементе формы, содержащем табличный документ. Рассмотрим пример для управляемого интерфейса:


// Устанавливаем фокус на поле табличного документа
ЭтаФорма.ТекущийЭлемент = Элементы.Результат; 
WshShell = Новый COMОбъект("Wscript.Shell");
// Имитируем нажатие клавиши Alt и навигацию по системному меню
WshShell.SendKeys("%");
WshShell.SendKeys("{DOWN 4}{RIGHT 2}{UP}{RIGHT}{DOWN}{ENTER}");

Важный нюанс: метод SendKeys крайне чувствителен к текущему фокусу окна. Если в момент выполнения кода пользователь переключится на другую программу, команды уйдут в «никуда» или в активное окно. Рекомендуется добавлять небольшую паузу перед выполнением этих команд.

Метод 2: Свойство РежимМасштабированияПросмотра

Выясним, какие штатные средства все же доступны в платформе. В версии 8.3 у элемента формы типа «Поле табличного документа» появилось свойство РежимМасштабированияПросмотра (в англоязычном варианте ViewScalingMode). Рассмотрим его возможности.

Это свойство принимает значения системного перечисления РежимМасштабированияПросмотра:

  1. Обычный — документ отображается в реальном масштабе (100% или как задано в настройках системы).
  2. Авто — 1С пытается автоматически подогнать масштаб документа под ширину окна.

Проанализируем ситуацию: если нам нужно, чтобы отчет всегда помещался по ширине экрана (что часто и требуется вместо установки точного процента), использование значения Авто будет самым правильным и стабильным решением:


// Для управляемой формы
Элементы.Результат.РежимМасштабированияПросмотра = РежимМасштабированияПросмотра.Авто;

Этот способ лишен недостатков имитации нажатия клавиш и работает даже в режиме «Киоск» или через веб-клиент.

Метод 3: Программное изменение размера шрифта

Если задача стоит именно в визуальном увеличении текста для удобства работы пользователя (например, при использовании мониторов с высоким разрешением), мы можем рассмотреть вариант изменения шрифтов во всем документе. Это не является масштабированием в чистом виде, но дает похожий визуальный эффект.

Разберем по шагам, как это реализовать:

  1. Определяем коэффициент увеличения (например, 1.25 для 125%).
  2. Проходим циклом по областям документа или используем метод Область() для всего заполненного диапазона.
  3. Увеличиваем размер шрифта в каждой ячейке.
  4. Обязательно включаем АвтоВысотаСтроки, чтобы текст не обрезался.

Пример кода для массового изменения шрифта:


// Получаем всю заполненную область
ВсеЯчейки = ТабДок.Область(1, 1, ТабДок.ВысотаТаблицы, ТабДок.ШиринаТаблицы);
ШрифтОригинал = ВсеЯчейки.Шрифт;
// Устанавливаем новый размер шрифта на основе текущего
ВсеЯчейки.Шрифт = Новый Шрифт(ШрифтОригинал, ШрифтОригинал.Имя, ШрифтОригинал.Размер * 1.2);
// Корректируем высоту строк, чтобы текст влез
ТабДок.АвтоВысотаСтроки = Истина;

Важное замечание: этот метод изменяет сам документ, а не способ его отображения. Если пользователь решит распечатать такой документ, он также будет напечатан увеличенным шрифтом, что может нарушить верстку на листах А4.

Метод 4: Имитация Ctrl + Колесико мыши через WinAPI

Для продвинутых разработчиков существует способ имитации стандартного жеста масштабирования. Этот метод наиболее универсален, так как работает даже в тех случаях, когда меню скрыто (режим киоска). Рассмотрим теоретическую схему реализации, так как она требует использования внешних компонент или вызовов через user32.dll.

Суть заключается в отправке сообщения WM_MOUSEWHEEL окну табличного документа. При этом необходимо программно «зажать» клавишу CTRL. На языке системных сообщений это выглядит как отправка флага MK_CONTROL вместе с дельтой поворота колеса.

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

Сравнение и выводы

Подводя итог, можно выделить следующие рекомендации по выбору метода:

Не забывайте, что при использовании SendKeys в управляемом приложении, особенно в тонком клиенте через интернет, задержки сети могут привести к тому, что команды будут выполнены не вовремя. Всегда тестируйте такие решения на реальных каналах связи.

← На главную