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

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

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

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

Почему стандартные свойства не блокируют изменение ширины

Проанализируем сначала стандартные механизмы и поймем, почему привычные методы из обычных форм не работают в управляемом приложении:

  1. Свойство ИзменениеРазмераКолонки: Перечисление ИзменениеРазмераКолонки.НеИзменять в управляемых формах не запрещает пользователю перетаскивать границы колонок мышью. Это свойство отвечает лишь за поведение элемента при изменении размеров самого окна формы.
  2. Снятие флага Разрешить изменять форму: Данная опция в свойствах формы лишь скрывает пункт Изменить форму в меню Еще, но оставляет доступным интерактивное изменение ширины колонок в самой таблице.
  3. Приоритет сохраненных настроек: Платформа автоматически сохраняет пользовательские изменения макета. Если пользователь хотя бы один раз сдвинул границу колонки, эта настройка сохраняется в системном хранилище и перекрывает параметры ширины, заданные разработчиком в конфигураторе.

Способ 1. Фиксация размера через равенство минимальной и максимальной ширины

Разберем основной рабочий способ строго зафиксировать ширину колонок в управляемой форме. Для этого зададим жесткие границы диапазона изменения размера элемента.

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

  1. В конфигураторе откроем свойства нужного элемента таблицы (колонки).
  2. Установим одинаковое значение для свойств МинимальнаяШирина и МаксимальнаяШирина (например, зададим обоим свойствам значение 12).
  3. Установим свойство РастягиватьПоГоризонтали в значение Ложь.
  4. Если колонки объединены в группу, установим свойство РастягиватьПоГоризонтали в значение Ложь также и для самой группы колонок.

Когда минимальная и максимальная ширина равны, алгоритм компоновки 1С фиксирует размер колонки и не позволяет пользователю изменять его интерактивно.

Способ 2. Оптимизация заголовков и всплывающих подсказок

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

Для решения этой проблемы придерживаемся следующих правил:

  1. Сокращаем текст в свойстве Заголовок или используем переносы строк.
  2. Полное наименование колонки выносим в свойство Подсказка — пользователь увидит полный текст при наведении курсора на заголовок колонки.

Способ 3. Программный сброс сохраненных пользовательских настроек

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

Разберем пример кода в обработчике ПриСозданииНаСервере:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	// Очищаем сохраненные пользовательские настройки окна формы
	КлючНастроек = "СбросНастроекШирины_" + Строка(ТекущаяДата());
	КлючСохраненияПоложенияОкна = КлючНастроек;
	
КонецПроцедуры

Также можно использовать прямое удаление настроек из системного хранилища с помощью объекта ХранилищеСистемныхНастроек:


&НаСервере
Процедура ОчиститьНастройкиФормыНаСервере()
	
	КлючОбъекта = "Обработка.МояОбработка.Форма.Форма/НастройкиОкна";
	ХранилищеСистемныхНастроек.Удалить(КлючОбъекта, "", Пользователи.ТекущийПользователь());
	
КонецПроцедуры

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

← На главную