Как расширить колонку планировщика после обновления платформы 1С и убрать перенос строк?

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

При обновлении платформы 1С:Предприятие с версии 8.3.16.хххх на 8.3.19.хххх (и выше) многие разработчики сталкиваются с неприятным визуальным эффектом в элементе формы Планировщик. Колонки измерений (например, список бригад, сотрудников или ресурсов) внезапно сужаются, а текст внутри них начинает переноситься по словам. Это приводит к тому, что высота строк планировщика увеличивается вдвое, а читаемость интерфейса резко падает. Пользователи жалуются на неудобство, а стандартные методы интерактивного изменения ширины колонки мышкой часто оказываются недоступны.

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

Выясним причину: почему изменилось поведение планировщика

Для начала проанализируем ситуацию и поймем, что именно изменилось в «движке» отрисовки 1С. Начиная с версии 8.3.18, компания 1С существенно переработала механизмы отображения графических элементов для обеспечения корректной работы HighDPI (масштабирования экрана на мониторах с высоким разрешением).

Ранее планировщик мог более гибко рассчитывать ширину области заголовков. В новых же релизах алгоритм стал ориентироваться на «минимально необходимую ширину», основываясь на самом длинном отдельном слове в строке. Если в названии вашей бригады или ресурса есть пробел (например, «Бригада №1»), платформа считает, что строку можно разорвать, и схлопывает колонку до ширины слова «Бригада», перенося «№1» на следующую строку. Это и вызывает лавинообразное увеличение высоты всей таблицы планировщика.

Решение №1: Использование неразрывных пробелов (Самый быстрый способ)

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

Рассмотрим пример кода, который необходимо применить при заполнении измерений планировщика. Допустим, мы получаем данные из запроса или справочника:


// Пример замены обычного пробела на неразрывный при формировании измерений
ТекстНаименования = Выборка.Наименование;
// Символы.НПП — это спецсимвол неразрывного пробела в 1С
ТекстБезПереносов = СтрЗаменить(ТекстНаименования, " ", Символы.НПП);

НовоеИзмерение = Планировщик.Измерения.Найти("Ресурсы");
ЭлементИзмерения = НовоеИзмерение.Элементы.Добавить(Выборка.Ссылка);
ЭлементИзмерения.Текст = ТекстБезПереносов;

Этот метод хорош тем, что он «обманывает» механизм автоподбора ширины, заставляя его растягивать колонку под полную длину строки без реального изменения логики работы интерфейса.

Решение №2: Программная установка свойства Ширина

В объекте ЭлементИзмеренияПланировщика существует свойство Ширина. В старых релизах платформы оно часто игнорировалось, но в версии 8.3.19 и выше оно стало играть более значимую роль. Если автоматический расчет подводит, мы можем задать ширину явно.

Разберем по шагам, как это сделать в процедуре ПриСозданииНаСервере или там, где вы динамически строите планировщик:

  1. Найдите нужное измерение в коллекции Планировщик.Измерения.
  2. Для каждого элемента измерения установите числовое значение ширины.
  3. Помните, что значение ширины подбирается экспериментально в зависимости от среднего количества символов.

Для Каждого Измерение Из Планировщик.Измерения Цикл
    // Устанавливаем фиксированную ширину для заголовков (в единицах платформы)
    Измерение.ШиринаЗаголовка = 20; 
КонецЦикла;

Важно: Учтите, что при использовании масштабирования в Windows (DPI 125% или 150%) установленная ширина может «срезаться». Рекомендуется закладывать запас в 2-3 символа больше расчетного.

Решение №3: Изменение расположения заголовков

Посмотрим на ситуацию под другим углом. В свойствах планировщика есть настройка РасположениеЗаголовковИзмерений. Если ресурсы (бригады) расположены вертикально (слева), проблема переноса проявляется наиболее остро.

Если бизнес-логика вашего приложения позволяет, попробуйте переключить расположение измерений на Горизонтальное. В этом случае ресурсы будут отображаться в «шапке» планировщика. Как показывает практика работы с релизом 8.3.19, алгоритм расчета ширины колонок в горизонтальном режиме работает более стабильно и реже прибегает к принудительному переносу слов.

Решение №4: Настройка интерфейса и масштабирования

Проблема часто кроется не только в коде, но и в системных настройках. Проанализируем влияние интерфейса «Такси»:

Визуальный хак с прозрачными символами

Если замена на неразрывные пробелы по каким-то причинам не подходит, разработчики используют еще один метод — добавление в конец строки последовательности «невидимых» символов или просто длинного хвоста из неразрывных пробелов. Это заставляет движок считать, что строка очень длинная, и выделять под нее максимально возможное место в области заголовков.

Подводя итог, можно сказать, что наиболее надежным и «чистым» решением является сочетание Решения №1 (неразрывные пробелы) и Решения №2 (явное указание ширины). Это гарантирует, что даже при обновлении платформы до следующих минорных релизов, ваш интерфейс останется стабильным, а «народ не будет пищать», требуя вернуть все как было.

← На главную